In perl.git, the branch blead has been updated <https://perl5.git.perl.org/perl.git/commitdiff/926760a67ed43045b7686a4475d0362da2bbcd8b?hp=1d31efef7dd4388fd606972e67bda3318e8838fe>
- Log ----------------------------------------------------------------- commit 926760a67ed43045b7686a4475d0362da2bbcd8b Author: Karl Williamson <[email protected]> Date: Mon May 27 12:07:25 2019 -0600 Make sure 'if' compiled before Pod::Simple 3.36 of Pod::Simple requires 'if', and this makes sure it works. commit b83fde9727ea95eba21d0aae5013700aef5909e6 Author: Karl Williamson <[email protected]> Date: Mon May 27 12:04:58 2019 -0600 make_ext.pl: Add some general comments I found myself recently not knowing how to deal with the build system. Having these would have helped. commit 2fecb8b26fdcfb76a86d6db016179c94c1006a0e Author: Karl Williamson <[email protected]> Date: Mon May 27 11:51:23 2019 -0600 Better document build dependency ordering commit 80acf91d9c504eaa12c9836e2ac3768613c88ac2 Author: Karl Williamson <[email protected]> Date: Mon May 27 11:49:23 2019 -0600 perlsource: Better document Configure ----------------------------------------------------------------------- Summary of changes: Makefile.SH | 4 +++- make_ext.pl | 27 ++++++++++++++++++++++----- pod/perlsource.pod | 14 +++++++++----- 3 files changed, 34 insertions(+), 11 deletions(-) diff --git a/Makefile.SH b/Makefile.SH index dd5b25d0bb..0d925bc2b9 100755 --- a/Makefile.SH +++ b/Makefile.SH @@ -192,10 +192,12 @@ for f in $dynamic_ext; do esac done -: Prepare dependency lists for Makefile. +: Prepare dependency lists for Makefile. Non-Unix systems likely will also +: require changes in make_ext.pl dynamic_list=' ' dynamic_ext_re="lib/auto/re/re.$dlext" extra_dep=' +cpan/Pod-Simple/pm_to_blib: dist/if/pm_to_blib ext/Pod-Functions/pm_to_blib: cpan/Pod-Simple/pm_to_blib cpan/Pod-Escapes/pm_to_blib pod/perlfunc.pod cpan/IO-Compress/pm_to_blib: dist/lib/pm_to_blib ' diff --git a/make_ext.pl b/make_ext.pl index 9bc4718d52..0280a027cf 100644 --- a/make_ext.pl +++ b/make_ext.pl @@ -48,6 +48,20 @@ my $ext_dirs_re = '(?:' . join('|', @ext_dirs) . ')'; # by an '!ext' and are appropriate to the type of building being done. # An extensions follows the format of Foo/Bar, which would be extension Foo::Bar +# To fix dependency ordering, on *nix systems, edit Makefile.SH to create a +# rule. That isn't sufficient for other systems; you also have to do +# something in this file. See the code at +# '# XXX hack for dependency # ordering' +# below. +# +# The basic logic is: +# 1) if there's a Makefile.PL in git for the module, use it. and call make +# 2) If not, auto-generate one (normally) +# 3) unless the auto-generation code figures out that the extension is +# *really* simple, in which case don't. This will be for pure perl +# modules, and all that is needed to be done is to copy from the source +# to the dest directories. +# # It may be deleted in a later release of perl so try to # avoid using it for other purposes. @@ -201,20 +215,23 @@ elsif (IS_VMS) { push @extspec, 'DynaLoader' if $dynaloader; } -{ +{ # XXX hack for dependency ordering # Cwd needs to be built before Encode recurses into subdirectories. - # Pod::Simple needs to be built before Pod::Functions + # Pod::Simple needs to be built before Pod::Functions, but after 'if' # lib needs to be built before IO-Compress # This seems to be the simplest way to ensure this ordering: - my (@first, @other); + my (@first, @second, @other); foreach (@extspec) { - if ($_ eq 'Cwd' || $_ eq 'Pod/Simple' || $_ eq 'lib') { + if ($_ eq 'Cwd' || $_ eq 'if' || $_ eq 'lib') { push @first, $_; + } + elsif ($_ eq 'Pod/Simple') { + push @second, $_; } else { push @other, $_; } } - @extspec = (@first, @other); + @extspec = (@first, @second, @other); } if ($Config{osname} eq 'catamount' and @extspec) { diff --git a/pod/perlsource.pod b/pod/perlsource.pod index 502ba42d15..e9e534b6ad 100644 --- a/pod/perlsource.pod +++ b/pod/perlsource.pod @@ -197,17 +197,21 @@ patched. =head2 Build system -The Perl build system starts with the F<Configure> script in the root -directory. +The Perl build system on *nix-like systems starts with the F<Configure> +script in the root directory. Platform-specific pieces of the build system also live in platform-specific directories like F<win32/>, F<vms/>, etc. +Windows and VMS have their own Configure-like scripts, in their +respective directories. -The F<Configure> script is ultimately responsible for generating a -F<Makefile>. +The F<Configure> script (or a platform-specific similar script) is +ultimately responsible for generating a F<Makefile> from F<Makefile.SH>. The build system that Perl uses is called metaconfig. This system is -maintained separately from the Perl core. +maintained separately from the Perl core, and knows about the +platform-specific Configure-like scripts, as well as F<Configure> +itself. The metaconfig system has its own git repository. Please see its README file in L<http://perl5.git.perl.org/metaconfig.git/> for more details. -- Perl5 Master Repository
