-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathGNUmakefile
149 lines (137 loc) · 5.47 KB
/
GNUmakefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
##---------------------------------------------------------------------
# Makefile for python_modules (supporting multiple versions)
##---------------------------------------------------------------------
Project = python_modules
PYTHONPROJECT = python
MYFIX = $(SRCROOT)/fix
_VERSIONERDIR := /usr/local/versioner
# Look for /usr/local/versioner in $(SDKROOT), defaulting to /usr/local/versioner
VERSIONERDIR := $(or $(wildcard $(SDKROOT)$(_VERSIONERDIR)),$(_VERSIONERDIR))
PYTHONVERSIONS = $(VERSIONERDIR)/$(PYTHONPROJECT)/versions
INCOMPATIBLE = 2.6
DEFAULT := $(shell sed -n '/^DEFAULT = /s///p' $(PYTHONVERSIONS))
KNOWNVERSIONS := $(filter-out $(INCOMPATIBLE), $(shell grep '^[0-9]' $(PYTHONVERSIONS)))
BOOTSTRAPPYTHON =
VERSIONS = $(sort $(KNOWNVERSIONS) $(BOOTSTRAPPYTHON))
OTHERVERSIONS = $(filter-out $(DEFAULT),$(VERSIONS))
ORDEREDVERS := $(DEFAULT) $(OTHERVERSIONS)
VERSIONERFLAGS = -std=gnu99 -Wall -mdynamic-no-pic -I$(VERSIONERDIR)/$(PYTHONPROJECT) -I$(MYFIX) -framework CoreFoundation
OSV = OpenSourceVersions
OSL = OpenSourceLicenses
FIX = $(VERSIONERDIR)/$(PYTHONPROJECT)/fix
TESTOK := -f $(shell echo $(foreach vers,$(VERSIONS),$(OBJROOT)/$(vers)/.ok) | sed 's/ / -a -f /g')
TMPPREFIX = $(OBJROOT)/Root
include $(MAKEFILEPATH)/CoreOS/ReleaseControl/Common.make
installsrc: afterinstallsrc
afterinstallsrc:
for i in $(SRCROOT)/Modules/*; do \
[ ! -d $$i ] || $(MAKE) -C $$i afterinstallsrc Project=$(Project) || exit 1; \
done
$(MAKE) -C $(SRCROOT)/tmpprefix afterinstallsrc
build::
$(MKDIR) $(OBJROOT)/$(OSL)
$(MKDIR) $(OBJROOT)/$(OSV)
$(MAKE) -C tmpprefix \
OSL='$(OBJROOT)/$(OSL)' OSV='$(OBJROOT)/$(OSV)' \
TMPPREFIX='$(TMPPREFIX)'
@set -x && \
for vers in $(VERSIONS); do \
mkdir -p "$(SYMROOT)/$$vers" && \
mkdir -p "$(OBJROOT)/$$vers/DSTROOT" || exit 1; \
(echo "######## Building $$vers:" `date` '########' > "$(SYMROOT)/$$vers/LOG" 2>&1 && \
PATH="$(TMPPREFIX)/bin:$$PATH" \
VERSIONER_PYTHON_VERSION=$$vers \
$(MAKE) -f Makefile install Project=$(Project) \
OBJROOT="$(OBJROOT)/$$vers" \
DSTROOT="$(OBJROOT)/$$vers/DSTROOT" \
SYMROOT="$(SYMROOT)/$$vers" \
OSL='$(OBJROOT)/$(OSL)' OSV='$(OBJROOT)/$(OSV)' \
TMPPREFIX='$(TMPPREFIX)' \
RC_ARCHS='$(RC_ARCHS)' >> "$(SYMROOT)/$$vers/LOG" 2>&1 && \
touch "$(OBJROOT)/$$vers/.ok" && \
echo "######## Finished $$vers:" `date` '########' >> "$(SYMROOT)/$$vers/LOG" 2>&1 \
) & \
done && \
wait && \
for vers in $(VERSIONS); do \
cat $(SYMROOT)/$$vers/LOG && \
rm -f $(SYMROOT)/$$vers/LOG || exit 1; \
done && \
if [ $(TESTOK) ]; then \
$(MAKE) merge; \
else \
echo '#### error detected, not merging'; \
exit 1; \
fi
$(MKDIR) $(DSTROOT)/usr/local/$(OSL)
@set -x && \
cd $(OBJROOT)/$(OSL) && \
for i in *; do \
echo '##########' `basename $$i` '##########' && \
cat $$i || exit 1; \
done > $(DSTROOT)/usr/local/$(OSL)/$(Project).txt
$(MKDIR) $(DSTROOT)/usr/local/$(OSV)
(cd $(OBJROOT)/$(OSV) && \
echo '<plist version="1.0">' && \
echo '<array>' && \
cat * && \
echo '</array>' && \
echo '</plist>') > $(DSTROOT)/usr/local/$(OSV)/$(Project).plist
#merge: mergebegin mergedefault mergeversions mergebin mergeman
merge: mergebegin mergeversions mergebin mergeman
mergebegin:
@echo ####### Merging #######
MERGEBIN = /usr/bin
# This causes us to replace the versioner stub with the default version of perl.
# Since we are now only shipping one version (5.18) and one slice (x86_64), there
# is no need for the re-exec stub. We are leaving the infrastructure in place
# in case we ever ship a new version or a new architecture in the future.
ifeq ($(OTHERVERSIONS),)
mergebin:
mkdir -p $(DSTROOT)$(MERGEBIN)
cd $(OBJROOT)/$(DEFAULT)/DSTROOT$(MERGEBIN) && \
for f in `find . -type f ! -name "*$(DEFAULT)*" | sed 's,^\./,,'`; do \
fv=$$f-$(DEFAULT) && \
ditto $$f $(DSTROOT)$(MERGEBIN)/$$fv && \
sed -e 's/@SEP@/-/g' -e "s/@VERSION@/$(DEFAULT)/g" $(FIX)/scriptvers.ed | ed - $(DSTROOT)$(MERGEBIN)/$$fv && \
if [ ! -e $(DSTROOT)$(MERGEBIN)/$$f ]; then \
ln $(DSTROOT)$(MERGEBIN)/$$fv $(DSTROOT)$(MERGEBIN)/$$f; \
fi || exit 1; \
done && \
cd $(DSTROOT)/System/Library/Frameworks/Python.framework/Versions/$(DEFAULT)/Extras/bin && \
for f in *; do \
sed -e '/^1a/,/^\./d' -e "s/@VERSION@/$(DEFAULT)/g" $(FIX)/scriptvers.ed | ed - $$f || exit 1; \
done
else
DUMMY = dummy.py
mergebin:
mkdir -p $(DSTROOT)$(MERGEBIN)
install $(FIX)/$(DUMMY) $(DSTROOT)$(MERGEBIN)
@set -x && \
for vers in $(ORDEREDVERS); do \
cd $(OBJROOT)/$$vers/DSTROOT$(MERGEBIN) && \
for f in `find . -type f ! -name "*$$vers*" | sed 's,^\./,,'`; do \
fv=$$f-$$vers && \
ditto $$f $(DSTROOT)$(MERGEBIN)/$$fv && \
sed -e 's/@SEP@/-/g' -e "s/@VERSION@/$$vers/g" $(FIX)/scriptvers.ed | ed - $(DSTROOT)$(MERGEBIN)/$$fv && \
if [ ! -e $(DSTROOT)$(MERGEBIN)/$$f ]; then \
ln -f $(DSTROOT)$(MERGEBIN)/$(DUMMY) $(DSTROOT)$(MERGEBIN)/$$f; \
fi || exit 1; \
done && \
cd $(DSTROOT)/System/Library/Frameworks/Python.framework/Versions/$$vers/Extras/bin && \
for f in *; do \
sed -e '/^1a/,/^\./d' -e "s/@VERSION@/$$vers/g" $(FIX)/scriptvers.ed | ed - $$f || exit 1; \
done || exit 1; \
done
rm -f $(DSTROOT)$(MERGEBIN)/$(DUMMY)
endif
mergeversions:
@set -x && \
for vers in $(VERSIONS); do \
cd $(OBJROOT)/$$vers/DSTROOT && \
rsync -Ra System $(DSTROOT) || exit 1; \
rsync -Ra AppleInternal/Library/Python $(DSTROOT) || exit 1; \
done
MERGEMAN = usr/share/man
mergeman:
cd $(OBJROOT)/$(DEFAULT)/DSTROOT && rsync -Ra $(MERGEMAN) $(DSTROOT)