diff options
author | Jack Jansen <jack.jansen@cwi.nl> | 2002-08-01 21:57:49 (GMT) |
---|---|---|
committer | Jack Jansen <jack.jansen@cwi.nl> | 2002-08-01 21:57:49 (GMT) |
commit | ea0c3828c00de81c953e147e085d4d2b4b906850 (patch) | |
tree | ed934aa93d0daec99e7dd57a7f3bd62a2790ebf0 | |
parent | be3e1f7a95a277cf77e27e0e365227cd8aecc90a (diff) | |
download | cpython-ea0c3828c00de81c953e147e085d4d2b4b906850.zip cpython-ea0c3828c00de81c953e147e085d4d2b4b906850.tar.gz cpython-ea0c3828c00de81c953e147e085d4d2b4b906850.tar.bz2 |
- Get _environ through the NSEnviron call in a MacOSX framework. This allows
us to completely decouple the framework from the executable, so we
can use a two-level namespace.
- Do framework builds with a twolevel namespace.
- Reorganized the code that creates the minimal framework in the build
directory, to make it more robust against incomplete frameworks (from
earlier aborted builds, or builds of previous Python versions).
-rw-r--r-- | Makefile.pre.in | 49 | ||||
-rw-r--r-- | Modules/posixmodule.c | 13 | ||||
-rwxr-xr-x | configure | 16 | ||||
-rw-r--r-- | configure.in | 14 |
4 files changed, 39 insertions, 53 deletions
diff --git a/Makefile.pre.in b/Makefile.pre.in index e77a037..efa31c4 100644 --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -346,11 +346,30 @@ libpython$(VERSION).so: $(LIBRARY_OBJS) libpython$(VERSION).sl: $(LIBRARY_OBJS) $(LDSHARED) -o $@ $(LIBRARY_OBJS) $(LIBC) $(LIBM) -# This rule is here for OPENSTEP/Rhapsody/MacOSX -$(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK): $(LIBRARY) $(PYTHONFRAMEWORKDIR) +# This rule is here for OPENSTEP/Rhapsody/MacOSX. It builds a temporary +# minimal framework (not including the Lib directory and such) in the current +# directory. +RESSRCDIR=$(srcdir)/Mac/OSXResources/framework +$(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK): \ + $(LIBRARY) \ + $(RESSRCDIR)/Info.plist \ + $(RESSRCDIR)/version.plist \ + $(RESSRCDIR)/English.lproj/InfoPlist.strings $(INSTALL) -d -m $(DIRMODE) $(PYTHONFRAMEWORKDIR)/Versions/$(VERSION) libtool -o $(LDLIBRARY) -dynamic $(OTHER_LIBTOOL_OPT) $(LIBRARY) \ -framework System @LIBTOOL_CRUFT@ + $(INSTALL) -d -m $(DIRMODE) \ + $(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/Resources/English.lproj + $(INSTALL_DATA) $(RESSRCDIR)/Info.plist \ + $(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/Resources/Info.plist + $(INSTALL_DATA) $(RESSRCDIR)/version.plist \ + $(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/Resources/version.plist + $(INSTALL_DATA) $(RESSRCDIR)/English.lproj/InfoPlist.strings \ + $(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/Resources/English.lproj/InfoPlist.strings + $(LN) -fsh $(VERSION) $(PYTHONFRAMEWORKDIR)/Versions/Current + $(LN) -fsh Versions/Current/Python $(PYTHONFRAMEWORKDIR)/Python + $(LN) -fsh Versions/Current/Headers $(PYTHONFRAMEWORKDIR)/Headers + $(LN) -fsh Versions/Current/Resources $(PYTHONFRAMEWORKDIR)/Resources # This rule builds the Cygwin Python DLL libpython$(VERSION).dll.a: $(LIBRARY_OBJS) @@ -743,32 +762,6 @@ sharedinstall: --install-scripts=$(BINDIR) \ --install-platlib=$(DESTSHARED) -# Install a MacOSX framework During build (before -# setup.py), make a minimal Python.framework directory structure in the build -# directory. This framework is minimal, it doesn't contain the Lib directory -# and such, but together with some magic in Modules/getpath.c it is good enough -# to run python from the install dir. - -FRAMEWORKDEST=$(PYTHONFRAMEWORKDIR)/Versions/$(VERSION) -RESSRCDIR=$(srcdir)/Mac/OSXResources/framework -$(PYTHONFRAMEWORKDIR): $(RESSRCDIR)/Info.plist \ - $(RESSRCDIR)/version.plist \ - $(RESSRCDIR)/English.lproj/InfoPlist.strings - @if test "$(PYTHONFRAMEWORKDIR)" = no-framework; then \ - echo Not configured with --enable-framework; \ - exit 1; \ - else true; \ - fi - $(INSTALL) -d -m $(DIRMODE) $(FRAMEWORKDEST)/Resources/English.lproj - $(INSTALL_DATA) $(RESSRCDIR)/Info.plist $(FRAMEWORKDEST)/Resources/Info.plist - $(INSTALL_DATA) $(RESSRCDIR)/version.plist $(FRAMEWORKDEST)/Resources/version.plist - $(INSTALL_DATA) $(RESSRCDIR)/English.lproj/InfoPlist.strings \ - $(FRAMEWORKDEST)/Resources/English.lproj/InfoPlist.strings - $(LN) -fsh $(VERSION) $(PYTHONFRAMEWORKDIR)/Versions/Current - $(LN) -fsh Versions/Current/Python $(PYTHONFRAMEWORKDIR)/Python - $(LN) -fsh Versions/Current/Headers $(PYTHONFRAMEWORKDIR)/Headers - $(LN) -fsh Versions/Current/Resources $(PYTHONFRAMEWORKDIR)/Resources - # On install, we re-make the framework # structure in the install location, /Library/Frameworks/ or the argument to # --enable-framework. If --enable-framework has been specified then we have diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 6f18da8..bf178f8 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -276,8 +276,13 @@ extern int lstat(const char *, struct stat *); #endif /* Return a dictionary corresponding to the POSIX environment table */ - -#if !defined(_MSC_VER) && ( !defined(__WATCOMC__) || defined(__QNX__) ) +#ifdef WITH_NEXT_FRAMEWORK +/* On Darwin/MacOSX a shared library or framework has no access to +** environ directly, we must obtain it with _NSGetEnviron(). +*/ +#include <crt_externs.h> +static char **environ; +#elif !defined(_MSC_VER) && ( !defined(__WATCOMC__) || defined(__QNX__) ) extern char **environ; #endif /* !_MSC_VER */ @@ -289,6 +294,10 @@ convertenviron(void) d = PyDict_New(); if (d == NULL) return NULL; +#ifdef WITH_NEXT_FRAMEWORK + if (environ == NULL) + environ = *_NSGetEnviron(); +#endif if (environ == NULL) return d; /* This part ignores errors */ @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.in Revision: 1.337 . +# From configure.in Revision: 1.338 . # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.53. # @@ -8759,14 +8759,12 @@ echo "${ECHO_T}$enable_toolbox_glue" >&6 case $ac_sys_system/$ac_sys_release in Darwin/1.3*) - ns_undef_sym='_environ' - LIBTOOL_CRUFT="-lcc_dynamic -arch_only ppc -U $ns_undef_sym" + LIBTOOL_CRUFT="-lcc_dynamic -arch_only ppc" LIBTOOL_CRUFT="$LIBTOOL_CRUFT $extra_frameworks" LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -install_name $(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/Python' LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -compatibility_version $(VERSION) -current_version $(VERSION)';; Darwin/*) - ns_undef_sym='_environ' - LIBTOOL_CRUFT="-lcc_dynamic -arch_only ppc -flat_namespace -U $ns_undef_sym" + LIBTOOL_CRUFT="-lcc_dynamic -arch_only ppc" LIBTOOL_CRUFT="$LIBTOOL_CRUFT $extra_frameworks" LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -install_name $(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/Python' LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -compatibility_version $(VERSION) -current_version $(VERSION)';; @@ -8777,15 +8775,9 @@ echo $ECHO_N "checking for --enable-framework... $ECHO_C" >&6 if test "$enable_framework" then OPT="$OPT -fno-common -dynamic" - # -U __environ is needed since bundles don't have access - # to crt0 when built but will always be linked against it # -F. is needed to allow linking to the framework while # in the build location. - - case $ac_sys_system/$ac_sys_release in - Darwin/1.3*)LDFLAGS="$LDFLAGS -Wl,-F. -Wl,-U,$ns_undef_sym";; - Darwin/*)LDFLAGS="$LDFLAGS -Wl,-F. -Wl,-flat_namespace,-U,$ns_undef_sym";; - esac + LDFLAGS="$LDFLAGS -Wl,-F." cat >>confdefs.h <<\_ACEOF #define WITH_NEXT_FRAMEWORK 1 diff --git a/configure.in b/configure.in index 5ea8c3e..f2f47e2 100644 --- a/configure.in +++ b/configure.in @@ -820,14 +820,12 @@ AC_MSG_RESULT($enable_toolbox_glue) AC_SUBST(LIBTOOL_CRUFT) case $ac_sys_system/$ac_sys_release in Darwin/1.3*) - ns_undef_sym='_environ' - LIBTOOL_CRUFT="-lcc_dynamic -arch_only ppc -U $ns_undef_sym" + LIBTOOL_CRUFT="-lcc_dynamic -arch_only ppc" LIBTOOL_CRUFT="$LIBTOOL_CRUFT $extra_frameworks" LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -install_name $(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/Python' LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -compatibility_version $(VERSION) -current_version $(VERSION)';; Darwin/*) - ns_undef_sym='_environ' - LIBTOOL_CRUFT="-lcc_dynamic -arch_only ppc -flat_namespace -U $ns_undef_sym" + LIBTOOL_CRUFT="-lcc_dynamic -arch_only ppc" LIBTOOL_CRUFT="$LIBTOOL_CRUFT $extra_frameworks" LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -install_name $(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/Python' LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -compatibility_version $(VERSION) -current_version $(VERSION)';; @@ -837,15 +835,9 @@ AC_MSG_CHECKING(for --enable-framework) if test "$enable_framework" then OPT="$OPT -fno-common -dynamic" - # -U __environ is needed since bundles don't have access - # to crt0 when built but will always be linked against it # -F. is needed to allow linking to the framework while # in the build location. - - case $ac_sys_system/$ac_sys_release in - Darwin/1.3*)LDFLAGS="$LDFLAGS -Wl,-F. -Wl,-U,$ns_undef_sym";; - Darwin/*)LDFLAGS="$LDFLAGS -Wl,-F. -Wl,-flat_namespace,-U,$ns_undef_sym";; - esac + LDFLAGS="$LDFLAGS -Wl,-F." AC_DEFINE(WITH_NEXT_FRAMEWORK, 1, [Define if you want to produce an OpenStep/Rhapsody framework (shared library plus accessory files).]) |