Hello David (and the list), Oh, so Makefile.PL is capable of recursion. I should've checked it first.
But! I couldn't bring it to `make dist` recursively; instead, it just lumps all the directories into a huge tarball. Is that OK for CPAN? Or should I really upload separate tarballs for each module? Or is there a way to tweak Makefile.PL into recursing for make dist, too? On Thu, Nov 22, 2018 at 12:50 AM David Christensen < dpchr...@holgerdanske.com> wrote: > On 11/21/18 2:15 AM, David Cantrell wrote: > > On Tue, Nov 20, 2018 at 05:25:47PM -0800, David Christensen wrote: > > > >> p.s. Where can I find documentation that explains Bundles and how to > >> create them? > > > > https://metacpan.org/pod/CPAN#Bundles > > > > However, they're a bit magical and require special support in the CPAN > > client. > > Thank you for replying. :-) > > > Below, please see an experiment of putting distribution source trees > inside of a bundle source tree, and leveraging the recursive features of > ExtUtils::MakeMaker (EUMM) and make(1): > > 1. 'perl Makefile.PL' creates a Makefile, etc., for the enclosed > distribution and then the bundle -- good. > > EUMM::WriteMakefile() appears to traverse directories in > alphabetical order. Therefore, I can control the traversal order by > prefacing distribution directory names with numbers. This will ensure > that root cause failures appear before dependent failures. > > 2. 'make' appears to build the bundle and then the distribution -- I > would prefer that the distributions be built before the bundle. > > RTFM make(1), I don't see an obvious way to change Make's recursive > traversal order to depth-first (?). > > STFW, one work-around is to use Make's --directory/-C option: > > > > https://stackoverflow.com/questions/31159082/is-there-a-way-to-make-a-recursive-make-j-invocation-go-depth-first > > Perhaps there is a deeper answer? > > https://www.gnu.org/software/make/manual/make.html#Recursion > > 3. 'make test' appears to run the bundle tests and then the > distribution tests. Again, I would prefer depth-first. > > 4. 'make dist' creates a tarball for the bundle, but not for the > distributions -- the bundle Makefile must be blocking recursion for the > 'dist' target (?). Can I re-enable recursion? > > > > These days people tend to just create Task-whatever > > distributions, which contain a bit of documentation in Task::whatever > > for the benefit of metacpan users, and the usual Makefile.PL to declare > > dependencies. > > Where can I find documentation that explains Tasks and how to create them? > > > I assume you are referring to the PREREQ_PM argument to WriteMakefile(). > As I understand it, this argument assumes that the modules are already > installed So for development, I would need to preface the Perl include > path with the 'lib' directories for each of my distribution source trees > (?). > > > David > > > 2018-11-21 14:36:15 dpchrist@tinkywinky ~/sandbox/perl > $ cat /etc/debian_version > 9.6 > > 2018-11-21 14:36:26 dpchrist@tinkywinky ~/sandbox/perl > $ uname -a > Linux tinkywinky 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) > x86_64 GNU/Linux > > 2018-11-21 14:37:34 dpchrist@tinkywinky ~/sandbox/perl > $ perl -v | grep version > This is perl 5, version 24, subversion 1 (v5.24.1) built for > x86_64-linux-gnu-thread-multi > > 2018-11-21 14:38:32 dpchrist@tinkywinky ~/sandbox/perl > $ h2xs --help 2>&1 | grep version: > version: 1.23 > > 2018-11-21 14:39:12 dpchrist@tinkywinky ~/sandbox/perl > $ perl -MExtUtils::MakeMaker -e 'print $ExtUtils::MakeMaker::VERSION, "\n"' > 7.1002 > > 2018-11-21 14:39:04 dpchrist@tinkywinky ~/sandbox/perl > $ make --version | grep 'GNU Make' > GNU Make 4.1 > > 2018-11-21 13:49:06 dpchrist@tinkywinky ~/sandbox/perl > $ cat make-bundle.sh > #!/bin/bash > # $Id: make-bundle.sh,v 1.3 2018/11/21 21:48:36 dpchrist Exp $ > > set -o xtrace > set -o errexit > > tmp=`pwd`/$0.tmp > dists='DistA' > bundle='Bundle::MyBundle' > bdir=$tmp/Bundle-MyBundle > bmod=$tmp/Bundle-MyBundle/lib/Bundle/MyBundle.pm > > rm -rf $tmp > mkdir -p $tmp > > cd $tmp && h2xs -XAn $bundle 2>/dev/null > > for d in $dists; do > cd $tmp && h2xs -XAn $d 2>/dev/null > done > > for d in $dists; do > mv $tmp/$d $bdir/. > done > > perl -pi -e 's/=cut\n//' $bmod > > echo '=head1 CONTENTS' >> $bmod > echo '' >> $bmod > for d in $dists; do > echo " $d" >> $bmod > done > echo '' >> $bmod > echo '=cut' >> $bmod > > cd $bdir && perl Makefile.PL > > cd $bdir && make > > cd $bdir && make test > > cd $bdir && make dist > > 2018-11-21 13:49:07 dpchrist@tinkywinky ~/sandbox/perl > $ bash make-bundle.sh > + set -o errexit > ++ pwd > + tmp=/home/dpchrist/sandbox/perl/make-bundle.sh.tmp > + dists=DistA > + bundle=Bundle::MyBundle > + bdir=/home/dpchrist/sandbox/perl/make-bundle.sh.tmp/Bundle-MyBundle > + > > bmod=/home/dpchrist/sandbox/perl/make-bundle.sh.tmp/Bundle-MyBundle/lib/Bundle/MyBundle.pm > + rm -rf /home/dpchrist/sandbox/perl/make-bundle.sh.tmp > + mkdir -p /home/dpchrist/sandbox/perl/make-bundle.sh.tmp > + cd /home/dpchrist/sandbox/perl/make-bundle.sh.tmp > + h2xs -XAn Bundle::MyBundle > + for d in $dists > + cd /home/dpchrist/sandbox/perl/make-bundle.sh.tmp > + h2xs -XAn DistA > + for d in $dists > + mv /home/dpchrist/sandbox/perl/make-bundle.sh.tmp/DistA > /home/dpchrist/sandbox/perl/make-bundle.sh.tmp/Bundle-MyBundle/. > + perl -pi -e 's/=cut\n//' > > /home/dpchrist/sandbox/perl/make-bundle.sh.tmp/Bundle-MyBundle/lib/Bundle/MyBundle.pm > + echo '=head1 CONTENTS' > + echo '' > + for d in $dists > + echo ' DistA' > + echo '' > + echo =cut > + cd /home/dpchrist/sandbox/perl/make-bundle.sh.tmp/Bundle-MyBundle > + perl Makefile.PL > Checking if your kit is complete... > Looks good > Checking if your kit is complete... > Looks good > Generating a Unix-style Makefile > Writing Makefile for DistA > Writing MYMETA.yml and MYMETA.json > Generating a Unix-style Makefile > Writing Makefile for Bundle::MyBundle > Writing MYMETA.yml and MYMETA.json > + cd /home/dpchrist/sandbox/perl/make-bundle.sh.tmp/Bundle-MyBundle > + make > cp lib/Bundle/MyBundle.pm blib/lib/Bundle/MyBundle.pm > make[1]: Entering directory > '/home/dpchrist/sandbox/perl/make-bundle.sh.tmp/Bundle-MyBundle/DistA' > cp lib/DistA.pm ../blib/lib/DistA.pm > Manifying 1 pod document > make[1]: Leaving directory > '/home/dpchrist/sandbox/perl/make-bundle.sh.tmp/Bundle-MyBundle/DistA' > Manifying 1 pod document > + cd /home/dpchrist/sandbox/perl/make-bundle.sh.tmp/Bundle-MyBundle > + make test > make[1]: Entering directory > '/home/dpchrist/sandbox/perl/make-bundle.sh.tmp/Bundle-MyBundle/DistA' > Manifying 1 pod document > make[1]: Leaving directory > '/home/dpchrist/sandbox/perl/make-bundle.sh.tmp/Bundle-MyBundle/DistA' > PERL_DL_NONLAZY=1 PERL_USE_UNSAFE_INC=1 "/usr/bin/perl" > "-MExtUtils::Command::MM" "-MTest::Harness" "-e" "undef > *Test::Harness::Switches; test_harness(0, 'blib/lib', 'blib/arch')" t/*.t > t/Bundle-MyBundle.t .. ok > All tests successful. > Files=1, Tests=1, 0 wallclock secs ( 0.03 usr 0.00 sys + 0.06 cusr > 0.00 csys = 0.09 CPU) > Result: PASS > make[1]: Entering directory > '/home/dpchrist/sandbox/perl/make-bundle.sh.tmp/Bundle-MyBundle/DistA' > PERL_DL_NONLAZY=1 PERL_USE_UNSAFE_INC=1 "/usr/bin/perl" > "-MExtUtils::Command::MM" "-MTest::Harness" "-e" "undef > *Test::Harness::Switches; test_harness(0, '../blib/lib', > '../blib/arch')" t/*.t > t/DistA.t .. ok > All tests successful. > Files=1, Tests=1, 1 wallclock secs ( 0.03 usr 0.01 sys + 0.05 cusr > 0.02 csys = 0.11 CPU) > Result: PASS > make[1]: Leaving directory > '/home/dpchrist/sandbox/perl/make-bundle.sh.tmp/Bundle-MyBundle/DistA' > + cd /home/dpchrist/sandbox/perl/make-bundle.sh.tmp/Bundle-MyBundle > + make dist > rm -rf Bundle-MyBundle-0.01 > "/usr/bin/perl" "-MExtUtils::Manifest=manicopy,maniread" \ > -e "manicopy(maniread(),'Bundle-MyBundle-0.01', 'best');" > mkdir Bundle-MyBundle-0.01 > mkdir Bundle-MyBundle-0.01/lib > mkdir Bundle-MyBundle-0.01/lib/Bundle > mkdir Bundle-MyBundle-0.01/t > Generating META.yml > Generating META.json > tar cvf Bundle-MyBundle-0.01.tar Bundle-MyBundle-0.01 > Bundle-MyBundle-0.01/ > Bundle-MyBundle-0.01/Changes > Bundle-MyBundle-0.01/lib/ > Bundle-MyBundle-0.01/lib/Bundle/ > Bundle-MyBundle-0.01/lib/Bundle/MyBundle.pm > Bundle-MyBundle-0.01/t/ > Bundle-MyBundle-0.01/t/Bundle-MyBundle.t > Bundle-MyBundle-0.01/README > Bundle-MyBundle-0.01/Makefile.PL > Bundle-MyBundle-0.01/MANIFEST > Bundle-MyBundle-0.01/META.yml > Bundle-MyBundle-0.01/META.json > rm -rf Bundle-MyBundle-0.01 > gzip --best Bundle-MyBundle-0.01.tar > Created Bundle-MyBundle-0.01.tar.gz > > 2018-11-21 14:36:01 dpchrist@tinkywinky ~/sandbox/perl > $ tail -n 6 make-bundle.sh.tmp/Bundle-MyBundle/lib/Bundle/MyBundle.pm > > =head1 CONTENTS > > DistA > > =cut > -- Konstantin S. Uvarin jabber: see <from> skype: kuvarin http://github.com/dallaylaen