X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/1a234f2b79fabe425b0df2ff182071f89486689a..cb251201d6951395845f27476706749c5c0e12f7:/Makefile.SH diff --git a/Makefile.SH b/Makefile.SH index 19257b0..207e8e2 100755 --- a/Makefile.SH +++ b/Makefile.SH @@ -1,3 +1,14 @@ +#!/bin/sh + +# quote() - Creates a shell literal +# Usage: echo "...` quote "..." `..." +quote() { + case "$1" in + '') echo "''" ;; + *) echo "$1" | sed 's/\([^a-zA-Z0-9.:_\-\/]\)/\\\1/g' ;; + esac +} + case $PERL_CONFIG_SH in '') if test -f config.sh @@ -26,6 +37,7 @@ case "$0" in */*) cd `expr X$0 : 'X\(.*\)/'` ;; esac +pwd="`pwd`" linklibperl='$(LIBPERL)' linklibperl_nonshr='' shrpldflags='$(LDDLFLAGS)' @@ -37,10 +49,8 @@ true) # Prefix all runs of 'miniperl' and 'perl' with # $ldlibpth so that ./perl finds *this* shared libperl. case "$LD_LIBRARY_PATH" in - '') - ldlibpth="LD_LIBRARY_PATH=`pwd`";; - *) - ldlibpth="LD_LIBRARY_PATH=`pwd`:${LD_LIBRARY_PATH}";; + '') ldlibpth="LD_LIBRARY_PATH=` quote "$pwd" `" ;; + *) ldlibpth="LD_LIBRARY_PATH=` quote "$pwd" `:` quote "$LD_LIBRARY_PATH" `" ;; esac pldlflags="$cccdlflags" @@ -52,7 +62,7 @@ true) -compatibility_version 1 -current_version $patchlevel \ -prebind -seg1addr 0x27000000 -install_name \$(shrpdir)/\$@" ;; - rhapsody*|darwin*) + darwin*) shrpldflags="${ldflags} -dynamiclib \ -compatibility_version \ ${api_revision}.${api_version}.${api_subversion} \ @@ -119,19 +129,19 @@ true) ldlibpth='' ;; *) - eval "ldlibpth=\"$ldlibpthname=`pwd`:\$$ldlibpthname\"" + eval "ldlibpthval=\"\$$ldlibpthname\"" + + case "$ldlibpthval" in + '') ldlibpth="$ldlibpthname=` quote "$pwd" `" ;; + *) ldlibpth="$ldlibpthname=` quote "$pwd" `:` quote "$ldlibpthval" `" ;; + esac + ;; esac - # Strip off any trailing :'s - ldlibpth=`echo $ldlibpth | sed 's/:*$//'` + ;; esac - case "$ldlibpth" in - # Protect any spaces - *" "*) ldlibpth=`echo $ldlibpth|sed 's/ /\\\\ /g'` ;; - esac - case "$osname" in linux) # If there is a pre-existing $libperl from a previous @@ -177,7 +187,9 @@ done : Prepare dependency lists for Makefile. dynamic_list=' ' dynamic_ext_re="lib/auto/re/re.$dlext" -extra_dep='' +extra_dep=' +ext/Pod-Functions/pm_to_blib: cpan/Pod-Simple/pm_to_blib cpan/Pod-Escapes/pm_to_blib pod/perlfunc.pod +' for f in $dynamic_ext; do : the dependency named here will never exist base=`echo "$f" | sed 's/.*\///'` @@ -294,7 +306,7 @@ RUN = $run # These variables may need to be manually set for non-Unix systems. AR = $full_ar -HOST_EXE_EXT = +HOST_EXE_EXT = $_exe EXE_EXT = $_exe LIB_EXT = $_a OBJ_EXT = $_o @@ -431,16 +443,27 @@ xconfig.h: config_h.SH Cross/config-\$(CROSS_NAME).sh ;; esac +SH_to_target() { + echo $@ | sed -e s/\\\.SH//g -e s/_/./g +} + +SH='Makefile.SH cflags.SH config_h.SH makedepend.SH myconfig.SH runtests.SH pod/Makefile.SH x2p/Makefile.SH' +shextract=`SH_to_target $SH` + ## In the following dollars and backticks do not need the extra backslash. -$spitshell >>$Makefile <<'!NO!SUBS!' +$spitshell >>$Makefile <>$Makefile <<'!NO!SUBS!' addedbyconf = UU $(shextract) pstruct @@ -454,11 +477,12 @@ unidatafiles = lib/unicore/Decomposition.pl lib/unicore/TestProp.pl \ unidatadirs = lib/unicore/To lib/unicore/lib h1 = EXTERN.h INTERN.h XSUB.h av.h $(CONFIGH) cop.h cv.h dosish.h -h2 = embed.h form.h gv.h handy.h hv.h keywords.h mg.h op.h opcode.h +h2 = embed.h form.h gv.h handy.h hv.h hv_func.h keywords.h mg.h op.h opcode.h h3 = pad.h patchlevel.h perl.h perlapi.h perly.h pp.h proto.h regcomp.h h4 = regexp.h scope.h sv.h unixish.h util.h iperlsys.h thread.h h5 = utf8.h warnings.h mydtrace.h op_reg_common.h l1_char_class_tab.h -h = $(h1) $(h2) $(h3) $(h4) $(h5) +h6 = charclass_invlists.h +h = $(h1) $(h2) $(h3) $(h4) $(h5) $(h6) c1 = av.c scope.c op.c doop.c doio.c dump.c gv.c hv.c mg.c reentr.c mro.c perl.c c2 = perly.c pp.c pp_hot.c pp_ctl.c pp_sys.c regcomp.c regexec.c utf8.c sv.c @@ -479,7 +503,7 @@ mini_obj = $(minindt_obj) $(MINIDTRACE_O) ndt_obj = $(obj0) $(obj1) $(obj2) $(obj3) $(ARCHOBJS) obj = $(ndt_obj) $(DTRACE_O) -perltoc_pod_prereqs = extra.pods pod/perl5155delta.pod pod/perlapi.pod pod/perlintern.pod pod/perlmodlib.pod pod/perluniprops.pod +perltoc_pod_prereqs = extra.pods pod/perl5191delta.pod pod/perlapi.pod pod/perlintern.pod pod/perlmodlib.pod pod/perluniprops.pod generated_pods = pod/perltoc.pod $(perltoc_pod_prereqs) generated_headers = uudmap.h bitcount.h mg_data.h @@ -576,18 +600,21 @@ perl$(OBJ_EXT): git_version.h case "$usedl$static_cwd" in defineundef) util_deps='$(MINIPERL_EXE) $(CONFIGPM) lib/auto/Cwd/Cwd$(DLSUFFIX) FORCE' - x2p_deps='$(MINIPERL_EXE) $(CONFIGPM) $(dynamic_ext) FORCE' + x2p_deps="\$(MINIPERL_EXE) \$(CONFIGPM) \$(dynamic_ext) x2p/$firstmakefile FORCE" ;; definedefine) util_deps='$(PERL_EXE) $(CONFIGPM) FORCE' - x2p_deps='$(PERL_EXE) $(CONFIGPM) $(dynamic_ext) FORCE' + x2p_deps="\$(PERL_EXE) \$(CONFIGPM) \$(dynamic_ext) x2p/$firstmakefile FORCE" ;; *) util_deps='$(PERL_EXE) $(CONFIGPM) FORCE' - x2p_deps='$(PERL_EXE) $(CONFIGPM) FORCE' + x2p_deps="\$(PERL_EXE) \$(CONFIGPM) x2p/$firstmakefile FORCE" ;; esac $spitshell >>$Makefile <>$Makefile <<'!NO!SUBS!' -perl.exp: $(MINIPERLEXP) makedef.pl config.sh $(SYM) $(SYMH) - ./$(MINIPERLEXP) makedef.pl PLATFORM=aix CC_FLAGS="$(OPTIMIZE)" | sort -u | sort -f > perl.exp +perl.exp: $(MINIPERLEXP) makedef.pl $(CONFIGPM) $(SYM) $(SYMH) + ./$(MINIPERLEXP) makedef.pl --sort-fold PLATFORM=aix CC_FLAGS="$(OPTIMIZE)" > perl.exp !NO!SUBS! ;; @@ -732,7 +759,7 @@ os2) $spitshell >>$Makefile <<'!NO!SUBS!' MINIPERLEXP = miniperl -perl5.def: $(MINIPERLEXP) makedef.pl config.sh $(SYM) $(SYMH) miniperl.map +perl5.def: $(MINIPERLEXP) makedef.pl $(CONFIGPM) $(SYM) $(SYMH) miniperl.map ./$(MINIPERLEXP) makedef.pl PLATFORM=os2 -DPERL_DLL=$(PERL_DLL) CC_FLAGS="$(OPTIMIZE)" > perl5.def !NO!SUBS! @@ -824,21 +851,32 @@ $(LIBPERL): $& $(obj) $(DYNALOADER) $(LIBPERLEXPORT) # build problems but that's not obvious to the novice. # The Module used here must not depend on Config or any extensions. +# The seemingly cranky ordering of having $(MINIPERL_EXE) depend on +# lib/buildcustomize.pl despite the reality that lib/buildcustomize.pl needs +# miniperl to exist first permits us to +# a) have one rule generate both miniperl and lib/buildcustomize.pl +# (so that lib/buildcustomise.pl is always available. This simplifies things) +# b) have the rest of the Makefile depend on the more obvious $(MINIPERL_EXE) + +$(MINIPERL_EXE): lib/buildcustomize.pl + !NO!SUBS! case "${osname}${osvers}" in - aix*|beos*) + aix*) $spitshell >>$Makefile <<'!NO!SUBS!' -$(MINIPERL_EXE): $& $(mini_obj) +lib/buildcustomize.pl: $& $(mini_obj) $(CC) -o $(MINIPERL_EXE) $(CLDFLAGS) $(mini_obj) $(libs) $(LDLIBPTH) $(RUN) ./miniperl$(HOST_EXE_EXT) -w -Ilib -MExporter -e '' || $(MAKE) minitest + $(MINIPERL) write_buildcustomize.pl >lib/buildcustomize.pl !NO!SUBS! ;; next4*) $spitshell >>$Makefile <<'!NO!SUBS!' -$(MINIPERL_EXE): $& $(mini_obj) +lib/buildcustomize.pl: $& $(mini_obj) write_buildcustomize.pl $(CC) -o $(MINIPERL_EXE) $(mini_obj) $(libs) $(LDLIBPTH) $(RUN) ./miniperl$(HOST_EXE_EXT) -w -Ilib -MExporter -e '' || $(MAKE) minitest + $(MINIPERL) write_buildcustomize.pl >lib/buildcustomize.pl !NO!SUBS! ;; darwin*) @@ -855,27 +893,29 @@ NAMESPACEFLAGS = -force_flat_namespace ;; esac $spitshell >>$Makefile <<'!NO!SUBS!' -$(MINIPERL_EXE): $& $(mini_obj) +lib/buildcustomize.pl: $& $(mini_obj) write_buildcustomize.pl -@rm -f miniperl.xok $(CC) $(CLDFLAGS) $(NAMESPACEFLAGS) -o $(MINIPERL_EXE) \ $(mini_obj) $(libs) $(LDLIBPTH) $(RUN) ./miniperl$(HOST_EXE_EXT) -w -Ilib -MExporter -e '' || $(MAKE) minitest + $(MINIPERL) write_buildcustomize.pl >lib/buildcustomize.pl !NO!SUBS! ;; *) $spitshell >>$Makefile <<'!NO!SUBS!' -$(MINIPERL_EXE): $& $(mini_obj) +lib/buildcustomize.pl: $& $(mini_obj) write_buildcustomize.pl -@rm -f miniperl.xok $(LDLIBPTH) $(CC) $(CLDFLAGS) -o $(MINIPERL_EXE) \ $(mini_obj) $(libs) $(LDLIBPTH) $(RUN) ./miniperl$(HOST_EXE_EXT) -w -Ilib -MExporter -e '' || $(MAKE) minitest + $(MINIPERL) write_buildcustomize.pl >lib/buildcustomize.pl !NO!SUBS! ;; esac $spitshell >>$Makefile <<'!NO!SUBS!' -$(PERL_EXE): $& perlmain$(OBJ_EXT) $(LIBPERL) $(static_ext) ext.libs $(PERLEXPORT) +$(PERL_EXE): $& perlmain$(OBJ_EXT) $(LIBPERL) $(static_ext) ext.libs $(PERLEXPORT) write_buildcustomize.pl -@rm -f miniperl.xok $(SHRPENV) $(LDLIBPTH) $(CC) -o perl$(PERL_SUFFIX) $(PERL_PROFILE_LDFLAGS) $(CLDFLAGS) $(CCDLFLAGS) perlmain$(OBJ_EXT) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs) @@ -1030,9 +1070,6 @@ $(CONFIGPOD): config.sh $(MINIPERL_EXE) configpm Porting/Glossary lib/Config_git lib/ExtUtils/Miniperl.pm: miniperlmain.c $(MINIPERL_EXE) minimod.pl $(CONFIGPM) $(MINIPERL) minimod.pl > lib/ExtUtils/Miniperl.pm -lib/buildcustomize.pl: $(MINIPERL_EXE) write_buildcustomize.pl - $(MINIPERL) write_buildcustomize.pl >lib/buildcustomize.pl - unidatafiles $(unidatafiles) pod/perluniprops.pod: uni.data uni.data: $(MINIPERL_EXE) $(CONFIGPM) lib/unicore/mktables $(nonxs_ext) @@ -1045,18 +1082,20 @@ uni.data: $(MINIPERL_EXE) $(CONFIGPM) lib/unicore/mktables $(nonxs_ext) # But also this ensures that all extensions are built before we try to scan # them, which picks up Devel::PPPort's documentation. pod/perltoc.pod: $(perltoc_pod_prereqs) $(PERL_EXE) $(ext) pod/buildtoc - $(RUN_PERL) -f -Ilib pod/buildtoc --build-toc -q + $(RUN_PERL) -f -Ilib pod/buildtoc -q pod/perlapi.pod: pod/perlintern.pod -pod/perlintern.pod: $(MINIPERL_EXE) autodoc.pl embed.fnc +# Depending on $(nonxs_ext) gets us Text::Wrap built +pod/perlintern.pod: $(MINIPERL_EXE) autodoc.pl embed.fnc $(nonxs_ext) $(MINIPERL) autodoc.pl pod/perlmodlib.pod: $(MINIPERL_EXE) pod/perlmodlib.PL MANIFEST $(MINIPERL) $(Icwd) pod/perlmodlib.PL -q -pod/perl5155delta.pod: pod/perldelta.pod - $(LNS) perldelta.pod pod/perl5155delta.pod +pod/perl5191delta.pod: pod/perldelta.pod + $(RMS) pod/perl5191delta.pod + $(LNS) perldelta.pod pod/perl5191delta.pod extra.pods: $(MINIPERL_EXE) -@test ! -f extra.pods || rm -f `cat extra.pods` @@ -1114,7 +1153,6 @@ install.html: all installhtml --htmlroot=$(privlib)/html \ --splithead=pod/perlipc \ --splititem=pod/perlfunc \ - --libpods=perlfunc:perlguts:perlvar:perlrun:perlop \ --ignore=Porting/Maintainers.pm,Porting/pumpkin.pod,Porting/repository.pod \ --verbose @@ -1153,6 +1191,7 @@ CHMOD_W = chmod +w # opcode.pl: opcode.h opnames.h pp_proto.h # regcomp.pl: regnodes.h # warnings.pl: warnings.h lib/warnings.pm +# feature.pl: feature.h lib/feature.pm # The correct versions should be already supplied with the perl kit, # in case you don't have perl available. # To force them to be regenerated, run @@ -1161,7 +1200,8 @@ CHMOD_W = chmod +w # (make regen_headers is kept for backwards compatibility) AUTOGEN_FILES = opcode.h opnames.h pp_proto.h proto.h embed.h embedvar.h \ - perlapi.h perlapi.c regnodes.h warnings.h lib/warnings.pm + perlapi.h perlapi.c regnodes.h warnings.h lib/warnings.pm \ + lib/feature.pm feature.h .PHONY: regen_headers regen_all @@ -1173,10 +1213,13 @@ regen_headers regen-headers: FORCE -perl regen.pl -v -perl regen/uconfig_h.pl -v -regen_meta regen-meta: META.yml +regen_meta regen-meta: META.yml META.json META.yml: FORCE - PATH="`pwd`:${PATH}" PERL5LIB="`pwd`/lib" $(RUN_PERL) -Ilib Porting/makemeta + PATH="`pwd`:${PATH}" PERL5LIB="`pwd`/lib" $(RUN_PERL) -Ilib Porting/makemeta -y + +META.json: FORCE + PATH="`pwd`:${PATH}" PERL5LIB="`pwd`/lib" $(RUN_PERL) -Ilib Porting/makemeta -j regen_all regen-all: regen regen_meta @@ -1203,7 +1246,7 @@ manicheck: FORCE $(DYNALOADER): $(MINIPERL_EXE) lib/buildcustomize.pl preplibrary FORCE $(nonxs_ext) $(MINIPERL) make_ext.pl $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL) LINKTYPE=static $(STATIC_LDFLAGS) -d_dummy $(dynamic_ext): $(MINIPERL_EXE) lib/buildcustomize.pl preplibrary makeppport $(DYNALOADER) FORCE $(PERLEXPORT) +d_dummy $(dynamic_ext): $(MINIPERL_EXE) lib/buildcustomize.pl preplibrary makeppport $(DYNALOADER) FORCE $(PERLEXPORT) $(LIBPERL) $(MINIPERL) make_ext.pl $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL) LINKTYPE=dynamic s_dummy $(static_ext): $(MINIPERL_EXE) lib/buildcustomize.pl preplibrary makeppport $(DYNALOADER) FORCE @@ -1251,15 +1294,14 @@ _mopup: -rmdir .depending -@test -f extra.pods && rm -f `cat extra.pods` -@test -f vms/README_vms.pod && rm -f vms/README_vms.pod - -rm -f perl.exp ext.libs $(generated_pods) uni.data opmini.o perlmini.o + -rm -f perl.exp ext.libs $(generated_pods) uni.data opmini.o perlmini.o pod/roffitall -rm -f perl.export perl.dll perl.libexp perl.map perl.def - -rm -f perl.loadmap miniperl.loadmap perl.prelmap miniperl.prelmap -rm -f perl.third lib*.so.perl.third perl.3log t/perl.third t/perl.3log -rm -f perl.pixie lib*.so.perl.pixie lib*.so.Addrs -rm -f perl.Addrs perl.Counts t/perl.Addrs t/perl.Counts *perl.xok -rm -f cygwin.c libperl*.def libperl*.dll cygperl*.dll *.exe.stackdump -rm -f $(PERL_EXE) $(MINIPERL_EXE) $(LIBPERL) libperl.* microperl - -rm -f config.arch config.over $(DTRACE_H) runtests + -rm -f config.arch config.over $(DTRACE_H) # Do not 'make _tidy' directly. _tidy: @@ -1313,9 +1355,10 @@ _cleaner2: rm -f lib/ExtUtils/ParseXS/t/XSTest$(OBJ_EXT) rm -f lib/ExtUtils/ParseXS/t/XSTest$(DLSUFFIX) rm -fr lib/B - rm -fr lib/CPAN lib/CPANPLUS + rm -fr lib/CPAN rm -fr lib/ExtUtils/CBuilder - -rmdir cpan/CPANPLUS-Dist-Build/t/dummy-cpanplus cpan/CPANPLUS/t/dummy-cpanplus cpan/CPANPLUS/t/dummy-localmirror + rm -f pod2htmd.tmp + rm -rf pod/perlfunc pod/perlipc -rmdir ext/B/lib -rmdir lib/Archive/Tar lib/Archive lib/Attribute -rmdir lib/CGI lib/Carp @@ -1370,21 +1413,22 @@ MAKEDEPEND = Makefile makedepend $(FIRSTMAKEFILE): README $(MAKEDEPEND) $(MAKE) depend MAKEDEPEND= +!NO!SUBS! -config.h: config_h.SH config.sh - $(SHELL) config_h.SH +for f in $SH; do + file=`SH_to_target $f` + $spitshell >>$Makefile <>$Makefile <<'!NO!SUBS!' -runtests: runtests.SH config.sh - sh ./runtests.SH +.PHONY: depend +depend: makedepend + sh ./makedepend MAKE=$(MAKE) cflags .PHONY: test check test_prep test_prep_nodll test_prep_pre \ test_prep_reonly test_tty test-tty test_notty test-notty \ @@ -1438,7 +1482,7 @@ test.torture torturetest: test_prep minitest.utf16: minitest.prep - cd t && (rm -f $(PERL_EXE); $(LNS) ../$(MINIPERL_EXE) $(PERL_EXE)) \ - && $(RUN_PERL) TEST -utf16 base/*.t comp/*.t cmd/*.t run/*.t io/*.t op/*.t uni/*.t .clist @@ -1565,12 +1609,6 @@ clist: $(c) hlist: $(h) echo $(h) | tr ' ' $(TRNL) >.hlist -shlist: $(sh) - echo $(sh) | tr ' ' $(TRNL) >.shlist - -Makefile: Makefile.SH ./config.sh - $(SHELL) Makefile.SH - .PHONY: distcheck distcheck: FORCE perl '-MExtUtils::Manifest=&fullcheck' -e 'fullcheck()' @@ -1585,12 +1623,6 @@ ctags: !NO!SUBS! $eunicefix Makefile -case `pwd` in -*SH) - $rm -f ../Makefile - $ln Makefile ../Makefile - ;; -esac $rm -f $firstmakefile # Now do any special processing required before building. @@ -1640,9 +1672,6 @@ os390|posix-bc) cd .. fi ;; -vmesa) - # Do nothing in VM/ESA. - ;; *) echo "'$osname' is an EBCDIC system I don't know that well." >&4 ;;