diff options
author | Ned Deily <nad@acm.org> | 2013-10-25 07:30:10 (GMT) |
---|---|---|
committer | Ned Deily <nad@acm.org> | 2013-10-25 07:30:10 (GMT) |
commit | a2a9f571a5bd14f7879e5c78c1778fa85bd08e58 (patch) | |
tree | ae8e2b0b0fa16dfe0616d5207a945c2f06e6fd70 | |
parent | 22fb0dec30af4168c81744782a8bcc2453ac8055 (diff) | |
download | cpython-a2a9f571a5bd14f7879e5c78c1778fa85bd08e58.zip cpython-a2a9f571a5bd14f7879e5c78c1778fa85bd08e58.tar.gz cpython-a2a9f571a5bd14f7879e5c78c1778fa85bd08e58.tar.bz2 |
Issue #1584: Provide options to override default search paths for Tcl and Tk
when building _tkinter. configure has two new options; if used, both must
be specified:
./configure \
--with-tcltk-includes="-I/opt/local/include" \
--with-tcltk-libs="-L/opt/local/lib -ltcl8.5 -ltk8.5"
In addition, the options can be overridden with make:
make \
TCLTK_INCLUDES="-I/opt/local/include" \
TCLTK_LIBS="-L/opt/local/lib -ltcl8.6 -ltk8.6"
-rw-r--r-- | Makefile.pre.in | 5 | ||||
-rw-r--r-- | Misc/NEWS | 3 | ||||
-rwxr-xr-x | configure | 48 | ||||
-rw-r--r-- | configure.ac | 28 | ||||
-rw-r--r-- | setup.py | 43 |
5 files changed, 126 insertions, 1 deletions
diff --git a/Makefile.pre.in b/Makefile.pre.in index 84014b8..cf75650 100644 --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -196,6 +196,10 @@ PYTHON_FOR_BUILD=@PYTHON_FOR_BUILD@ _PYTHON_HOST_PLATFORM=@_PYTHON_HOST_PLATFORM@ HOST_GNU_TYPE= @host@ +# Tcl and Tk config info from --with-tcltk-includes and -libs options +TCLTK_INCLUDES= @TCLTK_INCLUDES@ +TCLTK_LIBS= @TCLTK_LIBS@ + # The task to run while instrument when building the profile-opt target PROFILE_TASK= $(srcdir)/Tools/pybench/pybench.py -n 2 --with-gc --with-syscheck #PROFILE_TASK= $(srcdir)/Lib/test/regrtest.py @@ -456,6 +460,7 @@ sharedmods: $(BUILDPYTHON) pybuilddir.txt *) quiet="";; \ esac; \ $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' \ + _TCLTK_INCLUDES='$(TCLTK_INCLUDES)' _TCLTK_LIBS='$(TCLTK_LIBS)' \ $(PYTHON_FOR_BUILD) $(srcdir)/setup.py $$quiet build # Build static library @@ -280,6 +280,9 @@ Build OS X 10.8 systems because the Apple-deprecated QuickDraw headers have been removed from Xcode 4. Skip building it in this case. +- Issue #1584: Provide options to override default search paths for + Tcl and Tk when building _tkinter. + IDLE ---- @@ -644,6 +644,8 @@ LDLAST USE_THREAD_MODULE SIGNAL_OBJS USE_SIGNAL_MODULE +TCLTK_LIBS +TCLTK_INCLUDES LIBFFI_INCLUDEDIR PKG_CONFIG SHLIBS @@ -786,6 +788,8 @@ enable_toolbox_glue with_libs with_system_expat with_system_ffi +with_tcltk_includes +with_tcltk_libs with_dbmliborder with_signal_module with_dec_threads @@ -1459,6 +1463,10 @@ Optional Packages: --with-system-expat build pyexpat module using an installed expat library --with-system-ffi build _ctypes module using an installed ffi library + --with-tcltk-includes='-I...' + override search for Tcl and Tk include files + --with-tcltk-libs='-L...' + override search for Tcl and Tk libs --with-dbmliborder=db1:db2:... order to check db backends for dbm. Valid value is a colon separated string with the backend names @@ -8954,6 +8962,46 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_system_ffi" >&5 $as_echo "$with_system_ffi" >&6; } +# Check for --with-tcltk-includes=path and --with-tcltk-libs=path + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-tcltk-includes" >&5 +$as_echo_n "checking for --with-tcltk-includes... " >&6; } + +# Check whether --with-tcltk-includes was given. +if test "${with_tcltk_includes+set}" = set; then : + withval=$with_tcltk_includes; +else + with_tcltk_includes="default" +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_tcltk_includes" >&5 +$as_echo "$with_tcltk_includes" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-tcltk-libs" >&5 +$as_echo_n "checking for --with-tcltk-libs... " >&6; } + +# Check whether --with-tcltk-libs was given. +if test "${with_tcltk_libs+set}" = set; then : + withval=$with_tcltk_libs; +else + with_tcltk_libs="default" +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_tcltk_libs" >&5 +$as_echo "$with_tcltk_libs" >&6; } +if test "x$with_tcltk_includes" = xdefault || test "x$with_tcltk_libs" = xdefault +then + if test "x$with_tcltk_includes" != "x$with_tcltk_libs" + then + as_fn_error $? "use both --with-tcltk-includes='...' and --with-tcltk-libs='...' or neither" "$LINENO" 5 + fi + TCLTK_INCLUDES="" + TCLTK_LIBS="" +else + TCLTK_INCLUDES="$with_tcltk_includes" + TCLTK_LIBS="$with_tcltk_libs" +fi + # Check for --with-dbmliborder { $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-dbmliborder" >&5 $as_echo_n "checking for --with-dbmliborder... " >&6; } diff --git a/configure.ac b/configure.ac index d922bc7..891d568 100644 --- a/configure.ac +++ b/configure.ac @@ -2289,6 +2289,34 @@ AC_SUBST(LIBFFI_INCLUDEDIR) AC_MSG_RESULT($with_system_ffi) +# Check for --with-tcltk-includes=path and --with-tcltk-libs=path +AC_SUBST(TCLTK_INCLUDES) +AC_SUBST(TCLTK_LIBS) +AC_MSG_CHECKING(for --with-tcltk-includes) +AC_ARG_WITH(tcltk-includes, + AS_HELP_STRING([--with-tcltk-includes='-I...'], [override search for Tcl and Tk include files]), + [], + [with_tcltk_includes="default"]) +AC_MSG_RESULT($with_tcltk_includes) +AC_MSG_CHECKING(for --with-tcltk-libs) +AC_ARG_WITH(tcltk-libs, + AS_HELP_STRING([--with-tcltk-libs='-L...'], [override search for Tcl and Tk libs]), + [], + [with_tcltk_libs="default"]) +AC_MSG_RESULT($with_tcltk_libs) +if test "x$with_tcltk_includes" = xdefault || test "x$with_tcltk_libs" = xdefault +then + if test "x$with_tcltk_includes" != "x$with_tcltk_libs" + then + AC_MSG_ERROR([use both --with-tcltk-includes='...' and --with-tcltk-libs='...' or neither]) + fi + TCLTK_INCLUDES="" + TCLTK_LIBS="" +else + TCLTK_INCLUDES="$with_tcltk_includes" + TCLTK_LIBS="$with_tcltk_libs" +fi + # Check for --with-dbmliborder AC_MSG_CHECKING(for --with-dbmliborder) AC_ARG_WITH(dbmliborder, @@ -1729,6 +1729,41 @@ class PyBuildExt(build_ext): return missing + def detect_tkinter_explicitly(self): + # Build _tkinter using explicit locations for Tcl/Tk. + # + # This is enabled when both arguments are given to ./configure: + # + # --with-tcltk-includes="-I/path/to/tclincludes \ + # -I/path/to/tkincludes" + # --with-tcltk-libs="-L/path/to/tcllibs -ltclm.n \ + # -L/path/to/tklibs -ltkm.n" + # + # These values can also be specified or overriden via make: + # make TCLTK_INCLUDES="..." TCLTK_LIBS="..." + # + # This can be useful for building and testing tkinter with multiple + # versions of Tcl/Tk. Note that a build of Tk depends on a particular + # build of Tcl so you need to specify both arguments and use care when + # overriding. + + # The _TCLTK variables are created in the Makefile sharedmods target. + tcltk_includes = os.environ.get('_TCLTK_INCLUDES') + tcltk_libs = os.environ.get('_TCLTK_LIBS') + if not (tcltk_includes and tcltk_libs): + # Resume default configuration search. + return 0 + + extra_compile_args = tcltk_includes.split() + extra_link_args = tcltk_libs.split() + ext = Extension('_tkinter', ['_tkinter.c', 'tkappinit.c'], + define_macros=[('WITH_APPINIT', 1)], + extra_compile_args = extra_compile_args, + extra_link_args = extra_link_args, + ) + self.extensions.append(ext) + return 1 + def detect_tkinter_darwin(self, inc_dirs, lib_dirs): # The _tkinter module, using frameworks. Since frameworks are quite # different the UNIX search logic is not sharable. @@ -1811,10 +1846,16 @@ class PyBuildExt(build_ext): self.extensions.append(ext) return 1 - def detect_tkinter(self, inc_dirs, lib_dirs): # The _tkinter module. + # Check whether --with-tcltk-includes and --with-tcltk-libs were + # configured or passed into the make target. If so, use these values + # to build tkinter and bypass the searches for Tcl and TK in standard + # locations. + if self.detect_tkinter_explicitly(): + return + # Rather than complicate the code below, detecting and building # AquaTk is a separate method. Only one Tkinter will be built on # Darwin - either AquaTk, if it is found, or X11 based Tk. |