]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Backport of fixes for #887242 and #1097739:
authorJack Jansen <jack.jansen@cwi.nl>
Tue, 11 Jan 2005 13:49:02 +0000 (13:49 +0000)
committerJack Jansen <jack.jansen@cwi.nl>
Tue, 11 Jan 2005 13:49:02 +0000 (13:49 +0000)
If $MACOSX_DEPLOYMENT_TARGET is set, and >= 10.3, during configure we
setup extensions to link with dynamic lookup. We also record the
value in the Makefile, and distutils uses the same value to build extension
modules. If MACOSX_DEPLOYMENT_TARGET is not set it defaults to the
current OSX version.

If we cannot use -undefined dynamic_lookup (such as on 10.2 or earlier)
we link extensions directly against the dynamic library in the framework in
stead of against the framework. This will fix building extensions for 2.3
after 2.4 has been installed too.

Lib/distutils/sysconfig.py
Makefile.pre.in
configure
configure.in

index 67353a8d6431c070b5c27cb291d0ef056b158028..08f18b26fc3a7190f578a94572aa4f3cc9d51af9 100644 (file)
@@ -355,7 +355,21 @@ def _init_posix():
 
         raise DistutilsPlatformError(my_msg)
 
-
+    # On MacOSX we need to check the setting of the environment variable
+    # MACOSX_DEPLOYMENT_TARGET: configure bases some choices on it so
+    # it needs to be compatible.
+    # If it isn't set we set it to the configure-time value
+    if sys.platform == 'darwin' and g.has_key('CONFIGURE_MACOSX_DEPLOYMENT_TARGET'):
+        cfg_target = g['CONFIGURE_MACOSX_DEPLOYMENT_TARGET']
+        cur_target = os.getenv('MACOSX_DEPLOYMENT_TARGET', '')
+        if cur_target == '':
+            cur_target = cfg_target
+            os.putenv('MACOSX_DEPLOYMENT_TARGET', cfg_target)
+        if cfg_target != cur_target:
+            my_msg = ('$MACOSX_DEPLOYMENT_TARGET mismatch: now "%s" but "%s" during configure'
+                % (cur_target, cfg_target))
+            raise DistutilsPlatformError(my_msg)
+        
     # On AIX, there are wrong paths to the linker scripts in the Makefile
     # -- these paths are relative to the Python source, but when installed
     # the scripts are in another directory.
index daa98a0781ded0d5b91765df25c502d8951b525b..1a25a3fc07706194b988e76683edba8cee154aa5 100644 (file)
@@ -107,6 +107,9 @@ PYTHONFRAMEWORK=    @PYTHONFRAMEWORK@
 PYTHONFRAMEWORKDIR=    @PYTHONFRAMEWORKDIR@
 PYTHONFRAMEWORKPREFIX= @PYTHONFRAMEWORKPREFIX@
 PYTHONFRAMEWORKINSTALLDIR= @PYTHONFRAMEWORKINSTALLDIR@
+# Deployment target selected during configure, to be checked
+# by distutils
+CONFIGURE_MACOSX_DEPLOYMENT_TARGET=@CONFIGURE_MACOSX_DEPLOYMENT_TARGET@
 # Options to enable prebinding (for fast startup)
 OTHER_LIBTOOL_OPT = -prebind -seg1addr 0x10000000
 
index 5b2827d3931a6055a5aecdb688c61e9ae0b7142f..48383930d4bd5f1dfa0b2464ee71af0dee2ad1cd 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,5 +1,5 @@
 #! /bin/sh
-# From configure.in Revision: 1.427.4.15 .
+# From configure.in Revision: 1.427.4.16 .
 # Guess values for system-dependent variables and create Makefiles.
 # Generated by GNU Autoconf 2.59 for python 2.3.
 #
@@ -310,7 +310,7 @@ ac_includes_default="\
 # include <unistd.h>
 #endif"
 
-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS VERSION SOVERSION CONFIG_ARGS PYTHONFRAMEWORK PYTHONFRAMEWORKDIR PYTHONFRAMEWORKPREFIX PYTHONFRAMEWORKINSTALLDIR MACHDEP SGI_ABI EXTRAPLATDIR EXTRAMACHDEPPATH CXX MAINOBJ EXEEXT CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC OBJEXT CPP EGREP BUILDEXEEXT LIBRARY LDLIBRARY DLLLIBRARY BLDLIBRARY LDLIBRARYDIR INSTSONAME RUNSHARED LINKCC RANLIB ac_ct_RANLIB AR INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA LN OPT BASECFLAGS LIBTOOL_CRUFT SO LDSHARED BLDSHARED CCSHARED LINKFORSHARED CFLAGSFORSHARED SHLIBS USE_SIGNAL_MODULE SIGNAL_OBJS USE_THREAD_MODULE LDLAST THREADOBJ DLINCLDIR DYNLOADFILE MACHDEP_OBJS TRUE LIBOBJS HAVE_GETHOSTBYNAME_R_6_ARG HAVE_GETHOSTBYNAME_R_5_ARG HAVE_GETHOSTBYNAME_R_3_ARG HAVE_GETHOSTBYNAME_R HAVE_GETHOSTBYNAME LIBM LIBC UNICODE_OBJS THREADHEADERS SRCDIRS LTLIBOBJS'
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS VERSION SOVERSION CONFIG_ARGS PYTHONFRAMEWORK PYTHONFRAMEWORKDIR PYTHONFRAMEWORKPREFIX PYTHONFRAMEWORKINSTALLDIR MACHDEP SGI_ABI EXTRAPLATDIR EXTRAMACHDEPPATH CONFIGURE_MACOSX_DEPLOYMENT_TARGET CXX MAINOBJ EXEEXT CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC OBJEXT CPP EGREP BUILDEXEEXT LIBRARY LDLIBRARY DLLLIBRARY BLDLIBRARY LDLIBRARYDIR INSTSONAME RUNSHARED LINKCC RANLIB ac_ct_RANLIB AR INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA LN OPT BASECFLAGS LIBTOOL_CRUFT SO LDSHARED BLDSHARED CCSHARED LINKFORSHARED CFLAGSFORSHARED SHLIBS USE_SIGNAL_MODULE SIGNAL_OBJS USE_THREAD_MODULE LDLAST THREADOBJ DLINCLDIR DYNLOADFILE MACHDEP_OBJS TRUE LIBOBJS HAVE_GETHOSTBYNAME_R_6_ARG HAVE_GETHOSTBYNAME_R_5_ARG HAVE_GETHOSTBYNAME_R_3_ARG HAVE_GETHOSTBYNAME_R HAVE_GETHOSTBYNAME LIBM LIBC UNICODE_OBJS THREADHEADERS SRCDIRS LTLIBOBJS'
 ac_subst_files=''
 
 # Initialize some variables set by options.
@@ -1573,6 +1573,12 @@ fi
 echo "$as_me:$LINENO: result: $EXTRAPLATDIR" >&5
 echo "${ECHO_T}$EXTRAPLATDIR" >&6
 
+# Record the configure-time value of MACOSX_DEPLOYMENT_TARGET,
+# it may influence the way we can build extensions, so distutils
+# needs to check it
+
+CONFIGURE_MACOSX_DEPLOYMENT_TARGET=
+
 # checks for alternative programs
 
 # compiler flags are generated in two sets, BASECFLAGS and OPT.  OPT is just
@@ -10969,21 +10975,45 @@ then
                LDSHARED='$(CC) $(LDFLAGS) -bundle'
                if test "$enable_framework" ; then
                        # Link against the framework. All externals should be defined.
-                       LDSHARED="$LDSHARED "'-framework $(PYTHONFRAMEWORK)'
+                       BLDSHARED="$LDSHARED "'$(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)'
+                       LDSHARED="$LDSHARED "'$(PYTHONFRAMEWORKPREFIX)/$(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)'
                else
                        # No framework. Ignore undefined symbols, assuming they come from Python
                        LDSHARED="$LDSHARED -undefined suppress"
                fi ;;
-       Darwin/*)
+       Darwin/1.4*|Darwin/5.*|Darwin/6.*)
                LDSHARED='$(CC) $(LDFLAGS) -bundle'
                if test "$enable_framework" ; then
                        # Link against the framework. All externals should be defined.
-                       LDSHARED="$LDSHARED "'-framework $(PYTHONFRAMEWORK)'
+                       BLDSHARED="$LDSHARED "'$(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)'
+                       LDSHARED="$LDSHARED "'$(PYTHONFRAMEWORKPREFIX)/$(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)'
                else
                        # No framework, use the Python app as bundle-loader
                        BLDSHARED="$LDSHARED "'-bundle_loader $(BUILDPYTHON)'
                        LDSHARED="$LDSHARED "'-bundle_loader $(BINDIR)/python$(VERSION)$(EXE)'
                fi ;;
+       Darwin/*)
+               # Use -undefined dynamic_lookup whenever possible (10.3 and later).
+               # This allows an extension to be used in any Python
+               cur_target=`sw_vers -productVersion | sed 's/\(10\.[0-9]*\).*/\1/'`
+               CONFIGURE_MACOSX_DEPLOYMENT_TARGET=${MACOSX_DEPLOYMENT_TARGET-${cur_target}}
+               if test ${MACOSX_DEPLOYMENT_TARGET-${cur_target}} '>' 10.2
+               then
+                       LDSHARED='$(CC) $(LDFLAGS) -bundle -undefined dynamic_lookup'
+                       BLDSHARED="$LDSHARED"
+               else
+                       LDSHARED='$(CC) $(LDFLAGS) -bundle'
+                       if test "$enable_framework" ; then
+                               # Link against the framework. All externals should be defined.
+                               BLDSHARED="$LDSHARED "'$(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)'
+                               LDSHARED="$LDSHARED "'$(PYTHONFRAMEWORKPREFIX)/$(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)'
+                       else
+                               # No framework, use the Python app as bundle-loader
+                               BLDSHARED="$LDSHARED "'-bundle_loader $(BUILDPYTHON)'
+                               LDSHARED="$LDSHARED "'-bundle_loader $(BINDIR)/python$(VERSION)$(EXE)'
+                       fi
+               fi
+               ;;
        Linux*|GNU*) LDSHARED='$(CC) -shared';;
        dgux*) LDSHARED="ld -G";;
        BSD/OS*/4*) LDSHARED="gcc -shared";;
@@ -11075,7 +11105,7 @@ then
                LINKFORSHARED="$extra_undefs -framework System"
                if test "$enable_framework"
                then
-                       LINKFORSHARED="$LINKFORSHARED -framework Python"
+                       LINKFORSHARED="$LINKFORSHARED "'$(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)'
                fi
                LINKFORSHARED="$LINKFORSHARED $extra_frameworks";;
        OpenUNIX*|UnixWare*) LINKFORSHARED="-Wl,-Bexport";;
@@ -21394,6 +21424,7 @@ s,@MACHDEP@,$MACHDEP,;t t
 s,@SGI_ABI@,$SGI_ABI,;t t
 s,@EXTRAPLATDIR@,$EXTRAPLATDIR,;t t
 s,@EXTRAMACHDEPPATH@,$EXTRAMACHDEPPATH,;t t
+s,@CONFIGURE_MACOSX_DEPLOYMENT_TARGET@,$CONFIGURE_MACOSX_DEPLOYMENT_TARGET,;t t
 s,@CXX@,$CXX,;t t
 s,@MAINOBJ@,$MAINOBJ,;t t
 s,@EXEEXT@,$EXEEXT,;t t
index 762c2595137608e4af3654f0822ccd6559071a06..575eefcdedac7cf37e51b9ad00d6b2a8f0b68d29 100644 (file)
@@ -220,6 +220,12 @@ then
 fi
 AC_MSG_RESULT($EXTRAPLATDIR)
 
+# Record the configure-time value of MACOSX_DEPLOYMENT_TARGET,
+# it may influence the way we can build extensions, so distutils
+# needs to check it
+AC_SUBST(CONFIGURE_MACOSX_DEPLOYMENT_TARGET)
+CONFIGURE_MACOSX_DEPLOYMENT_TARGET=
+
 # checks for alternative programs
 
 # compiler flags are generated in two sets, BASECFLAGS and OPT.  OPT is just
@@ -1273,21 +1279,45 @@ then
                LDSHARED='$(CC) $(LDFLAGS) -bundle'
                if test "$enable_framework" ; then
                        # Link against the framework. All externals should be defined.
-                       LDSHARED="$LDSHARED "'-framework $(PYTHONFRAMEWORK)'
+                       BLDSHARED="$LDSHARED "'$(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)'
+                       LDSHARED="$LDSHARED "'$(PYTHONFRAMEWORKPREFIX)/$(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)'
                else
                        # No framework. Ignore undefined symbols, assuming they come from Python
                        LDSHARED="$LDSHARED -undefined suppress"
                fi ;;
-       Darwin/*)
+       Darwin/1.4*|Darwin/5.*|Darwin/6.*)
                LDSHARED='$(CC) $(LDFLAGS) -bundle'
                if test "$enable_framework" ; then
                        # Link against the framework. All externals should be defined.
-                       LDSHARED="$LDSHARED "'-framework $(PYTHONFRAMEWORK)'
+                       BLDSHARED="$LDSHARED "'$(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)'
+                       LDSHARED="$LDSHARED "'$(PYTHONFRAMEWORKPREFIX)/$(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)'
                else
                        # No framework, use the Python app as bundle-loader
                        BLDSHARED="$LDSHARED "'-bundle_loader $(BUILDPYTHON)'
                        LDSHARED="$LDSHARED "'-bundle_loader $(BINDIR)/python$(VERSION)$(EXE)'
                fi ;;
+       Darwin/*)
+               # Use -undefined dynamic_lookup whenever possible (10.3 and later).
+               # This allows an extension to be used in any Python
+               cur_target=`sw_vers -productVersion | sed 's/\(10\.[[0-9]]*\).*/\1/'`
+               CONFIGURE_MACOSX_DEPLOYMENT_TARGET=${MACOSX_DEPLOYMENT_TARGET-${cur_target}}
+               if test ${MACOSX_DEPLOYMENT_TARGET-${cur_target}} '>' 10.2
+               then
+                       LDSHARED='$(CC) $(LDFLAGS) -bundle -undefined dynamic_lookup'
+                       BLDSHARED="$LDSHARED"
+               else
+                       LDSHARED='$(CC) $(LDFLAGS) -bundle'
+                       if test "$enable_framework" ; then
+                               # Link against the framework. All externals should be defined.
+                               BLDSHARED="$LDSHARED "'$(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)'
+                               LDSHARED="$LDSHARED "'$(PYTHONFRAMEWORKPREFIX)/$(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)'
+                       else
+                               # No framework, use the Python app as bundle-loader
+                               BLDSHARED="$LDSHARED "'-bundle_loader $(BUILDPYTHON)'
+                               LDSHARED="$LDSHARED "'-bundle_loader $(BINDIR)/python$(VERSION)$(EXE)'
+                       fi
+               fi
+               ;;
        Linux*|GNU*) LDSHARED='$(CC) -shared';;
        dgux*) LDSHARED="ld -G";;
        BSD/OS*/4*) LDSHARED="gcc -shared";;
@@ -1375,7 +1405,7 @@ then
                LINKFORSHARED="$extra_undefs -framework System"
                if test "$enable_framework"
                then
-                       LINKFORSHARED="$LINKFORSHARED -framework Python"
+                       LINKFORSHARED="$LINKFORSHARED "'$(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)'
                fi
                LINKFORSHARED="$LINKFORSHARED $extra_frameworks";;
        OpenUNIX*|UnixWare*) LINKFORSHARED="-Wl,-Bexport";;