mirror of
https://github.com/python/cpython.git
synced 2026-01-06 23:42:34 +00:00
svn+ssh://pythondev@svn.python.org/python/trunk ........ r77031 | ronald.oussoren | 2009-12-24 14:30:58 +0100 (Thu, 24 Dec 2009) | 15 lines Issue #6834: replace the implementation for the 'python' and 'pythonw' executables on OSX. The previous implementation used execv(2) to run the real interpreter, which means that you cannot use the arch(1) tool to select the architecture you want to use for a universal build because that only affects the python/pythonw wrapper and not the actual interpreter. The new version uses posix_spawnv with a number of OSX-specific options that ensure that the real interpreter is started using the same CPU architecture as the wrapper, and that means that 'arch -ppc python' now actually works. I've also changed the way that the wrapper looks for the framework: it is now linked to the framework rather than hardcoding the framework path. This should make it easier to provide pythonw support in tools like virtualenv. ........
219 lines
8.4 KiB
Makefile
219 lines
8.4 KiB
Makefile
# This file can be invoked from the various frameworkinstall... targets in the
|
|
# main Makefile. The next couple of variables are overridden on the
|
|
# commandline in that case.
|
|
|
|
VERSION=@VERSION@
|
|
builddir = ..
|
|
srcdir=@srcdir@
|
|
prefix=@prefix@
|
|
LIBDEST=$(prefix)/lib/python$(VERSION)
|
|
RUNSHARED=@RUNSHARED@
|
|
BUILDEXE=@BUILDEXEEXT@
|
|
BUILDPYTHON=$(builddir)/python$(BUILDEXE)
|
|
DESTDIR=
|
|
LDFLAGS=@LDFLAGS@
|
|
FRAMEWORKUNIXTOOLSPREFIX=@FRAMEWORKUNIXTOOLSPREFIX@
|
|
PYTHONFRAMEWORK=@PYTHONFRAMEWORK@
|
|
PYTHONFRAMEWORKIDENTIFIER=@PYTHONFRAMEWORKIDENTIFIER@
|
|
LIPO_32BIT_FLAGS=@LIPO_32BIT_FLAGS@
|
|
|
|
|
|
# These are normally glimpsed from the previous set
|
|
bindir=$(prefix)/bin
|
|
PYTHONAPPSDIR=/Applications/$(PYTHONFRAMEWORK) $(VERSION)
|
|
APPINSTALLDIR=$(prefix)/Resources/Python.app
|
|
|
|
# Variables for installing the "normal" unix binaries
|
|
INSTALLED_PYTHONAPP=$(APPINSTALLDIR)/Contents/MacOS/$(PYTHONFRAMEWORK)
|
|
|
|
# Items more-or-less copied from the main Makefile
|
|
DIRMODE=755
|
|
FILEMODE=644
|
|
INSTALL=@INSTALL@
|
|
INSTALL_SYMLINK=ln -fsn
|
|
INSTALL_PROGRAM=@INSTALL_PROGRAM@
|
|
INSTALL_SCRIPT= @INSTALL_SCRIPT@
|
|
INSTALL_DATA=@INSTALL_DATA@
|
|
LN=@LN@
|
|
STRIPFLAG=-s
|
|
CPMAC=/Developer/Tools/CpMac
|
|
|
|
APPTEMPLATE=$(srcdir)/Resources/app
|
|
APPSUBDIRS=MacOS Resources
|
|
compileall=$(srcdir)/../Lib/compileall.py
|
|
|
|
installapps: install_Python install_pythonw install_PythonLauncher install_IDLE \
|
|
checkapplepython install_versionedtools
|
|
|
|
|
|
install_pythonw: pythonw
|
|
$(INSTALL_PROGRAM) $(STRIPFLAG) pythonw "$(DESTDIR)$(prefix)/bin/pythonw$(VERSION)"
|
|
$(INSTALL_PROGRAM) $(STRIPFLAG) pythonw "$(DESTDIR)$(prefix)/bin/python$(VERSION)"
|
|
ln -sf python$(VERSION) "$(DESTDIR)$(prefix)/bin/python3"
|
|
ln -sf pythonw$(VERSION) "$(DESTDIR)$(prefix)/bin/pythonw3"
|
|
ifneq ($(LIPO_32BIT_FLAGS),)
|
|
lipo $(LIPO_32BIT_FLAGS) -output $(DESTDIR)$(prefix)/bin/python$(VERSION)-32 pythonw
|
|
lipo $(LIPO_32BIT_FLAGS) -output $(DESTDIR)$(prefix)/bin/pythonw$(VERSION)-32 pythonw
|
|
ln -sf pythonw$(VERSION)-32 "$(DESTDIR)$(prefix)/bin/pythonw$(VERSION)"
|
|
ln -sf python$(VERSION)-32 "$(DESTDIR)$(prefix)/bin/python$(VERSION)"
|
|
endif
|
|
|
|
#
|
|
# Install unix tools in /usr/local/bin. These are just aliases for the
|
|
# actual installation inside the framework.
|
|
#
|
|
installunixtools:
|
|
if [ ! -d "$(DESTDIR)$(FRAMEWORKUNIXTOOLSPREFIX)/bin" ]; then \
|
|
$(INSTALL) -d -m $(DIRMODE) "$(DESTDIR)$(FRAMEWORKUNIXTOOLSPREFIX)/bin" ;\
|
|
fi
|
|
for fn in python3 pythonw3 idle3 pydoc3 python3-config \
|
|
python$(VERSION) pythonw$(VERSION) idle$(VERSION) \
|
|
pydoc$(VERSION) python$(VERSION)-config 2to3 \
|
|
2to3-$(VERSION) ;\
|
|
do \
|
|
ln -fs "$(prefix)/bin/$${fn}" "$(DESTDIR)$(FRAMEWORKUNIXTOOLSPREFIX)/bin/$${fn}" ;\
|
|
done
|
|
|
|
|
|
#
|
|
# Like installunixtools, but only install links to the versioned binaries.
|
|
#
|
|
altinstallunixtools:
|
|
if [ ! -d "$(DESTDIR)$(FRAMEWORKUNIXTOOLSPREFIX)/bin" ]; then \
|
|
$(INSTALL) -d -m $(DIRMODE) "$(DESTDIR)$(FRAMEWORKUNIXTOOLSPREFIX)/bin" ;\
|
|
fi
|
|
for fn in python$(VERSION) pythonw$(VERSION) idle$(VERSION) \
|
|
pydoc$(VERSION) python$(VERSION)-config 2to3-$(VERSION);\
|
|
do \
|
|
ln -fs "$(prefix)/bin/$${fn}" "$(DESTDIR)$(FRAMEWORKUNIXTOOLSPREFIX)/bin/$${fn}" ;\
|
|
done
|
|
|
|
# By default most tools are installed without a version in their basename, to
|
|
# make it easier to install (and use) several python versions side-by-side move
|
|
# the tools to a version-specific name and add the non-versioned name as an
|
|
# alias.
|
|
install_versionedtools:
|
|
for fn in idle pydoc ;\
|
|
do \
|
|
if [ -h "$(DESTDIR)$(prefix)/bin/$${fn}3" ]; then \
|
|
continue ;\
|
|
fi ;\
|
|
mv "$(DESTDIR)$(prefix)/bin/$${fn}3" "$(DESTDIR)$(prefix)/bin/$${fn}$(VERSION)" ;\
|
|
ln -sf "$${fn}$(VERSION)" "$(DESTDIR)$(prefix)/bin/$${fn}3" ;\
|
|
done
|
|
mv "$(DESTDIR)$(prefix)/bin/2to3" "$(DESTDIR)$(prefix)/bin/2to3-$(VERSION)"
|
|
ln -sf "2to3-$(VERSION)" "$(DESTDIR)$(prefix)/bin/2to3"
|
|
if [ ! -h "$(DESTDIR)$(prefix)/bin/python3-config" ]; then \
|
|
mv "$(DESTDIR)$(prefix)/bin/python3-config" "$(DESTDIR)$(prefix)/bin/python$(VERSION)-config" ;\
|
|
ln -sf "python$(VERSION)-config" "$(DESTDIR)$(prefix)/bin/python3-config" ; \
|
|
fi
|
|
|
|
|
|
pythonw: $(srcdir)/Tools/pythonw.c Makefile
|
|
$(CC) $(LDFLAGS) -o $@ $(srcdir)/Tools/pythonw.c -I.. -I$(srcdir)/../Include ../$(PYTHONFRAMEWORK).framework/Versions/$(VERSION)/$(PYTHONFRAMEWORK)
|
|
|
|
install_PythonLauncher:
|
|
cd PythonLauncher && make install DESTDIR=$(DESTDIR)
|
|
|
|
install_Python:
|
|
@for i in "$(PYTHONAPPSDIR)" "$(APPINSTALLDIR)" "$(APPINSTALLDIR)/Contents"; do \
|
|
if test ! -d "$(DESTDIR)$$i"; then \
|
|
echo "Creating directory $(DESTDIR)$$i"; \
|
|
$(INSTALL) -d -m $(DIRMODE) "$(DESTDIR)$$i"; \
|
|
fi;\
|
|
done
|
|
@for i in $(APPSUBDIRS); do \
|
|
if test ! -d "$(DESTDIR)$(APPINSTALLDIR)/Contents/$$i"; then \
|
|
echo "Creating directory $(DESTDIR)$(APPINSTALLDIR)/Contents/$$i"; \
|
|
$(INSTALL) -d -m $(DIRMODE) "$(DESTDIR)$(APPINSTALLDIR)/Contents/$$i"; \
|
|
else true; \
|
|
fi; \
|
|
done
|
|
@for d in . $(APPSUBDIRS); \
|
|
do \
|
|
a=$(APPTEMPLATE)/$$d; \
|
|
if test ! -d $$a; then continue; else true; fi; \
|
|
b="$(DESTDIR)$(APPINSTALLDIR)/Contents/$$d"; \
|
|
for i in $$a/*; \
|
|
do \
|
|
case $$i in \
|
|
*CVS) ;; \
|
|
*.svn) ;; \
|
|
*.py[co]) ;; \
|
|
*.orig) ;; \
|
|
*~) ;; \
|
|
*idx) \
|
|
echo $(CPMAC) "$$i" $$b; \
|
|
$(CPMAC) "$$i" "$$b"; \
|
|
;; \
|
|
*) \
|
|
if test -d $$i; then continue; fi; \
|
|
if test -x $$i; then \
|
|
echo $(INSTALL_SCRIPT) "$$i" "$$b"; \
|
|
$(INSTALL_SCRIPT) "$$i" "$$b"; \
|
|
else \
|
|
echo $(INSTALL_DATA) "$$i" "$$b"; \
|
|
$(INSTALL_DATA) "$$i" "$$b"; \
|
|
fi;; \
|
|
esac; \
|
|
done; \
|
|
done
|
|
$(INSTALL_PROGRAM) $(STRIPFLAG) $(BUILDPYTHON) "$(DESTDIR)$(APPINSTALLDIR)/Contents/MacOS/$(PYTHONFRAMEWORK)"
|
|
sed -e "s!%bundleid%!$(PYTHONFRAMEWORKIDENTIFIER)!g" \
|
|
-e "s!%version%!`$(RUNSHARED) $(BUILDPYTHON) \
|
|
-c 'import platform; print(platform.python_version())'`!g" \
|
|
< "$(DESTDIR)$(APPINSTALLDIR)/Contents/Info.plist.in" \
|
|
> "$(DESTDIR)$(APPINSTALLDIR)/Contents/Info.plist"
|
|
rm "$(DESTDIR)$(APPINSTALLDIR)/Contents/Info.plist.in"
|
|
|
|
|
|
install_IDLE:
|
|
test -d "$(DESTDIR)$(PYTHONAPPSDIR)" || mkdir -p "$(DESTDIR)$(PYTHONAPPSDIR)"
|
|
-test -d "$(DESTDIR)$(PYTHONAPPSDIR)/IDLE.app" && rm -rf "$(DESTDIR)$(PYTHONAPPSDIR)/IDLE.app"
|
|
/bin/cp -PR "$(srcdir)/IDLE/IDLE.app" "$(DESTDIR)$(PYTHONAPPSDIR)"
|
|
ln -sf "$(INSTALLED_PYTHONAPP)" "$(DESTDIR)$(PYTHONAPPSDIR)/IDLE.app/Contents/MacOS/Python"
|
|
sed -e "s!%prefix%!$(prefix)!g" -e 's!%exe%!$(PYTHONFRAMEWORK)!g' < "$(srcdir)/IDLE/IDLE.app/Contents/MacOS/IDLE" > "$(DESTDIR)$(PYTHONAPPSDIR)/IDLE.app/Contents/MacOS/IDLE"
|
|
sed "s!%version%!`$(RUNSHARED) $(BUILDPYTHON) -c 'import platform; print(platform.python_version())'`!g" < "$(srcdir)/IDLE/IDLE.app/Contents/Info.plist" > "$(DESTDIR)$(PYTHONAPPSDIR)/IDLE.app/Contents/Info.plist"
|
|
if [ -f "$(DESTDIR)$(LIBDEST)/idlelib/config-main.def" ]; then \
|
|
/bin/cp -p "$(DESTDIR)$(LIBDEST)/idlelib/config-main.def" \
|
|
"$(DESTDIR)$(LIBDEST)/idlelib/config-main.def~" ; \
|
|
sed -e 's!name= IDLE Classic Windows!name= IDLE Classic OSX!g' \
|
|
< "$(DESTDIR)$(LIBDEST)/idlelib/config-main.def~" \
|
|
> "$(DESTDIR)$(LIBDEST)/idlelib/config-main.def" ; \
|
|
rm "$(DESTDIR)$(LIBDEST)/idlelib/config-main.def~" ; \
|
|
fi
|
|
if [ -f "$(DESTDIR)$(LIBDEST)/idlelib/config-extensions.def" ]; then \
|
|
/bin/cp -p "$(DESTDIR)$(LIBDEST)/idlelib/config-extensions.def" \
|
|
"$(DESTDIR)$(LIBDEST)/idlelib/config-extensions.def~" ; \
|
|
sed -e 's!zoom-height=<Alt-Key-2>!zoom-height=<Option-Key-0>!g' \
|
|
-e 's!<Alt-Key-!<Option-Key-!g' \
|
|
< "$(DESTDIR)$(LIBDEST)/idlelib/config-extensions.def~" \
|
|
> "$(DESTDIR)$(LIBDEST)/idlelib/config-extensions.def" ; \
|
|
rm "$(DESTDIR)$(LIBDEST)/idlelib/config-extensions.def~" ; \
|
|
fi
|
|
touch "$(DESTDIR)$(PYTHONAPPSDIR)/IDLE.app"
|
|
|
|
$(INSTALLED_PYTHONAPP): install_Python
|
|
|
|
installextras: $(srcdir)/Extras.ReadMe.txt $(srcdir)/Extras.install.py
|
|
$(INSTALL) -d "$(DESTDIR)$(PYTHONAPPSDIR)/Extras"
|
|
$(INSTALL) $(srcdir)/Extras.ReadMe.txt "$(DESTDIR)$(PYTHONAPPSDIR)/Extras/ReadMe.txt"
|
|
$(RUNSHARED) $(BUILDPYTHON) $(srcdir)/Extras.install.py $(srcdir)/../Demo \
|
|
"$(DESTDIR)$(PYTHONAPPSDIR)/Extras/Demo"
|
|
$(RUNSHARED) $(BUILDPYTHON) $(srcdir)/Extras.install.py $(srcdir)/Demo \
|
|
"$(DESTDIR)$(PYTHONAPPSDIR)/Extras/Demo.Mac"
|
|
|
|
|
|
checkapplepython: $(srcdir)/Tools/fixapplepython23.py
|
|
@if ! $(RUNSHARED) $(BUILDPYTHON) $(srcdir)/Tools/fixapplepython23.py -n; then \
|
|
echo "* WARNING: Apple-installed Python 2.3 will have trouble building extensions from now on."; \
|
|
echo "* WARNING: Run $(srcdir)/Tools/fixapplepython23.py with \"sudo\" to fix this."; \
|
|
fi
|
|
|
|
|
|
clean:
|
|
rm pythonw
|
|
cd PythonLauncher && make clean
|
|
|
|
Makefile: $(srcdir)/Makefile.in ../config.status
|
|
cd .. && CONFIG_FILES=Mac/Makefile CONFIG_HEADERS= $(SHELL) ./config.status
|