Summary
The tcl installation is buggy. This causes its dependencies (eg tk) to find system header files, instead of those from tcl. The bug was masked on newer Linuxes that come with a newer TCL.
Details
tcl provides a file called spec['tcl']/lib/tclConfig.sh, which is used by its dependencies (eg tk) to determine where TCL is installed, to set compiler flags, etc. All entries in this file should point to the Spack-installed location.
Unfortunately, SOME of the entires point to the Spack stage where TCL was built:
~> grep stage /gpfsm/dnb53/rpfische/spack6/opt/spack/linux-suse_linux11-x86_64/gcc-5.3.0/tcl-8.6.8-covlee52wjqcu77f766wp45nvrxvyqfl/lib/tclConfig.sh
TCL_BUILD_LIB_SPEC='-L/gpfsm/dnb53/rpfische/tmp/spack-stage/spack-stage-dQSx7_/tcl8.6.8/unix -ltcl8.6'
TCL_SRC_DIR='/gpfsm/dnb53/rpfische/tmp/spack-stage/spack-stage-dQSx7_/tcl8.6.8'
TCL_BUILD_STUB_LIB_SPEC='-L/gpfsm/dnb53/rpfische/tmp/spack-stage/spack-stage-dQSx7_/tcl8.6.8/unix -ltclstub8.6'
TCL_BUILD_STUB_LIB_PATH='/gpfsm/dnb53/rpfische/tmp/spack-stage/spack-stage-dQSx7_/tcl8.6.8/unix/libtclstub8.6.a'
When building tk, this results in a build that does NOT access the TCL installation; instead, it points to (now defunct) stage directories, and the tk build instead picks up whatever system-supplied TCL header files are lying around. Here is part of a sample GCC command line issued when trying to build tk:
/usr/local/other/SLES11.3/gcc/5.3.0/bin/gcc
-c -O2 -pipe -Wall -fPIC
-DBUILD_tk
-I/gpfsm/dnb53/rpfische/tmp/spack-stage/spack-stage-CW8UJ5/tk8.6.8/unix/../unix
-I/gpfsm/dnb53/rpfische/tmp/spack-stage/spack-stage-CW8UJ5/tk8.6.8/unix/../generic
-I/gpfsm/dnb53/rpfische/tmp/spack-stage/spack-stage-CW8UJ5/tk8.6.8/unix/../bitmaps
-I/gpfsm/dnb53/rpfische/tmp/spack-stage/spack-stage-dQSx7_/tcl8.6.8/generic
-I/gpfsm/dnb53/rpfische/tmp/spack-stage/spack-stage-dQSx7_/tcl8.6.8/unix
One way or another, the tclConfig.sh file needs to contain ONLY install directories, no stage directories.
Summary
The
tclinstallation is buggy. This causes its dependencies (egtk) to find system header files, instead of those fromtcl. The bug was masked on newer Linuxes that come with a newer TCL.Details
tclprovides a file calledspec['tcl']/lib/tclConfig.sh, which is used by its dependencies (egtk) to determine where TCL is installed, to set compiler flags, etc. All entries in this file should point to the Spack-installed location.Unfortunately, SOME of the entires point to the Spack stage where TCL was built:
When building
tk, this results in a build that does NOT access the TCL installation; instead, it points to (now defunct) stage directories, and thetkbuild instead picks up whatever system-supplied TCL header files are lying around. Here is part of a sample GCC command line issued when trying to buildtk:One way or another, the
tclConfig.shfile needs to contain ONLY install directories, no stage directories.