@@ -101,6 +101,12 @@ DESTSHARED= $(BINLIBDEST)/lib-dynload
101
101
# Executable suffix (.exe on Windows and Mac OS X)
102
102
EXE= @EXEEXT@
103
103
104
+ # Short name and location for Mac OS X Python framework
105
+ PYTHONFRAMEWORK= @PYTHONFRAMEWORK@
106
+ PYTHONFRAMEWORKDIR= @PYTHONFRAMEWORKDIR@
107
+ PYTHONFRAMEWORKPREFIX= @PYTHONFRAMEWORKPREFIX@
108
+ PYTHONFRAMEWORKINSTALLDIR= @PYTHONFRAMEWORKINSTALLDIR@
109
+
104
110
# Modes for directories, executables and data files created by the
105
111
# install process. Default to user-only-writable for all file types.
106
112
DIRMODE= 755
@@ -126,7 +132,9 @@ DIST= $(DISTFILES) $(DISTDIRS)
126
132
127
133
LIBRARY= @LIBRARY@
128
134
LDLIBRARY= @LDLIBRARY@
135
+ BLDLIBRARY= @BLDLIBRARY@
129
136
DLLLIBRARY= @DLLLIBRARY@
137
+ LDLIBRARYDIR= @LDLIBRARYDIR@
130
138
131
139
132
140
LIBS= @LIBS@
@@ -280,7 +288,7 @@ all: $(PYTHON) oldsharedmods sharedmods
280
288
$(PYTHON): Modules/$(MAINOBJ) $(LDLIBRARY)
281
289
$(LINKCC) $(LDFLAGS) $(LINKFORSHARED) -o $@ \
282
290
Modules/$(MAINOBJ) \
283
- $(LDLIBRARY ) $(LIBS) $(MODLIBS) $(SYSLIBS) $(LDLAST)
291
+ $(BLDLIBRARY ) $(LIBS) $(MODLIBS) $(SYSLIBS) $(LDLAST)
284
292
285
293
platform: $(PYTHON)
286
294
./$(PYTHON) -E -c 'import sys ; from distutils.util import get_platform ; print get_platform()+"-"+sys.version[0:3]' >platform
@@ -329,7 +337,7 @@ libpython$(VERSION).so: $(LIBRARY)
329
337
esac
330
338
331
339
# This rule is here for OPENSTEP/Rhapsody/MacOSX
332
- libpython$( VERSION).dylib : $(LIBRARY)
340
+ $(PYTHONFRAMEWORKDIR)/Versions/$( VERSION)/$(PYTHONFRAMEWORK) : $(LIBRARY) $(PYTHONFRAMEWORKDIR )
333
341
libtool -o $(LDLIBRARY) -dynamic $(OTHER_LIBTOOL_OPT) $(LIBRARY) \
334
342
-framework System @LIBTOOL_CRUFT@
335
343
@@ -631,6 +639,7 @@ $(srcdir)/Lib/$(PLATDIR):
631
639
cp $(srcdir)/Lib/plat-generic/regen $(srcdir)/Lib/$(PLATDIR)/regen
632
640
export PATH; PATH="`pwd`:$$PATH"; \
633
641
export PYTHONPATH; PYTHONPATH="`pwd`/Lib"; \
642
+ export DYLD_FRAMEWORK_PATH; DYLD_FRAMEWORK_PATH="`pwd`"; \
634
643
export EXE; EXE="$(EXE)"; \
635
644
cd $(srcdir)/Lib/$(PLATDIR); ./regen
636
645
@@ -665,8 +674,12 @@ libainstall: all
665
674
fi; \
666
675
done
667
676
@if test -d $(LDLIBRARY); then :; else \
668
- $(INSTALL_DATA) $(LDLIBRARY) $(LIBPL)/$(LDLIBRARY) ; \
669
- $(RANLIB) $(LIBPL)/$(LDLIBRARY) ; \
677
+ if test -z "$(PYTHONFRAMEWORKDIR)"; then \
678
+ $(INSTALL_DATA) $(LDLIBRARY) $(LIBPL)/$(LDLIBRARY) ; \
679
+ $(RANLIB) $(LIBPL)/$(LDLIBRARY) ; \
680
+ else \
681
+ echo Skip install of $(LDLIBRARY) - use make frameworkinstall; \
682
+ fi; \
670
683
fi
671
684
$(INSTALL_DATA) Modules/config.c $(LIBPL)/config.c
672
685
$(INSTALL_DATA) Modules/$(MAINOBJ) $(LIBPL)/$(MAINOBJ)
@@ -711,6 +724,64 @@ sharedinstall:
711
724
./$(PYTHON) -E $(srcdir)/setup.py install \
712
725
--install-platlib=$(DESTSHARED)
713
726
727
+ # Install a MacOSX framework During build (before
728
+ # setup.py), make a minimal Python.framework directory structure in the build
729
+ # directory. This framework is minimal, it doesn't contain the Lib directory
730
+ # and such, but together with some magic in Modules/getpath.c it is good enough
731
+ # to run python from the install dir.
732
+
733
+ FRAMEWORKDEST=$(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)
734
+ RESSRCDIR=$(srcdir)/Mac/OSXResources/framework
735
+ $(PYTHONFRAMEWORKDIR): $(RESSRCDIR)/Info.plist \
736
+ $(RESSRCDIR)/version.plist \
737
+ $(RESSRCDIR)/English.lproj/InfoPlist.strings
738
+ @if test -z "$(PYTHONFRAMEWORKDIR)"; then \
739
+ echo Not configured with --enable-framework; \
740
+ exit; \
741
+ else true; \
742
+ fi
743
+ $(INSTALL) -d -m $(DIRMODE) $(FRAMEWORKDEST)/Resources/English.lproj
744
+ $(INSTALL_DATA) $(RESSRCDIR)/Info.plist $(FRAMEWORKDEST)/Resources/Info.plist
745
+ $(INSTALL_DATA) $(RESSRCDIR)/version.plist $(FRAMEWORKDEST)/Resources/version.plist
746
+ $(INSTALL_DATA) $(RESSRCDIR)/English.lproj/InfoPlist.strings \
747
+ $(FRAMEWORKDEST)/Resources/English.lproj/InfoPlist.strings
748
+ $(LN) -fs $(VERSION) $(PYTHONFRAMEWORKDIR)/Versions/Current
749
+ $(LN) -fs Versions/Current/Python $(PYTHONFRAMEWORKDIR)/Python
750
+ $(LN) -fs Versions/Current/Headers $(PYTHONFRAMEWORKDIR)/Headers
751
+ $(LN) -fs Versions/Current/Resources $(PYTHONFRAMEWORKDIR)/Resources
752
+
753
+ # On install, we re-make the framework
754
+ # structure in the install location, /Library/Frameworks/ or the argument to
755
+ # --enable-framework. If --enable-framework has been specified then we have
756
+ # automatically set prefix to the location deep down in the framework, so we
757
+ # only have to cater for the structural bits of the framework.
758
+
759
+ frameworkinstall: install frameworkinfrastructureinstall
760
+ FRAMEWORKFINALDEST=$(PYTHONFRAMEWORKINSTALLDIR)/Versions/$(VERSION)
761
+ frameworkinfrastructureinstall: $(LDLIBRARY)
762
+ @if test -z "$(PYTHONFRAMEWORKDIR)"; then \
763
+ echo Not configured with --enable-framework; \
764
+ exit; \
765
+ else true; \
766
+ fi
767
+ @for i in $(FRAMEWORKFINALDEST)/Resources/English.lproj $(FRAMEWORKFINALDEST)/lib; do\
768
+ if test ! -d $$i; then \
769
+ echo "Creating directory $$i"; \
770
+ $(INSTALL) -d -m $(DIRMODE) $$i; \
771
+ else true; \
772
+ fi; \
773
+ done
774
+ $(LN) -sf $(FRAMEWORKFINALDEST)/Headers $(INCLUDEPY)
775
+ $(INSTALL_DATA) $(RESSRCDIR)/Info.plist $(FRAMEWORKFINALDEST)/Resources/Info.plist
776
+ $(INSTALL_DATA) $(RESSRCDIR)/version.plist $(FRAMEWORKFINALDEST)/Resources/version.plist
777
+ $(INSTALL_DATA) $(RESSRCDIR)/English.lproj/InfoPlist.strings \
778
+ $(FRAMEWORKFINALDEST)/Resources/English.lproj/InfoPlist.strings
779
+ $(LN) -fs $(VERSION) $(PYTHONFRAMEWORKINSTALLDIR)/Versions/Current
780
+ $(LN) -fs Versions/Current/Python $(PYTHONFRAMEWORKINSTALLDIR)/Python
781
+ $(LN) -fs Versions/Current/Headers $(PYTHONFRAMEWORKINSTALLDIR)/Headers
782
+ $(LN) -fs Versions/Current/Resources $(PYTHONFRAMEWORKINSTALLDIR)/Resources
783
+ $(INSTALL_DATA) $(LDLIBRARY) $(PYTHONFRAMEWORKPREFIX)/$(LDLIBRARY)
784
+
714
785
# Build the toplevel Makefile
715
786
Makefile.pre: Makefile.pre.in config.status
716
787
CONFIG_FILES=Makefile.pre CONFIG_HEADERS= $(SHELL) config.status
0 commit comments