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))
11VERSIONS := $(filter-out $(INCOMPATIBLE), $(shell grep '^[0-9]' $(PYTHONVERSIONS)))
12ORDEREDVERS := $(DEFAULT) $(filter-out $(DEFAULT),$(VERSIONS))
13VERSIONERFLAGS = -std=gnu99 -Wall -mdynamic-no-pic -I$(VERSIONERDIR)/$(PYTHONPROJECT) -I$(MYFIX) -framework CoreFoundation
14
15RSYNC = rsync -rlpt
16PWD = $(shell pwd)
17ifndef DSTROOT
18ifdef DESTDIR
19export DSTROOT = $(shell mkdir -p '$(DESTDIR)' && echo '$(DESTDIR)')
20else
21export DSTROOT = /
22endif
23endif
24ifndef OBJROOT
25export OBJROOT = $(shell mkdir -p '$(PWD)/OBJROOT' && echo '$(PWD)/OBJROOT')
26RSYNC += --exclude=OBJROOT
27endif
28ifndef SRCROOT
29export SRCROOT = $(PWD)
30endif
31ifndef SYMROOT
32export SYMROOT = $(shell mkdir -p '$(PWD)/SYMROOT' && echo '$(PWD)/SYMROOT')
33RSYNC += --exclude=SYMROOT
34endif
35ifndef RC_ARCHS
36export RC_ARCHS = $(shell arch)
37export RC_$(RC_ARCHS) = YES
38endif
39ifndef RC_CFLAGS
40export RC_CFLAGS = $(foreach A,$(RC_ARCHS),-arch $(A)) $(RC_NONARCH_CFLAGS)
41endif
42ifndef RC_NONARCH_CFLAGS
43export RC_NONARCH_CFLAGS = -pipe
44endif
45ifndef RC_ProjectName
46export RC_ProjectName = $(Project)
47endif
48
49FIX = $(VERSIONERDIR)/$(PYTHONPROJECT)/fix
50TESTOK := -f $(shell echo $(foreach vers,$(VERSIONS),$(OBJROOT)/$(vers)/.ok) | sed 's/ / -a -f /g')
51
52installsrc:
53	echo GNU installsrc
54	$(MAKE) -f Makefile installsrc Project=$(Project)
55
56include $(MAKEFILEPATH)/CoreOS/ReleaseControl/Common.make
57
58build::
59	@set -x && \
60	for vers in $(VERSIONS); do \
61	    mkdir -p "$(SYMROOT)/$$vers" && \
62	    mkdir -p "$(OBJROOT)/$$vers/DSTROOT" || exit 1; \
63	    (echo "######## Building $$vers:" `date` '########' > "$(SYMROOT)/$$vers/LOG" 2>&1 && \
64		TOPSRCROOT='$(SRCROOT)' \
65		VERSIONER_PYTHON_VERSION=$$vers \
66		VERSIONER_PYTHON_PREFER_32_BIT=yes \
67		$(MAKE) -f Makefile install Project=$(Project) \
68		OBJROOT="$(OBJROOT)/$$vers" \
69		DSTROOT="$(OBJROOT)/$$vers/DSTROOT" \
70		SYMROOT="$(SYMROOT)/$$vers" \
71		RC_ARCHS='$(RC_ARCHS) -g' >> "$(SYMROOT)/$$vers/LOG" 2>&1 && \
72		touch "$(OBJROOT)/$$vers/.ok" && \
73		echo "######## Finished $$vers:" `date` '########' >> "$(SYMROOT)/$$vers/LOG" 2>&1 \
74	    ) & \
75	done && \
76	wait && \
77	for vers in $(VERSIONS); do \
78	    cat $(SYMROOT)/$$vers/LOG && \
79	    rm -f $(SYMROOT)/$$vers/LOG || exit 1; \
80	done && \
81	if [ $(TESTOK) ]; then \
82	    $(MAKE) merge; \
83	else \
84	    echo '#### error detected, not merging'; \
85	    exit 1; \
86	fi
87
88#merge: mergebegin mergedefault mergeversions mergebin mergeman
89merge: mergebegin mergedefault mergeversions
90
91mergebegin:
92	@echo '####### Merging #######'
93
94#mergebin:
95#	@set -x && \
96#	for vers in $(ORDEREDVERS); do \
97#	    cd $(DSTROOT)/System/Library/Frameworks/Python.framework/Versions/$$vers/Extras/bin && \
98#	    for f in *; do \
99#		sed -e '/^1a/,/^\./d' -e "s/@VERSION@/$$vers/g" $(FIX)/scriptvers.ed | ed - $$f || exit 1; \
100#	    done || exit 1; \
101#	done
102
103MERGEDEFAULT = \
104    Developer \
105    usr
106mergedefault:
107	cd $(OBJROOT)/$(DEFAULT)/DSTROOT && rsync -Ra $(MERGEDEFAULT) $(DSTROOT)
108
109#MYVERSIONMANLIST = $(OBJROOT)/usr-share-man.list
110#VERSIONMANLIST = $(VERSIONERDIR)/$(PYTHONPROJECT)/usr-share-man.list
111#MERGEMAN = /usr/share/man
112#mergeman:
113#	@set -x && \
114#	for vers in $(ORDEREDVERS); do \
115#	    cd $(OBJROOT)/$$vers/DSTROOT$(MERGEMAN) && \
116#	    for d in man*; do \
117#		cd $$d && \
118#		for f in *.gz; do \
119#		    ff=`echo $$f | sed "s/\.[^.]*\.gz/$$vers&/"` && \
120#		    ditto $$f $(DSTROOT)$(MERGEMAN)/$$d/$$ff && \
121#		    if [ ! -e $(DSTROOT)$(MERGEMAN)/$$d/$$f ]; then \
122#			ln -fs $$ff $(DSTROOT)$(MERGEMAN)/$$d/$$f; \
123#		    fi || exit 1; \
124#		done && \
125#		cd .. || exit 1; \
126#	    done || exit 1; \
127#	done
128#	cd $(DSTROOT)$(MERGEMAN) && \
129#	find . ! -type d | sed 's,^\./,,' | sort > $(MYVERSIONMANLIST) && \
130#	rm -fv `comm -12 $(VERSIONMANLIST) $(MYVERSIONMANLIST)`
131
132MERGEVERSIONS = \
133    System
134mergeversions:
135	@set -x && \
136	for vers in $(VERSIONS); do \
137	    cd $(OBJROOT)/$$vers/DSTROOT && \
138	    rsync -Ra $(MERGEVERSIONS) $(DSTROOT) || exit 1; \
139	done
140