• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# This file can be invoked from the various frameworkinstall... targets in the
2# main Makefile. The next couple of variables are overridden on the
3# commandline in that case.
4
5VERSION=@VERSION@
6ABIFLAGS=@ABIFLAGS@
7LDVERSION=@LDVERSION@
8ENSUREPIP=@ENSUREPIP@
9builddir = ..
10srcdir=@srcdir@
11prefix=@prefix@
12exec_prefix=@exec_prefix@
13LIBDEST=$(prefix)/lib/python$(VERSION)
14RUNSHARED=@RUNSHARED@
15BUILDEXE=@BUILDEXEEXT@
16BUILDPYTHON=$(builddir)/python$(BUILDEXE)
17DESTDIR=
18LDFLAGS=@LDFLAGS@
19FRAMEWORKUNIXTOOLSPREFIX=@FRAMEWORKUNIXTOOLSPREFIX@
20PYTHONFRAMEWORK=@PYTHONFRAMEWORK@
21PYTHONFRAMEWORKIDENTIFIER=@PYTHONFRAMEWORKIDENTIFIER@
22LIPO_32BIT_FLAGS=@LIPO_32BIT_FLAGS@
23LIPO_INTEL64_FLAGS=@LIPO_INTEL64_FLAGS@
24CC=@CC@
25MACOSX_DEPLOYMENT_TARGET=@CONFIGURE_MACOSX_DEPLOYMENT_TARGET@
26export MACOSX_DEPLOYMENT_TARGET
27
28
29
30# These are normally glimpsed from the previous set
31BINDIR=		@bindir@
32PYTHONAPPSDIR=@FRAMEWORKINSTALLAPPSPREFIX@/$(PYTHONFRAMEWORK) $(VERSION)
33APPINSTALLDIR=$(prefix)/Resources/Python.app
34
35# Variables for installing the "normal" unix binaries
36INSTALLED_PYTHONAPP=$(APPINSTALLDIR)/Contents/MacOS/$(PYTHONFRAMEWORK)
37
38# Items more-or-less copied from the main Makefile
39DIRMODE=755
40FILEMODE=644
41INSTALL=@INSTALL@
42INSTALL_SYMLINK=ln -fsn
43INSTALL_PROGRAM=@INSTALL_PROGRAM@
44INSTALL_SCRIPT= @INSTALL_SCRIPT@
45INSTALL_DATA=@INSTALL_DATA@
46LN=@LN@
47STRIPFLAG=-s
48CPMAC=CpMac
49
50APPTEMPLATE=$(srcdir)/Resources/app
51APPSUBDIRS=MacOS Resources
52compileall=$(srcdir)/../Lib/compileall.py
53
54installapps: install_Python install_PythonLauncher install_IDLE
55
56#
57# Install unix tools in /usr/local/bin. These are just aliases for the
58# actual installation inside the framework.
59#
60installunixtools:
61	if [ ! -d "$(DESTDIR)$(FRAMEWORKUNIXTOOLSPREFIX)/bin" ]; then  \
62		$(INSTALL) -d -m $(DIRMODE) "$(DESTDIR)$(FRAMEWORKUNIXTOOLSPREFIX)/bin" ;\
63	fi
64	cd "$(DESTDIR)$(FRAMEWORKUNIXTOOLSPREFIX)/bin" && \
65	for fn in \
66			idle3 \
67			pydoc3 \
68			python3 \
69			python3-config \
70			; \
71	do \
72		rm -f $${fn} ; \
73		$(LN) -s $(BINDIR)/$${fn} $${fn} ;\
74	done
75	-if test "x$(VERSION)" != "x$(LDVERSION)"; then \
76		cd "$(DESTDIR)$(FRAMEWORKUNIXTOOLSPREFIX)/bin" && \
77		for fn in \
78				python$(VERSION)-config \
79				; \
80		do \
81			rm -f $${fn} ;\
82			$(LN) -s $(BINDIR)/$${fn} $${fn} ;\
83		done ;\
84	fi
85	-if test "x$(LIPO_32BIT_FLAGS)" != "x"; then \
86		cd "$(DESTDIR)$(FRAMEWORKUNIXTOOLSPREFIX)/bin" && \
87		for fn in \
88				python3-32 \
89				; \
90		do \
91			rm -f $${fn} ;\
92			$(LN) -s $(BINDIR)/$${fn} $${fn} ;\
93		done ;\
94	fi
95	-if test "x$(LIPO_INTEL64_FLAGS)" != "x"; then \
96		cd "$(DESTDIR)$(FRAMEWORKUNIXTOOLSPREFIX)/bin" && \
97		for fn in \
98				python3-intel64 \
99				; \
100		do \
101			rm -f $${fn} ;\
102			$(LN) -s $(BINDIR)/$${fn} $${fn} ;\
103		done ;\
104	fi
105	-if test "x$(ENSUREPIP)" != "xno"  ; then \
106		cd "$(DESTDIR)$(FRAMEWORKUNIXTOOLSPREFIX)/bin" && \
107		for fn in \
108				pip3 \
109				; \
110		do \
111			rm -f $${fn} ;\
112			$(LN) -s $(BINDIR)/$${fn} $${fn} ;\
113		done ;\
114	fi
115
116#
117# Like installunixtools, but only install links to the versioned binaries.
118#
119altinstallunixtools:
120	if [ ! -d "$(DESTDIR)$(FRAMEWORKUNIXTOOLSPREFIX)/bin" ]; then  \
121		$(INSTALL) -d -m $(DIRMODE) "$(DESTDIR)$(FRAMEWORKUNIXTOOLSPREFIX)/bin" ;\
122	fi
123	cd "$(DESTDIR)$(FRAMEWORKUNIXTOOLSPREFIX)/bin" && \
124	for fn in \
125			idle$(VERSION) \
126			pydoc$(VERSION) \
127			python$(VERSION) \
128			python$(LDVERSION)-config \
129			; \
130	do \
131		rm -f $${fn} ;\
132		$(LN) -s $(BINDIR)/$${fn} $${fn} ;\
133	done
134	-if test "x$(VERSION)" != "x$(LDVERSION)"; then \
135		cd "$(DESTDIR)$(FRAMEWORKUNIXTOOLSPREFIX)/bin" && \
136		for fn in \
137				python$(LDVERSION) \
138				; \
139		do \
140			rm -f $${fn} ;\
141			$(LN) -s $(BINDIR)/$${fn} $${fn} ;\
142		done ;\
143	fi
144	-if test "x$(LIPO_32BIT_FLAGS)" != "x"; then \
145		cd "$(DESTDIR)$(FRAMEWORKUNIXTOOLSPREFIX)/bin" && \
146		for fn in \
147				python$(VERSION)-32 \
148				; \
149		do \
150			rm -f $${fn} ;\
151			$(LN) -s $(BINDIR)/$${fn} $${fn} ;\
152		done ;\
153	fi
154	-if test "x$(LIPO_INTEL64_FLAGS)" != "x"; then \
155		cd "$(DESTDIR)$(FRAMEWORKUNIXTOOLSPREFIX)/bin" && \
156		for fn in \
157				python$(VERSION)-intel64 \
158				; \
159		do \
160			rm -f $${fn} ;\
161			$(LN) -s $(BINDIR)/$${fn} $${fn} ;\
162		done ;\
163	fi
164	-if test "x$(ENSUREPIP)" != "xno"  ; then \
165		cd "$(DESTDIR)$(FRAMEWORKUNIXTOOLSPREFIX)/bin" && \
166		for fn in \
167				pip$(VERSION) \
168				; \
169		do \
170			rm -f $${fn} ;\
171			$(LN) -s $(BINDIR)/$${fn} $${fn} ;\
172		done ;\
173	fi
174
175pythonw: $(srcdir)/Tools/pythonw.c Makefile
176	$(CC) $(LDFLAGS) -DPYTHONFRAMEWORK='"$(PYTHONFRAMEWORK)"' -o $@ \
177		$(srcdir)/Tools/pythonw.c -I.. -I$(srcdir)/../Include \
178		../$(PYTHONFRAMEWORK).framework/Versions/$(VERSION)/$(PYTHONFRAMEWORK)
179
180install_PythonLauncher:
181	cd PythonLauncher && make install DESTDIR=$(DESTDIR)
182
183install_Python:
184	@for i in "$(PYTHONAPPSDIR)" "$(APPINSTALLDIR)" "$(APPINSTALLDIR)/Contents"; do \
185		if test ! -d "$(DESTDIR)$$i"; then \
186			echo "Creating directory $(DESTDIR)$$i"; \
187			$(INSTALL) -d -m $(DIRMODE) "$(DESTDIR)$$i"; \
188		fi;\
189	done
190	@for i in $(APPSUBDIRS); do \
191		if test ! -d "$(DESTDIR)$(APPINSTALLDIR)/Contents/$$i"; then \
192			echo "Creating directory $(DESTDIR)$(APPINSTALLDIR)/Contents/$$i"; \
193			$(INSTALL) -d -m $(DIRMODE) "$(DESTDIR)$(APPINSTALLDIR)/Contents/$$i"; \
194		else	true; \
195		fi; \
196	done
197	@for d in . $(APPSUBDIRS); \
198	do \
199		a=$(APPTEMPLATE)/$$d; \
200		if test ! -d $$a; then continue; else true; fi; \
201		b="$(DESTDIR)$(APPINSTALLDIR)/Contents/$$d"; \
202		for i in $$a/*; \
203		do \
204			case $$i in \
205			*CVS) ;; \
206			*.svn) ;; \
207			*.py[co]) ;; \
208			*.orig) ;; \
209			*~) ;; \
210			*idx) \
211				echo $(CPMAC) "$$i" $$b; \
212				$(CPMAC) "$$i" "$$b"; \
213				;; \
214			*) \
215				if test -d $$i; then continue; fi; \
216				if test -x $$i; then \
217				    echo $(INSTALL_SCRIPT) "$$i" "$$b"; \
218				    $(INSTALL_SCRIPT) "$$i" "$$b"; \
219				else \
220				    echo $(INSTALL_DATA) "$$i" "$$b"; \
221				    $(INSTALL_DATA) "$$i" "$$b"; \
222				fi;; \
223			esac; \
224		done; \
225	done
226	$(INSTALL_PROGRAM) $(STRIPFLAG) $(BUILDPYTHON) "$(DESTDIR)$(APPINSTALLDIR)/Contents/MacOS/$(PYTHONFRAMEWORK)"
227	sed -e "s!%bundleid%!$(PYTHONFRAMEWORKIDENTIFIER)!g" \
228		-e "s!%version%!`$(RUNSHARED) $(BUILDPYTHON) \
229		-c 'import platform; print(platform.python_version())'`!g" \
230		< "$(DESTDIR)$(APPINSTALLDIR)/Contents/Info.plist.in" \
231		> "$(DESTDIR)$(APPINSTALLDIR)/Contents/Info.plist"
232	rm "$(DESTDIR)$(APPINSTALLDIR)/Contents/Info.plist.in"
233
234
235install_IDLE:
236	test -d "$(DESTDIR)$(PYTHONAPPSDIR)" || mkdir -p "$(DESTDIR)$(PYTHONAPPSDIR)"
237	-test -d "$(DESTDIR)$(PYTHONAPPSDIR)/IDLE.app" && rm -rf "$(DESTDIR)$(PYTHONAPPSDIR)/IDLE.app"
238	/bin/cp -PR "$(srcdir)/IDLE/IDLE.app" "$(DESTDIR)$(PYTHONAPPSDIR)"
239	ln -sf "$(INSTALLED_PYTHONAPP)" "$(DESTDIR)$(PYTHONAPPSDIR)/IDLE.app/Contents/MacOS/Python"
240	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"
241	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"
242	if [ -f "$(DESTDIR)$(LIBDEST)/idlelib/config-main.def" ]; then \
243		/bin/cp -p "$(DESTDIR)$(LIBDEST)/idlelib/config-main.def" \
244			"$(DESTDIR)$(LIBDEST)/idlelib/config-main.def~" ; \
245		sed -e 's!name= IDLE Classic Windows!name= IDLE Classic OSX!g' \
246			< "$(DESTDIR)$(LIBDEST)/idlelib/config-main.def~" \
247			> "$(DESTDIR)$(LIBDEST)/idlelib/config-main.def" ; \
248		rm "$(DESTDIR)$(LIBDEST)/idlelib/config-main.def~" ; \
249	fi
250	if [ -f "$(DESTDIR)$(LIBDEST)/idlelib/config-extensions.def" ]; then \
251		/bin/cp -p "$(DESTDIR)$(LIBDEST)/idlelib/config-extensions.def" \
252			"$(DESTDIR)$(LIBDEST)/idlelib/config-extensions.def~" ; \
253		sed -e 's!zoom-height=<Alt-Key-2>!zoom-height=<Option-Key-0>!g' \
254			-e 's!<Alt-Key-!<Option-Key-!g' \
255			< "$(DESTDIR)$(LIBDEST)/idlelib/config-extensions.def~" \
256			> "$(DESTDIR)$(LIBDEST)/idlelib/config-extensions.def" ; \
257		rm "$(DESTDIR)$(LIBDEST)/idlelib/config-extensions.def~" ; \
258	fi
259	touch "$(DESTDIR)$(PYTHONAPPSDIR)/IDLE.app"
260	chmod -R ugo+rX,go-w "$(DESTDIR)$(PYTHONAPPSDIR)/IDLE.app"
261	chmod ugo+x "$(DESTDIR)$(PYTHONAPPSDIR)/IDLE.app/Contents/MacOS/IDLE"
262
263$(INSTALLED_PYTHONAPP): install_Python
264
265installextras: $(srcdir)/Extras.install.py
266	$(INSTALL) -d "$(DESTDIR)$(prefix)/share/doc/python$(VERSION)/examples"
267	$(RUNSHARED) $(BUILDPYTHON) $(srcdir)/Extras.install.py $(srcdir)/../Tools \
268		"$(DESTDIR)$(prefix)/share/doc/python$(VERSION)/examples/Tools" ; \
269		chmod -R ugo+rX,go-w "$(DESTDIR)$(prefix)/share/doc/python$(VERSION)/examples/Tools"
270
271clean:
272	rm pythonw
273	cd PythonLauncher && make clean
274
275Makefile: $(srcdir)/Makefile.in ../config.status
276	cd .. && CONFIG_FILES=Mac/Makefile CONFIG_HEADERS= $(SHELL) ./config.status
277