Skip to content

Commit 6b08a40

Browse files
committed
Partial fix for #887242 (link extensions with dynamic_lookup in stead
of hard linking against the framework). 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. Distutils checks whether a value for MACOSX_DEPLOYMENT_TARGET was recorded in the Makefile, and if it was insists that the current value matches. This is only a partial fix because it only applies to 2.4, and the "two python problem" exists with Python 2.3 shipped with MacOSX 10.3, which we have no influence over.
1 parent bc555e3 commit 6b08a40

File tree

4 files changed

+76
-5
lines changed

4 files changed

+76
-5
lines changed

Lib/distutils/sysconfig.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -355,7 +355,19 @@ def _init_posix():
355355

356356
raise DistutilsPlatformError(my_msg)
357357

358-
358+
# On MacOSX we need to check the setting of the environment variable
359+
# MACOSX_DEPLOYMENT_TARGET: configure bases some choices on it so
360+
# it needs to be compatible.
361+
# An alternative would be to force MACOSX_DEPLOYMENT_TARGET to be
362+
# the same as during configure.
363+
if sys.platform == 'darwin' and g.has_key('CONFIGURE_MACOSX_DEPLOYMENT_TARGET'):
364+
cfg_target = g['CONFIGURE_MACOSX_DEPLOYMENT_TARGET']
365+
cur_target = os.getenv('MACOSX_DEPLOYMENT_TARGET', '')
366+
if cfg_target != cur_target:
367+
my_msg = ('$MACOSX_DEPLOYMENT_TARGET mismatch: now "%s" but "%s" during configure'
368+
% (cur_target, cfg_target))
369+
raise DistutilsPlatformError(my_msg)
370+
359371
# On AIX, there are wrong paths to the linker scripts in the Makefile
360372
# -- these paths are relative to the Python source, but when installed
361373
# the scripts are in another directory.

Makefile.pre.in

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,9 @@ PYTHONFRAMEWORK= @PYTHONFRAMEWORK@
107107
PYTHONFRAMEWORKDIR= @PYTHONFRAMEWORKDIR@
108108
PYTHONFRAMEWORKPREFIX= @PYTHONFRAMEWORKPREFIX@
109109
PYTHONFRAMEWORKINSTALLDIR= @PYTHONFRAMEWORKINSTALLDIR@
110+
# Deployment target selected during configure, to be checked
111+
# by distutils
112+
CONFIGURE_MACOSX_DEPLOYMENT_TARGET=@CONFIGURE_MACOSX_DEPLOYMENT_TARGET@
110113
# Options to enable prebinding (for fast startup)
111114
OTHER_LIBTOOL_OPT = -prebind -seg1addr 0x10000000
112115

configure

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#! /bin/sh
2-
# From configure.in Revision: 1.454 .
2+
# From configure.in Revision: 1.455 .
33
# Guess values for system-dependent variables and create Makefiles.
44
# Generated by GNU Autoconf 2.57 for python 2.4.
55
#
@@ -309,7 +309,7 @@ ac_includes_default="\
309309
# include <unistd.h>
310310
#endif"
311311

312-
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'
312+
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'
313313
ac_subst_files=''
314314

315315
# Initialize some variables set by options.
@@ -1442,6 +1442,7 @@ case $ac_sys_system/$ac_sys_release in
14421442
define_xopen_source=no;;
14431443
# On UnixWare 7, u_long is never defined with _XOPEN_SOURCE,
14441444
# but used in /usr/include/netinet/tcp.h. Reported by Tim Rice.
1445+
# Reconfirmed for 7.1.4 by Martin v. Loewis.
14451446
OpenUNIX/8.0.0| UnixWare/7.1.[0-4])
14461447
define_xopen_source=no;;
14471448
# On OpenServer 5, u_short is never defined with _XOPEN_SOURCE,
@@ -1527,6 +1528,12 @@ fi
15271528
echo "$as_me:$LINENO: result: $EXTRAPLATDIR" >&5
15281529
echo "${ECHO_T}$EXTRAPLATDIR" >&6
15291530

1531+
# Record the configure-time value of MACOSX_DEPLOYMENT_TARGET,
1532+
# it may influence the way we can build extensions, so distutils
1533+
# needs to check it
1534+
1535+
CONFIGURE_MACOSX_DEPLOYMENT_TARGET=
1536+
15301537
# checks for alternative programs
15311538

15321539
# compiler flags are generated in two sets, BASECFLAGS and OPT. OPT is just
@@ -9392,7 +9399,7 @@ then
93929399
# No framework. Ignore undefined symbols, assuming they come from Python
93939400
LDSHARED="$LDSHARED -undefined suppress"
93949401
fi ;;
9395-
Darwin/*)
9402+
Darwin/1.4*|Darwin/5.*|Darwin/6.*)
93969403
LDSHARED='$(CC) $(LDFLAGS) -bundle'
93979404
if test "$enable_framework" ; then
93989405
# Link against the framework. All externals should be defined.
@@ -9403,6 +9410,27 @@ then
94039410
BLDSHARED="$LDSHARED "'-bundle_loader $(BUILDPYTHON)'
94049411
LDSHARED="$LDSHARED "'-bundle_loader $(BINDIR)/python$(VERSION)$(EXE)'
94059412
fi ;;
9413+
Darwin/*)
9414+
# Use -undefined dynamic_lookup whenever possible (10.3 and later).
9415+
# This allows an extension to be used in any Python
9416+
if test ${MACOSX_DEPLOYMENT_TARGET-10.1} '>' 10.2
9417+
then
9418+
LDSHARED='$(CC) $(LDFLAGS) -bundle -undefined dynamic_lookup'
9419+
BLDSHARED="$LDSHARED"
9420+
CONFIGURE_MACOSX_DEPLOYMENT_TARGET=$MACOSX_DEPLOYMENT_TARGET
9421+
else
9422+
LDSHARED='$(CC) $(LDFLAGS) -bundle'
9423+
if test "$enable_framework" ; then
9424+
# Link against the framework. All externals should be defined.
9425+
BLDSHARED="$LDSHARED "'-Wl,-F. -framework $(PYTHONFRAMEWORK)'
9426+
LDSHARED="$LDSHARED "'-Wl,-F$(PYTHONFRAMEWORKPREFIX) -framework $(PYTHONFRAMEWORK)'
9427+
else
9428+
# No framework, use the Python app as bundle-loader
9429+
BLDSHARED="$LDSHARED "'-bundle_loader $(BUILDPYTHON)'
9430+
LDSHARED="$LDSHARED "'-bundle_loader $(BINDIR)/python$(VERSION)$(EXE)'
9431+
fi
9432+
fi
9433+
;;
94069434
Linux*|GNU*) LDSHARED='$(CC) -shared';;
94079435
BSD/OS*/4*) LDSHARED="gcc -shared";;
94089436
OpenBSD*|FreeBSD*)
@@ -18662,6 +18690,7 @@ s,@MACHDEP@,$MACHDEP,;t t
1866218690
s,@SGI_ABI@,$SGI_ABI,;t t
1866318691
s,@EXTRAPLATDIR@,$EXTRAPLATDIR,;t t
1866418692
s,@EXTRAMACHDEPPATH@,$EXTRAMACHDEPPATH,;t t
18693+
s,@CONFIGURE_MACOSX_DEPLOYMENT_TARGET@,$CONFIGURE_MACOSX_DEPLOYMENT_TARGET,;t t
1866518694
s,@CXX@,$CXX,;t t
1866618695
s,@MAINOBJ@,$MAINOBJ,;t t
1866718696
s,@EXEEXT@,$EXEEXT,;t t

configure.in

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,12 @@ then
216216
fi
217217
AC_MSG_RESULT($EXTRAPLATDIR)
218218

219+
# Record the configure-time value of MACOSX_DEPLOYMENT_TARGET,
220+
# it may influence the way we can build extensions, so distutils
221+
# needs to check it
222+
AC_SUBST(CONFIGURE_MACOSX_DEPLOYMENT_TARGET)
223+
CONFIGURE_MACOSX_DEPLOYMENT_TARGET=
224+
219225
# checks for alternative programs
220226

221227
# compiler flags are generated in two sets, BASECFLAGS and OPT. OPT is just
@@ -1257,7 +1263,7 @@ then
12571263
# No framework. Ignore undefined symbols, assuming they come from Python
12581264
LDSHARED="$LDSHARED -undefined suppress"
12591265
fi ;;
1260-
Darwin/*)
1266+
Darwin/1.4*|Darwin/5.*|Darwin/6.*)
12611267
LDSHARED='$(CC) $(LDFLAGS) -bundle'
12621268
if test "$enable_framework" ; then
12631269
# Link against the framework. All externals should be defined.
@@ -1268,6 +1274,27 @@ then
12681274
BLDSHARED="$LDSHARED "'-bundle_loader $(BUILDPYTHON)'
12691275
LDSHARED="$LDSHARED "'-bundle_loader $(BINDIR)/python$(VERSION)$(EXE)'
12701276
fi ;;
1277+
Darwin/*)
1278+
# Use -undefined dynamic_lookup whenever possible (10.3 and later).
1279+
# This allows an extension to be used in any Python
1280+
if test ${MACOSX_DEPLOYMENT_TARGET-10.1} '>' 10.2
1281+
then
1282+
LDSHARED='$(CC) $(LDFLAGS) -bundle -undefined dynamic_lookup'
1283+
BLDSHARED="$LDSHARED"
1284+
CONFIGURE_MACOSX_DEPLOYMENT_TARGET=$MACOSX_DEPLOYMENT_TARGET
1285+
else
1286+
LDSHARED='$(CC) $(LDFLAGS) -bundle'
1287+
if test "$enable_framework" ; then
1288+
# Link against the framework. All externals should be defined.
1289+
BLDSHARED="$LDSHARED "'-Wl,-F. -framework $(PYTHONFRAMEWORK)'
1290+
LDSHARED="$LDSHARED "'-Wl,-F$(PYTHONFRAMEWORKPREFIX) -framework $(PYTHONFRAMEWORK)'
1291+
else
1292+
# No framework, use the Python app as bundle-loader
1293+
BLDSHARED="$LDSHARED "'-bundle_loader $(BUILDPYTHON)'
1294+
LDSHARED="$LDSHARED "'-bundle_loader $(BINDIR)/python$(VERSION)$(EXE)'
1295+
fi
1296+
fi
1297+
;;
12711298
Linux*|GNU*) LDSHARED='$(CC) -shared';;
12721299
BSD/OS*/4*) LDSHARED="gcc -shared";;
12731300
OpenBSD*|FreeBSD*)

0 commit comments

Comments
 (0)