1##
2# Makefile for python
3##
4
5Project               = python
6Extra_Configure_Flags = --enable-ipv6 --with-threads --enable-framework=/System/Library/Frameworks --enable-toolbox-glue
7
8##---------------------------------------------------------------------
9# Extra_CC_Flags and Extra_LD_Flags are needed because CFLAGS gets overridden
10# by the RC_* variables.  These values would normally be set by the default
11# python Makefile
12#
13# Workaround for 3281234 (test_coercion failure due to non IEEE-754 in
14# optimizer): add -mno-fused-madd flag
15##---------------------------------------------------------------------
16Extra_CC_Flags += -fno-common -mno-fused-madd
17Extra_LD_Flags += -Wl,-F.
18Extra_Install_Flags   = DESTDIR=${DSTROOT}
19GnuAfterInstall       = fixup-after-install
20
21# It's a GNU Source project
22include $(MAKEFILEPATH)/CoreOS/ReleaseControl/GNUSource.make
23
24# Override compiler setting from GNUSource.make to use those set in GNUmakefile
25override CC = $(MY_CC)
26override CXX = $(MY_CXX)
27
28Install_Flags := $(shell echo $(Install_Flags) | sed 's/prefix=[^ ]* *//')
29Install_Target = frameworkinstallstructure libinstall libainstall sharedinstall oldsharedinstall
30FIX = $(SRCROOT)/fix
31
32##---------------------------------------------------------------------
33# Patch Makefiles and pyconfig.h just after running configure
34##---------------------------------------------------------------------
35ConfigStamp2 = $(ConfigStamp)2
36
37configure:: $(ConfigStamp2)
38
39$(ConfigStamp2): $(ConfigStamp)
40	$(_v) ed - ${OBJROOT}/Makefile < $(FIX)/Makefile.ed
41	$(_v) ed - ${OBJROOT}/pyconfig.h < $(FIX)/pyconfig.ed
42	$(_v) patch ${OBJROOT}/Lib/plat-mac/applesingle.py \
43		$(FIX)/applesingle.py.patch
44	$(_v) $(TOUCH) $(ConfigStamp2)
45
46##---------------------------------------------------------------------
47# Fixup a lot of problems after the install
48##---------------------------------------------------------------------
49FRAMEWORKS = /System/Library/Frameworks
50PYFRAMEWORK = $(FRAMEWORKS)/Python.framework
51VERSIONSVER = $(PYFRAMEWORK)/Versions/$(VERS)
52RESOURCESVERS = $(VERSIONSVER)/Resources
53LIBPYTHONVERS = $(VERSIONSVER)/lib/python$(VERS)
54RUNPYTHON = DYLD_FRAMEWORK_PATH=$(OBJROOT) $(OBJROOT)/python.exe
55BYTE2UTF16 = $(RUNPYTHON) $(FIX)/byte2utf16.py
56UTF162BYTE = $(RUNPYTHON) $(FIX)/utf162byte.py
57
58fixup-after-install: delete-stuff \
59		     strip-installed-files \
60		     fix-empty-file \
61		     fix-CFBundleIdentifier \
62		     fix-CFBundleShortVersionString \
63		     fix-paths \
64		     make-Library-Python \
65		     fix-permissions \
66		     fix-LINKFORSHARED
67
68delete-stuff:
69	rm -rf $(DSTROOT)/usr/local
70	rm -rf $(DSTROOT)$(PYFRAMEWORK)/Headers
71	rm -rf $(DSTROOT)$(PYFRAMEWORK)/Python
72	rm -rf $(DSTROOT)$(PYFRAMEWORK)/Resources
73	rm -rf $(DSTROOT)$(PYFRAMEWORK)/Versions/Current
74	rm -rf $(DSTROOT)$(VERSIONSVER)/Headers
75	rm -rf $(DSTROOT)$(VERSIONSVER)/bin
76
77strip-installed-files:
78	strip -x $(DSTROOT)$(VERSIONSVER)/Python
79	strip -x $(DSTROOT)$(LIBPYTHONVERS)/config/python.o
80	strip -x $(DSTROOT)$(LIBPYTHONVERS)/lib-dynload/*.so
81
82fix-empty-file:
83	echo '#' > $(DSTROOT)$(LIBPYTHONVERS)/bsddb/test/__init__.py
84	$(RUNPYTHON) $(OBJROOT)/Lib/py_compile.py $(DSTROOT)$(LIBPYTHONVERS)/bsddb/test/__init__.py
85	$(RUNPYTHON) -O $(OBJROOT)/Lib/py_compile.py $(DSTROOT)$(LIBPYTHONVERS)/bsddb/test/__init__.py
86
87fix-CFBundleIdentifier:
88	ed - $(DSTROOT)$(RESOURCESVERS)/Info.plist < $(FIX)/pfinfo.ed
89 
90fix-CFBundleShortVersionString:
91	@set -x && \
92	for s in `find $(DSTROOT)$(RESOURCESVERS) -name InfoPlist.strings`; do \
93	    $(UTF162BYTE) $$s $(OBJROOT)/temp.ip.strings && \
94	    ed - $(OBJROOT)/temp.ip.strings < $(FIX)/removeCFkeys.ed && \
95	    $(BYTE2UTF16) $(OBJROOT)/temp.ip.strings $$s; \
96	done
97
98##---------------------------------------------------------------------
99# adjustSLF.ed removes -arch xxx flags.
100##---------------------------------------------------------------------
101fix-paths:
102	ed - $(DSTROOT)$(LIBPYTHONVERS)/config/Makefile < $(FIX)/adjustSLF.ed
103
104# 4144521
105fix-LINKFORSHARED:
106	ed - $(DSTROOT)$(LIBPYTHONVERS)/config/Makefile < $(FIX)/LINKFORSHARED.ed
107
108LIBRARYPYTHON = /Library/Python
109LIBRARYPYTHONVERS = $(LIBRARYPYTHON)/$(VERS)
110ORIGSITEPACKAGES = $(LIBRARYPYTHONVERS)/site-packages
111SITEPACKAGES = $(LIBPYTHONVERS)/site-packages
112
113make-Library-Python:
114	install -d $(DSTROOT)$(LIBRARYPYTHONVERS)
115	mv -f $(DSTROOT)$(SITEPACKAGES) $(DSTROOT)$(LIBRARYPYTHONVERS)
116	ln -sf ../../../../../../../..$(ORIGSITEPACKAGES) $(DSTROOT)$(SITEPACKAGES)
117
118fix-permissions:
119	@set -x && for i in Library; do \
120	    chgrp -Rf admin $(DSTROOT)/$$i && \
121	    chmod -Rf g+w $(DSTROOT)/$$i; \
122	done
123