1##---------------------------------------------------------------------
2# Makefile for pyobjc (supporting multiple versions)
3##---------------------------------------------------------------------
4Project = pyobjc
5PYTHONPROJECT = python
6MYFIX = $(SRCROOT)/fix
7VERSIONERDIR = /usr/local/versioner
8PYTHONVERSIONS = $(VERSIONERDIR)/$(PYTHONPROJECT)/versions
9INCOMPATIBLE = 3.0
10DEFAULT := $(shell sed -n '/^DEFAULT = /s///p' $(PYTHONVERSIONS))
11KNOWNVERSIONS := $(filter-out $(INCOMPATIBLE), $(shell grep '^[0-9]' $(PYTHONVERSIONS)))
12VERSIONS = $(sort $(KNOWNVERSIONS))
13ORDEREDVERS := $(DEFAULT) $(filter-out $(DEFAULT),$(VERSIONS))
14VERSIONERFLAGS = -std=gnu99 -Wall -mdynamic-no-pic -I$(VERSIONERDIR)/$(PYTHONPROJECT) -I$(MYFIX) -framework CoreFoundation
15OSV = OpenSourceVersions
16OSL = OpenSourceLicenses
17
18FIX = $(VERSIONERDIR)/$(PYTHONPROJECT)/fix
19TESTOK := -f $(shell echo $(foreach vers,$(VERSIONS),$(OBJROOT)/$(vers)/.ok) | sed 's/ / -a -f /g')
20
21installsrc:
22	@echo "*** pyobjc installsrc ***"
23	$(MAKE) -f Makefile installsrc Project=$(Project)
24	for vers in $(VERSIONS); do \
25	    [ ! -d $$vers ] || $(MAKE) -C $$vers -f Makefile installsrc Project=$(Project) SRCROOT="$(SRCROOT)/$$vers" || exit 1; \
26	done
27
28include $(MAKEFILEPATH)/CoreOS/ReleaseControl/Common.make
29
30build::
31	$(MKDIR) $(OBJROOT)/$(OSL)
32	$(MKDIR) $(OBJROOT)/$(OSV)
33	@set -x && \
34	for vers in $(VERSIONS); do \
35	    Copt= && \
36	    srcroot='$(SRCROOT)' && \
37	    if [ -d $$vers ]; then \
38		srcroot="$(SRCROOT)/$$vers"; \
39		Copt="-C $$vers"; \
40	    fi && \
41	    mkdir -p "$(SYMROOT)/$$vers" && \
42	    mkdir -p "$(OBJROOT)/$$vers/DSTROOT" || exit 1; \
43	    (echo "######## Building $$vers:" `date` '########' > "$(SYMROOT)/$$vers/LOG" 2>&1 && \
44		VERSIONER_PYTHON_VERSION=$$vers \
45		$(MAKE) $$Copt -f Makefile install Project=$(Project) \
46		SRCROOT="$$srcroot" \
47		OBJROOT="$(OBJROOT)/$$vers" \
48		DSTROOT="$(OBJROOT)/$$vers/DSTROOT" \
49		SYMROOT="$(SYMROOT)/$$vers" \
50		OSL='$(OBJROOT)/$(OSL)' OSV='$(OBJROOT)/$(OSV)' \
51		RC_ARCHS='$(RC_ARCHS) -g' >> "$(SYMROOT)/$$vers/LOG" 2>&1 && \
52		touch "$(OBJROOT)/$$vers/.ok" && \
53		echo "######## Finished $$vers:" `date` '########' >> "$(SYMROOT)/$$vers/LOG" 2>&1 \
54	    ) & \
55	done && \
56	wait && \
57	for vers in $(VERSIONS); do \
58	    cat $(SYMROOT)/$$vers/LOG && \
59	    rm -f $(SYMROOT)/$$vers/LOG || exit 1; \
60	done && \
61	if [ $(TESTOK) ]; then \
62	    $(MAKE) merge; \
63	else \
64	    echo '#### error detected, not merging'; \
65	    exit 1; \
66	fi
67	$(MKDIR) $(DSTROOT)/usr/local/$(OSL)
68	@set -x && \
69	cd $(OBJROOT)/$(OSL) && \
70	for i in *; do \
71	    echo '##########' `basename $$i` '##########' && \
72	    cat $$i || exit 1; \
73	done > $(DSTROOT)/usr/local/$(OSL)/$(Project).txt
74	$(MKDIR) $(DSTROOT)/usr/local/$(OSV)
75	(cd $(OBJROOT)/$(OSV) && \
76	echo '<plist version="1.0">' && \
77	echo '<array>' && \
78	cat * && \
79	echo '</array>' && \
80	echo '</plist>') > $(DSTROOT)/usr/local/$(OSV)/$(Project).plist
81
82#merge: mergebegin mergedefault mergeversions mergebin mergeman
83merge: mergebegin mergedefault mergeversions rmempty
84
85mergebegin:
86	@echo '####### Merging #######'
87
88#mergebin:
89#	@set -x && \
90#	for vers in $(ORDEREDVERS); do \
91#	    cd $(DSTROOT)/System/Library/Frameworks/Python.framework/Versions/$$vers/Extras/bin && \
92#	    for f in *; do \
93#		sed -e '/^1a/,/^\./d' -e "s/@VERSION@/$$vers/g" $(FIX)/scriptvers.ed | ed - $$f || exit 1; \
94#	    done || exit 1; \
95#	done
96
97PYFRAMEWORK = /System/Library/Frameworks/Python.framework
98PYFRAMEWORKDOCUMENTATION = $(PYFRAMEWORK)/Documentation
99PYFRAMEWORKEXAMPLES = $(PYFRAMEWORK)/Examples
100mergedefault:
101	install -d $(DSTROOT)$(PYFRAMEWORKDOCUMENTATION) $(DSTROOT)$(PYFRAMEWORKEXAMPLES)
102	ditto $(OBJROOT)/$(DEFAULT)/DSTROOT/Developer/Documentation/Python $(DSTROOT)$(PYFRAMEWORKDOCUMENTATION)
103	ditto $(OBJROOT)/$(DEFAULT)/DSTROOT/Developer/Examples/Python $(DSTROOT)$(PYFRAMEWORKEXAMPLES)
104	find $(DSTROOT)$(PYFRAMEWORKDOCUMENTATION) -size 0 -delete
105
106#MYVERSIONMANLIST = $(OBJROOT)/usr-share-man.list
107#VERSIONMANLIST = $(VERSIONERDIR)/$(PYTHONPROJECT)/usr-share-man.list
108#MERGEMAN = /usr/share/man
109#mergeman:
110#	@set -x && \
111#	for vers in $(ORDEREDVERS); do \
112#	    cd $(OBJROOT)/$$vers/DSTROOT$(MERGEMAN) && \
113#	    for d in man*; do \
114#		cd $$d && \
115#		for f in *.gz; do \
116#		    ff=`echo $$f | sed "s/\.[^.]*\.gz/$$vers&/"` && \
117#		    ditto $$f $(DSTROOT)$(MERGEMAN)/$$d/$$ff && \
118#		    if [ ! -e $(DSTROOT)$(MERGEMAN)/$$d/$$f ]; then \
119#			ln -fs $$ff $(DSTROOT)$(MERGEMAN)/$$d/$$f; \
120#		    fi || exit 1; \
121#		done && \
122#		cd .. || exit 1; \
123#	    done || exit 1; \
124#	done
125#	cd $(DSTROOT)$(MERGEMAN) && \
126#	find . ! -type d | sed 's,^\./,,' | sort > $(MYVERSIONMANLIST) && \
127#	rm -fv `comm -12 $(VERSIONMANLIST) $(MYVERSIONMANLIST)`
128
129MERGEVERSIONS = \
130    System
131mergeversions:
132	@set -x && \
133	for vers in $(VERSIONS); do \
134	    cd $(OBJROOT)/$$vers/DSTROOT && \
135	    rsync -Ra $(MERGEVERSIONS) $(DSTROOT) || exit 1; \
136	done
137
138# remove empty files (specific to pyobjc-2.3)
139EMPTY = /Developer/Documentation/Python/PyObjC/10PyObjCTools.txt
140rmempty:
141	@set -x && \
142	for empty in $(EMPTY); do \
143	    rm -f $(DSTROOT)$$empty || exit 1; \
144	done
145