Обсуждение: Re: [BUGS] Error in Makefile
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
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
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