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