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