1##---------------------------------------------------------------------
2# GNUmakefile for perl
3# Call Makefile to do the work, but for the install case, unpack the
4# tarball to create the project source directory
5##---------------------------------------------------------------------
6PROJECT = perl
7VERSION = 5.16.3
8COMPATVERSIONS =
9MODSUFFIX = -mod
10#TARVERSION :=
11
12PWD = $(shell pwd)
13ifndef DSTROOT
14ifdef DESTDIR
15export DSTROOT = $(shell mkdir -p '$(DESTDIR)' && echo '$(DESTDIR)')
16else
17export DSTROOT = /
18endif
19endif
20ifndef OBJROOT
21export OBJROOT = $(shell mkdir -p '$(PWD)/OBJROOT' && echo '$(PWD)/OBJROOT')
22endif
23ifndef SRCROOT
24export SRCROOT = $(PWD)
25endif
26ifndef SYMROOT
27export SYMROOT = $(shell mkdir -p '$(PWD)/SYMROOT' && echo '$(PWD)/SYMROOT')
28endif
29ifndef RC_ARCHS
30export RC_ARCHS = $(shell arch)
31export RC_$(RC_ARCHS) = YES
32endif
33ifndef RC_CFLAGS
34export RC_CFLAGS = $(foreach A,$(RC_ARCHS),-arch $(A)) $(RC_NONARCH_CFLAGS)
35endif
36ifndef RC_NONARCH_CFLAGS
37export RC_NONARCH_CFLAGS = -pipe
38endif
39ifndef RC_ProjectName
40export RC_ProjectName = $(PROJECT)
41endif
42export ENV_PERL := /System/Library/Perl
43export ENV_PERL_ARCHNAME := darwin-thread-multi-2level
44export ENV_PERL_BASE_VERSION := $(basename $(VERSION))
45export ENV_PERL_VERSION := $(VERSION)
46
47FIX = fix
48ifdef TARVERSION
49PROJVERS = $(PROJECT)-$(TARVERSION)
50else
51PROJVERS = $(PROJECT)-$(VERSION)
52endif
53ifeq ($(MAKECMDGOALS),custominstallsrc)
54TARBALLPATTERN := $(PROJVERS).tar.*
55RETARBALL = $(subst .tar.,$(MODSUFFIX).tar.,$(TARBALL))
56else
57TARBALLPATTERN := $(PROJVERS)$(MODSUFFIX).tar.*
58endif
59TARBALL := $(shell cd '$(SRCROOT)' && ls $(TARBALLPATTERN))
60ifeq "$(suffix $(TARBALL))" ".bz2"
61TARARGS := xojf
62ifeq ($(MAKECMDGOALS),custominstallsrc)
63RETARARGS := cjf
64endif
65else
66TARARGS := xozf
67ifeq ($(MAKECMDGOALS),custominstallsrc)
68RETARARGS := czf
69endif
70endif
71
72ARCHLIB = $(ENV_PERL)/$(ENV_PERL_BASE_VERSION)/$(ENV_PERL_ARCHNAME)
73EXTRAS = $(ENV_PERL)/Extras
74EXTRASARCH = $(EXTRASLIB)/$(ENV_PERL_ARCHNAME)
75EXTRASLIB = $(EXTRAS)/$(ENV_PERL_BASE_VERSION)
76LIBRARYPERL = /Library/Perl/$(ENV_PERL_BASE_VERSION)
77APPENDFILE = AppendToPath
78PREPENDFILE = PrependToPath
79NONLP = No_Network_Library_Perl
80PRIVLIB = $(ENV_PERL)/$(ENV_PERL_BASE_VERSION)
81
82UPDATES := /Library/Perl/Updates
83UPDATESARCH := $(UPDATES)/$(ENV_PERL_VERSION)/$(ENV_PERL_ARCHNAME)
84UPDATESLIB := $(UPDATES)/$(ENV_PERL_VERSION)
85
86no_target: $(OBJROOT)/$(PROJECT) build
87
88build:
89	$(MAKE) -C '$(OBJROOT)' -f Makefile SRCROOT='$(OBJROOT)' \
90		OBJROOT='$(OBJROOT)/$(PROJECT)' DSTROOT='$(DSTROOT)' \
91		SYMROOT='$(SYMROOT)' RC_ARCHS='$(RC_ARCHS)' \
92		PREPENDFILE='$(PREPENDFILE)' APPENDFILE='$(APPENDFILE)' \
93		NONLP='$(NONLP)' \
94		EXTRASLIB='$(EXTRASLIB)' EXTRASARCH='$(EXTRASARCH)' \
95		UPDATESLIB='$(UPDATESLIB)' UPDATESARCH='$(UPDATESARCH)' \
96		DESTDIR=$(DSTROOT)
97
98OSV = /usr/local/OpenSourceVersions
99OSL = /usr/local/OpenSourceLicenses
100
101install: $(OBJROOT)/$(PROJECT) installperl installperlupdates installstrip fixupperl installopensource
102
103ifeq ($(MAKECMDGOALS),install)
104PLIST = $(OSV)/$(PROJECT).plist
105PROJECTS := $(shell $(MAKE) -f '$(OBJROOT)/updates/Makefile' projects)
106installopensource:
107	install -d $(DSTROOT)$(OSV)
108ifeq ($(words $(PROJECTS)),0)
109	install -m 0644 $(SRCROOT)/$(PROJECT).plist $(DSTROOT)$(OSV)
110else
111	echo '<plist version="1.0">' > $(DSTROOT)$(PLIST)
112	echo '<array>' >> $(DSTROOT)$(PLIST)
113	sed -e '/^<\/*plist/d' -e 's/^/	/' $(SRCROOT)/$(PROJECT).plist >> $(DSTROOT)$(PLIST)
114	@set -x && \
115	for p in $(PROJECTS); do \
116	    sed -e 's/^/	/' $(SRCROOT)/updates/Modules/$$p/oss.partial >> $(DSTROOT)$(PLIST) || exit 1; \
117	done
118	echo '</array>' >> $(DSTROOT)$(PLIST)
119	echo '</plist>' >> $(DSTROOT)$(PLIST)
120	chmod 0644 $(DSTROOT)$(PLIST)
121endif
122	install -d $(DSTROOT)$(OSL)
123	install -m 0644 $(OBJROOT)/$(PROJECT)/Artistic $(DSTROOT)$(OSL)/perl.txt
124endif
125
126ifneq "$(RC_XBS)" "YES"
127MOREARGS += GnuNoBuild=YES
128endif
129ifneq "$(shell id -u)" "0"
130MOREARGS += GnuNoChown=YES
131endif
132installperl::
133	$(MAKE) -C '$(OBJROOT)' -f Makefile install SRCROOT='$(OBJROOT)' \
134		OBJROOT='$(OBJROOT)/$(PROJECT)' DSTROOT='$(DSTROOT)' \
135		SYMROOT='$(SYMROOT)' RC_ARCHS='$(RC_ARCHS)' \
136		PREPENDFILE='$(PREPENDFILE)' APPENDFILE='$(APPENDFILE)' \
137		NONLP='$(NONLP)' \
138		EXTRASLIB='$(EXTRASLIB)' EXTRASARCH='$(EXTRASARCH)' \
139		UPDATESLIB='$(UPDATESLIB)' UPDATESARCH='$(UPDATESARCH)' \
140		DESTDIR=$(DSTROOT) $(MOREARGS)
141	sed -e 's/@ARCHFLAGS@/$(ARCHFLAGS)/g' \
142	    -e 's,@ARCHLIB@,$(ARCHLIB),g' \
143	    -e 's,@EXTRASARCH@,$(EXTRASARCH),g' \
144	    -e 's,@EXTRASLIB@,$(EXTRASLIB),g' \
145	    -e 's,@PRIVLIB@,$(PRIVLIB),g' \
146	    -e 's,@UPDATESARCH@,$(UPDATESARCH),g' \
147	    -e 's,@UPDATESLIB@,$(UPDATESLIB),g' \
148	    '$(SRCROOT)/fix/Config_heavy.pl.ex' \
149	| ex - '$(OBJROOT)/$(PROJECT)/lib/Config_heavy.pl'
150	sed -e 's/@ARCHFLAGS@/$(ARCHFLAGS)/g' \
151	    -e 's,@ARCHLIB@,$(ARCHLIB),g' \
152	    -e 's,@EXTRASARCH@,$(EXTRASARCH),g' \
153	    -e 's,@EXTRASLIB@,$(EXTRASLIB),g' \
154	    -e 's,@PRIVLIB@,$(PRIVLIB),g' \
155	    -e 's,@UPDATESARCH@,$(UPDATESARCH),g' \
156	    -e 's,@UPDATESLIB@,$(UPDATESLIB),g' \
157	    '$(SRCROOT)/fix/Config_heavy.pl.ex' \
158	| ex - '$(DSTROOT)/$(ENV_PERL)/$(ENV_PERL_BASE_VERSION)/$(ENV_PERL_ARCHNAME)/Config_heavy.pl'
159	install -d '$(DSTROOT)$(ENV_UPDATESLIB)'
160	cp $(UPDATES_README) $(DSTROOT)$(ENV_UPDATESLIB)/ReadMe.txt
161
162installperlupdates:
163	DYLD_LIBRARY_PATH='$(DSTROOT)$(ARCHLIB)/CORE' \
164	    PATH='$(DSTROOT)/usr/bin:$(PATH)' PERL5LIB='$(DSTROOT)$(PRIVLIB)' \
165	    $(MAKE) -C '$(OBJROOT)/updates' install \
166	    OBJROOT='$(OBJROOT)/updates' DSTROOT='$(DSTROOT)' \
167	    SYMROOT='$(SYMROOT)' RC_ARCHS='$(RC_ARCHS)'
168
169DSYMUTIL := $(shell xcrun -find dsymutil)
170installstrip:
171	@set -x && \
172	cd $(DSTROOT) && \
173	find . -type f | xargs file | fgrep 'Mach-O' | grep -v '):[ 	]' | sed -e 's/: .*//' -e 's,^\./,,' > $(SYMROOT)/strip.list && \
174	cpio -pdmv $(SYMROOT) < $(SYMROOT)/strip.list && \
175	strip -x `cat $(SYMROOT)/strip.list`
176	@set -x && \
177	cd $(SYMROOT) && \
178	for i in `cat strip.list`; do \
179	    $(DSYMUTIL) $$i || exit 1; \
180	done
181
182##---------------------------------------------------------------------
183# 12591670: The workaround a case-sensitivity verification problem, we
184# move the (capital) Version subdirectory into the darwin-thread-multi-2level
185# directory.
186##---------------------------------------------------------------------
187fixupperl:
188	install -d '$(DSTROOT)$(LIBRARYPERL)'
189	echo '$(EXTRASLIB)' > '$(DSTROOT)$(LIBRARYPERL)/$(APPENDFILE)'
190	@set -x && for i in $(COMPATVERSIONS); do \
191		echo /Library/Perl/$$i >> '$(DSTROOT)$(LIBRARYPERL)/$(APPENDFILE)'; \
192	done
193	touch '$(DSTROOT)$(LIBRARYPERL)/$(NONLP)'
194	mv '$(DSTROOT)$(PRIVLIB)/Version' '$(DSTROOT)$(ARCHLIB)'
195
196##---------------------------------------------------------------------
197# 6476113: doio.c.ed and perlio.c.ed are used to fix this bug, which should
198# hopefully be fixed in a future version of perl.
199##---------------------------------------------------------------------
200$(OBJROOT)/$(PROJECT)::
201	@set -x && \
202	cd '$(OBJROOT)' && \
203	gnutar $(TARARGS) '$(TARBALL)' && \
204	rm -rf $(PROJECT) && \
205	mv $(PROJVERS) $(PROJECT) && \
206	cat hints.append >> $(PROJECT)/hints/darwin.sh && \
207	ed - $(PROJECT)/Configure < fix/Configure.ed && \
208	ed - $(PROJECT)/cpan/Compress-Raw-Bzip2/Makefile.PL < fix/cpan_Compress-Raw-Bzip2_Makefile.PL.ed && \
209	ed - $(PROJECT)/cpan/Compress-Raw-Zlib/Makefile.PL < fix/cpan_Compress-Raw-Zlib_Makefile.PL.ed && \
210	ed - $(PROJECT)/cpan/DB_File/config.in < fix/cpan_DB_File_config.in.ed && \
211	ed - $(PROJECT)/cpan/DB_File/Makefile.PL < fix/cpan_DB_File_Makefile.PL.ed && \
212	ed - $(PROJECT)/cpan/Pod-Perldoc/lib/Pod/Perldoc.pm < fix/lib_Pod_Perldoc.pm.ed && \
213	ed - $(PROJECT)/cpan/Pod-Perldoc/lib/Pod/Perldoc/ToMan.pm < fix/lib_Pod_Perldoc_ToMan.pm.ed && \
214	ed - $(PROJECT)/doio.c < fix/doio.c.ed && \
215	ed - $(PROJECT)/ext/DynaLoader/dl_dlopen.xs < fix/dl_dlopen.xs.ed && \
216	ed - $(PROJECT)/handy.h < fix/handy.h.ed && \
217	ed - $(PROJECT)/hints/darwin.sh < fix/darwin.sh.ed && \
218	ed - $(PROJECT)/patchlevel.h < fix/patchlevel.h.ed && \
219	ed - $(PROJECT)/perl.c < fix/perl.c.ed && \
220	ed - $(PROJECT)/perl.h < fix/perl.h.ed && \
221	ed - $(PROJECT)/perlio.c < fix/perlio.c.ed && \
222	ed - $(PROJECT)/pp_sys.c < fix/pp_sys.c.ed && \
223	sed -e 's/@VERSION@/$(VERSION)/g' \
224	    -e 's/@VERSION_DEFAULT@/$(ENV_PERL_BASE_VERSION)/g' \
225	    -e 's/@VERSION_ALT@/$(ENV_VERSION_ALT)/g' \
226	    fix/README.macosx.ed | ed - $(PROJECT)/README.macosx
227
228ifneq "$(RC_XBS)" "YES"
229clean:
230	rm -rf $(OBJROOT) $(SYMROOT)
231endif
232
233##---------------------------------------------------------------------
234# perly.h is generated with a GPL3+special-exception license.  So we unpack
235# the tarball, run "perl regen_perly.pl" to regenerate perly.h (with
236# GPL2+special-exception license from bison 2.3), and repack.
237##---------------------------------------------------------------------
238custominstallsrc:
239	gnutar $(TARARGS) '$(TARBALL)'
240	(cd $(PROJVERS) && perl regen_perly.pl)
241	gnutar $(RETARARGS) '$(RETARBALL)' $(PROJVERS)
242	rm -rf $(PROJVERS) '$(TARBALL)'
243
244GNUmakefile_inc := $(TOPSRCROOT)/Platforms/$(RC_TARGET_CONFIG)/$(ENV_PERL_BASE_VERSION)/GNUmakefile.inc
245ifneq ($(wildcard $(GNUmakefile_inc)),)
246include $(GNUmakefile_inc)
247endif
248
249.DEFAULT:
250	@$(MAKE) -f Makefile $@
251