Thread: Re: [BUGS] Error in Makefile

Re: [BUGS] Error in Makefile

From
Tom Lane
Date:
Ferruccio Zamuner <solo3@chierinet.it> sent me the contents of his
tclConfig.sh file, and the problem is pretty obvious: the file has

> # Base command to use for combining object files into a shared library:
> TCL_SHLIB_LD='ld -shared -x -soname $@'

When this is fed through pl/tcl/mkMakefile.tcldefs.sh, the $@ gets
prematurely evaluated and reduced to nothing, leading to the bogus
link command that we already saw.  In short, pltcl is broken on any
FreeBSD system (as well as anything else that uses a -soname like
switch).

As a workaround I suppose Ferruccio can hand-edit
pl/tcl/Makefile.tcldefs to put back the $@.

For a real fix, I think we have no alternative but to abandon the way
that mkMakefile.tcldefs.sh does its job --- this horsing around with
"eval eval" is just not going to replicate the quoting/evaluation
behavior you get from executing the script.  I am guessing that what
we should do is source the tclConfig script, then examine the output of
"env".  Does anyone know offhand how tclConfig.sh is normally used for
Tcl builds?

            regards, tom lane

Re: [BUGS] Error in Makefile

From
Tom Lane
Date:
I wrote:
> For a real fix, I think we have no alternative but to abandon the way
> that mkMakefile.tcldefs.sh does its job --- this horsing around with
> "eval eval" is just not going to replicate the quoting/evaluation
> behavior you get from executing the script.

This issue seemed familiar, and upon digging through my inbox I find
that Albert Chin reported related problems in pgsql-hackers on 7/10/99.
That discussion tapered off without quite agreeing on a fix.  Albert was
recommending using "sed" to remove quote marks, but I'm thinking that we
really ought to just source the darn script rather than trying to
emulate the shell's evaluation rules...

            regards, tom lane

Re: [BUGS] Error in Makefile

From
Tom Lane
Date:
I believe I have corrected src/pl/tcl/mkMakefile.tcldefs.sh.in's
problems with shell special characters in the values provided
by tclConfig.sh.  Try the following version of the script (you'll
need to re-run configure and then remake to get the fix to propagate
all the way).

BTW, there is an identical mkMakefile.tcldefs.sh.in and a closely
related mkMakefile.tkdefs.sh.in in src/bin/pgtclsh/.  You might need
to change those too in order to build a working pgtclsh on some
platforms, though I have not heard any complaints about that.

I have committed these fixes into both current and REL6_5 branches.

            regards, tom lane


#! /bin/sh

if [ ! -r @TCL_CONFIG_SH@ ]; then
    echo "@TCL_CONFIG_SH@ not found"
    echo "I need this file! Please make a symbolic link to this file"
    echo "and start make again."
    exit 1
fi

# Source the file to obtain the correctly expanded variable definitions
. @TCL_CONFIG_SH@

# Read the file a second time as an easy way of getting the list of variable
# definitions to output.
cat @TCL_CONFIG_SH@ |
    egrep '^TCL_|^TK_' |
    sed 's/^\([^=]*\)=.*$/\1/' |
    while read var
    do
    eval echo "\"$var = \$$var\""
    done >Makefile.tcldefs

exit 0