diff --git a/devel.utils/_build-5.38.4.1_local_mscvrt.bat b/devel.utils/_build-5.38.4.1_local_mscvrt.bat new file mode 100644 index 0000000..45c7afa --- /dev/null +++ b/devel.utils/_build-5.38.4.1_local_mscvrt.bat @@ -0,0 +1,26 @@ +::@cls +::call ..\build.bat test + +::set PERL_USE_UNSAFE_INC=1 + +subst Z: C:\shawn\sp_repos + +set SP=c:\perls\5.38.2.2_PDL +set PATH=%SP%\c\bin;%SP%\perl\bin;%SP%\perl\site\bin;Z:\sw\wix311;Z:\winlibs\bin;%PATH% +set PERLEXE=%SP%\perl\bin\perl + +:: update blib - requires Build.PL to have been run +call ..\build.bat test + +::set MAKEFLAGS=-j12 +set TEST_JOBS=8 + +:: tests take a long time +set TEST_CORE=-test_core +#set TEST_CORE=-notest_core + +::set SKIP_MSI_STEP=1 +::set SKIP_PDL_STEP=1 +%PERLEXE% -Mblib ..\script\perldist_strawberry -job ..\share\64bit-5.38.4.1.pp %TEST_CORE% -beta=2 -interactive -restorepoints -wixbin_dir=z:\sw\wix311 -cpan_url https://cpan.metacpan.org + + diff --git a/devel.utils/_build-5.40.2_local_ucrt.bat b/devel.utils/_build-5.40.2_local_ucrt.bat new file mode 100644 index 0000000..ea58ef8 --- /dev/null +++ b/devel.utils/_build-5.40.2_local_ucrt.bat @@ -0,0 +1,26 @@ +::@cls +::call ..\build.bat test + +::set PERL_USE_UNSAFE_INC=1 + +subst Z: C:\shawn\sp_repos + +set SP=c:\perls\5.38.2.2_PDL +set PATH=%SP%\c\bin;%SP%\perl\bin;%SP%\perl\site\bin;Z:\sw\wix311;Z:\winlibs\bin;%PATH% +set PERLEXE=%SP%\perl\bin\perl + +:: update blib - requires Build.PL to have been run +call ..\build.bat test + +::set MAKEFLAGS=-j12 +set TEST_JOBS=8 + +:: tests take a long time +set TEST_CORE=-test_core +#set TEST_CORE=-notest_core + +::set SKIP_MSI_STEP=1 +::set SKIP_PDL_STEP=1 +%PERLEXE% -Mblib ..\script\perldist_strawberry -job ..\share\64bit-5.40.2.1.pp %TEST_CORE% -beta=0 -interactive -restorepoints -wixbin_dir=z:\sw\wix311 -cpan_url https://cpan.metacpan.org + + diff --git a/devel.utils/build-5.34.3.1_local.bat b/devel.utils/build-5.34.3.1_local.bat new file mode 100644 index 0000000..fae0685 --- /dev/null +++ b/devel.utils/build-5.34.3.1_local.bat @@ -0,0 +1,26 @@ +::@cls +::call ..\build.bat test + +::set PERL_USE_UNSAFE_INC=1 + +subst Z: C:\shawn\sp_repos + +set SP=c:\perls\5.38.2.2_PDL +set PATH=%SP%\c\bin;%SP%\perl\bin;%SP%\perl\site\bin;Z:\sw\wix311;Z:\winlibs\bin;%PATH% +set PERLEXE=%SP%\perl\bin\perl + +:: update blib - requires Build.PL to have been run +call ..\build.bat test + +:: set MAKEFLAGS=-j20 +:: set TEST_JOBS=8 + +:: tests take a long time +set TEST_CORE=-test_core +set TEST_CORE=-notest_core + +::set SKIP_MSI_STEP=1 +::set SKIP_PDL_STEP=1 +%PERLEXE% -Mblib ..\script\perldist_strawberry -job ..\share\64bit-5.34.3.1.pp %TEST_CORE% -beta=0 -interactive -restorepoints -wixbin_dir=z:\sw\wix311 -cpan_url https://cpan.metacpan.org + + diff --git a/devel.utils/_build-5.36.bat b/devel.utils/build-5.36.bat similarity index 100% rename from devel.utils/_build-5.36.bat rename to devel.utils/build-5.36.bat diff --git a/devel.utils/_build-5.36_local.bat b/devel.utils/build-5.36_local.bat similarity index 100% rename from devel.utils/_build-5.36_local.bat rename to devel.utils/build-5.36_local.bat diff --git a/devel.utils/build-5.38.3.1_local_ucrt.bat b/devel.utils/build-5.38.3.1_local_ucrt.bat new file mode 100644 index 0000000..2190294 --- /dev/null +++ b/devel.utils/build-5.38.3.1_local_ucrt.bat @@ -0,0 +1,26 @@ +::@cls +::call ..\build.bat test + +::set PERL_USE_UNSAFE_INC=1 + +subst Z: C:\shawn\sp_repos + +set SP=c:\perls\5.38.2.2_PDL +set PATH=%SP%\c\bin;%SP%\perl\bin;%SP%\perl\site\bin;Z:\sw\wix311;Z:\winlibs\bin;%PATH% +set PERLEXE=%SP%\perl\bin\perl + +:: update blib - requires Build.PL to have been run +call ..\build.bat test + +set MAKEFLAGS=-j20 +set TEST_JOBS=8 + +:: tests take a long time +set TEST_CORE=-test_core +::set TEST_CORE=-notest_core + +::set SKIP_MSI_STEP=1 +::set SKIP_PDL_STEP=1 +%PERLEXE% -Mblib ..\script\perldist_strawberry -job ..\share\64bit-5.38.3.1.pp %TEST_CORE% -beta=0 -interactive -restorepoints -wixbin_dir=z:\sw\wix311 -cpan_url https://cpan.metacpan.org + + diff --git a/devel.utils/_build-5.38.bat b/devel.utils/build-5.38.bat similarity index 100% rename from devel.utils/_build-5.38.bat rename to devel.utils/build-5.38.bat diff --git a/devel.utils/_build-5.38_local.bat b/devel.utils/build-5.38_local.bat similarity index 100% rename from devel.utils/_build-5.38_local.bat rename to devel.utils/build-5.38_local.bat diff --git a/devel.utils/_build-5.40_local_ucrt.bat b/devel.utils/build-5.40_local_ucrt.bat similarity index 100% rename from devel.utils/_build-5.40_local_ucrt.bat rename to devel.utils/build-5.40_local_ucrt.bat diff --git a/lib/Perl/Dist/Strawberry/Step/CreateReleaseNotes.pm b/lib/Perl/Dist/Strawberry/Step/CreateReleaseNotes.pm index c4605dc..dc277ef 100644 --- a/lib/Perl/Dist/Strawberry/Step/CreateReleaseNotes.pm +++ b/lib/Perl/Dist/Strawberry/Step/CreateReleaseNotes.pm @@ -15,8 +15,13 @@ sub run { my $self = shift; $self->boss->message(2, "Creating Release Notes"); + + my $suffix = $self->{config}->{suffix} // ''; + if ($suffix) { + $self->boss->message(2, "Appending suffix ${suffix}"); + } - my $html_file = catfile($self->global->{output_dir}, $self->global->{output_basename} .".html"); + my $html_file = catfile($self->global->{output_dir}, $self->global->{output_basename} . $suffix . ".html"); my $tt_file = catfile($self->global->{dist_sharedir}, qw/extra-files release_notes.html.tt/); # get release date diff --git a/lib/Perl/Dist/Strawberry/Step/InstallPerlCore.pm b/lib/Perl/Dist/Strawberry/Step/InstallPerlCore.pm index bfcae33..a0e56e9 100644 --- a/lib/Perl/Dist/Strawberry/Step/InstallPerlCore.pm +++ b/lib/Perl/Dist/Strawberry/Step/InstallPerlCore.pm @@ -112,6 +112,11 @@ sub run { my $u64 = defined $self->global->{perl_64bitint} ? $self->global->{perl_64bitint} : ($self->{config}->{perl_64bitint} // $self->{config}->{use_64_bit_int} // 0); # XXX use_64_bit_int is for backwards compatibility + # Optionally override the default optimization settings. + # This hack is needed as some perls need -Os to build but then modules need -O2. + my $optimize_core = $self->global->{optimize_core} // $self->{config}->{optimize_core}; + my $optimize_cpan = $self->global->{optimize_cpan} // $self->{config}->{optimize_cpan}; + # Build win32 perl SCOPE: { my $wd = $self->_push_dir( $unpack_to, $perlsrc, 'win32' ); @@ -160,6 +165,10 @@ sub run { $new_env->{PROCESSOR_ARCHITECTURE} = 'x86'; push @make_args, 'WIN64=undef'; } + if ($optimize_core) { + push @make_args, "OPTIMIZE=${optimize_core}"; + $self->boss->message(3, "Building core using OPTIMIZE=${optimize_core}"); + } my $maketool = $self->global->{maketool} || 'dmake'; #create debuging build scripts in 'win32' subdir @@ -256,6 +265,28 @@ sub run { die "FATAL: perl.exe not properly installed" unless -f catfile($image_dir, qw/perl bin perl.exe/); + if ($optimize_cpan) { + my $config_heavy = catfile($image_dir, qw/perl lib Config_heavy.pl/); + if (-e $config_heavy) { # it should always be there + $self->boss->message(3, "Updating optimize settings in Config_heavy.pl"); + #use File::Copy qw /copy/; + #my $bk = "${config_heavy}.orig"; + #copy $config_heavy, $bk; # directory rw probs - disable for now + local $/ = undef; + open my $fh, $config_heavy or die "Unable to open $config_heavy for reading, $?"; + my $data = <$fh>; + $fh->close; + # now update the file + $data =~ s/^optimize=(.+)$/my_optimize_core_build=$1\noptimize='$optimize_cpan'/m; + my $ro_flag = $self->_unset_ro($config_heavy); + open my $ofh, '>', $config_heavy or die "Unable to open $config_heavy for writing, $?"; + print {$ofh} $data; + $ofh->close; + $self->_restore_ro($config_heavy, $ro_flag); + #$self->_restore_ro($bk, $ro_flag); + } + }; + # Create some missing directories my @d = ( catdir($image_dir, qw/perl vendor lib/), catdir($image_dir, qw/perl site bin/), diff --git a/share/64bit-5.32.1.1.pp b/share/64bit-5.32.1.1.pp index 12479de..f05896e 100755 --- a/share/64bit-5.32.1.1.pp +++ b/share/64bit-5.32.1.1.pp @@ -86,7 +86,7 @@ '/perl-5.32/win32_config.gc.tt' => 'win32/config.gc', '/perl-5.32/perlexe.rc.tt' => 'win32/perlexe.rc', '/perl-5.32/win32_config_H.gc' => 'win32/config_H.gc', # enables gdbm/ndbm/odbm - '/perl-5.32/win32_FindExt.pm' => 'win32/FindExt.pm', + '/perl-5.32/win32_FindExt.pm' => 'win32/FindExt.pm', # needed? }, license => { #SRC paths are relative to the perl src root 'Readme' => '/licenses/perl/Readme', diff --git a/share/64bit-5.34.3.1.pp b/share/64bit-5.34.3.1.pp new file mode 100644 index 0000000..4306b8c --- /dev/null +++ b/share/64bit-5.34.3.1.pp @@ -0,0 +1,517 @@ +### job description for building strawberry perl + +#Available '<..>' macros: +# is placeholder for http://strawberryperl.com/package +# is placeholder for Perl::Dist::Strawberry's distribution sharedir +# is placeholder for c:\strawberry + +{ + app_version => '5.34.3.1', #BEWARE: do not use '.0.0' in the last two version digits + bits => 64, + beta => 0, + app_fullname => 'Strawberry Perl (64-bit)', + app_simplename => 'strawberry-perl', + maketool => 'gmake', # 'dmake' or 'gmake' + build_job_steps => [ + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::BinaryToolsAndLibs', + install_packages => { + #tools + 'dmake' => '/kmx/64_tools/64bit_dmake-warn_20170512.zip', + 'pexports' => '/kmx/64_tools/64bit_pexports-0.47-bin_20170426.zip', + 'patch' => '/kmx/64_tools/64bit_patch-2.5.9-7-bin_20100110_UAC.zip', + #gcc, gmake, gdb & co. + 'gcc-toolchain' => { url=>'/kmx/64_gcctoolchain/mingw64-w64-gcc8.3.0_20190316.zip', install_to=>'c' }, + 'gcc-license' => '/kmx/64_gcctoolchain/mingw64-w64-gcc8.3.0_20190316-lic.zip', + #libs + 'bzip2' => '/kmx/64_libs/gcc83-2019Q2/64bit_bzip2-1.0.6-bin_20190522.zip', + 'db' => '/kmx/64_libs/gcc83-2019Q2/64bit_db-6.2.38-bin_20190522.zip', + 'expat' => '/kmx/64_libs/gcc83-2019Q2/64bit_expat-2.2.6-bin_20190522.zip', + 'fontconfig' => '/kmx/64_libs/gcc83-2019Q2/64bit_fontconfig-2.13.1-bin_20190522.zip', + 'freeglut' => '/kmx/64_libs/gcc83-2020Q1/64bit_freeglut-2.8.1-bin_20200209.zip', + 'freetype' => '/kmx/64_libs/gcc83-2019Q2/64bit_freetype-2.10.0-bin_20190522.zip', + 'fribidi' => '/kmx/64_libs/gcc83-2020Q3/64bit_fribidi-1.0.10-bin_20200712.zip', + 'gdbm' => '/kmx/64_libs/gcc83-2019Q2/64bit_gdbm-1.18-bin_20190522.zip', + 'giflib' => '/kmx/64_libs/gcc83-2019Q2/64bit_giflib-5.1.9-bin_20190522.zip', + 'gmp' => '/kmx/64_libs/gcc83-2019Q2/64bit_gmp-6.1.2-bin_20190522.zip', + 'graphite2' => '/kmx/64_libs/gcc83-2019Q2/64bit_graphite2-1.3.13-bin_20190522.zip', + 'harfbuzz' => '/kmx/64_libs/gcc83-2019Q2/64bit_harfbuzz-2.3.1-bin_20190522.zip', + 'jpeg' => '/kmx/64_libs/gcc83-2019Q2/64bit_jpeg-9c-bin_20190522.zip', + 'libffi' => '/kmx/64_libs/gcc83-2020Q1/64bit_libffi-3.3-bin_20200207.zip', + 'libgd' => '/kmx/64_libs/gcc83-2019Q2/64bit_libgd-2.2.5-bin_20190522.zip', + 'liblibiconv' => '/kmx/64_libs/gcc83-2019Q2/64bit_libiconv-1.16-bin_20190522.zip', + 'libidn2' => '/kmx/64_libs/gcc83-2019Q2/64bit_libidn2-2.1.1-bin_20190522.zip', + 'liblibpng' => '/kmx/64_libs/gcc83-2019Q2/64bit_libpng-1.6.37-bin_20190522.zip', + 'liblibssh2' => '/kmx/64_libs/gcc83-2019Q2/64bit_libssh2-1.8.2-bin_20190522.zip', + 'libunistring' => '/kmx/64_libs/gcc83-2019Q2/64bit_libunistring-0.9.10-bin_20190522.zip', + 'liblibxml2' => '/kmx/64_libs/gcc83-2019Q2/64bit_libxml2-2.9.9-bin_20190522.zip', + 'liblibXpm' => '/kmx/64_libs/gcc83-2019Q2/64bit_libXpm-3.5.12-bin_20190522.zip', + 'liblibxslt' => '/kmx/64_libs/gcc83-2019Q2/64bit_libxslt-1.1.33-bin_20190522.zip', + 'libwebp' => '/kmx/64_libs/gcc83-2020Q3/64bit_libwebp-1.1.0-bin_20200712.zip', + 'mpc' => '/kmx/64_libs/gcc83-2019Q2/64bit_mpc-1.1.0-bin_20190522.zip', + 'mpfr' => '/kmx/64_libs/gcc83-2019Q2/64bit_mpfr-4.0.2-bin_20190522.zip', + 'openssl' => '/kmx/64_libs/gcc83-2021Q1/64bit_openssl-1.1.1i-bin_20210124.zip', + 'postgresql' => '/kmx/64_libs/gcc83-2019Q2/64bit_postgresql-11.3-bin_20190522.zip', + 'readline' => '/kmx/64_libs/gcc83-2019Q2/64bit_readline-8.0-bin_20190522.zip', + 't1lib' => '/kmx/64_libs/gcc83-2019Q2/64bit_t1lib-5.1.2-bin_20190522.zip', + 'termcap' => '/kmx/64_libs/gcc83-2019Q2/64bit_termcap-1.3.1-bin_20190522.zip', + 'tiff' => '/kmx/64_libs/gcc83-2019Q2/64bit_tiff-4.0.10-bin_20190522.zip', + 'xz' => '/kmx/64_libs/gcc83-2019Q2/64bit_xz-5.2.4-bin_20190522.zip', + 'zlib' => '/kmx/64_libs/gcc83-2019Q2/64bit_zlib-1.2.11-bin_20190522.zip', + #special cases + 'libmysql' => '/kmx/64_libs/gcc71-2017Q2/64bit_mysql-5.7.16-bin_20170517.zip', + }, + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::FilesAndDirs', + commands => [ + { do=>'removefile', args=>[ '/c/i686-w64-mingw32/lib/libglut.a', '/c/i686-w64-mingw32/lib/libglut32.a' ] }, #XXX-32bit only workaround + { do=>'movefile', args=>[ '/c/lib/libdb-6.1.a', '/c/lib/libdb.a' ] }, #XXX ugly hack + { do=>'removefile', args=>[ '/c/bin/gccbug', '/c/bin/ld.gold.exe', '/c/bin/ld.bfd.exe' ] }, + { do=>'removefile_recursive', args=>[ '/c', qr/.+\.la$/i ] }, # https://rt.cpan.org/Public/Bug/Display.html?id=127184 + ], + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::InstallPerlCore', + url => 'https://www.cpan.org/src/5.0/perl-5.34.3.tar.gz', + cf_email => 'strawberry-perl@project', #IMPORTANT: keep 'strawberry-perl' before @ + perl_debug => 0, # can be overridden by --perl_debug=N option + perl_64bitint => 1, # ignored on 64bit, can be overridden by --perl_64bitint | --noperl_64bitint option + #optimize_core => '-Os -falign-functions -falign-jumps -falign-labels -falign-loops -freorder-blocks -freorder-blocks-algorithm=stc -freorder-blocks-and-partition', + #optimize_core => '-Os', + # build CPAN modules using these OPTIMIZE flags + #optimize_cpan => '-O2', + # buildoptextra => '-D__USE_MINGW_ANSI_STDIO', # not needed since 5.33.3 + patch => { #DST paths are relative to the perl src root + '/msi/files/perlexe.ico' => 'win32/perlexe.ico', + '/perl-5.32/win32_config.gc.tt' => 'win32/config.gc', + '/perl-5.32/perlexe.rc.tt' => 'win32/perlexe.rc', + '/perl-5.32/win32_FindExt.pm' => 'win32/FindExt.pm', + 'config_H.gc' => { + I_DBM => 'define', + I_GDBM => 'define', + I_NDBM => 'define', + HAS_BUILTIN_CHOOSE_EXPR => 'define', + HAS_SYMLINK => 'define', + HAS_ISFINITE => 'define', # part of https://github.com/Perl/perl5/pull/22257 + }, + 'config.gc' => { # see Step.pm for list of default updates + d_builtin_choose_expr => 'define', + d_mkstemp => 'define', + d_ndbm => 'define', + d_symlink => 'define', # many cpan modules fail tests when defined + i_db => 'define', + i_dbm => 'define', + i_gdbm => 'define', + i_ndbm => 'define', + d_isfinite => 'define', # part of https://github.com/Perl/perl5/pull/22257 + osvers => '10', + }, + }, + license => { #SRC paths are relative to the perl src root + 'Readme' => '/licenses/perl/Readme', + 'Artistic' => '/licenses/perl/Artistic', + 'Copying' => '/licenses/perl/Copying', + }, + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::UpgradeCpanModules', + exceptions => [ + # possible 'do' options: ignore_testfailure | skiptest | skip - e.g. + #{ do=>'ignore_testfailure', distribution=>'ExtUtils-MakeMaker-6.72' }, + #{ do=>'ignore_testfailure', distribution=>qr/^IPC-Cmd-/ }, + { do=>'ignore_testfailure', distribution=>qr/^Net-Ping-/ }, # 2.72 fails + { do=>'skip', distribution=>qr/^Storable-/ }, # 3.25 fails + { do=>'ignore_testfailure', distribution=>qr/^Archive-Tar/ }, # fails symlink tests + ] + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::InstallModules', + modules => [ + { module=>'Capture::Tiny', ignore_testfailure=>1 }, #XXX-TODO https://github.com/dagolden/Capture-Tiny/issues/29 + { module=>'Path::Tiny', ignore_testfailure=>1 }, #XXX-TODO 5.30 t/zzz-spec.t fails https://github.com/dagolden/Path-Tiny/issues/228 + 'TAP::Harness::Restricted', #to be able to skip only some tests + # IPC related + { module=>'IPC-Run', skiptest=>1 }, #XXX-TODO trouble with 'Terminating on signal SIGBREAK(21)' https://metacpan.org/release/IPC-Run + { module=>'IPC-System-Simple', ignore_testfailure=>1 }, #XXX-TODO t/07_taint.t fails https://metacpan.org/release/IPC-System-Simple + qw/ IPC-Run3 /, + + # LWP + TLS + { module=>'Net::SSLeay', ignore_testfailure=>1 }, # openssl-1.1.1 related + { module=>'Mozilla::CA' }, # optional dependency of IO-Socket-SSL + { module=>'IO::Socket::SSL', skiptest=>1, env=>{ 'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/nonblock.t t/mitm.t t/verify_fingerprint.t t/session_ticket.t t/sni_verify.t' } }, + { module=>'LWP', skiptest=>1 }, # XXX-HACK: 6.08 is broken + { module=>'LWP::Protocol::https', env=>{ 'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/https_proxy.t' } }, #https://rt.perl.org/Ticket/Display.html?id=132863 + + # install cpanm as soon as possible + qw/ App::cpanminus /, + + ] + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::InstallModules', + modules => [ + # gdbm / db related + { module => 'BerkeleyDB', + makefilepl_param=>'"OPTIMIZE=-Os"', # otherwise test failures (crash in t/strict.pm) + }, + qw/ DB_File DBM-Deep /, + ] + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::InstallModules', + modules => [ + #removed from core in 5.20 + qw/ Module::Build /, + { module=>'B::Lint', ignore_testfailure=>1 }, #XXX-TODO https://rt.cpan.org/Public/Bug/Display.html?id=101115 #XXX-FAIL-5.32.1 + { module=>'Archive::Extract', ignore_testfailure=>1 }, #XXX-TODO-5.28/64bit + { module=>'CPANPLUS', env=>{ 'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/40_CPANPLUS-Internals-Report.t' } }, + #XXX-TODO https://rt.cpan.org/Public/Bug/Display.html?id=116479 + qw/ CPANPLUS::Dist::Build File::CheckTree Log::Message Module::Pluggable Object::Accessor Text::Soundex Term::UI Pod::LaTeX Tree::DAG_Node /, + + # YAML, JSON & co. + qw/ JSON Cpanel::JSON::XS JSON::XS JSON::MaybeXS YAML YAML::Tiny YAML::XS /, + + # pkg-config related + { module=>'PkgConfig', makefilepl_param=>'--script=pkg-config' }, + 'ExtUtils::PkgConfig', + ] + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::InstallModules', + modules => [ + { # needed for Win32::Exe + module => 'XML::Simple', + env => { MAKEFLAGS => '', }, # does not like parallel builds? + }, + + # win32 related + qw/Win32API::Registry Win32::TieRegistry/, + { module=>'Win32::OLE', ignore_testfailure=>1 }, #XXX-TODO: ! Testing Win32-OLE-0.1711 #XXX-FAIL-5.32.1 + { module=>'Win32::GuiTest', skiptest=>1 }, + { module=>'Win32::API', ignore_testfailure=>1 }, #XXX-TODO: https://rt.cpan.org/Public/Bug/Display.html?id=107450 + 'Win32::Exe', + { module=>'/kmx/perl-modules-patched/Win32-Pipe-0.025_patched.tar.gz' }, #XXX-FIXME + qw/ Win32-Daemon Win32-EventLog Win32-Process Win32-WinError Win32-UTCFileTime /, + { module => 'Win32-File-Object', env=>{ 'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/05_links.t' } }, + qw/ Win32-ShellQuote Win32::Console Win32::Job Win32::ServiceManager Win32::Service /, + { module => 'Win32-Clipboard', ignore_testfailure=>1 }, # inconsistent failures of tests 7 & 9 + { + module => 'https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/download/patched_cpan_modules/Win32-Console-ANSI-1.11_001.tar.gz', + env => { 'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/04_DisplayEdition.t' } + }, + { module=>'/kmx/perl-modules-patched/Win32-SerialPort-0.22_patched.tar.gz', skiptest=>1 }, + qw/ Sys::Syslog /, + + # term related + { module=>'Term::ReadKey', ignore_testfailure=>1 }, + { module=>'Term::ReadLine::Perl', env=>{ PERL_MM_NONINTERACTIVE=>1 } }, + ] + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::InstallModules', + modules => [ + + # compression + { module=>'Archive::Zip', ignore_testfailure=>1 }, #XXX-TODO t/25_traversal.t + qw/ IO-Compress-Lzma Archive::Extract /, + # 'Compress-unLZMA', # fails on 5.34 + + # file related + { module=>'File-ShareDir-Install', ignore_testfailure=>1 }, #XXX-TODO-5.28 + { module=>'File::Copy::Recursive', ignore_testfailure=>1 }, #XXX-FAIL-5.32.1 + qw/ File-Find-Rule File-HomeDir File-Listing File-Remove File-ShareDir File-Which File::Map /, + { module=>'File::Slurp', ignore_testfailure=>1 }, + qw/ File::Slurper /, + qw/ IO::All Path::Tiny Path::Class /, + + # math related + 'Devel::CheckLib', #this used to fail + qw/ Math-Round Math-BigInt-GMP Math-GMP Math-MPFR Math-MPC /, + qw/ ExtUtils::F77 /, + + # SSH & telnet + qw/ Net-SSH2 Net::Telnet /, + + # network + qw/ IO::Socket::IP IO::Socket::INET6 IO::Socket::Socks /, + # EV4.32 + perl-5.30 fails XXX-FIXME + qw/ HTTP-Server-Simple /, + { module=>'/kmx/perl-modules-patched/Crypt-SSLeay-0.72_patched.tar.gz' }, #XXX-FIXME + { module=>'Mojolicious', env=>{ 'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/mojolicious/websocket_lite_app.t' } }, #https://github.com/kraih/mojo/issues/1011 + { module=>'WWW::Mechanize', skiptest=>1 }, # tests hang + ] + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::InstallModules', + modules => [ + # XML & co. + { + module => 'XML::SAX::Expat', + env => { MAKEFLAGS => '', }, # does not like parallel builds? + }, + qw/ XML-LibXML XML-LibXSLT XML-Parser XML-SAX /, + { module=>'XML::Twig', ignore_testfailure=>1 }, #XXX-TODO XML-Twig-3.52 fails + + ] + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::InstallModules', + modules => [ + # data/text processing + { module=>'IO::Stringy', env=>{ 'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/IO_InnerFile.t' } }, #https://rt.cpan.org/Public/Bug/Display.html?id=103895 + qw/ Text-Diff Text-Patch Text::CSV Text::CSV_XS Tie::Array::CSV Excel::Writer::XLSX Spreadsheet::WriteExcel Spreadsheet::ParseExcel /, + # 'Spreadsheet::ParseXLSX', # disabled due to recent dependency failures - https://github.com/DCIT/perl-CryptX/issues/118 + ], + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::InstallModules', + modules => [ + # database stuff + qw/ DBI DBD-ODBC DBD-SQLite DBD-CSV DBD-ADO DBIx-Class DBIx-Simple /, + 'https://cpan.metacpan.org/authors/id/T/TU/TURNSTEP/DBD-Pg-3.8.0.tar.gz', ###{ module=>'DBD::Pg' }, + # { module=>'DBD::mysql' }, # disable for 5.34 - needs mysql 8 + # { module=>'DBD::Oracle', makefilepl_param=>'-V 12.2.0.1.0', env=>{ ORACLE_HOME=>'c:\ora122instant64' }, skiptest=>1 }, ## requires Oracle Instant Client 64bit!!! + + # crypto related + { module =>'Convert-PEM', ignore_testfailure=>1 }, #XXX-TODO Convert-PEM-0.08 fails + qw/ Convert-PEM /, + + # crypto - disabled for 5.34 + # qw/ CryptX Crypt::OpenSSL::Bignum Crypt::OpenSSL::DSA Crypt-OpenSSL-RSA Crypt-OpenSSL-Random Crypt-OpenSSL-X509 /, + # 'KMX/Crypt-OpenSSL-AES-0.05.tar.gz', #XXX-FIXME patched https://metacpan.org/pod/Crypt::OpenSSL::AES https://rt.cpan.org/Public/Bug/Display.html?id=77605 + # #Crypt-SMIME ? + # qw/ Crypt::CBC Crypt::Blowfish Crypt::CAST5_PP Crypt::DES Crypt::DES_EDE3 Crypt::DSA Crypt::IDEA Crypt::Rijndael Crypt::Twofish Crypt::Serpent Crypt::RC6 /, + # qw/ Digest-MD2 Digest-MD5 Digest-SHA Digest-SHA1 Crypt::RIPEMD160 Digest::Whirlpool Digest::HMAC Digest::CMAC /, + # 'Alt::Crypt::RSA::BigInt', #hack Crypt-RSA without Math::PARI - https://metacpan.org/release/Crypt-RSA + # qw/ Crypt-DSA Crypt::DSA::GMP /, + + # qw/ Bytes::Random::Secure Crypt::OpenPGP /, + #qw/ Module::Signature /, #XXX-TODO still not able to properly handle CRLF - https://metacpan.org/release/Module-Signature + + # date/time + { module=>'Test2::Plugin::NoWarnings', ignore_testfailure=>1 }, #otherwise DateTime fails + qw/ DateTime Date::Format DateTime::Format::DateParse DateTime::TimeZone::Local::Win32 Time::Moment /, + + # e-mail + qw/ List::MoreUtils::XS List::MoreUtils /, # required by Net::IMAP::Client - https://rt.cpan.org/Public/Bug/Display.html?id=122875 + qw/ Email::MIME::Kit Email::Sender Email::Simple Email::Valid Email::Stuffer Mail::Send /, + qw/ Net::SMTPS Net::SMTP Net::IMAP::Client Net::POP3 /, + { module=>'Net::DNS', skiptest=>1 }, # tests might hang due to network issues + + # graphics + 'GD', + ##{ module=>'http://chorny.net/strawberry/Imager-1.006.zip', ignore_testfailure=>1 }, #https://rt.cpan.org/Ticket/Display.html?id=124001 + { module=>'Imager', ignore_testfailure=>1 }, #https://rt.cpan.org/Ticket/Display.html?id=124001 + qw/ Imager-File-GIF Imager-File-JPEG Imager-File-PNG Imager-File-TIFF Imager-Font-FT2 Imager-Font-W32 /, + { module=>'OpenGL', ignore_testfailure=>1 }, + + # XML/SOAP webservices + { + module => 'HTTP::Daemon', + env => { MAKEFLAGS => '', }, # does not like parallel builds? + }, + 'Log::Report', + qw/ SOAP-Lite /, + #qw/ XML::Compile::SOAP12 XML::Compile::SOAP11 XML::Compile::WSDL11 /, + + # utils + qw/ App::cpanoutdated App::pmuninstall pler App-module-version App-local-lib-Win32Helper /, + + # par & ppm + qw/ PAR PAR::Dist::FromPPD PAR::Dist::InstallPPD PAR::Repository::Client /, + # The build path in ppm.xml is derived from $ENV{TMP}. So set TMP to a dedicated location inside of the + # distribution root to prevent it being locked to the temp directory of the build machine. + { module=>'/kmx/perl-modules-patched/PPM-11.11_04.tar.gz', env=>{ TMP=>'\ppm' } }, #XXX-FIXME + + # exceptions + qw/ Try-Tiny Carp::Always autodie /, + + # templates + { module=>'Template', env=>{ 'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/process_dir.t' } }, #XXX-NEW 5.26.0 https://github.com/abw/Template2/pull/67 + qw/ Template-Tiny /, + + # OO - moose, moo & co. + qw/ Moose MooseX-Types MooseX::Types::Structured /, + # { module=>'MooseX::Declare', ignore_testfailure=>1 }, #XXX-PREREQ-ONLY https://rt.cpan.org/Public/Bug/Display.html?id=97690 + qw/ MooseX::ClassAttribute MooseX::Role::Parameterized MooseX::NonMoose Moo /, + + # OO - others + qw/ Class::Accessor Class::Accessor::Lite Class::XSAccessor Class::Tiny Object::Tiny /, + + # dumpers + qw/ Data::Dump Data::Printer /, + { module=>'Data-Dump-Streamer', ignore_testfailure=>1 }, #XXX-TODO ! Testing Data-Dump-Streamer-2.37 failed + + # misc + #{ module=>'Alien::Tidyp', buildpl_param=>'--srctarball=http://strawberryperl.com/package/kmx/testing/tidyp-1.04.tar.gz' }, #gcc 8.3 failure + qw/ CPAN::SQLite /, + { module => 'FCGI', env => { 'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/02-unix_domain_socket.t' } }, + qw/ IO::String /, + { module=>'Unicode::UTF8', ignore_testfailure=>1 }, #XXX-TODO-5.28 + qw/ V Modern::Perl Perl::Tidy /, + qw/ FFI::Raw FFI::Platypus /, + qw/ PadWalker Devel::vscode /, + + # GUI - not yet + #qw/IUP/, + ], + + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::FixShebang', + shebang => '#!perl', + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::FilesAndDirs', + commands => [ + # directories + { do=>'createdir', args=>[ '/cpan' ] }, + { do=>'createdir', args=>[ '/cpan/sources' ] }, + { do=>'createdir', args=>[ '/win32' ] }, + # templated files + { do=>'apply_tt', args=>[ '/config-files/CPAN_Config.pm.tt', '/perl/lib/CPAN/Config.pm', {}, 1 ] }, #XXX-temporary empty tt_vars, no_backup=1 + { do=>'apply_tt', args=>[ '/extra-files/README.txt.tt', '/README.txt' ] }, + { do=>'apply_tt', args=>[ '/extra-files/DISTRIBUTIONS.txt.tt', '/DISTRIBUTIONS.txt' ] }, + # fixed files + { do=>'copyfile', args=>[ '/extra-files/licenses/License.rtf', '/licenses/License.rtf' ] }, + { do=>'copyfile', args=>[ '/extra-files/relocation.pl.bat', '/relocation.pl.bat' ] }, + { do=>'copyfile', args=>[ '/extra-files/update_env.pl.bat', '/update_env.pl.bat' ] }, + { do=>'copyfile', args=>[ '/extra-files/win32/cpan.ico', '/win32/cpan.ico' ] }, + { do=>'copyfile', args=>[ '/extra-files/win32/onion.ico', '/win32/onion.ico' ] }, + { do=>'copyfile', args=>[ '/extra-files/win32/perldoc.ico', '/win32/perldoc.ico' ] }, + { do=>'copyfile', args=>[ '/extra-files/win32/perlhelp.ico', '/win32/perlhelp.ico' ] }, + { do=>'copyfile', args=>[ '/extra-files/win32/strawberry.ico', '/win32/strawberry.ico' ] }, + { do=>'copyfile', args=>[ '/extra-files/win32/win32.ico', '/win32/win32.ico' ] }, + { do=>'copyfile', args=>[ '/extra-files/win32/metacpan.ico', '/win32/metacpan.ico' ] }, + # URLs + { do=>'apply_tt', args=>[ '/extra-files/win32/CPAN Module Search.url.tt', '/win32/CPAN Module Search.url' ] }, + { do=>'apply_tt', args=>[ '/extra-files/win32/MetaCPAN Search Engine.url.tt', '/win32/MetaCPAN Search Engine.url' ] }, + { do=>'apply_tt', args=>[ '/extra-files/win32/Learning Perl (tutorials, examples).url.tt', '/win32/Learning Perl (tutorials, examples).url' ] }, + { do=>'apply_tt', args=>[ '/extra-files/win32/Live Support (chat).url.tt', '/win32/Live Support (chat).url' ] }, + { do=>'apply_tt', args=>[ '/extra-files/win32/Perl Documentation.url.tt', '/win32/Perl Documentation.url' ] }, + { do=>'apply_tt', args=>[ '/extra-files/win32/Strawberry Perl Release Notes.url.tt', '/win32/Strawberry Perl Release Notes.url' ] }, + { do=>'apply_tt', args=>[ '/extra-files/win32/Strawberry Perl Website.url.tt', '/win32/Strawberry Perl Website.url' ] }, + # cleanup (remove unwanted files/dirs) + { do=>'removefile', args=>[ '/perl/vendor/lib/Crypt/._test.pl', '/perl/vendor/lib/DBD/testme.tmp.pl' ] }, + { do=>'removefile', args=>[ '/perl/bin/nssm_32.exe.bat', '/perl/bin/nssm_64.exe.bat' ] }, + { do=>'removefile_recursive', args=>[ '/perl', qr/.+\.dll\.AA[A-Z]$/i ] }, + { do=>'removedir', args=>[ '/perl/bin/freeglut.dll' ] }, #XXX OpenGL garbage + # cleanup cpanm related files + { do=>'removedir', args=>[ '/perl/site/lib/MSWin32-x86-multi-thread-64int' ] }, + { do=>'removedir', args=>[ '/perl/site/lib/MSWin32-x86-multi-thread' ] }, + { do=>'removedir', args=>[ '/perl/site/lib/MSWin32-x64-multi-thread' ] }, + ], + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::CreateRelocationFile', + reloc_in => '/relocation/relocation.txt.initial', + reloc_out => '/relocation.txt', + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::OutputZIP', # no options needed + }, + ### NEXT STEP ########################### + { + disable => $ENV{SKIP_MSI_STEP}, ### hack + plugin => 'Perl::Dist::Strawberry::Step::OutputMSI', + exclude => [ + #'dirname\subdir1\subdir2', + #'dirname\file.pm', + 'relocation.pl.bat', + 'update_env.pl.bat', + ], + msi_upgrade_code => 'DBA41113-4E91-3FFC-B400-573BB4B80705', #BEWARE: fixed value for all 64bit releases (for ever) + app_publisher => 'strawberryperl.com project', + url_about => 'http://strawberryperl.com/', + url_help => 'http://strawberryperl.com/support.html', + msi_root_dir => 'Strawberry', + msi_main_icon => '\msi\files\strawberry.ico', + msi_license_rtf => '\msi\files\License-short.rtf', + msi_dialog_bmp => '\msi\files\StrawberryDialog.bmp', + msi_banner_bmp => '\msi\files\StrawberryBanner.bmp', + msi_debug => 0, + + start_menu => [ # if "description" is missing it will be set to the same value as "name" + { type=>'shortcut', name=>'Perl (command line)', icon=>'\msi\files\perlexe.ico', description=>'Quick way to get to the command line in order to use Perl', target=>'[SystemFolder]cmd.exe', workingdir=>'PersonalFolder' }, + { type=>'shortcut', name=>'Strawberry Perl Release Notes', icon=>'\msi\files\strawberry.ico', target=>'[d_win32]Strawberry Perl Release Notes.url', workingdir=>'d_win32' }, + { type=>'shortcut', name=>'Strawberry Perl README', target=>'[INSTALLDIR]README.txt', workingdir=>'INSTALLDIR' }, + { type=>'folder', name=>'Tools', members=>[ + { type=>'shortcut', name=>'CPAN Client', icon=>'\msi\files\cpan.ico', target=>'[d_perl_bin]cpan.bat', workingdir=>'d_perl_bin' }, + { type=>'shortcut', name=>'Create local library areas', icon=>'\msi\files\strawberry.ico', target=>'[d_perl_bin]llw32helper.bat', workingdir=>'d_perl_bin' }, + ] }, + { type=>'folder', name=>'Related Websites', members=>[ + { type=>'shortcut', name=>'CPAN Module Search', icon=>'\msi\files\cpan.ico', target=>'[d_win32]CPAN Module Search.url', workingdir=>'d_win32' }, + { type=>'shortcut', name=>'MetaCPAN Search Engine', icon=>'\msi\files\metacpan.ico', target=>'[d_win32]MetaCPAN Search Engine.url', workingdir=>'d_win32' }, + { type=>'shortcut', name=>'Perl Documentation', icon=>'\msi\files\perldoc.ico', target=>'[d_win32]Perl Documentation.url', workingdir=>'d_win32' }, + { type=>'shortcut', name=>'Strawberry Perl Website', icon=>'\msi\files\strawberry.ico', target=>'[d_win32]Strawberry Perl Website.url', workingdir=>'d_win32' }, + { type=>'shortcut', name=>'Learning Perl (tutorials, examples)', icon=>'\msi\files\perldoc.ico', target=>'[d_win32]Learning Perl (tutorials, examples).url', workingdir=>'d_win32' }, + { type=>'shortcut', name=>'Live Support (chat)', icon=>'\msi\files\onion.ico', target=>'[d_win32]Live Support (chat).url', workingdir=>'d_win32' }, + ] }, + ], + env => { + #TERM => "dumb", + }, + + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::InstallModules', + # modules specific to portable edition + modules => [ 'Portable' ], + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::SetupPortablePerl', # no options needed + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::FilesAndDirs', + commands => [ # files and dirs specific to portable edition + { do=>'removefile', args=>[ '/README.txt', '/perl2.reloc.txt', '/perl1.reloc.txt', '/relocation.txt', + '/update_env.pl.bat', '/relocation.pl.bat' ] }, + { do=>'createdir', args=>[ '/data' ] }, + { do=>'apply_tt', args=>[ '/portable/portable.perl.tt', '/portable.perl', {gcchost=>'x86_64-w64-mingw32', gccver=>'8.3.0'} ] }, + { do=>'copyfile', args=>[ '/portable/portableshell.bat', '/portableshell.bat' ] }, + { do=>'apply_tt', args=>[ '/portable/README.portable.txt.tt', '/README.txt' ] }, + # cleanup cpanm related files + { do=>'removedir', args=>[ '/perl/site/lib/MSWin32-x86-multi-thread-64int' ] }, + { do=>'removedir', args=>[ '/perl/site/lib/MSWin32-x86-multi-thread' ] }, + { do=>'removedir', args=>[ '/perl/site/lib/MSWin32-x64-multi-thread' ] }, + ], + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::OutputPortableZIP', # no options needed + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::CreateReleaseNotes', # no options needed + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::OutputLogZIP', # no options needed + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::OutputReleasesJSONSnippet', # no options needed + }, + + ], +} diff --git a/share/64bit-5.38.3.1.pp b/share/64bit-5.38.3.1.pp new file mode 100644 index 0000000..fd6f3a6 --- /dev/null +++ b/share/64bit-5.38.3.1.pp @@ -0,0 +1,657 @@ +# vim: syntax=perl + +### job description for building strawberry perl + +#Available '<..>' macros: +# is placeholder for http://strawberryperl.com/package +# is placeholder for Perl::Dist::Strawberry's distribution sharedir +# is placeholder for c:\strawberry + +{ + app_version => '5.38.3.1', #BEWARE: do not use '.0.0' in the last two version digits + bits => 64, + beta => 0, + app_fullname => 'Strawberry Perl (64-bit)', + app_simplename => 'strawberry-perl', + maketool => 'gmake', # 'dmake' or 'gmake' + build_job_steps => [ + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::BinaryToolsAndLibs', + install_packages => { + #tools + #gcc, gmake, gdb & co. + 'gcc-toolchain' => { url => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/dev_gcc13.1_20230606/winlibs_gcc13.1r5_sans_make.zip', install_to => 'c' }, + #patch => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/dev_gcc10.3_20230313/64bit_patch-2.7.5-bin_20230420.zip', + 'patch' => '/kmx/64_tools/64bit_patch-2.5.9-7-bin_20100110_UAC.zip', + #special cases + #'libmysql' => '/kmx/64_libs/gcc71-2017Q2/64bit_mysql-5.7.16-bin_20170517.zip', + # gcc13 libs + extlibs_gcc13_collated => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/dev_gcc13.1_20230606/extlibs_gcc13_collated_nonpdl_no_t1lib_20230606.zip', + gmp => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/dev_gcc13.1_20230606/64bit_gmp-6.2.1-bin_20230606.zip', + mpc => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/dev_gcc13.1_20230606/64bit_mpc-1.3.1-bin_20230606.zip', + mpfr => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/dev_gcc13.1_20230606/64bit_mpfr-4.2.0-bin_20230606.zip', + libgd => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/dev_gcc13.1_20230502/64bit_libgd-2.3.2-bin_20230502.zip', + zgdb => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/dev_gcc13.1_20230606/64bit_gdb-13.1-bin_20230626.zip', + termcap => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/dev_gcc13.1_20230606/64bit_termcap-1.3.1-bin_20230606.zip', + libfribidi => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/dev_gcc13.1_20230606/64bit_fribidi-1.0.12-bin_20230606.zip', + libreadline => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/dev_gcc13.1_20230606/64bit_readline-8.2-bin_20230606.zip', + libwebp => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/dev_gcc13.1_20230606/64bit_libwebp-1.3.2-bin_20231211.zip', + libfontconfig => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/dev_gcc13.1_20230606/64bit_fontconfig-2.13.1-bin_20230606.zip', + libfribidi => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/dev_gcc13.1_20230606/64bit_fribidi-1.0.12-bin_20230606.zip', + libgdbm => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/dev_gcc13.1_20230606/64bit_gdbm-1.19-bin_20230606.zip', + freeglut => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/dev_gcc13.1_20230606/64bit_freeglut-3.4.0-bin_20230606.zip', + libiidn => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/dev_gcc13.1_20230606/64bit_libidn2-2.1.1-bin_20230606.zip', + libunistring => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/dev_gcc13.1_20230606/64bit_libunistring-1.1-bin_20230606.zip', + }, + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::FilesAndDirs', + commands => [ + { do=>'removefile', args=>[ '/c/i686-w64-mingw32/lib/libglut.a', '/c/i686-w64-mingw32/lib/libglut32.a' ] }, #XXX-32bit only workaround + { do=>'movefile', args=>[ '/c/lib/libdb-6.1.a', '/c/lib/libdb.a' ] }, #XXX ugly hack + { do=>'removefile', args=>[ '/c/bin/gccbug', '/c/bin/ld.gold.exe', '/c/bin/ld.bfd.exe' ] }, + { do=>'removefile_recursive', args=>[ '/c', qr/.+\.la$/i ] }, # https://rt.cpan.org/Public/Bug/Display.html?id=127184 + { do=>'make_rw', args=>[ '/c/include/db.h' ] }, # band-aid for ro flag on db headers + { do=>'make_rw', args=>[ '/c/include/db_cxx.h' ] }, + ], + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::InstallPerlCore', + url => 'https://www.cpan.org/src/5.0/perl-5.38.3.tar.gz', + cf_email => 'strawberry-perl@project', #IMPORTANT: keep 'strawberry-perl' before @ + perl_debug => 0, # can be overridden by --perl_debug=N option + perl_64bitint => 1, # ignored on 64bit, can be overridden by --perl_64bitint | --noperl_64bitint option + # build core using these OPTIMIZE flags + optimize_core => '-Os -falign-functions -falign-jumps -falign-labels -falign-loops -freorder-blocks -freorder-blocks-algorithm=stc -freorder-blocks-and-partition', + # build CPAN modules using these OPTIMIZE flags + optimize_cpan => '-O2', + # buildoptextra => '-D__USE_MINGW_ANSI_STDIO', # not needed since 5.33.6 + patch => { #DST paths are relative to the perl src root + '/msi/files/perlexe.ico' => 'win32/perlexe.ico', + '/perl-5.36/perlexe.rc.tt' => 'win32/perlexe.rc', + '/perl-5.38/vmem.patch' => '*', + 'config_H.gc' => { + I_DBM => 'define', + I_GDBM => 'define', + I_NDBM => 'define', + HAS_BUILTIN_CHOOSE_EXPR => 'define', + HAS_SYMLINK => 'define', + HAS_ISFINITE => 'define', # part of https://github.com/Perl/perl5/pull/22257 + }, + 'config.gc' => { # see Step.pm for list of default updates + d_builtin_choose_expr => 'define', + d_mkstemp => 'define', + d_ndbm => 'define', + d_symlink => 'define', # many cpan modules fail tests when defined + i_db => 'define', + i_dbm => 'define', + i_gdbm => 'define', + i_ndbm => 'define', + d_isfinite => 'define', # part of https://github.com/Perl/perl5/pull/22257 + osvers => '10', + }, + }, + license => { #SRC paths are relative to the perl src root + 'Readme' => '/licenses/perl/Readme', + 'Artistic' => '/licenses/perl/Artistic', + 'Copying' => '/licenses/perl/Copying', + }, + }, + ### NEXT STEP ########################### + # { + # plugin => 'Perl::Dist::Strawberry::Step::InstallModules', + # # it seems this is needed by a dep in the upgrade script + # modules => [qw /IPC::Run3 Syntax::Keyword::Try/] + # }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::UpgradeCpanModules', + exceptions => [ + # possible 'do' options: ignore_testfailure | skiptest | skip - e.g. + #{ do=>'ignore_testfailure', distribution=>'ExtUtils-MakeMaker-6.72' }, + #{ do=>'ignore_testfailure', distribution=>qr/^IPC-Cmd-/ }, + { do=>'ignore_testfailure', distribution=>qr/^Net-Ping-/ }, # 2.72 fails + { do=>'ignore_testfailure', distribution=>qr/^Archive-Tar-/ }, # 3.02 fails + ] + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::InstallModules', + modules => [ + qw /ExtUtils::Config/, # temp for debug + { module=>'Capture::Tiny', ignore_testfailure=>1 }, #XXX-TODO https://github.com/dagolden/Capture-Tiny/issues/29 + { module=>'Path::Tiny', ignore_testfailure=>1 }, #XXX-TODO 5.30 t/zzz-spec.t fails https://github.com/dagolden/Path-Tiny/issues/228 + 'TAP::Harness::Restricted', #to be able to skip only some tests + # IPC related + { module=>'IPC-Run', skiptest=>1 }, #XXX-TODO trouble with 'Terminating on signal SIGBREAK(21)' https://metacpan.org/release/IPC-Run + { module=>'IPC-System-Simple', ignore_testfailure=>1 }, #XXX-TODO t/07_taint.t fails https://metacpan.org/release/IPC-System-Simple + qw/ IPC-Run3 /, + + # LWP + TLS + { module=>'Net::SSLeay', ignore_testfailure=>1 }, # openssl-1.1.1 related + { module=>'Mozilla::CA' }, # optional dependency of IO-Socket-SSL + { module=>'IO::Socket::SSL', skiptest=>1, env=>{ 'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/nonblock.t t/mitm.t t/verify_fingerprint.t t/session_ticket.t t/sni_verify.t' } }, + { module=>'LWP', skiptest=>1 }, # XXX-HACK: 6.08 is broken + { module=>'LWP::Protocol::https', env=>{ 'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/https_proxy.t' } }, #https://rt.perl.org/Ticket/Display.html?id=132863 + + # install cpanm as soon as possible + qw/ App::cpanminus /, + + # https://github.com/StrawberryPerl/Perl-Dist-Strawberry/issues/80 + 'https://cpan.metacpan.org/authors/id/X/XA/XAOC/ExtUtils-Depends-0.8000.tar.gz', + ] + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::InstallModules', + modules => [ + + # gdbm / db related + qw/ BerkeleyDB DB_File /, + { # PR by demerphq to build on 5.38 + module => 'https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/download/dev_20230318/DBM-Deep-2.0017.tar.gz', + env => {MAKEFLAGS => '', TEST_JOBS => '' }, + }, + + #removed from core in 5.20 + qw/ Module::Build /, + { module=>'B::Lint', ignore_testfailure=>1 }, #XXX-TODO https://rt.cpan.org/Public/Bug/Display.html?id=101115 #XXX-FAIL-5.32.1 + { module=>'Archive::Extract', ignore_testfailure=>1 }, #XXX-TODO-5.28/64bit + { module=>'CPANPLUS', env=>{ 'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/40_CPANPLUS-Internals-Report.t' } }, + #XXX-TODO https://rt.cpan.org/Public/Bug/Display.html?id=116479 + qw/ CPANPLUS::Dist::Build /, + qw/ File::CheckTree Log::Message Module::Pluggable Object::Accessor Text::Soundex Term::UI Tree::DAG_Node /, + + # https://github.com/StrawberryPerl/Perl-Dist-Strawberry/issues/92 + { module => 'https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/download/dev_20230318/Pod-Parser-1.65_01.tar.gz' }, + # qw /Pod::Latex/, # disabled - https://github.com/StrawberryPerl/Perl-Dist-Strawberry/issues/75 + + # YAML, JSON & co. + qw/ JSON Cpanel::JSON::XS JSON::XS JSON::MaybeXS YAML YAML::Tiny YAML::XS /, + + # pkg-config related + { module=>'PkgConfig', makefilepl_param=>'--script=pkg-config' }, + 'ExtUtils::PkgConfig', + + ] + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::InstallModules', + modules => [ + # win32 related + { module=>'Win32API::Registry', ignore_testfailure=>1 }, # https://github.com/StrawberryPerl/Perl-Dist-Strawberry/issues/66 + qw/Win32::TieRegistry/, + { module=>'Win32::OLE', skiptest=>1 }, #XXX-TODO: ! Testing Win32-OLE-0.1713 leaves excel dialogues and files hanging around + { module=>'Win32::GuiTest', skiptest=>1 }, + { module=>'Win32::API', ignore_testfailure=>1 }, #XXX-TODO: https://rt.cpan.org/Public/Bug/Display.html?id=107450 + { module => 'Win32::Exe', env => { MAKEFLAGS => '', TEST_JOBS => ''} }, + { module=>'/kmx/perl-modules-patched/Win32-Pipe-0.025_patched.tar.gz' }, #XXX-FIXME + # File-Remove has symlink test failures under 5.38, is needed by Win32-File-Object + { module=>'File-Remove', env=>{ 'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/05_links.t' } }, + qw/ Win32-Daemon Win32-EventLog Win32-Process Win32-File-Object Win32-WinError Win32-UTCFileTime /, + qw/ Win32-ShellQuote Win32::Console Win32::Job Win32::ServiceManager Win32::Service /, + # qw/ Win32::Console::ANSI /, # disable for now - fails tests under UCRT 5.39.10 - but patched now + { + module => 'https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/download/patched_cpan_modules/Win32-Console-ANSI-1.11_001.tar.gz', + env => { 'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/04_DisplayEdition.t' } + }, + { module => 'Win32-Clipboard', ignore_testfailure=>1 }, # inconsistent failures of tests 7 & 9 + { module=>'/kmx/perl-modules-patched/Win32-SerialPort-0.22_patched.tar.gz', skiptest=>1 }, + qw/ Sys::Syslog /, + + # term related + { module=>'Term::ReadKey', ignore_testfailure=>1 }, + { module=>'Term::ReadLine::Perl', env=>{ PERL_MM_NONINTERACTIVE=>1 } }, + + # compression + { module=>'Archive::Zip', ignore_testfailure=>1 }, #XXX-TODO t/25_traversal.t + qw/ IO-Compress-Lzma Compress-unLZMA Archive::Extract /, + + ] + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::InstallModules', + modules => [ + # file related + { module=>'File-ShareDir-Install', ignore_testfailure=>1 }, #XXX-TODO-5.28 + { module=>'File::Copy::Recursive', ignore_testfailure=>1 }, #XXX-FAIL-5.32.1 + { module => 'https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/download/dev_20230318/File-Find-Rule-0.34_01.tar.gz' }, # https://github.com/StrawberryPerl/Perl-Dist-Strawberry/issues/88 + qw/ File-HomeDir File-Listing File-ShareDir File-Which File::Map /, + { module=>'File::Slurp', ignore_testfailure=>1 }, + qw/ File::Slurper /, + { module=>'IO::All', env=>{ 'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/link.t' } }, # https://github.com/StrawberryPerl/Perl-Dist-Strawberry/issues/67 + { module=>'Path::Class', env=>{ 'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/01-basic.t' } }, # https://github.com/StrawberryPerl/Perl-Dist-Strawberry/issues/65 + qw/ Path::Tiny /, + # math related + 'Devel::CheckLib', #this used to fail + qw/ Math-Round Math-BigInt-GMP Math-GMP Math-MPFR Math-MPC /, + qw/ ExtUtils::F77 /, + + ] + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::InstallModules', + modules => [ + # SSH & telnet + qw/ Net-SSH2 Net::Telnet /, + + # network + # https://github.com/StrawberryPerl/Perl-Dist-Strawberry/issues/72 + { module => 'https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/download/dev_20230318/Socket6-0.29_02.tar.gz' }, + qw/ IO::Socket::IP IO::Socket::INET6 IO::Socket::Socks /, + # EV4.32 + perl-5.30 fails XXX-FIXME + qw/ HTTP-Server-Simple /, + { module=>'/kmx/perl-modules-patched/Crypt-SSLeay-0.72_patched.tar.gz' }, #XXX-FIXME + { module=>'Mojolicious', env=>{ 'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/mojolicious/websocket_lite_app.t t/mojo/file.t' } }, #https://github.com/kraih/mojo/issues/1011, https://github.com/StrawberryPerl/Perl-Dist-Strawberry/issues/67 + { module=>'WWW::Mechanize', skiptest=>1 }, # tests hang + + ] + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::InstallModules', + modules => [ + # XML & co. + + { module=>'Alien::Libxml2', env=>{ 'PKG_CONFIG_PATH'=>'C:\strawberry\c\lib\pkgconfig' } }, # alien probe needs to find the pkgconfig file + qw/ XML-LibXML XML-LibXSLT XML-Parser XML-SAX /, + { module => 'XML::Simple', env => {MAKEFLAGS => '', TEST_JOBS => ''} }, + { module=>'XML::Twig', ignore_testfailure=>1 }, #XXX-TODO XML-Twig-3.52 fails + + # data/text processing + { module=>'IO::Stringy', env=>{ 'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/IO_InnerFile.t' } }, #https://rt.cpan.org/Public/Bug/Display.html?id=103895 + qw/ Text-Diff Text-Patch Text::CSV Text::CSV_XS Tie::Array::CSV Excel::Writer::XLSX Spreadsheet::WriteExcel Spreadsheet::ParseExcel /, + qw /Spreadsheet::ParseXLSX/, # was failing for 5.39: https://github.com/StrawberryPerl/Perl-Dist-Strawberry/issues/214 + + ] + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::InstallModules', + modules => [ + + # database stuff + { module=>'Module::Find', env=>{ 'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/07-symlinks.t' } }, # https://github.com/StrawberryPerl/Perl-Dist-Strawberry/issues/67 + + { module=>'Config::Any', env=>{ 'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/10-branches.t' } }, # https://github.com/StrawberryPerl/Perl-Dist-Strawberry/issues/73 needed for DBIx::Class + { module=>'DBD::SQLite', env=>{ 'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/33_non_latin_path.t' } }, # https://github.com/StrawberryPerl/Perl-Dist-Strawberry/issues/68 + qw/ DBI DBD-ODBC DBD-CSV DBD-ADO DBIx-Class DBIx-Simple /, + 'https://cpan.metacpan.org/authors/id/T/TU/TURNSTEP/DBD-Pg-3.8.0.tar.gz', ###{ module=>'DBD::Pg' }, + #{ module=>'DBD::mysql' }, # disable until we sort out more recent mysql (but see https://github.com/StrawberryPerl/Perl-Dist-Strawberry/discussions/157 ) + # SKIP DBD::Oracle for 5.36 until we can sort out what files to use + # { module=>'DBD::Oracle', makefilepl_param=>'-V 12.2.0.1.0', env=>{ ORACLE_HOME=>'c:\ora122instant64' }, skiptest=>1 }, ## requires Oracle Instant Client 64bit!!! + + ] + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::InstallModules', + modules => [ + # crypto related - these were disabled in 5.39.10 as CryptX was failing + # { module =>'Convert-PEM', ignore_testfailure=>1 }, #XXX-TODO Convert-PEM-0.08 fails + qw/ Convert-PEM /, # 0.13 passes + qw / Crypt::OpenSSL::DSA /, # https://github.com/StrawberryPerl/Perl-Dist-Strawberry/issues/86 + qw / CryptX /, + qw/ Crypt::OpenSSL::Bignum Crypt-OpenSSL-RSA Crypt-OpenSSL-Random Crypt-OpenSSL-X509 /, + qw / Crypt::OpenSSL::AES /, + #'KMX/Crypt-OpenSSL-AES-0.05.tar.gz', #XXX-FIXME patched https://metacpan.org/pod/Crypt::OpenSSL::AES https://rt.cpan.org/Public/Bug/Display.html?id=77605 + #Crypt-SMIME ? + qw/ Crypt::CBC Crypt::Blowfish Crypt::CAST5_PP Crypt::DES Crypt::DES_EDE3 Crypt::DSA Crypt::IDEA Crypt::Rijndael Crypt::Twofish Crypt::Serpent Crypt::RC6 /, + qw/ Digest-MD2 Digest-MD5 Digest-SHA Digest-SHA1 Crypt::RIPEMD160 Digest::Whirlpool Digest::HMAC Digest::CMAC /, + # 'Alt::Crypt::RSA::BigInt', #hack Crypt-RSA without Math::PARI - https://metacpan.org/release/Crypt-RSA, # fails for 5.40.1 due to Math::Prime::Util::GMP + qw/ Crypt-DSA /, + #qw /Crypt::DSA::GMP/, # fails for 5.40.1 due to Math::Prime::Util::GMP + + qw/ Bytes::Random::Secure /, + # qw /Crypt::OpenPGP/, # fails for 5.40.1 due to Math::Prime::Util::GMP + #qw/ Module::Signature /, #XXX-TODO still not able to properly handle CRLF - https://metacpan.org/release/Module-Signature + + # date/time + { module=>'Test2::Plugin::NoWarnings', ignore_testfailure=>1 }, #otherwise DateTime fails + qw/ DateTime Date::Format DateTime::Format::DateParse DateTime::TimeZone::Local::Win32 Time::Moment /, + + # e-mail + qw/ List::MoreUtils::XS List::MoreUtils /, # required by Net::IMAP::Client - https://rt.cpan.org/Public/Bug/Display.html?id=122875 + # Net::DNS and Net::Domain::TLD are needed for Email::Valid but its metadata is not correctly specified + { module=>'Net::DNS', skiptest=>1 }, # tests might hang due to network issues + qw /Net::Domain::TLD/, + qw/ Email::MIME::Kit Email::Sender Email::Simple Email::Stuffer Mail::Send /, + qw /Email::Valid/, # Fails under 5.39.10 unless Net::DNS and Net::Domain::TLD are already installed + qw/ Net::SMTPS Net::SMTP Net::IMAP::Client Net::POP3 /, + + + ] + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::InstallModules', + modules => [ + # graphics + # 'GD', # disable for 5.39.10 + ##{ module=>'http://chorny.net/strawberry/Imager-1.006.zip', ignore_testfailure=>1 }, #https://rt.cpan.org/Ticket/Display.html?id=124001 + { module=>'Imager', ignore_testfailure=>1 }, #https://rt.cpan.org/Ticket/Display.html?id=124001 + qw/ Imager-File-GIF Imager-File-JPEG Imager-File-PNG Imager-Font-FT2 Imager-Font-W32 /, + # qw/ Imager-File-TIFF /, # https://github.com/tonycoz/imager/issues/537 + # Disable for now - tests fail when run under gmake but pass under prove. + # There have also been no updates since 2016 and local installs work quickly. + # { module=>'OpenGL', ignore_testfailure=>1 }, + + # XML/SOAP webservices + 'Log::Report', + qw/ HTTP::Daemon SOAP-Lite /, + #qw/ XML::Compile::SOAP12 XML::Compile::SOAP11 XML::Compile::WSDL11 /, + + # utils + qw/ App::cpanoutdated App::pmuninstall pler App-module-version App-local-lib-Win32Helper /, + + ] + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::InstallModules', + modules => [ + # par & ppm + qw/ PAR PAR::Dist::FromPPD PAR::Dist::InstallPPD PAR::Repository::Client /, + # { module => 'PAR::Packer', env => { MAKEFLAGS => '', TEST_JOBS => '' } }, + { module => 'PAR::Packer', ignore_testfailure=>1, env => { MAKEFLAGS => '', TEST_JOBS => '' } }, + + # The build path in ppm.xml is derived from $ENV{TMP}. So set TMP to a dedicated location inside of the + # distribution root to prevent it being locked to the temp directory of the build machine. + { module=>'/kmx/perl-modules-patched/PPM-11.11_04.tar.gz', env=>{ TMP=>'\ppm' } }, #XXX-FIXME + + # exceptions + qw/ Try-Tiny Carp::Always autodie /, + + # templates + { module=>'Template', env=>{ 'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/process_dir.t' } }, #XXX-NEW 5.26.0 https://github.com/abw/Template2/pull/67 + qw/ Template-Tiny /, + + # OO - moose, moo & co. + qw/ Moose MooseX-Types MooseX::Types::Structured /, + #{ module=>'MooseX::Declare', ignore_testfailure=>1 }, #XXX-PREREQ-ONLY https://rt.cpan.org/Public/Bug/Display.html?id=97690 + qw/ MooseX::ClassAttribute MooseX::Role::Parameterized MooseX::NonMoose Moo /, + + # OO - others + qw/ Class::Accessor Class::Accessor::Lite Class::XSAccessor Class::Tiny Object::Tiny /, + + ] + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::InstallModules', + modules => [ + # dumpers + qw/ Data::Dump Data::Printer /, + { module=>'Data-Dump-Streamer', ignore_testfailure=>1 }, #XXX-TODO ! Testing Data-Dump-Streamer-2.37 failed + + # misc + #{ module=>'Alien::Tidyp', buildpl_param=>'--srctarball=http://strawberryperl.com/package/kmx/testing/tidyp-1.04.tar.gz' }, #gcc 8.3 failure + qw/ CPAN::SQLite /, + { module => 'FCGI', env => { 'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/02-unix_domain_socket.t' } }, + qw/ IO::String /, + { module=>'Unicode::UTF8', ignore_testfailure=>1 }, #XXX-TODO-5.28 + qw/ V Modern::Perl Perl::Tidy /, + qw/ FFI::Raw FFI::Platypus /, + qw/ PadWalker Devel::vscode /, + + qw/ Devel::NYTProf /, + + + # Task::Kensho deps that have issues + # https://github.com/StrawberryPerl/Perl-Dist-Strawberry/issues/103 + { module=>'Test::MockObject', env=>{ 'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/extends.t' } }, + { module => 'https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/download/dev_20230318/String-Escape-2010.002.tar.gz' }, + + # GUI - not yet + #qw/IUP/, + ], + + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::FixShebang', + shebang => '#!perl', + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::FilesAndDirs', + commands => [ + # directories + { do=>'createdir', args=>[ '/cpan' ] }, + { do=>'createdir', args=>[ '/cpan/sources' ] }, + { do=>'createdir', args=>[ '/win32' ] }, + # templated files + { do=>'apply_tt', args=>[ '/config-files/CPAN_Config.pm.tt', '/perl/lib/CPAN/Config.pm', {}, 1 ] }, #XXX-temporary empty tt_vars, no_backup=1 + { do=>'apply_tt', args=>[ '/extra-files/README.txt.tt', '/README.txt' ] }, + { do=>'apply_tt', args=>[ '/extra-files/DISTRIBUTIONS.txt.tt', '/DISTRIBUTIONS.txt' ] }, + # fixed files + { do=>'copyfile', args=>[ '/extra-files/licenses/License.rtf', '/licenses/License.rtf' ] }, + { do=>'copyfile', args=>[ '/extra-files/relocation.pl.bat', '/relocation.pl.bat' ] }, + { do=>'copyfile', args=>[ '/extra-files/update_env.pl.bat', '/update_env.pl.bat' ] }, + { do=>'copyfile', args=>[ '/extra-files/win32/cpan.ico', '/win32/cpan.ico' ] }, + { do=>'copyfile', args=>[ '/extra-files/win32/onion.ico', '/win32/onion.ico' ] }, + { do=>'copyfile', args=>[ '/extra-files/win32/perldoc.ico', '/win32/perldoc.ico' ] }, + { do=>'copyfile', args=>[ '/extra-files/win32/perlhelp.ico', '/win32/perlhelp.ico' ] }, + { do=>'copyfile', args=>[ '/extra-files/win32/strawberry.ico', '/win32/strawberry.ico' ] }, + { do=>'copyfile', args=>[ '/extra-files/win32/win32.ico', '/win32/win32.ico' ] }, + { do=>'copyfile', args=>[ '/extra-files/win32/metacpan.ico', '/win32/metacpan.ico' ] }, + # URLs + { do=>'apply_tt', args=>[ '/extra-files/win32/CPAN Module Search.url.tt', '/win32/CPAN Module Search.url' ] }, + { do=>'apply_tt', args=>[ '/extra-files/win32/MetaCPAN Search Engine.url.tt', '/win32/MetaCPAN Search Engine.url' ] }, + { do=>'apply_tt', args=>[ '/extra-files/win32/Learning Perl (tutorials, examples).url.tt', '/win32/Learning Perl (tutorials, examples).url' ] }, + { do=>'apply_tt', args=>[ '/extra-files/win32/Live Support (chat).url.tt', '/win32/Live Support (chat).url' ] }, + { do=>'apply_tt', args=>[ '/extra-files/win32/Perl Documentation.url.tt', '/win32/Perl Documentation.url' ] }, + { do=>'apply_tt', args=>[ '/extra-files/win32/Strawberry Perl Release Notes.url.tt', '/win32/Strawberry Perl Release Notes.url' ] }, + { do=>'apply_tt', args=>[ '/extra-files/win32/Strawberry Perl Website.url.tt', '/win32/Strawberry Perl Website.url' ] }, + # cleanup (remove unwanted files/dirs) + { do=>'removefile', args=>[ '/perl/vendor/lib/Crypt/._test.pl', '/perl/vendor/lib/DBD/testme.tmp.pl' ] }, + { do=>'removefile', args=>[ '/perl/bin/nssm_32.exe.bat', '/perl/bin/nssm_64.exe.bat' ] }, + { do=>'removefile_recursive', args=>[ '/perl', qr/.+\.dll\.AA[A-Z]$/i ] }, + { do=>'removedir', args=>[ '/perl/bin/freeglut.dll' ] }, #XXX OpenGL garbage + # cleanup cpanm related files + { do=>'removedir', args=>[ '/perl/site/lib/MSWin32-x86-multi-thread-64int' ] }, + { do=>'removedir', args=>[ '/perl/site/lib/MSWin32-x86-multi-thread' ] }, + { do=>'removedir', args=>[ '/perl/site/lib/MSWin32-x64-multi-thread' ] }, + ], + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::CreateRelocationFile', + reloc_in => '/relocation/relocation.txt.initial', + reloc_out => '/relocation.txt', + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::OutputZIP', # no options needed + }, + ### NEXT STEP ########################### + { + disable => $ENV{SKIP_MSI_STEP}, ### hack + plugin => 'Perl::Dist::Strawberry::Step::OutputMSI', + exclude => [ + #'dirname\subdir1\subdir2', + #'dirname\file.pm', + 'relocation.pl.bat', + 'update_env.pl.bat', + ], + msi_upgrade_code => 'DBA41113-4E91-3FFC-B400-573BB4B80705', #BEWARE: fixed value for all 64bit releases (for ever) + app_publisher => 'strawberryperl.com project', + url_about => 'http://strawberryperl.com/', + url_help => 'http://strawberryperl.com/support.html', + msi_root_dir => 'Strawberry', + msi_main_icon => '\msi\files\strawberry.ico', + msi_license_rtf => '\msi\files\License-short.rtf', + msi_dialog_bmp => '\msi\files\StrawberryDialog.bmp', + msi_banner_bmp => '\msi\files\StrawberryBanner.bmp', + msi_debug => 0, + + start_menu => [ # if "description" is missing it will be set to the same value as "name" + { type=>'shortcut', name=>'Perl (command line)', icon=>'\msi\files\perlexe.ico', description=>'Quick way to get to the command line in order to use Perl', target=>'[SystemFolder]cmd.exe', workingdir=>'PersonalFolder' }, + { type=>'shortcut', name=>'Strawberry Perl Release Notes', icon=>'\msi\files\strawberry.ico', target=>'[d_win32]Strawberry Perl Release Notes.url', workingdir=>'d_win32' }, + { type=>'shortcut', name=>'Strawberry Perl README', target=>'[INSTALLDIR]README.txt', workingdir=>'INSTALLDIR' }, + { type=>'folder', name=>'Tools', members=>[ + { type=>'shortcut', name=>'CPAN Client', icon=>'\msi\files\cpan.ico', target=>'[d_perl_bin]cpan.bat', workingdir=>'d_perl_bin' }, + { type=>'shortcut', name=>'Create local library areas', icon=>'\msi\files\strawberry.ico', target=>'[d_perl_bin]llw32helper.bat', workingdir=>'d_perl_bin' }, + ] }, + { type=>'folder', name=>'Related Websites', members=>[ + { type=>'shortcut', name=>'CPAN Module Search', icon=>'\msi\files\cpan.ico', target=>'[d_win32]CPAN Module Search.url', workingdir=>'d_win32' }, + { type=>'shortcut', name=>'MetaCPAN Search Engine', icon=>'\msi\files\metacpan.ico', target=>'[d_win32]MetaCPAN Search Engine.url', workingdir=>'d_win32' }, + { type=>'shortcut', name=>'Perl Documentation', icon=>'\msi\files\perldoc.ico', target=>'[d_win32]Perl Documentation.url', workingdir=>'d_win32' }, + { type=>'shortcut', name=>'Strawberry Perl Website', icon=>'\msi\files\strawberry.ico', target=>'[d_win32]Strawberry Perl Website.url', workingdir=>'d_win32' }, + { type=>'shortcut', name=>'Learning Perl (tutorials, examples)', icon=>'\msi\files\perldoc.ico', target=>'[d_win32]Learning Perl (tutorials, examples).url', workingdir=>'d_win32' }, + { type=>'shortcut', name=>'Live Support (chat)', icon=>'\msi\files\onion.ico', target=>'[d_win32]Live Support (chat).url', workingdir=>'d_win32' }, + ] }, + ], + env => { + #TERM => "dumb", + }, + + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::InstallModules', + # modules specific to portable edition + modules => [ 'Portable' ], + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::SetupPortablePerl', # no options needed + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::FilesAndDirs', + commands => [ # files and dirs specific to portable edition + { do=>'removefile', args=>[ '/README.txt', '/perl2.reloc.txt', '/perl1.reloc.txt', '/relocation.txt', + '/update_env.pl.bat', '/relocation.pl.bat' ] }, + { do=>'createdir', args=>[ '/data' ] }, + { do=>'apply_tt', args=>[ '/portable/portable.perl.tt', '/portable.perl', {gcchost=>'x86_64-w64-mingw32', gccver=>'13.1.0'} ] }, + { do=>'copyfile', args=>[ '/portable/portableshell.bat', '/portableshell.bat' ] }, + { do=>'apply_tt', args=>[ '/portable/README.portable.txt.tt', '/README.txt' ] }, + # cleanup cpanm related files + { do=>'removedir', args=>[ '/perl/site/lib/MSWin32-x86-multi-thread-64int' ] }, + { do=>'removedir', args=>[ '/perl/site/lib/MSWin32-x86-multi-thread' ] }, + { do=>'removedir', args=>[ '/perl/site/lib/MSWin32-x64-multi-thread' ] }, + ], + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::OutputPortableZIP', # no options needed + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::CreateReleaseNotes', # no options needed + }, + ### NEXT STEP ########################### + { + disable => $ENV{SKIP_PDL_STEP}, ### hack + plugin => 'Perl::Dist::Strawberry::Step::BinaryToolsAndLibs', + install_packages => { + # redownloads some libs but they are the same as the main download + extlibs_gcc13_collated => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/dev_gcc13.1_20230606/extlibs_gcc13_collated_no_t1lib_20230606.zip', + libgd => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/dev_gcc13.1_20230502/64bit_libgd-2.3.2-bin_20230502.zip', + zgdb => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/dev_gcc13.1_20230606/64bit_gdb-13.1-bin_20230626.zip', + termcap => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/dev_gcc13.1_20230606/64bit_termcap-1.3.1-bin_20230606.zip', + }, + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::FilesAndDirs', + commands => [ + { do=>'make_rw', args=>[ '/c/include/db.h' ] }, # band-aid for ro flag on db headers + { do=>'make_rw', args=>[ '/c/include/db_cxx.h' ] }, + ], + }, + ### NEXT STEP ########################### + { + disable => $ENV{SKIP_PDL_STEP}, ### hack + plugin => 'Perl::Dist::Strawberry::Step::InstallModules', + # prereq modules specific to PDL edition + modules => [ + { module => 'File::Next', ignore_testfailure => 1 }, #XXX-TODO-5.28 / PREREQ-ONLY + { module => 'Devel::REPL', ignore_testfailure => 1 }, + qw/Lexical::Persistence Astro::FITS::Header /, + { module => 'Astro::FITS::CFITSIO', ignore_testfailure => 1}, # only needed for createfile test + { module => 'Inline::C', ignore_testfailure => 1 }, + { module => 'Module::Compile', ignore_testfailure => 1 }, #XXX-TODO-5.28 / PREREQ-ONLY + qw/ Term::ReadKey /, # for perldl + ], + }, + ### NEXT STEP ########################### + { + disable => $ENV{SKIP_PDL_STEP}, ### hack + plugin => 'Perl::Dist::Strawberry::Step::InstallModules', + # modules specific to PDL edition + modules => [ + { module => 'PDL', + #makefilepl_param => 'PDLCONF=\pdl\perldl2.conf', + env => { + PLPLOT_LIB => '\c\share\plplot', + PLPLOT_DRV_DIR => '\c\share\plplot', + # MAKEFLAGS => '', # there were previously issues with parallel builds + HARNESS_SUBCLASS => 'TAP::Harness::Restricted', + HARNESS_SKIP => 't/inlinepdlpp.t', # paths too long + }, + }, + qw/ PDL::IO::CSV PDL::DateTime PDL::Stats /, # PDL::IO::Image + # qw /PDL::IO::DBI/, # https://github.com/StrawberryPerl/Perl-Dist-Strawberry/issues/231#issuecomment-2611092198 + qw/ PDL::LinearAlgebra /, + ##{ module=>'PDL::Graphics::Gnuplot', skiptest=>1 }, + ##{ module=>'PDL::Graphics::Prima', ignore_testfailure => 1 }, # does not compile with 5.30.1 XXX-FIXME + # Modules no longer in PDL Core but which were in the previous release + qw / + PDL::Perldl2 PDL::Complex PDL::GSL + PDL::Fit PDL::Minuit PDL::Opt::Simplex + PDL::IO::HDF PDL::IO::IDL PDL::IO::Dicom + PDL::IO::GD PDL::IO::ENVI + PDL::Graphics::Limits + /, + # Newly non-core modules that were not installed for this release. Listed only for info. + # PDL::IO::Browser PDL::Transform::Proj4 PDL::Graphics::TriD PDL::Graphics::IIS + ], + }, + ### NEXT STEP ########################### + { + disable => $ENV{SKIP_PDL_STEP}, ### hack + plugin => 'Perl::Dist::Strawberry::Step::FilesAndDirs', + commands => [ # files and dirs specific to portable edition + { do=>'removefile', args=>[ '/README.txt', '/portableshell.bat' ] }, + { do=>'copyfile', args=>[ '/portable/portableshell.pdl.bat', '/portableshell.bat' ] }, + { do=>'apply_tt', args=>[ '/portable/README.pdl.txt.tt', '/README.txt' ] }, + { do=>'removefile', args=>[ '/DISTRIBUTIONS.txt' ] }, + { do=>'apply_tt', args=>[ '/extra-files/DISTRIBUTIONS.txt.tt', '/DISTRIBUTIONS.txt' ] }, + # cleanup (remove unwanted files/dirs) + { do=>'removefile_recursive', args=>[ '/perl', qr/.+\.dll\.AA[A-Z]$/i ] }, + # cleanup cpanm related files + { do=>'removedir', args=>[ '/data/.cpanm' ] }, + { do=>'removedir', args=>[ '/perl/site/lib/MSWin32-x86-multi-thread-64int' ] }, + { do=>'removedir', args=>[ '/perl/site/lib/MSWin32-x86-multi-thread' ] }, + { do=>'removedir', args=>[ '/perl/site/lib/MSWin32-x64-multi-thread' ] }, + ], + }, + ### NEXT STEP ########################### + { + disable => $ENV{SKIP_PDL_STEP}, ### hack + plugin => 'Perl::Dist::Strawberry::Step::OutputPdlZIP', # no options needed + }, + ### NEXT STEP ########################### + { + disable => $ENV{SKIP_PDL_STEP}, ### hack + plugin => 'Perl::Dist::Strawberry::Step::CreateReleaseNotes', + suffix => '-PDL', + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::OutputLogZIP', # no options needed + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::OutputReleasesJSONSnippet', # no options needed + }, + ], +} diff --git a/share/64bit-5.38.4.1.pp b/share/64bit-5.38.4.1.pp new file mode 100644 index 0000000..4fe9dd3 --- /dev/null +++ b/share/64bit-5.38.4.1.pp @@ -0,0 +1,679 @@ +# vim: syntax=perl + +### job description for building strawberry perl + +#Available '<..>' macros: +# is placeholder for http://strawberryperl.com/package +# is placeholder for Perl::Dist::Strawberry's distribution sharedir +# is placeholder for c:\strawberry + +{ + app_version => '5.38.4.1', #BEWARE: do not use '.0.0' in the last two version digits + bits => 64, + beta => 0, + app_fullname => 'Strawberry Perl (64-bit)', + app_simplename => 'strawberry-perl', + maketool => 'gmake', # 'dmake' or 'gmake' + build_job_steps => [ + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::BinaryToolsAndLibs', + install_packages => { + #tools + #gcc, gmake, gdb & co. + 'gcc-toolchain' => { url => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/dev_gcc13.1_20230606/winlibs_gcc13.1r5_sans_make.zip', install_to => 'c' }, + #patch => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/dev_gcc10.3_20230313/64bit_patch-2.7.5-bin_20230420.zip', + 'patch' => '/kmx/64_tools/64bit_patch-2.5.9-7-bin_20100110_UAC.zip', + #special cases + #'libmysql' => '/kmx/64_libs/gcc71-2017Q2/64bit_mysql-5.7.16-bin_20170517.zip', + # gcc13 libs + extlibs_gcc13_collated => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/dev_gcc13.1_20230606/extlibs_gcc13_collated_nonpdl_no_t1lib_20230606.zip', + gmp => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/dev_gcc13.1_20230606/64bit_gmp-6.2.1-bin_20230606.zip', + mpc => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/dev_gcc13.1_20230606/64bit_mpc-1.3.1-bin_20230606.zip', + mpfr => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/dev_gcc13.1_20230606/64bit_mpfr-4.2.0-bin_20230606.zip', + libgd => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/dev_gcc13.1_20230502/64bit_libgd-2.3.2-bin_20230502.zip', + zgdb => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/dev_gcc13.1_20230606/64bit_gdb-13.1-bin_20230626.zip', + termcap => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/dev_gcc13.1_20230606/64bit_termcap-1.3.1-bin_20230606.zip', + libfribidi => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/dev_gcc13.1_20230606/64bit_fribidi-1.0.12-bin_20230606.zip', + libreadline => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/dev_gcc13.1_20230606/64bit_readline-8.2-bin_20230606.zip', + libwebp => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/dev_gcc13.1_20230606/64bit_libwebp-1.3.2-bin_20231211.zip', + libfontconfig => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/dev_gcc13.1_20230606/64bit_fontconfig-2.13.1-bin_20230606.zip', + libfribidi => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/dev_gcc13.1_20230606/64bit_fribidi-1.0.12-bin_20230606.zip', + libgdbm => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/dev_gcc13.1_20230606/64bit_gdbm-1.19-bin_20230606.zip', + freeglut => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/dev_gcc13.1_20230606/64bit_freeglut-3.4.0-bin_20230606.zip', + libiidn => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/dev_gcc13.1_20230606/64bit_libidn2-2.1.1-bin_20230606.zip', + libunistring => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/dev_gcc13.1_20230606/64bit_libunistring-1.1-bin_20230606.zip', + libxml2 => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/dev_gcc13.1_20230606/64bit_libxml2-2.12.10-bin_20250515.zip', + libxslt => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/dev_gcc13.1_20230606/64bit_libxslt-1.1.39-bin_20250515.zip', + }, + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::FilesAndDirs', + commands => [ + { do=>'removefile', args=>[ '/c/i686-w64-mingw32/lib/libglut.a', '/c/i686-w64-mingw32/lib/libglut32.a' ] }, #XXX-32bit only workaround + { do=>'movefile', args=>[ '/c/lib/libdb-6.1.a', '/c/lib/libdb.a' ] }, #XXX ugly hack + { do=>'removefile', args=>[ '/c/bin/gccbug', '/c/bin/ld.gold.exe', '/c/bin/ld.bfd.exe' ] }, + { do=>'removefile_recursive', args=>[ '/c', qr/.+\.la$/i ] }, # https://rt.cpan.org/Public/Bug/Display.html?id=127184 + { do=>'make_rw', args=>[ '/c/include/db.h' ] }, # band-aid for ro flag on db headers + { do=>'make_rw', args=>[ '/c/include/db_cxx.h' ] }, + ], + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::InstallPerlCore', + url => 'https://www.cpan.org/src/5.0/perl-5.38.4.tar.gz', + cf_email => 'strawberry-perl@project', #IMPORTANT: keep 'strawberry-perl' before @ + perl_debug => 0, # can be overridden by --perl_debug=N option + perl_64bitint => 1, # ignored on 64bit, can be overridden by --perl_64bitint | --noperl_64bitint option + # build core using these OPTIMIZE flags + optimize_core => '-Os -falign-functions -falign-jumps -falign-labels -falign-loops -freorder-blocks -freorder-blocks-algorithm=stc -freorder-blocks-and-partition', + # build CPAN modules using these OPTIMIZE flags + optimize_cpan => '-O2', + # buildoptextra => '-D__USE_MINGW_ANSI_STDIO', # not needed since 5.33.6 + patch => { #DST paths are relative to the perl src root + '/msi/files/perlexe.ico' => 'win32/perlexe.ico', + '/perl-5.36/perlexe.rc.tt' => 'win32/perlexe.rc', + '/perl-5.40/posix_bessel.patch' => '*', + '/perl-5.38/vmem.patch' => '*', + '/perl-5.38/gh23179_no_delta_or_PERL_RE_BUILD_AUX.patch' => '*', + '/perl-5.38/scope_types.h' => 'scope_types.h', + 'config_H.gc' => { + I_DBM => 'define', + I_GDBM => 'define', + I_NDBM => 'define', + HAS_BUILTIN_CHOOSE_EXPR => 'define', + HAS_SYMLINK => 'define', + HAS_ISFINITE => 'define', # part of https://github.com/Perl/perl5/pull/22257 + }, + 'config.gc' => { # see Step.pm for list of default updates + d_builtin_choose_expr => 'define', + d_mkstemp => 'define', + d_ndbm => 'define', + d_symlink => 'define', # many cpan modules fail tests when defined + i_db => 'define', + i_dbm => 'define', + i_gdbm => 'define', + i_ndbm => 'define', + d_isfinite => 'define', # part of https://github.com/Perl/perl5/pull/22257 + osvers => '10', + }, + }, + license => { #SRC paths are relative to the perl src root + 'Readme' => '/licenses/perl/Readme', + 'Artistic' => '/licenses/perl/Artistic', + 'Copying' => '/licenses/perl/Copying', + }, + }, + ### NEXT STEP ########################### + # { + # plugin => 'Perl::Dist::Strawberry::Step::InstallModules', + # # it seems this is needed by a dep in the upgrade script + # modules => [qw /IPC::Run3 Syntax::Keyword::Try/] + # }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::UpgradeCpanModules', + exceptions => [ + # possible 'do' options: ignore_testfailure | skiptest | skip - e.g. + #{ do=>'ignore_testfailure', distribution=>'ExtUtils-MakeMaker-6.72' }, + #{ do=>'ignore_testfailure', distribution=>qr/^IPC-Cmd-/ }, + { do=>'ignore_testfailure', distribution=>qr/^Net-Ping-/ }, # 2.72 fails + { do=>'ignore_testfailure', distribution=>qr/^Archive-Tar-/ }, # 3.02 fails + ] + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::InstallModules', + modules => [ + qw /ExtUtils::Config/, # temp for debug + { module=>'Capture::Tiny', ignore_testfailure=>1 }, #XXX-TODO https://github.com/dagolden/Capture-Tiny/issues/29 + { module=>'Path::Tiny', ignore_testfailure=>1 }, #XXX-TODO 5.30 t/zzz-spec.t fails https://github.com/dagolden/Path-Tiny/issues/228 + 'TAP::Harness::Restricted', #to be able to skip only some tests + # IPC related + { module=>'IPC-Run', skiptest=>1 }, #XXX-TODO trouble with 'Terminating on signal SIGBREAK(21)' https://metacpan.org/release/IPC-Run + { module=>'IPC-System-Simple', ignore_testfailure=>1 }, #XXX-TODO t/07_taint.t fails https://metacpan.org/release/IPC-System-Simple + qw/ IPC-Run3 /, + + # LWP + TLS + { module=>'Net::SSLeay', ignore_testfailure=>1 }, # openssl-1.1.1 related + { module=>'Mozilla::CA' }, # optional dependency of IO-Socket-SSL + { module=>'IO::Socket::SSL', skiptest=>1, env=>{ 'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/nonblock.t t/mitm.t t/verify_fingerprint.t t/session_ticket.t t/sni_verify.t' } }, + { module=>'LWP', skiptest=>1 }, # XXX-HACK: 6.08 is broken + { module=>'LWP::Protocol::https', env=>{ 'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/https_proxy.t' } }, #https://rt.perl.org/Ticket/Display.html?id=132863 + + # install cpanm as soon as possible + qw/ App::cpanminus /, + + # https://github.com/StrawberryPerl/Perl-Dist-Strawberry/issues/80 + 'https://cpan.metacpan.org/authors/id/X/XA/XAOC/ExtUtils-Depends-0.8000.tar.gz', + ] + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::InstallModules', + modules => [ + + # gdbm / db related + qw/ BerkeleyDB DB_File /, + { # PR by demerphq to build on 5.38 + module => 'https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/download/dev_20230318/DBM-Deep-2.0017.tar.gz', + env => {MAKEFLAGS => '', TEST_JOBS => '' }, + }, + + { module=>'Socket', ignore_uptodate => 1 }, # reinstall: https://github.com/StrawberryPerl/Perl-Dist-Strawberry/issues/221 + + #removed from core in 5.20 + qw/ Module::Build /, + { module=>'B::Lint', ignore_testfailure=>1 }, #XXX-TODO https://rt.cpan.org/Public/Bug/Display.html?id=101115 #XXX-FAIL-5.32.1 + { module=>'Archive::Extract', ignore_testfailure=>1 }, #XXX-TODO-5.28/64bit + { module=>'CPANPLUS', env=>{ 'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/40_CPANPLUS-Internals-Report.t' } }, + #XXX-TODO https://rt.cpan.org/Public/Bug/Display.html?id=116479 + qw/ CPANPLUS::Dist::Build /, + qw/ File::CheckTree Log::Message Module::Pluggable Object::Accessor Text::Soundex Term::UI /, + 'Tree-DAG_Node', # 1.33 failed tests, fixed in 1.34 + + # https://github.com/StrawberryPerl/Perl-Dist-Strawberry/issues/92 + { module => 'https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/download/dev_20230318/Pod-Parser-1.65_01.tar.gz' }, + # qw /Pod::Latex/, # disabled - https://github.com/StrawberryPerl/Perl-Dist-Strawberry/issues/75 + + # YAML, JSON & co. + qw/ JSON Cpanel::JSON::XS JSON::XS JSON::MaybeXS YAML YAML::Tiny YAML::XS /, + + # pkg-config related + # current version fails some symlink related tests + { module => 'PkgConfig', + makefilepl_param => '--script=pkg-config', + env => {'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/01-script_detailed.t'} + }, + 'ExtUtils::PkgConfig', + + ] + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::InstallModules', + modules => [ + # win32 related + { module=>'Win32API::Registry', ignore_testfailure=>1 }, # https://github.com/StrawberryPerl/Perl-Dist-Strawberry/issues/66 + qw/Win32::TieRegistry/, + { module=>'Win32::OLE', skiptest=>1 }, #XXX-TODO: ! Testing Win32-OLE-0.1713 leaves excel dialogues and files hanging around + { module=>'Win32::GuiTest', skiptest=>1 }, + { module=>'Win32::API', ignore_testfailure=>1 }, #XXX-TODO: https://rt.cpan.org/Public/Bug/Display.html?id=107450 + { module => 'Win32::Exe', env => { MAKEFLAGS => '', TEST_JOBS => ''} }, + { module=>'/kmx/perl-modules-patched/Win32-Pipe-0.025_patched.tar.gz' }, #XXX-FIXME + # File-Remove has symlink test failures under 5.38, is needed by Win32-File-Object + { module=>'File-Remove', env=>{ 'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/05_links.t' } }, + qw/ Win32-Daemon Win32-EventLog Win32-Process Win32-File-Object Win32-WinError Win32-UTCFileTime Win32-LongPath/, + qw/ Win32-ShellQuote Win32::Console Win32::Job Win32::ServiceManager Win32::Service /, + # qw/ Win32::Console::ANSI /, # disable for now - fails tests under UCRT 5.39.10 - but patched now + { + module => 'https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/download/patched_cpan_modules/Win32-Console-ANSI-1.11_001.tar.gz', + env => { 'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/04_DisplayEdition.t t/06_Func.t' } + # 06_Func test fails new in 5.40.2, as-yet undiagnosed + }, + { module => 'Win32-Clipboard', ignore_testfailure=>1 }, # inconsistent failures of tests 7 & 9 + { module=>'/kmx/perl-modules-patched/Win32-SerialPort-0.22_patched.tar.gz', skiptest=>1 }, + qw/ Sys::Syslog /, + + # term related + { module=>'Term::ReadKey', ignore_testfailure=>1 }, + { module=>'Term::ReadLine::Perl', env=>{ PERL_MM_NONINTERACTIVE=>1 } }, + + # compression + { module=>'Archive::Zip', ignore_testfailure=>1 }, #XXX-TODO t/25_traversal.t + qw/ IO-Compress-Lzma Compress-unLZMA Archive::Extract /, + + ] + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::InstallModules', + modules => [ + # file related + { module=>'File-ShareDir-Install', ignore_testfailure=>1 }, #XXX-TODO-5.28 + { module=>'File::Copy::Recursive', ignore_testfailure=>1 }, #XXX-FAIL-5.32.1 + { module => 'https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/download/dev_20230318/File-Find-Rule-0.34_01.tar.gz' }, # https://github.com/StrawberryPerl/Perl-Dist-Strawberry/issues/88 + qw/ File-HomeDir File-Listing File-ShareDir File-Which File::Map /, + { module=>'File::Slurp', ignore_testfailure=>1 }, + qw/ File::Slurper /, + { module=>'IO::All', env=>{ 'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/link.t' } }, # https://github.com/StrawberryPerl/Perl-Dist-Strawberry/issues/67 + { module=>'Path::Class', env=>{ 'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/01-basic.t' } }, # https://github.com/StrawberryPerl/Perl-Dist-Strawberry/issues/65 + qw/ Path::Tiny /, + # math related + 'Devel::CheckLib', #this used to fail + qw/ Math-Round Math-BigInt-GMP Math-GMP Math-MPFR Math-MPC /, + qw/ ExtUtils::F77 /, + + ] + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::InstallModules', + modules => [ + # SSH & telnet + qw/ Net-SSH2 Net::Telnet /, + + # network + # https://github.com/StrawberryPerl/Perl-Dist-Strawberry/issues/72 + { module => 'https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/download/dev_20230318/Socket6-0.29_02.tar.gz' }, + qw/ IO::Socket::IP IO::Socket::INET6 IO::Socket::Socks /, + # EV4.32 + perl-5.30 fails XXX-FIXME + { module=>'HTTP-Server-Simple', env => { 'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/04cgi.t' } }, # intermittent connection failures, passes otherwise + { module=>'/kmx/perl-modules-patched/Crypt-SSLeay-0.72_patched.tar.gz' }, #XXX-FIXME + { module=>'Mojolicious', env=>{ 'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/mojolicious/websocket_lite_app.t t/mojo/file.t' } }, #https://github.com/kraih/mojo/issues/1011, https://github.com/StrawberryPerl/Perl-Dist-Strawberry/issues/67 + { module=>'WWW::Mechanize', skiptest=>1 }, # tests hang + + ] + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::InstallModules', + modules => [ + # XML & co. + + { module=>'Alien::Libxml2', env=>{ 'PKG_CONFIG_PATH'=>'C:\strawberry\c\lib\pkgconfig' } }, # alien probe needs to find the pkgconfig file + qw/ XML-LibXML XML-LibXSLT XML-Parser XML-SAX /, + { module => 'XML::Simple', env => {MAKEFLAGS => '', TEST_JOBS => ''} }, + { module=>'XML::Twig', ignore_testfailure=>1 }, #XXX-TODO XML-Twig-3.52 fails + + # data/text processing + { module=>'IO::Stringy', env=>{ 'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/IO_InnerFile.t' } }, #https://rt.cpan.org/Public/Bug/Display.html?id=103895 + qw/ Text-Diff Text-Patch Text::CSV Text::CSV_XS Tie::Array::CSV Excel::Writer::XLSX Spreadsheet::WriteExcel Spreadsheet::ParseExcel /, + # qw /Spreadsheet::ParseXLSX/, # currently failing BigMath tests: https://github.com/StrawberryPerl/Perl-Dist-Strawberry/issues/214 + + ] + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::InstallModules', + modules => [ + + # database stuff + { module=>'Module::Find', env=>{ 'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/07-symlinks.t' } }, # https://github.com/StrawberryPerl/Perl-Dist-Strawberry/issues/67 + + { module=>'Config::Any', env=>{ 'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/10-branches.t' } }, # https://github.com/StrawberryPerl/Perl-Dist-Strawberry/issues/73 needed for DBIx::Class + 'https://cpan.metacpan.org/authors/id/H/HM/HMBRAND/DBI-1.645.tgz', # https://github.com/StrawberryPerl/Perl-Dist-Strawberry/issues/242 + { module=>'DBD::SQLite', env=>{ 'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/33_non_latin_path.t' } }, # https://github.com/StrawberryPerl/Perl-Dist-Strawberry/issues/68 + qw/ DBD-ODBC DBD-CSV DBD-ADO DBIx-Class DBIx-Simple /, + 'https://cpan.metacpan.org/authors/id/T/TU/TURNSTEP/DBD-Pg-3.8.0.tar.gz', ###{ module=>'DBD::Pg' }, + #{ module=>'DBD::mysql' }, # disable until we sort out more recent mysql (but see https://github.com/StrawberryPerl/Perl-Dist-Strawberry/discussions/157 ) + # SKIP DBD::Oracle for 5.36 until we can sort out what files to use + # { module=>'DBD::Oracle', makefilepl_param=>'-V 12.2.0.1.0', env=>{ ORACLE_HOME=>'c:\ora122instant64' }, skiptest=>1 }, ## requires Oracle Instant Client 64bit!!! + + ] + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::InstallModules', + modules => [ + # crypto related - many were disabled as CryptX 0.085 is failing - should be fixed in 0.086. + # { module =>'Convert-PEM', ignore_testfailure=>1 }, #XXX-TODO Convert-PEM-0.08 fails + # qw/ Convert-PEM /, + qw / Crypt::OpenSSL::DSA /, # https://github.com/StrawberryPerl/Perl-Dist-Strawberry/issues/86 + qw / CryptX /, + qw/ Crypt::OpenSSL::Bignum Crypt-OpenSSL-RSA Crypt-OpenSSL-Random Crypt-OpenSSL-X509 /, + qw / Crypt::OpenSSL::AES /, + #'KMX/Crypt-OpenSSL-AES-0.05.tar.gz', #XXX-FIXME patched https://metacpan.org/pod/Crypt::OpenSSL::AES https://rt.cpan.org/Public/Bug/Display.html?id=77605 + #Crypt-SMIME ? + qw/ Crypt::CBC Crypt-DSA /, # dependency CryptX 0.085 fails + qw/ Crypt::Blowfish Crypt::CAST5_PP Crypt::DES Crypt::DES_EDE3 Crypt::IDEA Crypt::Rijndael Crypt::Twofish Crypt::Serpent Crypt::RC6 /, + qw/ Digest-MD2 Digest-MD5 Digest-SHA Digest-SHA1 Crypt::RIPEMD160 Digest::Whirlpool Digest::HMAC Digest::CMAC /, + # 'Alt::Crypt::RSA::BigInt', #hack Crypt-RSA without Math::PARI - https://metacpan.org/release/Crypt-RSA, # fails for 5.40.1 due to Math::Prime::Util::GMP + + #qw /Crypt::DSA::GMP/, # fails for 5.40.1 due to Math::Prime::Util::GMP + + qw/ Bytes::Random::Secure /, + # qw /Crypt::OpenPGP/, # fails for 5.40.1 due to Math::Prime::Util::GMP + #qw/ Module::Signature /, #XXX-TODO still not able to properly handle CRLF - https://metacpan.org/release/Module-Signature + + # date/time + { module=>'Test2::Plugin::NoWarnings', ignore_testfailure=>1 }, #otherwise DateTime fails + qw/ DateTime Date::Format DateTime::Format::DateParse DateTime::TimeZone::Local::Win32 Time::Moment /, + + # e-mail + qw/ List::MoreUtils::XS List::MoreUtils /, # required by Net::IMAP::Client - https://rt.cpan.org/Public/Bug/Display.html?id=122875 + # Net::DNS and Net::Domain::TLD are needed for Email::Valid but its metadata is not correctly specified + { module=>'Net::DNS', skiptest=>1 }, # tests might hang due to network issues + qw /Net::Domain::TLD/, + qw/ Email::MIME::Kit Email::Sender Email::Simple Email::Stuffer Mail::Send /, + qw /Email::Valid/, # Fails under 5.39.10 unless Net::DNS and Net::Domain::TLD are already installed + qw/ Net::SMTPS Net::SMTP Net::IMAP::Client Net::POP3 /, + + + ] + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::InstallModules', + modules => [ + # graphics + # 'GD', # disable for 5.39.10 + ##{ module=>'http://chorny.net/strawberry/Imager-1.006.zip', ignore_testfailure=>1 }, #https://rt.cpan.org/Ticket/Display.html?id=124001 + { module=>'Imager', ignore_testfailure=>1 }, #https://rt.cpan.org/Ticket/Display.html?id=124001 + qw/ Imager-File-GIF Imager-File-JPEG Imager-File-PNG Imager-Font-FT2 Imager-Font-W32 /, + # qw/ Imager-File-TIFF /, # https://github.com/tonycoz/imager/issues/537 + # Disable for now - tests fail when run under gmake but pass under prove. + # There have also been no updates since 2016 and local installs work quickly. + # { module=>'OpenGL', ignore_testfailure=>1 }, + + # XML/SOAP webservices + 'Log::Report', + qw/ HTTP::Daemon SOAP-Lite /, + #qw/ XML::Compile::SOAP12 XML::Compile::SOAP11 XML::Compile::WSDL11 /, + + # utils + qw/ App::cpanoutdated App::pmuninstall pler App-module-version App-local-lib-Win32Helper /, + + ] + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::InstallModules', + modules => [ + # par & ppm + qw/ PAR PAR::Dist::FromPPD PAR::Dist::InstallPPD PAR::Repository::Client /, + # { module => 'PAR::Packer', env => { MAKEFLAGS => '', TEST_JOBS => '' } }, + { module => 'PAR::Packer', ignore_testfailure=>1, env => { MAKEFLAGS => '', TEST_JOBS => '' } }, + + # The build path in ppm.xml is derived from $ENV{TMP}. So set TMP to a dedicated location inside of the + # distribution root to prevent it being locked to the temp directory of the build machine. + { module=>'/kmx/perl-modules-patched/PPM-11.11_04.tar.gz', env=>{ TMP=>'\ppm' } }, #XXX-FIXME + + # exceptions + qw/ Try-Tiny Carp::Always autodie /, + + # templates + { module=>'Template', env=>{ 'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/process_dir.t' } }, #XXX-NEW 5.26.0 https://github.com/abw/Template2/pull/67 + qw/ Template-Tiny /, + + # OO - moose, moo & co. + qw/ Moose MooseX-Types MooseX::Types::Structured /, + #{ module=>'MooseX::Declare', ignore_testfailure=>1 }, #XXX-PREREQ-ONLY https://rt.cpan.org/Public/Bug/Display.html?id=97690 + qw/ MooseX::ClassAttribute MooseX::Role::Parameterized MooseX::NonMoose Moo /, + + # OO - others + qw/ Class::Accessor Class::Accessor::Lite Class::XSAccessor Class::Tiny Object::Tiny /, + + ] + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::InstallModules', + modules => [ + # dumpers + qw/ Data::Dump Data::Printer /, + { module=>'Data-Dump-Streamer', ignore_testfailure=>1 }, #XXX-TODO ! Testing Data-Dump-Streamer-2.37 failed + + # misc + #{ module=>'Alien::Tidyp', buildpl_param=>'--srctarball=http://strawberryperl.com/package/kmx/testing/tidyp-1.04.tar.gz' }, #gcc 8.3 failure + qw/ CPAN::SQLite /, + { module => 'FCGI', env => { 'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/02-unix_domain_socket.t' } }, + qw/ IO::String /, + { module=>'Unicode::UTF8', ignore_testfailure=>1 }, #XXX-TODO-5.28 + qw/ V Modern::Perl Perl::Tidy /, + qw/ FFI::Raw FFI::Platypus /, + qw/ PadWalker Devel::vscode /, + + qw/ Devel::NYTProf /, + + + # Task::Kensho deps that have issues + # https://github.com/StrawberryPerl/Perl-Dist-Strawberry/issues/103 + { module=>'Test::MockObject', env=>{ 'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/extends.t' } }, + { module => 'https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/download/dev_20230318/String-Escape-2010.002.tar.gz' }, + + # GUI - not yet + #qw/IUP/, + ], + + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::FixShebang', + shebang => '#!perl', + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::FilesAndDirs', + commands => [ + # directories + { do=>'createdir', args=>[ '/cpan' ] }, + { do=>'createdir', args=>[ '/cpan/sources' ] }, + { do=>'createdir', args=>[ '/win32' ] }, + # templated files + { do=>'apply_tt', args=>[ '/config-files/CPAN_Config.pm.tt', '/perl/lib/CPAN/Config.pm', {}, 1 ] }, #XXX-temporary empty tt_vars, no_backup=1 + { do=>'apply_tt', args=>[ '/extra-files/README.txt.tt', '/README.txt' ] }, + { do=>'apply_tt', args=>[ '/extra-files/DISTRIBUTIONS.txt.tt', '/DISTRIBUTIONS.txt' ] }, + # fixed files + { do=>'copyfile', args=>[ '/extra-files/licenses/License.rtf', '/licenses/License.rtf' ] }, + { do=>'copyfile', args=>[ '/extra-files/relocation.pl.bat', '/relocation.pl.bat' ] }, + { do=>'copyfile', args=>[ '/extra-files/update_env.pl.bat', '/update_env.pl.bat' ] }, + { do=>'copyfile', args=>[ '/extra-files/win32/cpan.ico', '/win32/cpan.ico' ] }, + { do=>'copyfile', args=>[ '/extra-files/win32/onion.ico', '/win32/onion.ico' ] }, + { do=>'copyfile', args=>[ '/extra-files/win32/perldoc.ico', '/win32/perldoc.ico' ] }, + { do=>'copyfile', args=>[ '/extra-files/win32/perlhelp.ico', '/win32/perlhelp.ico' ] }, + { do=>'copyfile', args=>[ '/extra-files/win32/strawberry.ico', '/win32/strawberry.ico' ] }, + { do=>'copyfile', args=>[ '/extra-files/win32/win32.ico', '/win32/win32.ico' ] }, + { do=>'copyfile', args=>[ '/extra-files/win32/metacpan.ico', '/win32/metacpan.ico' ] }, + # URLs + { do=>'apply_tt', args=>[ '/extra-files/win32/CPAN Module Search.url.tt', '/win32/CPAN Module Search.url' ] }, + { do=>'apply_tt', args=>[ '/extra-files/win32/MetaCPAN Search Engine.url.tt', '/win32/MetaCPAN Search Engine.url' ] }, + { do=>'apply_tt', args=>[ '/extra-files/win32/Learning Perl (tutorials, examples).url.tt', '/win32/Learning Perl (tutorials, examples).url' ] }, + { do=>'apply_tt', args=>[ '/extra-files/win32/Live Support (chat).url.tt', '/win32/Live Support (chat).url' ] }, + { do=>'apply_tt', args=>[ '/extra-files/win32/Perl Documentation.url.tt', '/win32/Perl Documentation.url' ] }, + { do=>'apply_tt', args=>[ '/extra-files/win32/Strawberry Perl Release Notes.url.tt', '/win32/Strawberry Perl Release Notes.url' ] }, + { do=>'apply_tt', args=>[ '/extra-files/win32/Strawberry Perl Website.url.tt', '/win32/Strawberry Perl Website.url' ] }, + # cleanup (remove unwanted files/dirs) + { do=>'removefile', args=>[ '/perl/vendor/lib/Crypt/._test.pl', '/perl/vendor/lib/DBD/testme.tmp.pl' ] }, + { do=>'removefile', args=>[ '/perl/bin/nssm_32.exe.bat', '/perl/bin/nssm_64.exe.bat' ] }, + { do=>'removefile_recursive', args=>[ '/perl', qr/.+\.dll\.AA[A-Z]$/i ] }, + { do=>'removedir', args=>[ '/perl/bin/freeglut.dll' ] }, #XXX OpenGL garbage + # cleanup cpanm related files + { do=>'removedir', args=>[ '/perl/site/lib/MSWin32-x86-multi-thread-64int' ] }, + { do=>'removedir', args=>[ '/perl/site/lib/MSWin32-x86-multi-thread' ] }, + { do=>'removedir', args=>[ '/perl/site/lib/MSWin32-x64-multi-thread' ] }, + ], + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::CreateRelocationFile', + reloc_in => '/relocation/relocation.txt.initial', + reloc_out => '/relocation.txt', + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::OutputZIP', # no options needed + }, + ### NEXT STEP ########################### + { + disable => $ENV{SKIP_MSI_STEP}, ### hack + plugin => 'Perl::Dist::Strawberry::Step::OutputMSI', + exclude => [ + #'dirname\subdir1\subdir2', + #'dirname\file.pm', + 'relocation.pl.bat', + 'update_env.pl.bat', + ], + msi_upgrade_code => 'DBA41113-4E91-3FFC-B400-573BB4B80705', #BEWARE: fixed value for all 64bit releases (for ever) + app_publisher => 'strawberryperl.com project', + url_about => 'http://strawberryperl.com/', + url_help => 'http://strawberryperl.com/support.html', + msi_root_dir => 'Strawberry', + msi_main_icon => '\msi\files\strawberry.ico', + msi_license_rtf => '\msi\files\License-short.rtf', + msi_dialog_bmp => '\msi\files\StrawberryDialog.bmp', + msi_banner_bmp => '\msi\files\StrawberryBanner.bmp', + msi_debug => 0, + + start_menu => [ # if "description" is missing it will be set to the same value as "name" + { type=>'shortcut', name=>'Perl (command line)', icon=>'\msi\files\perlexe.ico', description=>'Quick way to get to the command line in order to use Perl', target=>'[SystemFolder]cmd.exe', workingdir=>'PersonalFolder' }, + { type=>'shortcut', name=>'Strawberry Perl Release Notes', icon=>'\msi\files\strawberry.ico', target=>'[d_win32]Strawberry Perl Release Notes.url', workingdir=>'d_win32' }, + { type=>'shortcut', name=>'Strawberry Perl README', target=>'[INSTALLDIR]README.txt', workingdir=>'INSTALLDIR' }, + { type=>'folder', name=>'Tools', members=>[ + { type=>'shortcut', name=>'CPAN Client', icon=>'\msi\files\cpan.ico', target=>'[d_perl_bin]cpan.bat', workingdir=>'d_perl_bin' }, + { type=>'shortcut', name=>'Create local library areas', icon=>'\msi\files\strawberry.ico', target=>'[d_perl_bin]llw32helper.bat', workingdir=>'d_perl_bin' }, + ] }, + { type=>'folder', name=>'Related Websites', members=>[ + { type=>'shortcut', name=>'CPAN Module Search', icon=>'\msi\files\cpan.ico', target=>'[d_win32]CPAN Module Search.url', workingdir=>'d_win32' }, + { type=>'shortcut', name=>'MetaCPAN Search Engine', icon=>'\msi\files\metacpan.ico', target=>'[d_win32]MetaCPAN Search Engine.url', workingdir=>'d_win32' }, + { type=>'shortcut', name=>'Perl Documentation', icon=>'\msi\files\perldoc.ico', target=>'[d_win32]Perl Documentation.url', workingdir=>'d_win32' }, + { type=>'shortcut', name=>'Strawberry Perl Website', icon=>'\msi\files\strawberry.ico', target=>'[d_win32]Strawberry Perl Website.url', workingdir=>'d_win32' }, + { type=>'shortcut', name=>'Learning Perl (tutorials, examples)', icon=>'\msi\files\perldoc.ico', target=>'[d_win32]Learning Perl (tutorials, examples).url', workingdir=>'d_win32' }, + { type=>'shortcut', name=>'Live Support (chat)', icon=>'\msi\files\onion.ico', target=>'[d_win32]Live Support (chat).url', workingdir=>'d_win32' }, + ] }, + ], + env => { + #TERM => "dumb", + }, + + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::InstallModules', + # modules specific to portable edition + modules => [ 'Portable' ], + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::SetupPortablePerl', # no options needed + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::FilesAndDirs', + commands => [ # files and dirs specific to portable edition + { do=>'removefile', args=>[ '/README.txt', '/perl2.reloc.txt', '/perl1.reloc.txt', '/relocation.txt', + '/update_env.pl.bat', '/relocation.pl.bat' ] }, + { do=>'createdir', args=>[ '/data' ] }, + { do=>'apply_tt', args=>[ '/portable/portable.perl.tt', '/portable.perl', {gcchost=>'x86_64-w64-mingw32', gccver=>'13.1.0'} ] }, + { do=>'copyfile', args=>[ '/portable/portableshell.bat', '/portableshell.bat' ] }, + { do=>'apply_tt', args=>[ '/portable/README.portable.txt.tt', '/README.txt' ] }, + # cleanup cpanm related files + { do=>'removedir', args=>[ '/perl/site/lib/MSWin32-x86-multi-thread-64int' ] }, + { do=>'removedir', args=>[ '/perl/site/lib/MSWin32-x86-multi-thread' ] }, + { do=>'removedir', args=>[ '/perl/site/lib/MSWin32-x64-multi-thread' ] }, + ], + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::OutputPortableZIP', # no options needed + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::CreateReleaseNotes', # no options needed + }, + ### NEXT STEP ########################### + { + disable => $ENV{SKIP_PDL_STEP}, ### hack + plugin => 'Perl::Dist::Strawberry::Step::BinaryToolsAndLibs', + install_packages => { + 'fftw3' => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/gcc13.2_ucrt_posix/64bit_fftw-3.3.10-bin_20240515.zip', + 'gnuplot' => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/gcc13.2_ucrt_posix/64bit_gnuplot-6.0.0-bin_20240515.zip', + 'gsl' => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/gcc13.2_ucrt_posix/64bit_gsl-2.7.1-bin_20240515.zip', + 'hdf4' => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/gcc13.2_ucrt_posix/64bit_hdf-4.3.0-bin_20240515.zip', + 'hdf5' => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/gcc13.2_ucrt_posix/64bit_hdf5-1.12.2-bin_20240515.zip', + 'plplot' => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/gcc13.2_ucrt_posix/64bit_plplot-5.15.0-bin_20240515.zip', + 'szip' => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/gcc13.2_ucrt_posix/64bit_szip-2.1.1-bin_20240515.zip', + 'talib' => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/gcc13.2_ucrt_posix/64bit_ta-lib-0.4.0-bin_20240515.zip', + 'netcdf' => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/gcc13.2_ucrt_posix/64bit_netcdf-c-4.9.2-bin_20240515.zip', + 'lapack' => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/gcc13.2_ucrt_posix/64bit_lapack-3.12.0-bin_20240515.zip', + }, + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::FilesAndDirs', + commands => [ + { do=>'make_rw', args=>[ '/c/include/db.h' ] }, # band-aid for ro flag on db headers + { do=>'make_rw', args=>[ '/c/include/db_cxx.h' ] }, + ], + }, + ### NEXT STEP ########################### + { + disable => $ENV{SKIP_PDL_STEP}, ### hack + plugin => 'Perl::Dist::Strawberry::Step::InstallModules', + # prereq modules specific to PDL edition + modules => [ + { module => 'File::Next', ignore_testfailure => 1 }, #XXX-TODO-5.28 / PREREQ-ONLY + { module => 'Devel::REPL', ignore_testfailure => 1 }, + qw/Lexical::Persistence Astro::FITS::Header /, + # disable CFITSIO for now + # { module => 'Alien::zlib', env => {HARNESS_SUBCLASS => 'TAP::Harness::Restricted', HARNESS_SKIP => 't/alien_zlib.t',} }, # needed for Alien::CFITSIO, fails ffi test + # { module => 'Astro::FITS::CFITSIO', ignore_testfailure => 1}, # only needed for createfile test + { module => 'Inline::C', ignore_testfailure => 1 }, + { module => 'Module::Compile', ignore_testfailure => 1 }, #XXX-TODO-5.28 / PREREQ-ONLY + qw/ Term::ReadKey /, # for perldl + ], + }, + ### NEXT STEP ########################### + { + disable => $ENV{SKIP_PDL_STEP}, ### hack + plugin => 'Perl::Dist::Strawberry::Step::InstallModules', + # modules specific to PDL edition + modules => [ + { module => 'PDL', + #makefilepl_param => 'PDLCONF=\pdl\perldl2.conf', + env => { + PLPLOT_LIB => '\c\share\plplot', + PLPLOT_DRV_DIR => '\c\share\plplot', + # MAKEFLAGS => '', # there were previously issues with parallel builds + HARNESS_SUBCLASS => 'TAP::Harness::Restricted', + HARNESS_SKIP => 't/inlinepdlpp.t', # paths too long + }, + }, + qw/ PDL::IO::CSV PDL::DateTime PDL::Stats /, # PDL::IO::Image + # qw /PDL::IO::DBI/, # https://github.com/StrawberryPerl/Perl-Dist-Strawberry/issues/231#issuecomment-2611092198 + qw/ PDL::LinearAlgebra /, + ##{ module=>'PDL::Graphics::Gnuplot', skiptest=>1 }, + ##{ module=>'PDL::Graphics::Prima', ignore_testfailure => 1 }, # does not compile with 5.30.1 XXX-FIXME + # Modules no longer in PDL Core but which were in 5.40.0 + qw / + PDL::Perldl2 PDL::Complex PDL::GSL + PDL::Fit PDL::Minuit PDL::Opt::Simplex + PDL::IO::HDF PDL::IO::IDL PDL::IO::Dicom + PDL::IO::GD PDL::IO::ENVI + PDL::Graphics::Limits + /, + # Newly non-core modules that were not installed for 5.40.0. Listed only for info. + # PDL::IO::Browser PDL::Transform::Proj4 PDL::Graphics::TriD PDL::Graphics::IIS + ], + }, + ### NEXT STEP ########################### + { + disable => $ENV{SKIP_PDL_STEP}, ### hack + plugin => 'Perl::Dist::Strawberry::Step::FilesAndDirs', + commands => [ # files and dirs specific to portable edition + { do=>'removefile', args=>[ '/README.txt', '/portableshell.bat' ] }, + { do=>'copyfile', args=>[ '/portable/portableshell.pdl.bat', '/portableshell.bat' ] }, + { do=>'apply_tt', args=>[ '/portable/README.pdl.txt.tt', '/README.txt' ] }, + { do=>'removefile', args=>[ '/DISTRIBUTIONS.txt' ] }, + { do=>'apply_tt', args=>[ '/extra-files/DISTRIBUTIONS.txt.tt', '/DISTRIBUTIONS.txt' ] }, + # cleanup (remove unwanted files/dirs) + { do=>'removefile_recursive', args=>[ '/perl', qr/.+\.dll\.AA[A-Z]$/i ] }, + # cleanup cpanm related files + { do=>'removedir', args=>[ '/data/.cpanm' ] }, + { do=>'removedir', args=>[ '/perl/site/lib/MSWin32-x86-multi-thread-64int' ] }, + { do=>'removedir', args=>[ '/perl/site/lib/MSWin32-x86-multi-thread' ] }, + { do=>'removedir', args=>[ '/perl/site/lib/MSWin32-x64-multi-thread' ] }, + ], + }, + ### NEXT STEP ########################### + { + disable => $ENV{SKIP_PDL_STEP}, ### hack + plugin => 'Perl::Dist::Strawberry::Step::OutputPdlZIP', # no options needed + }, + ### NEXT STEP ########################### + { + disable => $ENV{SKIP_PDL_STEP}, ### hack + plugin => 'Perl::Dist::Strawberry::Step::CreateReleaseNotes', + suffix => '-PDL', + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::OutputLogZIP', # no options needed + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::OutputReleasesJSONSnippet', # no options needed + }, + ], +} diff --git a/share/64bit-5.40.2.1.pp b/share/64bit-5.40.2.1.pp new file mode 100644 index 0000000..2aab195 --- /dev/null +++ b/share/64bit-5.40.2.1.pp @@ -0,0 +1,693 @@ +# vim: syntax=perl + +### job description for building strawberry perl + +#Available '<..>' macros: +# is placeholder for http://strawberryperl.com/package +# is placeholder for Perl::Dist::Strawberry's distribution sharedir +# is placeholder for c:\strawberry + +{ + app_version => '5.40.2.1', #BEWARE: do not use '.0.0' in the last two version digits + bits => 64, + beta => 0, + app_fullname => 'Strawberry Perl (64-bit)', + app_simplename => 'strawberry-perl', + maketool => 'gmake', # 'dmake' or 'gmake' + build_job_steps => [ + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::BinaryToolsAndLibs', + install_packages => { + #tools + #gcc, gmake, gdb & co. + 'gcc-toolchain' => { url => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/gcc13.2_ucrt_posix/winlibs.zip', install_to => 'c' }, + #patch => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/dev_gcc10.3_20230313/64bit_patch-2.7.5-bin_20230420.zip', + 'patch' => '/kmx/64_tools/64bit_patch-2.5.9-7-bin_20100110_UAC.zip', + #special cases + #'libmysql' => '/kmx/64_libs/gcc71-2017Q2/64bit_mysql-5.7.16-bin_20170517.zip', + # gcc13 libs + 'bzip2' => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/gcc13.2_ucrt_posix/64bit_bzip2-1.0.6-bin_20240515.zip', + 'db' => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/gcc13.2_ucrt_posix/64bit_db-6.2.38-bin_20240515.zip', + 'expat' => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/gcc13.2_ucrt_posix/64bit_expat-2.6.2-bin_20240515.zip', + 'fontconfig' => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/gcc13.2_ucrt_posix/64bit_fontconfig-2.15.0-bin_20240515.zip', + 'freeglut' => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/gcc13.2_ucrt_posix/64bit_freeglut-3.4.0-bin_20240515.zip', + 'freetype' => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/gcc13.2_ucrt_posix/64bit_freetype-2.13.2-bin_20240515.zip', + 'fribidi' => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/gcc13.2_ucrt_posix/64bit_fribidi-1.0.14-bin_20240515.zip', + 'gdbm' => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/gcc13.2_ucrt_posix/64bit_gdbm-1.19-bin_20240515.zip', + 'giflib' => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/gcc13.2_ucrt_posix/64bit_giflib-5.2.2-bin_20240515.zip', + 'gmp' => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/gcc13.2_ucrt_posix/64bit_gmp-6.3.0-bin_20250121.zip', + 'graphite2' => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/gcc13.2_ucrt_posix/64bit_graphite2-1.3.14-bin_20240515.zip', + 'harfbuzz' => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/gcc13.2_ucrt_posix/64bit_harfbuzz-8.4.0-bin_20240515.zip', + 'jpeg' => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/gcc13.2_ucrt_posix/64bit_jpeg-9c-bin_20240515.zip', + 'libffi' => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/gcc13.2_ucrt_posix/64bit_libffi-3.4.6-bin_20240515.zip', + 'libgd' => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/gcc13.2_ucrt_posix/64bit_libgd-2.3.3-bin_20240515.zip', + 'liblibiconv' => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/gcc13.2_ucrt_posix/64bit_libiconv-1.17-bin_20240515.zip', + 'libidn2' => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/gcc13.2_ucrt_posix/64bit_libidn2-2.3.7-bin_20240515.zip', + 'libpng' => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/gcc13.2_ucrt_posix/64bit_libpng-1.6.43-bin_20240515.zip', + 'libssh2' => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/gcc13.2_ucrt_posix/64bit_libssh2-1.11.0-bin_20240515.zip', + 'libunistring' => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/gcc13.2_ucrt_posix/64bit_libunistring-1.2-bin_20240515.zip', + 'libxml2' => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/gcc13.2_ucrt_posix/64bit_libxml2-2.12.10-bin_20250303.zip', + 'libXpm' => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/gcc13.2_ucrt_posix/64bit_libXpm-3.5.12-bin_20240515.zip', + 'libxslt' => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/gcc13.2_ucrt_posix/64bit_libxslt-1.1.39-bin_20250303.zip', + 'libwebp' => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/gcc13.2_ucrt_posix/64bit_libwebp-1.4.0-bin_20240515.zip', + 'mpc' => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/gcc13.2_ucrt_posix/64bit_mpc-1.3.1-bin_20240515.zip', + 'mpfr' => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/gcc13.2_ucrt_posix/64bit_mpfr-4.2.1-bin_20250121.zip', + 'openssl' => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/gcc13.2_ucrt_posix/64bit_openssl-3.3.0-bin_20240515.zip', + 'postgresql' => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/gcc13.2_ucrt_posix/64bit_postgresql-16.2-bin_20240515.zip', + 'readline' => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/gcc13.2_ucrt_posix/64bit_readline-8.2-bin_20240515.zip', + 'termcap' => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/gcc13.2_ucrt_posix/64bit_termcap-1.3.1-bin_20240515.zip', + 'tiff' => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/gcc13.2_ucrt_posix/64bit_tiff-4.6.0-bin_20240515.zip', + 'xz' => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/gcc13.2_ucrt_posix/64bit_xz-5.4.6-bin_20240518.zip', + 'zlib' => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/gcc13.2_ucrt_posix/64bit_zlib-1.3.1-bin_20240515.zip', + }, + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::FilesAndDirs', + commands => [ + { do=>'removefile', args=>[ '/c/i686-w64-mingw32/lib/libglut.a', '/c/i686-w64-mingw32/lib/libglut32.a' ] }, #XXX-32bit only workaround + { do=>'movefile', args=>[ '/c/lib/libdb-6.1.a', '/c/lib/libdb.a' ] }, #XXX ugly hack + { do=>'removefile', args=>[ '/c/bin/gccbug', '/c/bin/ld.gold.exe', '/c/bin/ld.bfd.exe' ] }, + { do=>'removefile_recursive', args=>[ '/c', qr/.+\.la$/i ] }, # https://rt.cpan.org/Public/Bug/Display.html?id=127184 + { do=>'make_rw', args=>[ '/c/include/db.h' ] }, # band-aid for ro flag on db headers + { do=>'make_rw', args=>[ '/c/include/db_cxx.h' ] }, + ], + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::InstallPerlCore', + url => 'https://www.cpan.org/src/5.0/perl-5.40.2.tar.gz', + cf_email => 'strawberry-perl@project', #IMPORTANT: keep 'strawberry-perl' before @ + perl_debug => 0, # can be overridden by --perl_debug=N option + perl_64bitint => 1, # ignored on 64bit, can be overridden by --perl_64bitint | --noperl_64bitint option + # build core using these OPTIMIZE flags + optimize_core => '-Os -falign-functions -falign-jumps -falign-labels -falign-loops -freorder-blocks -freorder-blocks-algorithm=stc -freorder-blocks-and-partition', + # build CPAN modules using these OPTIMIZE flags + optimize_cpan => '-O2', + # buildoptextra => '-D__USE_MINGW_ANSI_STDIO', # not needed since 5.33.6 + patch => { #DST paths are relative to the perl src root + '/msi/files/perlexe.ico' => 'win32/perlexe.ico', + '/perl-5.36/perlexe.rc.tt' => 'win32/perlexe.rc', + '/perl-5.40/posix_bessel.patch' => '*', + '/perl-5.40/gh23179_no_delta.patch' => '*', + '/perl-5.40/scope_types.h' => 'scope_types.h', + 'config_H.gc' => { + I_DBM => 'define', + I_GDBM => 'define', + I_NDBM => 'define', + HAS_BUILTIN_CHOOSE_EXPR => 'define', + HAS_SYMLINK => 'define', + HAS_ISFINITE => 'define', # part of https://github.com/Perl/perl5/pull/22257 + }, + 'config.gc' => { # see Step.pm for list of default updates + d_builtin_choose_expr => 'define', + d_mkstemp => 'define', + d_ndbm => 'define', + d_symlink => 'define', # many cpan modules fail tests when defined + i_db => 'define', + i_dbm => 'define', + i_gdbm => 'define', + i_ndbm => 'define', + d_isfinite => 'define', # part of https://github.com/Perl/perl5/pull/22257 + osvers => '10', + }, + }, + license => { #SRC paths are relative to the perl src root + 'Readme' => '/licenses/perl/Readme', + 'Artistic' => '/licenses/perl/Artistic', + 'Copying' => '/licenses/perl/Copying', + }, + }, + ### NEXT STEP ########################### + # { + # plugin => 'Perl::Dist::Strawberry::Step::InstallModules', + # # it seems this is needed by a dep in the upgrade script + # modules => [qw /IPC::Run3 Syntax::Keyword::Try/] + # }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::UpgradeCpanModules', + exceptions => [ + # possible 'do' options: ignore_testfailure | skiptest | skip - e.g. + #{ do=>'ignore_testfailure', distribution=>'ExtUtils-MakeMaker-6.72' }, + #{ do=>'ignore_testfailure', distribution=>qr/^IPC-Cmd-/ }, + { do=>'ignore_testfailure', distribution=>qr/^Net-Ping-/ }, # 2.72 fails + { do=>'ignore_testfailure', distribution=>qr/^Archive-Tar-/ }, # 3.02 fails + ] + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::InstallModules', + modules => [ + qw /ExtUtils::Config/, # temp for debug + { module=>'Capture::Tiny', ignore_testfailure=>1 }, #XXX-TODO https://github.com/dagolden/Capture-Tiny/issues/29 + { module=>'Path::Tiny', ignore_testfailure=>1 }, #XXX-TODO 5.30 t/zzz-spec.t fails https://github.com/dagolden/Path-Tiny/issues/228 + 'TAP::Harness::Restricted', #to be able to skip only some tests + # IPC related + { module=>'IPC-Run', skiptest=>1 }, #XXX-TODO trouble with 'Terminating on signal SIGBREAK(21)' https://metacpan.org/release/IPC-Run + { module=>'IPC-System-Simple', ignore_testfailure=>1 }, #XXX-TODO t/07_taint.t fails https://metacpan.org/release/IPC-System-Simple + qw/ IPC-Run3 /, + + # LWP + TLS + { module=>'Net::SSLeay', ignore_testfailure=>1 }, # openssl-1.1.1 related + { module=>'Mozilla::CA' }, # optional dependency of IO-Socket-SSL + { module=>'IO::Socket::SSL', skiptest=>1, env=>{ 'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/nonblock.t t/mitm.t t/verify_fingerprint.t t/session_ticket.t t/sni_verify.t' } }, + { module=>'LWP', skiptest=>1 }, # XXX-HACK: 6.08 is broken + { module=>'LWP::Protocol::https', env=>{ 'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/https_proxy.t' } }, #https://rt.perl.org/Ticket/Display.html?id=132863 + + # install cpanm as soon as possible + qw/ App::cpanminus /, + + # https://github.com/StrawberryPerl/Perl-Dist-Strawberry/issues/80 + 'https://cpan.metacpan.org/authors/id/X/XA/XAOC/ExtUtils-Depends-0.8000.tar.gz', + ] + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::InstallModules', + modules => [ + + # gdbm / db related + qw/ BerkeleyDB DB_File /, + { # PR by demerphq to build on 5.38 + module => 'https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/download/dev_20230318/DBM-Deep-2.0017.tar.gz', + env => {MAKEFLAGS => '', TEST_JOBS => '' }, + }, + + { module=>'Socket', ignore_uptodate => 1 }, # reinstall: https://github.com/StrawberryPerl/Perl-Dist-Strawberry/issues/221 + + #removed from core in 5.20 + qw/ Module::Build /, + { module=>'B::Lint', ignore_testfailure=>1 }, #XXX-TODO https://rt.cpan.org/Public/Bug/Display.html?id=101115 #XXX-FAIL-5.32.1 + { module=>'Archive::Extract', ignore_testfailure=>1 }, #XXX-TODO-5.28/64bit + { module=>'CPANPLUS', env=>{ 'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/40_CPANPLUS-Internals-Report.t' } }, + #XXX-TODO https://rt.cpan.org/Public/Bug/Display.html?id=116479 + qw/ CPANPLUS::Dist::Build /, + qw/ File::CheckTree Log::Message Module::Pluggable Object::Accessor Text::Soundex Term::UI /, + 'Tree-DAG_Node', # 1.33 failed tests, fixed in 1.34 + + # https://github.com/StrawberryPerl/Perl-Dist-Strawberry/issues/92 + { module => 'https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/download/dev_20230318/Pod-Parser-1.65_01.tar.gz' }, + # qw /Pod::Latex/, # disabled - https://github.com/StrawberryPerl/Perl-Dist-Strawberry/issues/75 + + # YAML, JSON & co. + qw/ JSON Cpanel::JSON::XS JSON::XS JSON::MaybeXS YAML YAML::Tiny YAML::XS /, + + # pkg-config related + # current version fails some symlink related tests + { module => 'PkgConfig', + makefilepl_param => '--script=pkg-config', + env => {'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/01-script_detailed.t'} + }, + 'ExtUtils::PkgConfig', + + ] + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::InstallModules', + modules => [ + # win32 related + { module=>'Win32API::Registry', ignore_testfailure=>1 }, # https://github.com/StrawberryPerl/Perl-Dist-Strawberry/issues/66 + qw/Win32::TieRegistry/, + { module=>'Win32::OLE', skiptest=>1 }, #XXX-TODO: ! Testing Win32-OLE-0.1713 leaves excel dialogues and files hanging around + { module=>'Win32::GuiTest', skiptest=>1 }, + { module=>'Win32::API', ignore_testfailure=>1 }, #XXX-TODO: https://rt.cpan.org/Public/Bug/Display.html?id=107450 + { module => 'Win32::Exe', env => { MAKEFLAGS => '', TEST_JOBS => ''} }, + { module=>'/kmx/perl-modules-patched/Win32-Pipe-0.025_patched.tar.gz' }, #XXX-FIXME + # File-Remove has symlink test failures under 5.38, is needed by Win32-File-Object + { module=>'File-Remove', env=>{ 'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/05_links.t' } }, + qw/ Win32-Daemon Win32-EventLog Win32-Process Win32-File-Object Win32-WinError Win32-UTCFileTime Win32-LongPath/, + qw/ Win32-ShellQuote Win32::Console Win32::Job Win32::ServiceManager Win32::Service /, + # qw/ Win32::Console::ANSI /, # disable for now - fails tests under UCRT 5.39.10 - but patched now + { + module => 'https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/download/patched_cpan_modules/Win32-Console-ANSI-1.11_001.tar.gz', + env => { 'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/04_DisplayEdition.t t/06_Func.t' } + # 06_Func test fails new in 5.40.2, as-yet undiagnosed + }, + { module => 'Win32-Clipboard', ignore_testfailure=>1 }, # inconsistent failures of tests 7 & 9 + { module=>'/kmx/perl-modules-patched/Win32-SerialPort-0.22_patched.tar.gz', skiptest=>1 }, + qw/ Sys::Syslog /, + + # term related + { module=>'Term::ReadKey', ignore_testfailure=>1 }, + { module=>'Term::ReadLine::Perl', env=>{ PERL_MM_NONINTERACTIVE=>1 } }, + + # compression + { module=>'Archive::Zip', ignore_testfailure=>1 }, #XXX-TODO t/25_traversal.t + qw/ IO-Compress-Lzma Compress-unLZMA Archive::Extract /, + + ] + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::InstallModules', + modules => [ + # file related + { module=>'File-ShareDir-Install', ignore_testfailure=>1 }, #XXX-TODO-5.28 + { module=>'File::Copy::Recursive', ignore_testfailure=>1 }, #XXX-FAIL-5.32.1 + { module => 'https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/download/dev_20230318/File-Find-Rule-0.34_01.tar.gz' }, # https://github.com/StrawberryPerl/Perl-Dist-Strawberry/issues/88 + qw/ File-HomeDir File-Listing File-ShareDir File-Which File::Map /, + { module=>'File::Slurp', ignore_testfailure=>1 }, + qw/ File::Slurper /, + { module=>'IO::All', env=>{ 'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/link.t' } }, # https://github.com/StrawberryPerl/Perl-Dist-Strawberry/issues/67 + { module=>'Path::Class', env=>{ 'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/01-basic.t' } }, # https://github.com/StrawberryPerl/Perl-Dist-Strawberry/issues/65 + qw/ Path::Tiny /, + # math related + 'Devel::CheckLib', #this used to fail + qw/ Math-Round Math-BigInt-GMP Math-GMP Math-MPFR Math-MPC /, + qw/ ExtUtils::F77 /, + + ] + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::InstallModules', + modules => [ + # SSH & telnet + qw/ Net-SSH2 Net::Telnet /, + + # network + # https://github.com/StrawberryPerl/Perl-Dist-Strawberry/issues/72 + { module => 'https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/download/dev_20230318/Socket6-0.29_02.tar.gz' }, + qw/ IO::Socket::IP IO::Socket::INET6 IO::Socket::Socks /, + # EV4.32 + perl-5.30 fails XXX-FIXME + { module=>'HTTP-Server-Simple', env => { 'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/04cgi.t' } }, # intermittent connection failures, passes otherwise + { module=>'/kmx/perl-modules-patched/Crypt-SSLeay-0.72_patched.tar.gz' }, #XXX-FIXME + { module=>'Mojolicious', env=>{ 'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/mojolicious/websocket_lite_app.t t/mojo/file.t' } }, #https://github.com/kraih/mojo/issues/1011, https://github.com/StrawberryPerl/Perl-Dist-Strawberry/issues/67 + { module=>'WWW::Mechanize', skiptest=>1 }, # tests hang + + ] + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::InstallModules', + modules => [ + # XML & co. + + { module=>'Alien::Libxml2', env=>{ 'PKG_CONFIG_PATH'=>'C:\strawberry\c\lib\pkgconfig' } }, # alien probe needs to find the pkgconfig file + qw/ XML-LibXML XML-LibXSLT XML-Parser XML-SAX /, + { module => 'XML::Simple', env => {MAKEFLAGS => '', TEST_JOBS => ''} }, + { module=>'XML::Twig', ignore_testfailure=>1 }, #XXX-TODO XML-Twig-3.52 fails + + # data/text processing + { module=>'IO::Stringy', env=>{ 'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/IO_InnerFile.t' } }, #https://rt.cpan.org/Public/Bug/Display.html?id=103895 + qw/ Text-Diff Text-Patch Text::CSV Text::CSV_XS Tie::Array::CSV Excel::Writer::XLSX Spreadsheet::WriteExcel Spreadsheet::ParseExcel /, + # qw /Spreadsheet::ParseXLSX/, # currently failing BigMath tests: https://github.com/StrawberryPerl/Perl-Dist-Strawberry/issues/214 + + ] + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::InstallModules', + modules => [ + + # database stuff + { module=>'Module::Find', env=>{ 'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/07-symlinks.t' } }, # https://github.com/StrawberryPerl/Perl-Dist-Strawberry/issues/67 + + { module=>'Config::Any', env=>{ 'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/10-branches.t' } }, # https://github.com/StrawberryPerl/Perl-Dist-Strawberry/issues/73 needed for DBIx::Class + 'https://cpan.metacpan.org/authors/id/H/HM/HMBRAND/DBI-1.645.tgz', # https://github.com/StrawberryPerl/Perl-Dist-Strawberry/issues/242 + { module=>'DBD::SQLite', env=>{ 'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/33_non_latin_path.t' } }, # https://github.com/StrawberryPerl/Perl-Dist-Strawberry/issues/68 + qw/ DBD-ODBC DBD-CSV DBD-ADO DBIx-Class DBIx-Simple /, + 'https://cpan.metacpan.org/authors/id/T/TU/TURNSTEP/DBD-Pg-3.8.0.tar.gz', ###{ module=>'DBD::Pg' }, + #{ module=>'DBD::mysql' }, # disable until we sort out more recent mysql (but see https://github.com/StrawberryPerl/Perl-Dist-Strawberry/discussions/157 ) + # SKIP DBD::Oracle for 5.36 until we can sort out what files to use + # { module=>'DBD::Oracle', makefilepl_param=>'-V 12.2.0.1.0', env=>{ ORACLE_HOME=>'c:\ora122instant64' }, skiptest=>1 }, ## requires Oracle Instant Client 64bit!!! + + ] + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::InstallModules', + modules => [ + # crypto related - many were disabled as CryptX 0.085 is failing - should be fixed in 0.086. + # { module =>'Convert-PEM', ignore_testfailure=>1 }, #XXX-TODO Convert-PEM-0.08 fails + # qw/ Convert-PEM /, + qw / Crypt::OpenSSL::DSA /, # https://github.com/StrawberryPerl/Perl-Dist-Strawberry/issues/86 + qw / CryptX /, + qw/ Crypt::OpenSSL::Bignum Crypt-OpenSSL-RSA Crypt-OpenSSL-Random Crypt-OpenSSL-X509 /, + qw / Crypt::OpenSSL::AES /, + #'KMX/Crypt-OpenSSL-AES-0.05.tar.gz', #XXX-FIXME patched https://metacpan.org/pod/Crypt::OpenSSL::AES https://rt.cpan.org/Public/Bug/Display.html?id=77605 + #Crypt-SMIME ? + qw/ Crypt::CBC Crypt-DSA /, # dependency CryptX 0.085 fails + qw/ Crypt::Blowfish Crypt::CAST5_PP Crypt::DES Crypt::DES_EDE3 Crypt::IDEA Crypt::Rijndael Crypt::Twofish Crypt::Serpent Crypt::RC6 /, + qw/ Digest-MD2 Digest-MD5 Digest-SHA Digest-SHA1 Crypt::RIPEMD160 Digest::Whirlpool Digest::HMAC Digest::CMAC /, + # 'Alt::Crypt::RSA::BigInt', #hack Crypt-RSA without Math::PARI - https://metacpan.org/release/Crypt-RSA, # fails for 5.40.1 due to Math::Prime::Util::GMP + + #qw /Crypt::DSA::GMP/, # fails for 5.40.1 due to Math::Prime::Util::GMP + + qw/ Bytes::Random::Secure /, + # qw /Crypt::OpenPGP/, # fails for 5.40.1 due to Math::Prime::Util::GMP + #qw/ Module::Signature /, #XXX-TODO still not able to properly handle CRLF - https://metacpan.org/release/Module-Signature + + # date/time + { module=>'Test2::Plugin::NoWarnings', ignore_testfailure=>1 }, #otherwise DateTime fails + qw/ DateTime Date::Format DateTime::Format::DateParse DateTime::TimeZone::Local::Win32 Time::Moment /, + + # e-mail + qw/ List::MoreUtils::XS List::MoreUtils /, # required by Net::IMAP::Client - https://rt.cpan.org/Public/Bug/Display.html?id=122875 + # Net::DNS and Net::Domain::TLD are needed for Email::Valid but its metadata is not correctly specified + { module=>'Net::DNS', skiptest=>1 }, # tests might hang due to network issues + qw /Net::Domain::TLD/, + qw/ Email::MIME::Kit Email::Sender Email::Simple Email::Stuffer Mail::Send /, + qw /Email::Valid/, # Fails under 5.39.10 unless Net::DNS and Net::Domain::TLD are already installed + qw/ Net::SMTPS Net::SMTP Net::IMAP::Client Net::POP3 /, + + + ] + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::InstallModules', + modules => [ + # graphics + # 'GD', # disable for 5.39.10 + ##{ module=>'http://chorny.net/strawberry/Imager-1.006.zip', ignore_testfailure=>1 }, #https://rt.cpan.org/Ticket/Display.html?id=124001 + { module=>'Imager', ignore_testfailure=>1 }, #https://rt.cpan.org/Ticket/Display.html?id=124001 + qw/ Imager-File-GIF Imager-File-JPEG Imager-File-PNG Imager-Font-FT2 Imager-Font-W32 /, + # qw/ Imager-File-TIFF /, # https://github.com/tonycoz/imager/issues/537 + # Disable for now - tests fail when run under gmake but pass under prove. + # There have also been no updates since 2016 and local installs work quickly. + # { module=>'OpenGL', ignore_testfailure=>1 }, + + # XML/SOAP webservices + 'Log::Report', + qw/ HTTP::Daemon SOAP-Lite /, + #qw/ XML::Compile::SOAP12 XML::Compile::SOAP11 XML::Compile::WSDL11 /, + + # utils + qw/ App::cpanoutdated App::pmuninstall pler App-module-version App-local-lib-Win32Helper /, + + ] + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::InstallModules', + modules => [ + # par & ppm + qw/ PAR PAR::Dist::FromPPD PAR::Dist::InstallPPD PAR::Repository::Client /, + # { module => 'PAR::Packer', env => { MAKEFLAGS => '', TEST_JOBS => '' } }, + { module => 'PAR::Packer', ignore_testfailure=>1, env => { MAKEFLAGS => '', TEST_JOBS => '' } }, + + # The build path in ppm.xml is derived from $ENV{TMP}. So set TMP to a dedicated location inside of the + # distribution root to prevent it being locked to the temp directory of the build machine. + { module=>'/kmx/perl-modules-patched/PPM-11.11_04.tar.gz', env=>{ TMP=>'\ppm' } }, #XXX-FIXME + + # exceptions + qw/ Try-Tiny Carp::Always autodie /, + + # templates + { module=>'Template', env=>{ 'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/process_dir.t' } }, #XXX-NEW 5.26.0 https://github.com/abw/Template2/pull/67 + qw/ Template-Tiny /, + + # OO - moose, moo & co. + qw/ Moose MooseX-Types MooseX::Types::Structured /, + #{ module=>'MooseX::Declare', ignore_testfailure=>1 }, #XXX-PREREQ-ONLY https://rt.cpan.org/Public/Bug/Display.html?id=97690 + qw/ MooseX::ClassAttribute MooseX::Role::Parameterized MooseX::NonMoose Moo /, + + # OO - others + qw/ Class::Accessor Class::Accessor::Lite Class::XSAccessor Class::Tiny Object::Tiny /, + + ] + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::InstallModules', + modules => [ + # dumpers + qw/ Data::Dump Data::Printer /, + { module=>'Data-Dump-Streamer', ignore_testfailure=>1 }, #XXX-TODO ! Testing Data-Dump-Streamer-2.37 failed + + # misc + #{ module=>'Alien::Tidyp', buildpl_param=>'--srctarball=http://strawberryperl.com/package/kmx/testing/tidyp-1.04.tar.gz' }, #gcc 8.3 failure + qw/ CPAN::SQLite /, + { module => 'FCGI', env => { 'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/02-unix_domain_socket.t' } }, + qw/ IO::String /, + { module=>'Unicode::UTF8', ignore_testfailure=>1 }, #XXX-TODO-5.28 + qw/ V Modern::Perl Perl::Tidy /, + qw/ FFI::Raw FFI::Platypus /, + qw/ PadWalker Devel::vscode /, + + qw/ Devel::NYTProf /, + + + # Task::Kensho deps that have issues + # https://github.com/StrawberryPerl/Perl-Dist-Strawberry/issues/103 + { module=>'Test::MockObject', env=>{ 'HARNESS_SUBCLASS'=>'TAP::Harness::Restricted', 'HARNESS_SKIP'=>'t/extends.t' } }, + { module => 'https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/download/dev_20230318/String-Escape-2010.002.tar.gz' }, + + # GUI - not yet + #qw/IUP/, + ], + + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::FixShebang', + shebang => '#!perl', + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::FilesAndDirs', + commands => [ + # directories + { do=>'createdir', args=>[ '/cpan' ] }, + { do=>'createdir', args=>[ '/cpan/sources' ] }, + { do=>'createdir', args=>[ '/win32' ] }, + # templated files + { do=>'apply_tt', args=>[ '/config-files/CPAN_Config.pm.tt', '/perl/lib/CPAN/Config.pm', {}, 1 ] }, #XXX-temporary empty tt_vars, no_backup=1 + { do=>'apply_tt', args=>[ '/extra-files/README.txt.tt', '/README.txt' ] }, + { do=>'apply_tt', args=>[ '/extra-files/DISTRIBUTIONS.txt.tt', '/DISTRIBUTIONS.txt' ] }, + # fixed files + { do=>'copyfile', args=>[ '/extra-files/licenses/License.rtf', '/licenses/License.rtf' ] }, + { do=>'copyfile', args=>[ '/extra-files/relocation.pl.bat', '/relocation.pl.bat' ] }, + { do=>'copyfile', args=>[ '/extra-files/update_env.pl.bat', '/update_env.pl.bat' ] }, + { do=>'copyfile', args=>[ '/extra-files/win32/cpan.ico', '/win32/cpan.ico' ] }, + { do=>'copyfile', args=>[ '/extra-files/win32/onion.ico', '/win32/onion.ico' ] }, + { do=>'copyfile', args=>[ '/extra-files/win32/perldoc.ico', '/win32/perldoc.ico' ] }, + { do=>'copyfile', args=>[ '/extra-files/win32/perlhelp.ico', '/win32/perlhelp.ico' ] }, + { do=>'copyfile', args=>[ '/extra-files/win32/strawberry.ico', '/win32/strawberry.ico' ] }, + { do=>'copyfile', args=>[ '/extra-files/win32/win32.ico', '/win32/win32.ico' ] }, + { do=>'copyfile', args=>[ '/extra-files/win32/metacpan.ico', '/win32/metacpan.ico' ] }, + # URLs + { do=>'apply_tt', args=>[ '/extra-files/win32/CPAN Module Search.url.tt', '/win32/CPAN Module Search.url' ] }, + { do=>'apply_tt', args=>[ '/extra-files/win32/MetaCPAN Search Engine.url.tt', '/win32/MetaCPAN Search Engine.url' ] }, + { do=>'apply_tt', args=>[ '/extra-files/win32/Learning Perl (tutorials, examples).url.tt', '/win32/Learning Perl (tutorials, examples).url' ] }, + { do=>'apply_tt', args=>[ '/extra-files/win32/Live Support (chat).url.tt', '/win32/Live Support (chat).url' ] }, + { do=>'apply_tt', args=>[ '/extra-files/win32/Perl Documentation.url.tt', '/win32/Perl Documentation.url' ] }, + { do=>'apply_tt', args=>[ '/extra-files/win32/Strawberry Perl Release Notes.url.tt', '/win32/Strawberry Perl Release Notes.url' ] }, + { do=>'apply_tt', args=>[ '/extra-files/win32/Strawberry Perl Website.url.tt', '/win32/Strawberry Perl Website.url' ] }, + # cleanup (remove unwanted files/dirs) + { do=>'removefile', args=>[ '/perl/vendor/lib/Crypt/._test.pl', '/perl/vendor/lib/DBD/testme.tmp.pl' ] }, + { do=>'removefile', args=>[ '/perl/bin/nssm_32.exe.bat', '/perl/bin/nssm_64.exe.bat' ] }, + { do=>'removefile_recursive', args=>[ '/perl', qr/.+\.dll\.AA[A-Z]$/i ] }, + { do=>'removedir', args=>[ '/perl/bin/freeglut.dll' ] }, #XXX OpenGL garbage + # cleanup cpanm related files + { do=>'removedir', args=>[ '/perl/site/lib/MSWin32-x86-multi-thread-64int' ] }, + { do=>'removedir', args=>[ '/perl/site/lib/MSWin32-x86-multi-thread' ] }, + { do=>'removedir', args=>[ '/perl/site/lib/MSWin32-x64-multi-thread' ] }, + ], + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::CreateRelocationFile', + reloc_in => '/relocation/relocation.txt.initial', + reloc_out => '/relocation.txt', + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::OutputZIP', # no options needed + }, + ### NEXT STEP ########################### + { + disable => $ENV{SKIP_MSI_STEP}, ### hack + plugin => 'Perl::Dist::Strawberry::Step::OutputMSI', + exclude => [ + #'dirname\subdir1\subdir2', + #'dirname\file.pm', + 'relocation.pl.bat', + 'update_env.pl.bat', + ], + msi_upgrade_code => 'DBA41113-4E91-3FFC-B400-573BB4B80705', #BEWARE: fixed value for all 64bit releases (for ever) + app_publisher => 'strawberryperl.com project', + url_about => 'http://strawberryperl.com/', + url_help => 'http://strawberryperl.com/support.html', + msi_root_dir => 'Strawberry', + msi_main_icon => '\msi\files\strawberry.ico', + msi_license_rtf => '\msi\files\License-short.rtf', + msi_dialog_bmp => '\msi\files\StrawberryDialog.bmp', + msi_banner_bmp => '\msi\files\StrawberryBanner.bmp', + msi_debug => 0, + + start_menu => [ # if "description" is missing it will be set to the same value as "name" + { type=>'shortcut', name=>'Perl (command line)', icon=>'\msi\files\perlexe.ico', description=>'Quick way to get to the command line in order to use Perl', target=>'[SystemFolder]cmd.exe', workingdir=>'PersonalFolder' }, + { type=>'shortcut', name=>'Strawberry Perl Release Notes', icon=>'\msi\files\strawberry.ico', target=>'[d_win32]Strawberry Perl Release Notes.url', workingdir=>'d_win32' }, + { type=>'shortcut', name=>'Strawberry Perl README', target=>'[INSTALLDIR]README.txt', workingdir=>'INSTALLDIR' }, + { type=>'folder', name=>'Tools', members=>[ + { type=>'shortcut', name=>'CPAN Client', icon=>'\msi\files\cpan.ico', target=>'[d_perl_bin]cpan.bat', workingdir=>'d_perl_bin' }, + { type=>'shortcut', name=>'Create local library areas', icon=>'\msi\files\strawberry.ico', target=>'[d_perl_bin]llw32helper.bat', workingdir=>'d_perl_bin' }, + ] }, + { type=>'folder', name=>'Related Websites', members=>[ + { type=>'shortcut', name=>'CPAN Module Search', icon=>'\msi\files\cpan.ico', target=>'[d_win32]CPAN Module Search.url', workingdir=>'d_win32' }, + { type=>'shortcut', name=>'MetaCPAN Search Engine', icon=>'\msi\files\metacpan.ico', target=>'[d_win32]MetaCPAN Search Engine.url', workingdir=>'d_win32' }, + { type=>'shortcut', name=>'Perl Documentation', icon=>'\msi\files\perldoc.ico', target=>'[d_win32]Perl Documentation.url', workingdir=>'d_win32' }, + { type=>'shortcut', name=>'Strawberry Perl Website', icon=>'\msi\files\strawberry.ico', target=>'[d_win32]Strawberry Perl Website.url', workingdir=>'d_win32' }, + { type=>'shortcut', name=>'Learning Perl (tutorials, examples)', icon=>'\msi\files\perldoc.ico', target=>'[d_win32]Learning Perl (tutorials, examples).url', workingdir=>'d_win32' }, + { type=>'shortcut', name=>'Live Support (chat)', icon=>'\msi\files\onion.ico', target=>'[d_win32]Live Support (chat).url', workingdir=>'d_win32' }, + ] }, + ], + env => { + #TERM => "dumb", + }, + + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::InstallModules', + # modules specific to portable edition + modules => [ 'Portable' ], + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::SetupPortablePerl', # no options needed + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::FilesAndDirs', + commands => [ # files and dirs specific to portable edition + { do=>'removefile', args=>[ '/README.txt', '/perl2.reloc.txt', '/perl1.reloc.txt', '/relocation.txt', + '/update_env.pl.bat', '/relocation.pl.bat' ] }, + { do=>'createdir', args=>[ '/data' ] }, + { do=>'apply_tt', args=>[ '/portable/portable.perl.tt', '/portable.perl', {gcchost=>'x86_64-w64-mingw32', gccver=>'13.1.0'} ] }, + { do=>'copyfile', args=>[ '/portable/portableshell.bat', '/portableshell.bat' ] }, + { do=>'apply_tt', args=>[ '/portable/README.portable.txt.tt', '/README.txt' ] }, + # cleanup cpanm related files + { do=>'removedir', args=>[ '/perl/site/lib/MSWin32-x86-multi-thread-64int' ] }, + { do=>'removedir', args=>[ '/perl/site/lib/MSWin32-x86-multi-thread' ] }, + { do=>'removedir', args=>[ '/perl/site/lib/MSWin32-x64-multi-thread' ] }, + ], + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::OutputPortableZIP', # no options needed + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::CreateReleaseNotes', # no options needed + }, + ### NEXT STEP ########################### + { + disable => $ENV{SKIP_PDL_STEP}, ### hack + plugin => 'Perl::Dist::Strawberry::Step::BinaryToolsAndLibs', + install_packages => { + 'fftw3' => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/gcc13.2_ucrt_posix/64bit_fftw-3.3.10-bin_20240515.zip', + 'gnuplot' => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/gcc13.2_ucrt_posix/64bit_gnuplot-6.0.0-bin_20240515.zip', + 'gsl' => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/gcc13.2_ucrt_posix/64bit_gsl-2.7.1-bin_20240515.zip', + 'hdf4' => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/gcc13.2_ucrt_posix/64bit_hdf-4.3.0-bin_20240515.zip', + 'hdf5' => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/gcc13.2_ucrt_posix/64bit_hdf5-1.12.2-bin_20240515.zip', + 'plplot' => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/gcc13.2_ucrt_posix/64bit_plplot-5.15.0-bin_20240515.zip', + 'szip' => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/gcc13.2_ucrt_posix/64bit_szip-2.1.1-bin_20240515.zip', + 'talib' => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/gcc13.2_ucrt_posix/64bit_ta-lib-0.4.0-bin_20240515.zip', + 'netcdf' => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/gcc13.2_ucrt_posix/64bit_netcdf-c-4.9.2-bin_20240515.zip', + 'lapack' => 'https://github.com/StrawberryPerl/build-extlibs/releases/download/gcc13.2_ucrt_posix/64bit_lapack-3.12.0-bin_20240515.zip', + }, + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::FilesAndDirs', + commands => [ + { do=>'make_rw', args=>[ '/c/include/db.h' ] }, # band-aid for ro flag on db headers + { do=>'make_rw', args=>[ '/c/include/db_cxx.h' ] }, + ], + }, + ### NEXT STEP ########################### + { + disable => $ENV{SKIP_PDL_STEP}, ### hack + plugin => 'Perl::Dist::Strawberry::Step::InstallModules', + # prereq modules specific to PDL edition + modules => [ + { module => 'File::Next', ignore_testfailure => 1 }, #XXX-TODO-5.28 / PREREQ-ONLY + { module => 'Devel::REPL', ignore_testfailure => 1 }, + qw/Lexical::Persistence Astro::FITS::Header /, + # disable CFITSIO for now + # { module => 'Alien::zlib', env => {HARNESS_SUBCLASS => 'TAP::Harness::Restricted', HARNESS_SKIP => 't/alien_zlib.t',} }, # needed for Alien::CFITSIO, fails ffi test + # { module => 'Astro::FITS::CFITSIO', ignore_testfailure => 1}, # only needed for createfile test + { module => 'Inline::C', ignore_testfailure => 1 }, + { module => 'Module::Compile', ignore_testfailure => 1 }, #XXX-TODO-5.28 / PREREQ-ONLY + qw/ Term::ReadKey /, # for perldl + ], + }, + ### NEXT STEP ########################### + { + disable => $ENV{SKIP_PDL_STEP}, ### hack + plugin => 'Perl::Dist::Strawberry::Step::InstallModules', + # modules specific to PDL edition + modules => [ + { module => 'PDL', + #makefilepl_param => 'PDLCONF=\pdl\perldl2.conf', + env => { + PLPLOT_LIB => '\c\share\plplot', + PLPLOT_DRV_DIR => '\c\share\plplot', + # MAKEFLAGS => '', # there were previously issues with parallel builds + HARNESS_SUBCLASS => 'TAP::Harness::Restricted', + HARNESS_SKIP => 't/inlinepdlpp.t', # paths too long + }, + }, + qw/ PDL::IO::CSV PDL::DateTime PDL::Stats /, # PDL::IO::Image + # qw /PDL::IO::DBI/, # https://github.com/StrawberryPerl/Perl-Dist-Strawberry/issues/231#issuecomment-2611092198 + qw/ PDL::LinearAlgebra /, + ##{ module=>'PDL::Graphics::Gnuplot', skiptest=>1 }, + ##{ module=>'PDL::Graphics::Prima', ignore_testfailure => 1 }, # does not compile with 5.30.1 XXX-FIXME + # Modules no longer in PDL Core but which were in 5.40.0 + qw / + PDL::Perldl2 PDL::Complex PDL::GSL + PDL::Fit PDL::Minuit PDL::Opt::Simplex + PDL::IO::HDF PDL::IO::IDL PDL::IO::Dicom + PDL::IO::GD PDL::IO::ENVI + PDL::Graphics::Limits + /, + # Newly non-core modules that were not installed for 5.40.0. Listed only for info. + # PDL::IO::Browser PDL::Transform::Proj4 PDL::Graphics::TriD PDL::Graphics::IIS + ], + }, + ### NEXT STEP ########################### + { + disable => $ENV{SKIP_PDL_STEP}, ### hack + plugin => 'Perl::Dist::Strawberry::Step::FilesAndDirs', + commands => [ # files and dirs specific to portable edition + { do=>'removefile', args=>[ '/README.txt', '/portableshell.bat' ] }, + { do=>'copyfile', args=>[ '/portable/portableshell.pdl.bat', '/portableshell.bat' ] }, + { do=>'apply_tt', args=>[ '/portable/README.pdl.txt.tt', '/README.txt' ] }, + { do=>'removefile', args=>[ '/DISTRIBUTIONS.txt' ] }, + { do=>'apply_tt', args=>[ '/extra-files/DISTRIBUTIONS.txt.tt', '/DISTRIBUTIONS.txt' ] }, + # cleanup (remove unwanted files/dirs) + { do=>'removefile_recursive', args=>[ '/perl', qr/.+\.dll\.AA[A-Z]$/i ] }, + # cleanup cpanm related files + { do=>'removedir', args=>[ '/data/.cpanm' ] }, + { do=>'removedir', args=>[ '/perl/site/lib/MSWin32-x86-multi-thread-64int' ] }, + { do=>'removedir', args=>[ '/perl/site/lib/MSWin32-x86-multi-thread' ] }, + { do=>'removedir', args=>[ '/perl/site/lib/MSWin32-x64-multi-thread' ] }, + ], + }, + ### NEXT STEP ########################### + { + disable => $ENV{SKIP_PDL_STEP}, ### hack + plugin => 'Perl::Dist::Strawberry::Step::OutputPdlZIP', # no options needed + }, + ### NEXT STEP ########################### + { + disable => $ENV{SKIP_PDL_STEP}, ### hack + plugin => 'Perl::Dist::Strawberry::Step::CreateReleaseNotes', + suffix => '-PDL', + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::OutputLogZIP', # no options needed + }, + ### NEXT STEP ########################### + { + plugin => 'Perl::Dist::Strawberry::Step::OutputReleasesJSONSnippet', # no options needed + }, + ], +} diff --git a/share/perl-5.38/gh23179_no_delta_or_PERL_RE_BUILD_AUX.patch b/share/perl-5.38/gh23179_no_delta_or_PERL_RE_BUILD_AUX.patch new file mode 100644 index 0000000..f49361f --- /dev/null +++ b/share/perl-5.38/gh23179_no_delta_or_PERL_RE_BUILD_AUX.patch @@ -0,0 +1,259 @@ +From f1b6fa6bb53480921fb0083d9c8b583b8df2e904 Mon Sep 17 00:00:00 2001 +From: Tony Cook +Date: Mon, 24 Feb 2025 15:56:09 +1100 +Subject: [PATCH 1/3] regcomp: handle cloning the rexc cleanup in the scope + stack + +Previous on Win32 this could cause a double-free of the RExC state if +an emulated fork was done with the free of the state on the scope +stack. + +Use a custom save type and prevent freeing in the cloned process to +prevent the double-free. + +Fixes #23022 + +XXX scope_types.h is elided from original patch and applied separately +after regen as it did not patch cleanly. + +XXX2: Removed ifdef for PERL_RE_BUILD_AUX + +--- + embed.fnc | 4 ++- + embed.h | 1 + + proto.h | 6 ++++ + regcomp.c | 16 +++++++---- + regen/scope_types.pl | 1 + + scope.c | 6 ++++ + scope.h | 5 ++++ + scope_types.h | 68 +++++++++++++++++++++++--------------------- + sv.c | 5 ++++ + 9 files changed, 73 insertions(+), 39 deletions(-) + +diff --git a/embed.fnc b/embed.fnc +index 0332f63875ec..90b518a03f0a 100644 +--- a/embed.fnc ++++ b/embed.fnc +@@ -2791,6 +2791,9 @@ Cp |char * |re_intuit_start|NN REGEXP * const rx \ + |NULLOK re_scream_pos_data *data + Cp |SV * |re_intuit_string \ + |NN REGEXP * const r ++ ++p |void |release_RExC_state \ ++ |NN void *vstate + Xp |REGEXP *|re_op_compile |NULLOK SV ** const patternp \ + |int pat_count \ + |NULLOK OP *expr \ +@@ -2799,7 +2802,6 @@ Xp |REGEXP *|re_op_compile |NULLOK SV ** const patternp \ + |NULLOK bool *is_bare_re \ + |const U32 rx_flags \ + |const U32 pm_flags +- + ATdp |void |repeatcpy |NN char *to \ + |NN const char *from \ + |SSize_t len \ +diff --git a/embed.h b/embed.h +index e1e2bf4d02f1..d6926854177b 100644 +--- a/embed.h ++++ b/embed.h +@@ -1200,6 +1200,7 @@ + # define refcounted_he_new_pv(a,b,c,d,e) Perl_refcounted_he_new_pv(aTHX_ a,b,c,d,e) + # define refcounted_he_new_pvn(a,b,c,d,e,f) Perl_refcounted_he_new_pvn(aTHX_ a,b,c,d,e,f) + # define refcounted_he_new_sv(a,b,c,d,e) Perl_refcounted_he_new_sv(aTHX_ a,b,c,d,e) ++# define release_RExC_state(a) Perl_release_RExC_state(aTHX_ a) + # define report_evil_fh(a) Perl_report_evil_fh(aTHX_ a) + # define report_wrongway_fh(a,b) Perl_report_wrongway_fh(aTHX_ a,b) + # define rpeep(a) Perl_rpeep(aTHX_ a) +diff --git a/proto.h b/proto.h +index e132956f8ac8..6ded4aeb247f 100644 +--- a/proto.h ++++ b/proto.h +@@ -3893,6 +3893,12 @@ PERL_CALLCONV void + Perl_reginitcolors(pTHX); + #define PERL_ARGS_ASSERT_REGINITCOLORS + ++PERL_CALLCONV void ++Perl_release_RExC_state(pTHX_ void *vstate) ++ __attribute__visibility__("hidden"); ++#define PERL_ARGS_ASSERT_RELEASE_REXC_STATE \ ++ assert(vstate) ++ + PERL_CALLCONV void + Perl_repeatcpy(char *to, const char *from, SSize_t len, IV count); + #define PERL_ARGS_ASSERT_REPEATCPY \ +diff --git a/regcomp.c b/regcomp.c +index a79221079269..14e1390062e5 100644 +--- a/regcomp.c ++++ b/regcomp.c +@@ -1356,15 +1356,19 @@ S_is_ssc_worth_it(const RExC_state_t * pRExC_state, const regnode_ssc * ssc) + return true; + } + +-static void +-release_RExC_state(pTHX_ void *vstate) { +- RExC_state_t *pRExC_state = (RExC_state_t *)vstate; ++ ++ ++void ++Perl_release_RExC_state(pTHX_ void *vstate) { ++ PERL_ARGS_ASSERT_RELEASE_REXC_STATE; + ++ RExC_state_t *pRExC_state = (RExC_state_t *)vstate; ++ + /* Any or all of these might be NULL. + + There's no point in setting them to NULL after the free, since + pRExC_state is about to be released. +- */ ++ */ + SvREFCNT_dec(RExC_rx_sv); + Safefree(RExC_open_parens); + Safefree(RExC_close_parens); +@@ -1374,6 +1378,8 @@ release_RExC_state(pTHX_ void *vstate) { + Safefree(pRExC_state); + } + ++ ++ + /* + * Perl_re_op_compile - the perl internal RE engine's function to compile a + * regular expression into internal code. +@@ -1475,7 +1481,7 @@ Perl_re_op_compile(pTHX_ SV ** const patternp, int pat_count, + * or error. */ + Newxz(pRExC_state, 1, RExC_state_t); + +- SAVEDESTRUCTOR_X(release_RExC_state, pRExC_state); ++ SAVE_FREE_REXC_STATE(pRExC_state); + + DEBUG_r({ + /* and then initialize RExC_mysv1 and RExC_mysv2 early so if +diff --git a/regen/scope_types.pl b/regen/scope_types.pl +index 3a7522d734b9..a3f406951793 100644 +--- a/regen/scope_types.pl ++++ b/regen/scope_types.pl +@@ -137,6 +137,7 @@ BEGIN + SAVEt_FREEPADNAME + SAVEt_STRLEN_SMALL + SAVEt_FREERCPV ++SAVEt_FREE_REXC_STATE + + /* two args */ + +diff --git a/scope.c b/scope.c +index 210ea36da3e8..b8063c27760b 100644 +--- a/scope.c ++++ b/scope.c +@@ -1391,6 +1391,12 @@ Perl_leave_scope(pTHX_ I32 base) + Safefree(a0.any_ptr); + break; + ++ case SAVEt_FREE_REXC_STATE: ++ a0 = ap[0]; ++ if (a0.any_ptr) ++ release_RExC_state(a0.any_ptr); ++ break; ++ + case SAVEt_CLEARPADRANGE: + { + I32 i; +diff --git a/scope.h b/scope.h +index 311c4a32ec1b..eccd3aaba2dc 100644 +--- a/scope.h ++++ b/scope.h +@@ -183,6 +183,11 @@ scope has the given name. C must be a literal string. + #define SAVESETSVFLAGS(sv,mask,val) save_set_svflags(sv,mask,val) + #define SAVEFREECOPHH(h) save_pushptr((void *)(h), SAVEt_FREECOPHH) + ++#if defined(PERL_CORE) || defined(PERL_EXT) ++# define SAVE_FREE_REXC_STATE(p) \ ++ save_pushptr((void *)(p), SAVEt_FREE_REXC_STATE) ++#endif ++ + #define SAVEDELETE(h,k,l) \ + save_delete(MUTABLE_HV(h), (char*)(k), (I32)(l)) + #define SAVEHDELETE(h,s) \ +diff --git a/sv.c b/sv.c +index e8c6e65a2717..ae6d09dea28a 100644 +--- a/sv.c ++++ b/sv.c +@@ -15515,6 +15515,11 @@ Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param) + c = (char*)POPPTR(ss,ix); + TOPPTR(nss,ix) = pv_dup_inc(c); + break; ++ case SAVEt_FREE_REXC_STATE: ++ (void)POPPTR(ss, ix); ++ /* free only once */ ++ TOPPTR(nss, ix) = NULL; ++ break; + case SAVEt_FREERCPV: + c = (char *)POPPTR(ss,ix); + TOPPTR(nss,ix) = rcpv_copy(c); + +From c54f9ca07b8390e9b917ea3b66fa605c8cf24b09 Mon Sep 17 00:00:00 2001 +From: Tony Cook +Date: Mon, 14 Apr 2025 10:46:13 +1000 +Subject: [PATCH 3/3] regcomp: ensure the RExC_state freed earlier rather than + later + +388bf71 (ignoring #23022 for now) ensured that the RExC_state +and its controlled pointers were freed once and only once, +regardless of whether re_op_compile() returned normally or threw +an exception. + +Unfortunately that free could happen very later, surviving well beyond +when the regexp was compiled. + +Add an ENTER/LEAVE pair to ensure the cleanup is done immediately +on a normal return. +--- + regcomp.c | 9 ++++++++- + 1 file changed, 8 insertions(+), 1 deletion(-) + +diff --git a/regcomp.c b/regcomp.c +index 14e1390062e5..0a84ad07606f 100644 +--- a/regcomp.c ++++ b/regcomp.c +@@ -1481,6 +1481,7 @@ Perl_re_op_compile(pTHX_ SV ** const patternp, int pat_count, + * or error. */ + Newxz(pRExC_state, 1, RExC_state_t); + ++ ENTER_with_name("re_op_compile"); + SAVE_FREE_REXC_STATE(pRExC_state); + + DEBUG_r({ +@@ -1578,6 +1579,8 @@ Perl_re_op_compile(pTHX_ SV ** const patternp, int pat_count, + "Precompiled pattern%s\n", + orig_rx_flags & RXf_SPLIT ? " for split" : "")); + ++ LEAVE_with_name("re_op_compile"); ++ + return (REGEXP*)re; + } + } +@@ -1593,7 +1596,9 @@ Perl_re_op_compile(pTHX_ SV ** const patternp, int pat_count, + pat = newSVpvn_flags(exp, plen, SVs_TEMP | + (IN_BYTES ? 0 : SvUTF8(pat))); + } +- return CALLREGCOMP_ENG(eng, pat, orig_rx_flags); ++ REGEXP *re = CALLREGCOMP_ENG(eng, pat, orig_rx_flags); ++ LEAVE_with_name("re_op_compile"); ++ return re; + } + + /* ignore the utf8ness if the pattern is 0 length */ +@@ -1643,6 +1648,7 @@ Perl_re_op_compile(pTHX_ SV ** const patternp, int pat_count, + Perl_re_printf( aTHX_ "%sSkipping recompilation of unchanged REx%s %s\n", + PL_colors[4], PL_colors[5], s); + }); ++ LEAVE_with_name("re_op_compile"); + return old_re; + } + +@@ -2477,6 +2483,7 @@ Perl_re_op_compile(pTHX_ SV ** const patternp, int pat_count, + if (old_re && SvREADONLY(old_re)) + SvREADONLY_on(Rx); + #endif ++ LEAVE_with_name("re_op_compile"); + return Rx; + } + diff --git a/share/perl-5.38/scope_types.h b/share/perl-5.38/scope_types.h new file mode 100644 index 0000000..c348298 --- /dev/null +++ b/share/perl-5.38/scope_types.h @@ -0,0 +1,153 @@ +/* -*- mode: C; buffer-read-only: t -*- + + Copyright (C) 2022 by Larry Wall and others + + You may distribute under the terms of either the GNU General Public + License or the Artistic License, as specified in the README file. + + !!!!!!! DO NOT EDIT THIS FILE !!!!!!! + This file is built by regen/scope_types.pl. + Any changes made here will be lost! + The defines and contents of the leave_scope_arg_counts[] array + must match. To add a new type modify the __DATA__ section in + regen/scope_types.pl and run `make regen` to rebuild the file. + */ + +/* zero args */ + +#define SAVEt_ALLOC 0 +#define SAVEt_CLEARPADRANGE 1 +#define SAVEt_CLEARSV 2 +#define SAVEt_REGCONTEXT 3 + +/* one arg */ + +#define SAVEt_TMPSFLOOR 4 +#define SAVEt_BOOL 5 +#define SAVEt_COMPILE_WARNINGS 6 +#define SAVEt_CURCOP_WARNINGS 7 +#define SAVEt_COMPPAD 8 +#define SAVEt_FREECOPHH 9 +#define SAVEt_FREEOP 10 +#define SAVEt_FREEPV 11 +#define SAVEt_FREESV 12 +#define SAVEt_I16 13 +#define SAVEt_I32_SMALL 14 +#define SAVEt_I8 15 +#define SAVEt_INT_SMALL 16 +#define SAVEt_MORTALIZESV 17 +#define SAVEt_NSTAB 18 +#define SAVEt_OP 19 +#define SAVEt_PARSER 20 +#define SAVEt_STACK_POS 21 +#define SAVEt_READONLY_OFF 22 +#define SAVEt_FREEPADNAME 23 +#define SAVEt_STRLEN_SMALL 24 +#define SAVEt_FREERCPV 25 +#define SAVEt_FREE_REXC_STATE 26 + +/* two args */ + +#define SAVEt_AV 27 +#define SAVEt_DESTRUCTOR 28 +#define SAVEt_DESTRUCTOR_X 29 +#define SAVEt_GENERIC_PVREF 30 +#define SAVEt_GENERIC_SVREF 31 +#define SAVEt_GP 32 +#define SAVEt_GVSV 33 +#define SAVEt_HINTS 34 +#define SAVEt_HPTR 35 +#define SAVEt_HV 36 +#define SAVEt_I32 37 +#define SAVEt_INT 38 +#define SAVEt_ITEM 39 +#define SAVEt_IV 40 +#define SAVEt_LONG 41 +#define SAVEt_PPTR 42 +#define SAVEt_SAVESWITCHSTACK 43 +#define SAVEt_SHARED_PVREF 44 +#define SAVEt_SPTR 45 +#define SAVEt_STRLEN 46 +#define SAVEt_SV 47 +#define SAVEt_SVREF 48 +#define SAVEt_VPTR 49 +#define SAVEt_ADELETE 50 +#define SAVEt_APTR 51 +#define SAVEt_RCPV 52 + +/* three args */ + +#define SAVEt_HELEM 53 +#define SAVEt_PADSV_AND_MORTALIZE 54 +#define SAVEt_SET_SVFLAGS 55 +#define SAVEt_GVSLOT 56 +#define SAVEt_AELEM 57 +#define SAVEt_DELETE 58 +#define SAVEt_HINTS_HH 59 + +static const U8 leave_scope_arg_counts[] = { + 0, /* SAVEt_ALLOC */ + 0, /* SAVEt_CLEARPADRANGE */ + 0, /* SAVEt_CLEARSV */ + 0, /* SAVEt_REGCONTEXT */ + 1, /* SAVEt_TMPSFLOOR */ + 1, /* SAVEt_BOOL */ + 1, /* SAVEt_COMPILE_WARNINGS */ + 1, /* SAVEt_CURCOP_WARNINGS */ + 1, /* SAVEt_COMPPAD */ + 1, /* SAVEt_FREECOPHH */ + 1, /* SAVEt_FREEOP */ + 1, /* SAVEt_FREEPV */ + 1, /* SAVEt_FREESV */ + 1, /* SAVEt_I16 */ + 1, /* SAVEt_I32_SMALL */ + 1, /* SAVEt_I8 */ + 1, /* SAVEt_INT_SMALL */ + 1, /* SAVEt_MORTALIZESV */ + 1, /* SAVEt_NSTAB */ + 1, /* SAVEt_OP */ + 1, /* SAVEt_PARSER */ + 1, /* SAVEt_STACK_POS */ + 1, /* SAVEt_READONLY_OFF */ + 1, /* SAVEt_FREEPADNAME */ + 1, /* SAVEt_STRLEN_SMALL */ + 1, /* SAVEt_FREERCPV */ + 1, /* SAVEt_FREE_REXC_STATE */ + 2, /* SAVEt_AV */ + 2, /* SAVEt_DESTRUCTOR */ + 2, /* SAVEt_DESTRUCTOR_X */ + 2, /* SAVEt_GENERIC_PVREF */ + 2, /* SAVEt_GENERIC_SVREF */ + 2, /* SAVEt_GP */ + 2, /* SAVEt_GVSV */ + 2, /* SAVEt_HINTS */ + 2, /* SAVEt_HPTR */ + 2, /* SAVEt_HV */ + 2, /* SAVEt_I32 */ + 2, /* SAVEt_INT */ + 2, /* SAVEt_ITEM */ + 2, /* SAVEt_IV */ + 2, /* SAVEt_LONG */ + 2, /* SAVEt_PPTR */ + 2, /* SAVEt_SAVESWITCHSTACK */ + 2, /* SAVEt_SHARED_PVREF */ + 2, /* SAVEt_SPTR */ + 2, /* SAVEt_STRLEN */ + 2, /* SAVEt_SV */ + 2, /* SAVEt_SVREF */ + 2, /* SAVEt_VPTR */ + 2, /* SAVEt_ADELETE */ + 2, /* SAVEt_APTR */ + 2, /* SAVEt_RCPV */ + 3, /* SAVEt_HELEM */ + 3, /* SAVEt_PADSV_AND_MORTALIZE */ + 3, /* SAVEt_SET_SVFLAGS */ + 3, /* SAVEt_GVSLOT */ + 3, /* SAVEt_AELEM */ + 3, /* SAVEt_DELETE */ + 3 /* SAVEt_HINTS_HH */ +}; + +#define MAX_SAVEt 59 + +/* ex: set ro ft=c: */ diff --git a/share/perl-5.40/GNUmakefile_5401 b/share/perl-5.40/GNUmakefile_5401 new file mode 100644 index 0000000..edf9619 --- /dev/null +++ b/share/perl-5.40/GNUmakefile_5401 @@ -0,0 +1,1912 @@ +# +# Makefile to build perl on Windows using GMAKE. +# Supported compilers: +# Microsoft Visual C++ 12.0 or later +# MinGW with gcc-3.4.5-5.3.0 +# MinGW64 with gcc-4.4.3 or later +# +# This is set up to build a perl.exe that runs off a shared library +# (perl540.dll). Also makes individual DLLs for the XS extensions. +# +# The easiest way to customize the build process is to use parameters like this: +# +# c:\dev\perlsrc\win32> gmake INST_TOP=c:\sw\perl CCHOME=c:\sw\mingw USE_64_BIT_INT=define + + +## +## Make sure you read README.win32 *before* you mess with anything here! +## + +# +# We set this to point to cmd.exe in case GNU Make finds sh.exe in the path. +# Comment this line out if necessary +# +SHELL := cmd.exe + +# define whether you want to use native gcc compiler or cross-compiler +# possible values: gcc +# i686-w64-mingw32-gcc +# x86_64-w64-mingw32-gcc +GCCBIN := gcc + +ifeq ($(GCCBIN),x86_64-w64-mingw32-gcc) +GCCCROSS := x86_64-w64-mingw32 +endif +ifeq ($(GCCBIN),i686-w64-mingw32-gcc) +GCCCROSS := i686-w64-mingw32 +endif + + +## +## Build configuration. Edit the values below to suit your needs. +## + +# +# Set these to wherever you want "gmake install" to put your +# newly built perl. +# +INST_DRV := c: +INST_TOP := $(INST_DRV)\perl + +# +# Uncomment if you want to build a 32-bit Perl using a 32-bit compiler +# on a 64-bit version of Windows. +# +#WIN64 := undef + +# +# Comment this out if you DON'T want your perl installation to be versioned. +# This means that the new installation will overwrite any files from the +# old installation at the same INST_TOP location. Leaving it enabled is +# the safest route, as perl adds the extra version directory to all the +# locations it installs files to. If you disable it, an alternative +# versioned installation can be obtained by setting INST_TOP above to a +# path that includes an arbitrary version string. +# +#INST_VER := \5.40.1 + +# +# Comment this out if you DON'T want your perl installation to have +# architecture specific components. This means that architecture- +# specific files will be installed along with the architecture-neutral +# files. Leaving it enabled is safer and more flexible, in case you +# want to build multiple flavors of perl and install them together in +# the same location. Commenting it out gives you a simpler +# installation that is easier to understand for beginners. +# +#INST_ARCH := \$(ARCHNAME) + +# +# Uncomment this if you want perl to run +# $Config{sitelibexp}\sitecustomize.pl +# before anything else. This script can then be set up, for example, +# to add additional entries to @INC. +# +#USE_SITECUST := define + +# +# uncomment to enable multiple interpreters. This is needed for fork() +# emulation and for thread support, and is auto-enabled by USE_IMP_SYS +# and USE_ITHREADS below. +# +USE_MULTI := define + +# +# Interpreter cloning/threads; now reasonably complete. +# This should be enabled to get the fork() emulation. This needs (and +# will auto-enable) USE_MULTI above. +# +USE_ITHREADS := define + +# +# uncomment to enable the implicit "host" layer for all system calls +# made by perl. This is also needed to get fork(). This needs (and +# will auto-enable) USE_MULTI above. +# +USE_IMP_SYS := define + +# +# Comment out next assign to disable perl's I/O subsystem and use compiler's +# stdio for IO - depending on your compiler vendor and run time library you may +# then get a number of fails from make test i.e. bugs - complain to them not us ;-). +# You will also be unable to take full advantage of perl5.8's support for multiple +# encodings and may see lower IO performance. You have been warned. +# +USE_PERLIO := define + +# +# Uncomment this if you're building a 32-bit perl and want 64-bit integers. +# (If you're building a 64-bit perl then you will have 64-bit integers whether +# or not this is uncommented.) +# +#USE_64_BIT_INT := define + +# +# Uncomment this if you want to support the use of long doubles in GCC builds. +# This option is not supported for MSVC builds. +# +#USE_LONG_DOUBLE := define + +# +# Uncomment these if you want to support the use of __float128 in GCC builds. +# This option is not supported for MSVC builds. +# +#USE_QUADMATH := define +#I_QUADMATH := define + +# +# Comment this out if you want to build perl without __USE_MINGW_ANSI_STDIO defined. +# (If you're building perl with USE_LONG_DOUBLE defined then +# __USE_MINGW_ANSI_STDIO will be defined whether or not this is uncommented.) +# The advantage of defining __USE_MINGW_ANSI_STDIO is that it provides correct +# (s)printf formatting of numbers, whereas the MS runtime might not. +# This option has no effect on MSVC builds. +# +USE_MINGW_ANSI_STDIO := define + +# +# Comment this out if you want the legacy default behavior of including '.' at +# the end of @INC. +# +DEFAULT_INC_EXCLUDES_DOT := define + +# +# Uncomment this if you want to disable looking up values from +# HKEY_CURRENT_USER\Software\Perl and HKEY_LOCAL_MACHINE\Software\Perl in +# the Registry. +# +#USE_NO_REGISTRY := define + +# +# uncomment exactly one of the following +# +# Visual C++ 2015 (aka Visual C++ 14.0) (full version or Express Edition) +#CCTYPE := MSVC140 +# Visual C++ 2017 (aka Visual C++ 14.1) (full version or Community Edition) +#CCTYPE := MSVC141 +# Visual C++ 2019 (aka Visual C++ 14.2) (full version or Community Edition) +#CCTYPE := MSVC142 +# Visual C++ 2022 (aka Visual C++ 14.3) (full version or Community Edition) +#CCTYPE := MSVC143 +# MinGW or mingw-w64 with gcc-3.4.5 or later +#CCTYPE := GCC + +# +# If you are using Intel C++ Compiler uncomment this +# +#__ICC := define + +# +# Uncomment this if you want to build everything in C++ mode +# This requires gcc or at least MSVC 2019. +# +#USE_CPLUSPLUS := define + +# +# uncomment next line if you want debug version of perl (big/slow) +# If not enabled, we automatically try to use maximum optimization +# with all compilers that are known to have a working optimizer. +# +# You can also set CFG = DebugSymbols for a slightly smaller/faster +# debug build without the special debugging code in perl which is +# enabled via -DDEBUGGING; +# +#CFG := Debug + +# +# uncomment to enable linking with setargv.obj under the Visual C +# compiler. Setting this options enables perl to expand wildcards in +# arguments, but it may be harder to use alternate methods like +# File::DosGlob that are more powerful. This option is supported only with +# Visual C. +# +#USE_SETARGV := define + +# +# set this if you wish to use perl's malloc +# WARNING: Turning this on/off WILL break binary compatibility with extensions +# you may have compiled with/without it. Be prepared to recompile all +# extensions if you change the default. Currently, this cannot be enabled +# if you ask for USE_IMP_SYS above. +# +#PERL_MALLOC := define + +# +# set this to enable debugging mstats +# This must be enabled to use the Devel::Peek::mstat() function. This cannot +# be enabled without PERL_MALLOC as well. +# +#DEBUG_MSTATS := define + +# +# set this to additionally provide a statically linked perl-static.exe. +# Note that dynamic loading will not work with this perl, so you must +# include required modules statically using the STATIC_EXT or ALL_STATIC +# variables below. A static library perl540s.lib will also be created. +# Ordinary perl.exe is not affected by this option. +# +#BUILD_STATIC := define + +# +# in addition to BUILD_STATIC the option ALL_STATIC makes *every* +# extension get statically built. +# This will result in a very large perl executable, but the main purpose +# is to have proper linking set so as to be able to create miscellaneous +# executables with different built-in extensions. It implies BUILD_STATIC. +# +#ALL_STATIC := define + +# +# set the install locations of the compiler +# Running VCVARS32.BAT, VCVARSALL.BAT or similar is *required* when using +# Visual C++. +# +# For GCC builds this should be the directory containing the bin, include, +# lib directories for your compiler. +# +#CCHOME := C:\MinGW + +# +# Additional compiler flags can be specified here. +# +BUILDOPT := $(BUILDOPTEXTRA) + +# +# This should normally be disabled. Enabling it will disable the File::Glob +# implementation of CORE::glob. +# +#BUILDOPT += -DPERL_EXTERNAL_GLOB + +# +# Perl needs to read scripts in text mode so that the DATA filehandle +# works correctly with seek() and tell(), or around auto-flushes of +# all filehandles (e.g. by system(), backticks, fork(), etc). +# +# The current version on the ByteLoader module on CPAN however only +# works if scripts are read in binary mode. But before you disable text +# mode script reading (and break some DATA filehandle functionality) +# please check first if an updated ByteLoader isn't available on CPAN. +# +BUILDOPT += -DPERL_TEXTMODE_SCRIPTS + +# +# specify semicolon-separated list of extra directories that modules will +# look for libraries (spaces in path names need not be quoted) +# +EXTRALIBDIRS := + +# +# set this to your email address (perl will guess a value from +# your loginname and your hostname, which may not be right) +# +#EMAIL := + +## +## Build configuration ends. +## + +##################### CHANGE THESE ONLY IF YOU MUST ##################### + +PERL_MALLOC ?= undef +DEBUG_MSTATS ?= undef + +USE_SITECUST ?= undef +USE_MULTI ?= undef +USE_ITHREADS ?= undef +USE_IMP_SYS ?= undef +USE_PERLIO ?= undef +USE_LARGE_FILES ?= undef +USE_64_BIT_INT ?= undef +USE_LONG_DOUBLE ?= undef +USE_QUADMATH ?= undef +I_QUADMATH ?= undef +DEFAULT_INC_EXCLUDES_DOT ?= undef +USE_NO_REGISTRY ?= undef + +ifeq ($(USE_IMP_SYS),define) +PERL_MALLOC = undef +endif + +ifeq ($(PERL_MALLOC),undef) +DEBUG_MSTATS = undef +endif + +ifeq ($(DEBUG_MSTATS),define) +BUILDOPT += -DPERL_DEBUGGING_MSTATS +endif + +ifeq ("$(USE_IMP_SYS) $(USE_MULTI)","define undef") +USE_MULTI = define +endif + +ifeq ("$(USE_ITHREADS) $(USE_MULTI)","define undef") +USE_MULTI = define +endif + +ifeq ($(USE_SITECUST),define) +BUILDOPT += -DUSE_SITECUSTOMIZE +endif + +ifneq ($(USE_MULTI),undef) +BUILDOPT += -DMULTIPLICITY +endif + +ifneq ($(USE_IMP_SYS),undef) +BUILDOPT += -DPERL_IMPLICIT_SYS +endif + +ifeq ($(USE_NO_REGISTRY),define) +BUILDOPT += -DWIN32_NO_REGISTRY +endif + +ifeq ($(CCTYPE),GCC) +GCCTARGET := $(shell $(GCCBIN) -dumpmachine) +endif + +#no explicit CCTYPE given, do auto detection +ifeq ($(CCTYPE),) +GCCTARGET := $(shell $(GCCBIN) -dumpmachine 2>NUL) +#do we have a GCC? +ifneq ($(GCCTARGET),) +CCTYPE := GCC +else +WIN64 := $(shell for /f "tokens=3 delims=.^ " \ + %%i in ('cl ^2^>^&1') do @if "%%i" == "32-bit" echo undef) +#major version of CL has diff position based on 32 vs 64 +#Microsoft (R) C/C++ Optimizing Compiler Version 15.00.30729.01 for x64 +#Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86 +#use var to capture 1st line only, not 8th token of lines 2 & 3 in cl.exe output +#removing the cmd /c (extra scope) on the echo causes the env var to be undef +#when echo executes but it isn't undef for the "set MSVCVER", gmake or +#cmd.exe bug? +ifeq ($(WIN64),undef) +MSVCVER := $(shell (set MSVCVER=) & (for /f "tokens=8,9 delims=.^ " \ + %%i in ('cl ^2^>^&1') do if not defined MSVCVER if %%i%% geq 19 \ + (set /A "MSVCVER=((%%i-5)*10)+(%%j/10)") \ + else (set /A "MSVCVER=(%%i-6)*10")) & cmd /c echo %%MSVCVER%%) +else +MSVCVER := $(shell (set MSVCVER=) & (for /f "tokens=7,8 delims=.^ " \ + %%i in ('cl ^2^>^&1') do if not defined MSVCVER if %%i%% geq 19 \ + (set /A "MSVCVER=((%%i-5)*10)+(%%j/10)") \ + else (set /A "MSVCVER=(%%i-6)*10")) & cmd /c echo %%MSVCVER%%) +endif +#autodetect failed, reset to empty string +ifeq ($(MSVCVER),-50) +CCTYPE := +else +CCTYPE := MSVC$(MSVCVER) +endif +endif +endif + +# Versions of Visual C++ up to VC++ 14.0 define $(VCINSTALLDIR), but for +# VC++ 14.1 we need the subfolder given by $(VCToolsInstallDir). +ifeq ($(CCHOME),) +ifeq ($(CCTYPE),GCC) +CCHOME := C:\MinGW +else ifeq ($(CCTYPE),MSVC140) +CCHOME := $(VCINSTALLDIR) +else +CCHOME := $(VCToolsInstallDir) +endif +endif + +# Check processor architecture from target triplet +# possible values: +# gcc: i686-w64-mingw32, x86_64-w64-mingw32 +# clang: i686-w64-windows-gnu, x86_64-w64-windows-gnu +ifeq ($(CCTYPE),GCC) +ifeq (x86_64, $(findstring x86_64, $(GCCTARGET))) +WIN64 := define +PROCESSOR_ARCHITECTURE := x64 +endif +ifeq (i686, $(findstring i686, $(GCCTARGET))) +WIN64 := undef +PROCESSOR_ARCHITECTURE := x86 +endif +endif + +PROCESSOR_ARCHITECTURE ?= x86 + +ifeq ($(WIN64),undef) +PROCESSOR_ARCHITECTURE = x86 +endif + +ifeq ($(WIN64),) +# When we are running from a 32bit cmd.exe on AMD64 then +# PROCESSOR_ARCHITECTURE is set to x86 and PROCESSOR_ARCHITEW6432 +# is set to AMD64 +ifneq ($(PROCESSOR_ARCHITEW6432),) +PROCESSOR_ARCHITECTURE = $(PROCESSOR_ARCHITEW6432) +WIN64 = define +else ifeq ($(PROCESSOR_ARCHITECTURE),AMD64) +WIN64 = define +else ifeq ($(PROCESSOR_ARCHITECTURE),IA64) +WIN64 = define +else +WIN64 = undef +endif +endif + +ifeq ($(WIN64),define) +USE_64_BIT_INT = define +endif + +# Disable the long double option for MSVC builds since that compiler +# does not support it. +ifneq ($(CCTYPE),GCC) +USE_LONG_DOUBLE = undef +USE_QUADMATH = undef +I_QUADMATH = undef +endif + +ARCHITECTURE = $(PROCESSOR_ARCHITECTURE) +ifeq ($(ARCHITECTURE),AMD64) +ARCHITECTURE = x64 +endif +ifeq ($(ARCHITECTURE),IA64) +ARCHITECTURE = ia64 +endif + +ifeq ($(USE_MULTI),define) +ARCHNAME = MSWin32-$(ARCHITECTURE)-multi +else +ifeq ($(USE_PERLIO),define) +ARCHNAME = MSWin32-$(ARCHITECTURE)-perlio +else +ARCHNAME = MSWin32-$(ARCHITECTURE) +endif +endif + +ifeq ($(USE_PERLIO),define) +BUILDOPT += -DUSE_PERLIO +endif + +ifeq ($(USE_ITHREADS),define) +ARCHNAME := $(ARCHNAME)-thread +endif + +ifneq ($(WIN64),define) +ifeq ($(USE_64_BIT_INT),define) +ARCHNAME := $(ARCHNAME)-64int +endif +endif + +ifeq ($(USE_LONG_DOUBLE),define) +ARCHNAME := $(ARCHNAME)-ld +endif + +ifeq ($(USE_QUADMATH),define) +ARCHNAME := $(ARCHNAME)-quadmath +endif + +ifeq ($(CCTYPE),GCC) +GCCVER := $(shell $(GCCBIN) -dumpversion) +GCCVER1 := $(shell for /f "delims=. tokens=1,2,3" %%i in ('$(GCCBIN) -dumpversion') do echo %%i) +GCCVER2 := $(shell for /f "delims=. tokens=1,2,3" %%i in ('$(GCCBIN) -dumpversion') do echo %%j) +GCCVER3 := $(shell for /f "delims=. tokens=1,2,3" %%i in ('$(GCCBIN) -dumpversion') do echo %%k) +endif + +# Set the install location of the compiler headers/libraries. +# These are saved into $Config{incpath} and $Config{libpth}. +ifneq ($(GCCCROSS),) +CCINCDIR := $(CCHOME)\$(GCCCROSS)\include +CCLIBDIR := $(CCHOME)\$(GCCCROSS)\lib +ARCHPREFIX := $(GCCCROSS)- +else ifeq ($(CCTYPE),GCC) +CCINCDIR := $(CCHOME)\include +CCLIBDIR := $(CCHOME)\lib;$(CCHOME)\$(GCCTARGET)\lib;$(CCHOME)\lib\gcc\$(GCCTARGET)\$(GCCVER) +ARCHPREFIX := +else +CCINCDIR := $(CCHOME)\include +ifeq ($(CCTYPE),MSVC140) +ifeq ($(WIN64),define) +CCLIBDIR := $(CCHOME)\lib\amd64 +else +CCLIBDIR := $(CCHOME)\lib +endif +else +ifeq ($(WIN64),define) +CCLIBDIR := $(CCHOME)\lib\x64 +else +CCLIBDIR := $(CCHOME)\lib\x86 +endif +endif +ARCHPREFIX := +endif + +# Set DLL location for GCC compilers. +ifeq ($(CCTYPE),GCC) +ifneq ($(GCCCROSS),) +CCDLLDIR := $(CCHOME)\$(GCCCROSS)\lib +else +CCDLLDIR := $(CCHOME)\bin +endif +endif + +ARCHDIR = ..\lib\$(ARCHNAME) +COREDIR = ..\lib\CORE +AUTODIR = ..\lib\auto +LIBDIR = ..\lib +EXTDIR = ..\ext +DISTDIR = ..\dist +CPANDIR = ..\cpan +PODDIR = ..\pod +HTMLDIR = .\html + +# Strip trailing backslash from INST_TOP +override INST_TOP := $(INST_TOP:\=) + +INST_SCRIPT = $(INST_TOP)$(INST_VER)\bin +INST_BIN = $(INST_SCRIPT)$(INST_ARCH) +INST_LIB = $(INST_TOP)$(INST_VER)\lib +INST_ARCHLIB = $(INST_LIB)$(INST_ARCH) +INST_COREDIR = $(INST_ARCHLIB)\CORE +INST_HTML = $(INST_TOP)$(INST_VER)\html + +# +# Programs to compile, build .lib files and link +# + +MINIBUILDOPT := + +ifeq ($(CCTYPE),GCC) + +CC = $(ARCHPREFIX)gcc +LINK32 = $(ARCHPREFIX)g++ +LIB32 = $(ARCHPREFIX)ar rc +IMPLIB = $(ARCHPREFIX)dlltool +RSC = $(ARCHPREFIX)windres + +ifeq ($(USE_LONG_DOUBLE),define) +BUILDOPT += -D__USE_MINGW_ANSI_STDIO +MINIBUILDOPT += -D__USE_MINGW_ANSI_STDIO +else ifeq ($(USE_MINGW_ANSI_STDIO),define) +BUILDOPT += -D__USE_MINGW_ANSI_STDIO +MINIBUILDOPT += -D__USE_MINGW_ANSI_STDIO +endif + + +# By default add -fwrapv, since we depend on 2's complement behaviour +# for signed numbers. +# See https://github.com/Perl/perl5/issues/13690 +# +GCCWRAPV := define + +ifeq ($(GCCWRAPV),define) +BUILDOPT += -fwrapv +MINIBUILDOPT += -fwrapv +endif + +i = .i +o = .o +a = .a + +# +# Options +# + +INCLUDES = -I.\include -I. -I.. +DEFINES = -DWIN32 +ifeq ($(WIN64),define) +DEFINES += -DWIN64 +endif +LOCDEFS = -DPERLDLL -DPERL_CORE +CXX_FLAG = -xc++ +LIBC = +LIBFILES = $(LIBC) -lmoldname -lkernel32 -luser32 -lgdi32 -lwinspool \ + -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -lnetapi32 \ + -luuid -lws2_32 -lmpr -lwinmm -lversion -lodbc32 -lodbccp32 -lcomctl32 + +ifeq ($(USE_QUADMATH),define) +LIBFILES += -lquadmath +endif + +ifeq ($(CFG),Debug) +# According to https://gcc.gnu.org/onlinedocs/gcc-8.3.0/gcc/Optimize-Options.html +# -Og should provide some optimizations while still giving convenient debugging +OPTIMIZE = -g -Og +LINK_DBG = -g +DEFINES += -DDEBUGGING +else ifeq ($(CFG),DebugSymbols) +OPTIMIZE = -g -Og +LINK_DBG = -g +else +# In https://github.com/Perl/perl5/issues/20081 it is found that the previous +# optimization level -O2 causes generated code that fails in mysterious ways +# when run on Win11 (*even* if it was built and successfully tested on Win10!). +#OPTIMIZE = -Os +OPTIMIZE = -Os -falign-functions -falign-jumps -falign-labels -falign-loops -freorder-blocks -freorder-blocks-algorithm=stc -freorder-blocks-and-partition +#OPTIMIZE = -O2 -fno-inline-functions +LINK_DBG = -s +endif + +CWARNFLAGS = -Wall -Wextra -Werror=pointer-arith -Wno-format -Wno-long-long -Werror=vla +ifeq ($(USE_CPLUSPLUS),define) +EXTRACFLAGS += $(CXX_FLAG) +else +EXTRACFLAGS += -std=c99 +endif +CFLAGS = $(EXTRACFLAGS) $(INCLUDES) $(DEFINES) $(LOCDEFS) $(OPTIMIZE) +LINK_FLAGS = $(LINK_DBG) -L"$(INST_COREDIR)" -L"$(subst ;," -L",$(CCLIBDIR))" +OBJOUT_FLAG = -o +EXEOUT_FLAG = -o +LIBOUT_FLAG = +PDBOUT = + +BUILDOPT += -fno-strict-aliasing -mms-bitfields +MINIBUILDOPT += -fno-strict-aliasing + +TESTPREPGCC = test-prep-gcc + +else + +o = .obj + +# Loading DLLs on demand makes the test suite run in about 10% less time. +# If no registry, advapi32 is only used for Perl_pp_getlogin/getlogin/GetUserNameA +# which is rare to execute +ifneq ($(USE_NO_REGISTRY),undef) +DELAYLOAD = -DELAYLOAD:ws2_32.dll -DELAYLOAD:advapi32.dll delayimp.lib +MINIDELAYLOAD = +else +DELAYLOAD = -DELAYLOAD:ws2_32.dll delayimp.lib +#miniperl never does any registry lookups +MINIDELAYLOAD = -DELAYLOAD:advapi32.dll +endif + +ifneq ($(__ICC),define) +CC = cl +LINK32 = link +else +CC = icl +LINK32 = xilink +endif +LIB32 = $(LINK32) -lib +RSC = rc + +# +# Options +# + +INCLUDES = -I.\include -I. -I.. +#PCHFLAGS = -Fpc:\temp\vcmoduls.pch -YX +DEFINES = -DWIN32 -D_CONSOLE -DNO_STRICT +LOCDEFS = -DPERLDLL -DPERL_CORE +CXX_FLAG = -TP -EHsc +ifeq ($(USE_CPLUSPLUS),define) +CXX_FLAG += -std:c++20 +endif +EXTRACFLAGS = -nologo -GF -W3 + +LIBC = ucrt.lib + +ifeq ($(CFG),Debug) +OPTIMIZE = -Od -Zi +LINK_DBG = -debug +DEFINES += -DDEBUGGING +EXTRACFLAGS += -MD +else ifeq ($(CFG),DebugSymbols) +OPTIMIZE = -Od -Zi +LINK_DBG = -debug +EXTRACFLAGS += -MD +else ifeq ($(CFG),DebugFull) +LIBC = ucrtd.lib +OPTIMIZE = -Od -Zi +LINK_DBG = -debug +DEFINES += -D_DEBUG -DDEBUGGING +EXTRACFLAGS += -MDd + +else +# Enable Whole Program Optimizations (WPO) and Link Time Code Generation (LTCG). +# -O1 yields smaller code, which turns out to be faster than -O2 on x86 and x64 +OPTIMIZE = -O1 -Zi -GL +# we enable debug symbols in release builds also +LINK_DBG = -debug -opt:ref,icf -ltcg +# you may want to enable this if you want COFF symbols in the executables +# in addition to the PDB symbols. The default Dr. Watson that ships with +# Windows can use the former but not latter. The free WinDbg can be +# installed to get better stack traces from just the PDB symbols, so we +# avoid the bloat of COFF symbols by default. +#LINK_DBG += -debugtype:both +LIB_FLAGS = -ltcg +EXTRACFLAGS += -MD +endif + +ifeq ($(WIN64),define) +DEFINES += -DWIN64 +OPTIMIZE += -fp:precise +endif + +# For now, silence warnings about "unsafe" CRT functions +# and POSIX CRT function names being deprecated. +# Likewise for deprecated Winsock APIs +DEFINES += -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE \ + -D_WINSOCK_DEPRECATED_NO_WARNINGS + +LIBBASEFILES = oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib \ + comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib \ + netapi32.lib uuid.lib ws2_32.lib mpr.lib winmm.lib version.lib \ + odbc32.lib odbccp32.lib comctl32.lib + +ifeq ($(CFG),DebugFull) +LIBBASEFILES += msvcrtd.lib vcruntimed.lib +else +LIBBASEFILES += msvcrt.lib vcruntime.lib +endif + +# Avoid __intel_new_proc_init link error for libircmt. +# libmmd is /MD equivalent, other variants exist. +# libmmd is Intel C's math addon funcs to MS CRT, contains long doubles, C99, +# and optimized C89 funcs +ifeq ($(__ICC),define) +LIBBASEFILES += libircmt.lib libmmd.lib +endif + +LIBFILES = $(LIBBASEFILES) $(LIBC) + +ifeq ($(__ICC),define) +EXTRACFLAGS += -Qstd=c99 +endif +ifeq ($(USE_CPLUSPLUS),define) +EXTRACFLAGS += $(CXX_FLAG) +endif +CFLAGS = $(EXTRACFLAGS) $(INCLUDES) $(DEFINES) $(LOCDEFS) \ + $(PCHFLAGS) $(OPTIMIZE) +LINK_FLAGS = -nologo -nodefaultlib $(LINK_DBG) \ + -libpath:"$(INST_COREDIR)" \ + -machine:$(PROCESSOR_ARCHITECTURE) +LIB_FLAGS += -nologo +OBJOUT_FLAG = -Fo +EXEOUT_FLAG = -Fe +LIBOUT_FLAG = /out: +PDBOUT = -Fd$(*).pdb +TESTPREPGCC = + +endif + +CFLAGS_O = $(CFLAGS) $(BUILDOPT) $(CWARNFLAGS) + +RSC_FLAGS = + +# VS 2017 (VC++ 14.1) requires at minimum Windows 7 SP1 (with latest Windows Updates) + +# For XP support in >= VS 2013 (VC++ 12.0), subsystem is always in Config.pm +# LINK_FLAGS. + +ifneq ($(CCTYPE),GCC) +ifeq ($(WIN64),define) +LINK_FLAGS += -subsystem:console,"5.02" +else +LINK_FLAGS += -subsystem:console,"5.01" +endif +endif + +BLINK_FLAGS = $(PRIV_LINK_FLAGS) $(LINK_FLAGS) + +#################### do not edit below this line ####################### +############# NO USER-SERVICEABLE PARTS BEYOND THIS POINT ############## + +#prevent -j from reaching EUMM/make_ext.pl/"sub makes", Win32 EUMM not parallel +#compatible yet +unexport MAKEFLAGS + +a ?= .lib + +.SUFFIXES : .c .i $(o) .dll $(a) .exe .rc .res + +%$(o): %.c + $(CC) -c -I$($@ + +%.c: %.y + $(NOOP) + +%.dll: %$(o) + $(LINK32) -o $@ $(BLINK_FLAGS) $< $(LIBFILES) + $(IMPLIB) --input-def $(*F).def --output-lib $(*F).a $@ + +%.res: %.rc +ifeq ($(CCTYPE),GCC) + $(RSC) --use-temp-file --include-dir=. --include-dir=.. -O COFF -D INCLUDE_MANIFEST -i $< -o $@ +else + $(RSC) -i.. -DINCLUDE_MANIFEST $< +endif + +# +# various targets + +#do not put $(MINIPERL) as a dep/prereq in a rule, instead put $(HAVEMINIPERL) +#$(MINIPERL) is not a buildable target, use "gmake mp" if you want to just build +#miniperl alone +MINIPERL = ..\miniperl.exe +HAVEMINIPERL = ..\lib\buildcustomize.pl +# contains config.h for the full perl build +FULLDIR = full +MINIDIR = mini +PERLEXE = ..\perl.exe +WPERLEXE = ..\wperl.exe +PERLEXESTATIC = ..\perl-static.exe +STATICDIR = .\static.tmp +GLOBEXE = ..\perlglob.exe +CONFIGPM = ..\lib\Config.pm +GENUUDMAP = ..\generate_uudmap.exe +ifeq ($(BUILD_STATIC),define) +PERLSTATIC = static +else +ifeq ($(ALL_STATIC),define) +PERLSTATIC = static +else +PERLSTATIC = +endif +endif + +# Unicode data files generated by mktables +UNIDATAFILES = ..\lib\unicore\Decomposition.pl ..\lib\unicore\TestProp.pl \ + ..\lib\unicore\CombiningClass.pl ..\lib\unicore\Name.pl \ + ..\lib\unicore\UCD.pl ..\lib\unicore\Name.pm \ + ..\lib\unicore\mktables.lst + +# Directories of Unicode data files generated by mktables +UNIDATADIR1 = ..\lib\unicore\To +UNIDATADIR2 = ..\lib\unicore\lib + +PERLEXE_MANIFEST= .\perlexe.manifest +PERLEXE_ICO = .\perlexe.ico +PERLEXE_RES = .\perlexe.res +PERLDLL_RES = + +# Nominate a target which causes extensions to be re-built +# This used to be $(PERLEXE), but at worst it is the .dll that they depend +# on and really only the interface - i.e. the .def file used to export symbols +# from the .dll +PERLDEP = $(PERLIMPLIB) + + +PL2BAT = bin\pl2bat.pl + +UTILS = \ + ..\utils\h2ph \ + ..\utils\splain \ + ..\utils\perlbug \ + ..\utils\pl2pm \ + ..\utils\h2xs \ + ..\utils\perldoc \ + ..\utils\perlivp \ + ..\utils\libnetcfg \ + ..\utils\enc2xs \ + ..\utils\encguess \ + ..\utils\piconv \ + ..\utils\corelist \ + ..\utils\cpan \ + ..\utils\xsubpp \ + ..\utils\pod2html \ + ..\utils\prove \ + ..\utils\ptar \ + ..\utils\ptardiff \ + ..\utils\ptargrep \ + ..\utils\zipdetails \ + ..\utils\shasum \ + ..\utils\instmodsh \ + ..\utils\json_pp \ + bin\exetype.pl \ + bin\runperl.pl \ + bin\pl2bat.pl \ + bin\perlglob.pl \ + bin\search.pl + +ifeq ($(CCTYPE),GCC) + +CFGSH_TMPL = config.gc +CFGH_TMPL = config_H.gc +PERLIMPLIB = $(COREDIR)\libperl540$(a) +PERLIMPLIBBASE = libperl540$(a) +PERLSTATICLIB = ..\libperl540s$(a) +INT64 = long long + +else + +CFGSH_TMPL = config.vc +CFGH_TMPL = config_H.vc +INT64 = __int64 + +endif + +# makedef.pl must be updated if this changes, and this should normally +# only change when there is an incompatible revision of the public API. +PERLIMPLIB ?= $(COREDIR)\perl540$(a) +PERLIMPLIBBASE ?= perl540$(a) +PERLEXPLIB ?= $(COREDIR)\perl540.exp +PERLSTATICLIB ?= ..\perl540s$(a) +PERLDLL = ..\perl540.dll +PERLDLLBASE = perl540.dll + +# don't let "gmake -n all" try to run "miniperl.exe make_ext.pl" +PLMAKE = gmake + +XCOPY = xcopy /f /r /i /d /y +RCOPY = xcopy /f /r /i /e /d /y +NOOP = @rem + +#first ones are arrange in compile time order for faster parallel building +#see #123867 for details +MICROCORE_SRC = \ + ..\toke.c \ + ..\regcomp.c \ + ..\regcomp_trie.c \ + ..\regcomp_debug.c \ + ..\regcomp_invlist.c \ + ..\regcomp_study.c \ + ..\regexec.c \ + ..\op.c \ + ..\sv.c \ + ..\pp.c \ + ..\pp_ctl.c \ + ..\pp_sys.c \ + ..\pp_pack.c \ + ..\pp_hot.c \ + ..\gv.c \ + ..\perl.c \ + ..\utf8.c \ + ..\dump.c \ + ..\hv.c \ + ..\av.c \ + ..\builtin.c \ + ..\caretx.c \ + ..\class.c \ + ..\deb.c \ + ..\doio.c \ + ..\doop.c \ + ..\dquote.c \ + ..\globals.c \ + ..\mro_core.c \ + ..\locale.c \ + ..\keywords.c \ + ..\mathoms.c \ + ..\mg.c \ + ..\numeric.c \ + ..\pad.c \ + ..\peep.c \ + ..\perly.c \ + ..\pp_sort.c \ + ..\reentr.c \ + ..\run.c \ + ..\scope.c \ + ..\taint.c \ + ..\time64.c \ + ..\universal.c \ + ..\util.c + +EXTRACORE_SRC += perllib.c + +ifeq ($(PERL_MALLOC),define) +EXTRACORE_SRC += ..\malloc.c +endif + +EXTRACORE_SRC += ..\perlio.c + +WIN32_SRC = \ + .\win32.c \ + .\win32sck.c \ + .\win32thread.c \ + .\fcrypt.c + +CORE_NOCFG_H = \ + ..\av.h \ + ..\cop.h \ + ..\cv.h \ + ..\dosish.h \ + ..\embed.h \ + ..\form.h \ + ..\gv.h \ + ..\handy.h \ + ..\hv.h \ + ..\hv_func.h \ + ..\iperlsys.h \ + ..\mg.h \ + ..\nostdio.h \ + ..\op.h \ + ..\opcode.h \ + ..\perl.h \ + ..\perlapi.h \ + ..\perlsdio.h \ + ..\perly.h \ + ..\pp.h \ + ..\proto.h \ + ..\regcomp.h \ + ..\regcomp_internal.h \ + ..\regexp.h \ + ..\scope.h \ + ..\sv.h \ + ..\thread.h \ + ..\unixish.h \ + ..\utf8.h \ + ..\util.h \ + ..\warnings.h \ + ..\XSUB.h \ + ..\EXTERN.h \ + ..\perlvars.h \ + ..\intrpvar.h \ + .\include\dirent.h \ + .\include\netdb.h \ + .\include\sys\errno2.h \ + .\include\sys\socket.h \ + .\win32.h + +CONFIG_H = $(FULLDIR)\config.h +MINI_CONFIG_H = $(MINIDIR)\config.h +CORE_H = $(CORE_NOCFG_H) $(CONFIG_H) ..\git_version.h + +UUDMAP_H = ..\uudmap.h +BITCOUNT_H = ..\bitcount.h +MG_DATA_H = ..\mg_data.h +GENERATED_HEADERS = $(UUDMAP_H) $(BITCOUNT_H) $(MG_DATA_H) + +HAVE_COREDIR = .coreheaders + +MICROCORE_OBJ = $(MICROCORE_SRC:.c=$(o)) +CORE_OBJ = $(MICROCORE_OBJ) $(EXTRACORE_SRC:.c=$(o)) +WIN32_OBJ = $(WIN32_SRC:.c=$(o)) + +MINICORE_OBJ = $(subst ..\,mini\,$(MICROCORE_OBJ)) \ + $(MINIDIR)\miniperlmain$(o) \ + $(MINIDIR)\perlio$(o) +MINIWIN32_OBJ = $(subst .\,mini\,$(WIN32_OBJ)) +MINI_OBJ = $(MINICORE_OBJ) $(MINIWIN32_OBJ) +DLL_OBJ = $(DYNALOADER) + +PERLDLL_OBJ = $(CORE_OBJ) +PERLEXE_OBJ = perlmain$(o) +PERLEXEST_OBJ = perlmainst$(o) + +PERLDLL_OBJ += $(WIN32_OBJ) $(DLL_OBJ) + +ifneq ($(USE_SETARGV),) +SETARGV_OBJ = setargv$(o) +endif + +ifeq ($(ALL_STATIC),define) +# some exclusions, unfortunately, until fixed: +# - MakeMaker isn't capable enough for SDBM_File (small bug) +STATIC_EXT = * !SDBM_File +NORMALIZE_STATIC = Normalize_static +else +# specify static extensions here, for example: +# (be sure to include Win32CORE to load Win32 on demand) +#STATIC_EXT = Win32CORE Cwd Compress/Raw/Zlib +STATIC_EXT = Win32CORE +NORMALIZE_DYN = Normalize_dyn +endif + +DYNALOADER = ..\DynaLoader$(o) + +# vars must be separated by "\t+~\t+", since we're using the tempfile +# version of config_sh.pl (we were overflowing someone's buffer by +# trying to fit them all on the command line) +# -- BKS 10-17-1999 +CFG_VARS = \ + "INST_TOP=$(INST_TOP)" \ + "INST_VER=$(INST_VER)" \ + "INST_ARCH=$(INST_ARCH)" \ + "archname=$(ARCHNAME)" \ + "cc=$(CC)" \ + "ld=$(LINK32)" \ + "ccflags=$(subst ",\",$(EXTRACFLAGS) $(DEFINES) $(BUILDOPT))" \ + "usecplusplus=$(USE_CPLUSPLUS)" \ + "cf_email=$(EMAIL)" \ + "d_mymalloc=$(PERL_MALLOC)" \ + "i_quadmath=$(I_QUADMATH)" \ + "libs=$(LIBFILES)" \ + "incpath=$(subst ",\",$(CCINCDIR))" \ + "libperl=$(subst ",\",$(PERLIMPLIBBASE))" \ + "libpth=$(subst ",\",$(CCLIBDIR);$(EXTRALIBDIRS))" \ + "libc=$(LIBC)" \ + "make=$(PLMAKE)" \ + "_o=$(o)" \ + "obj_ext=$(o)" \ + "_a=$(a)" \ + "lib_ext=$(a)" \ + "static_ext=$(STATIC_EXT)" \ + "usethreads=$(USE_ITHREADS)" \ + "useithreads=$(USE_ITHREADS)" \ + "usemultiplicity=$(USE_MULTI)" \ + "useperlio=$(USE_PERLIO)" \ + "use64bitint=$(USE_64_BIT_INT)" \ + "uselongdouble=$(USE_LONG_DOUBLE)" \ + "usequadmath=$(USE_QUADMATH)" \ + "usesitecustomize=$(USE_SITECUST)" \ + "default_inc_excludes_dot=$(DEFAULT_INC_EXCLUDES_DOT)" \ + "LINK_FLAGS=$(subst ",\",$(LINK_FLAGS))"\ + "optimize=$(subst ",\",$(OPTIMIZE))" \ + "ARCHPREFIX=$(ARCHPREFIX)" \ + "WIN64=$(WIN64)" \ + "SKIP_CCHOME_CHECK=$(SKIP_CCHOME_CHECK)" + +# +# Top targets +# + +.PHONY: all info + +all : info rebasePE Extensions_nonxs $(PERLSTATIC) + +info : +ifeq ($(CCTYPE),GCC) + @echo # CCTYPE=$(CCTYPE)&& \ + echo # GCCBIN=$(GCCBIN)&& \ + echo # GCCVER=$(GCCVER1).$(GCCVER2).$(GCCVER3)&& \ + echo # GCCTARGET=$(GCCTARGET)&& \ + echo # GCCCROSS=$(GCCCROSS)&& \ + echo # WIN64=$(WIN64)&& \ + echo # ARCHITECTURE=$(ARCHITECTURE)&& \ + echo # ARCHNAME=$(ARCHNAME)&& \ + echo # MAKE=$(PLMAKE) +else + @echo # CCTYPE=$(CCTYPE)&& \ + echo # WIN64=$(WIN64)&& \ + echo # ARCHITECTURE=$(ARCHITECTURE)&& \ + echo # ARCHNAME=$(ARCHNAME)&& \ + echo # MAKE=$(PLMAKE) +endif +ifeq ($(CCTYPE),) + @echo Unable to detect gcc and/or architecture! + @exit 1 +endif + + +..\regcomp$(o) : ..\regcomp.h ..\regcomp_internal.h ..\regnodes.h ..\regcharclass.h + +..\regcomp_debug$(o) : ..\regcomp.h ..\regcomp_internal.h ..\regnodes.h ..\regcharclass.h + +..\regcomp_invlist$(o) : ..\regcomp.h ..\regcomp_internal.h ..\regnodes.h ..\regcharclass.h + +..\regcomp_study$(o) : ..\regcomp.h ..\regcomp_internal.h ..\regnodes.h ..\regcharclass.h + +..\regcomp_trie$(o) : ..\regcomp.h ..\regcomp_internal.h ..\regnodes.h ..\regcharclass.h + +..\regexec$(o) : ..\regnodes.h ..\regcharclass.h + +reonly : ..\regnodes.h $(CONFIG_H) ..\git_version.h $(GLOBEXE) $(HAVEMINIPERL)\ + $(CONFIGPM) $(UNIDATAFILES) $(PERLEXE) \ + Extensions_reonly + +static: $(PERLEXESTATIC) + +#---------------------------------------------------------------- + +$(GLOBEXE) : perlglob.c +ifeq ($(CCTYPE),GCC) + $(LINK32) $(EXTRACFLAGS) $(OPTIMIZE) $(BLINK_FLAGS) -mconsole -o $@ perlglob.c $(LIBFILES) +else + $(CC) $(EXTRACFLAGS) $(OPTIMIZE) $(PDBOUT) -Fe$@ perlglob.c -link $(BLINK_FLAGS) \ + setargv$(o) $(LIBFILES) +endif + +..\git_version.h : $(HAVEMINIPERL) ..\make_patchnum.pl + $(MINIPERL) -I..\lib ..\make_patchnum.pl + +# make sure that we recompile perl.c if the git version changes +..\perl$(o) : ..\git_version.h + +..\config.sh : $(CFGSH_TMPL) config_sh.PL FindExt.pm $(HAVEMINIPERL) + $(MINIPERL) -I..\lib config_sh.PL -o ..\config.sh $(CFG_VARS) $(CFGSH_TMPL) + +# This target is for when changes to the main config.sh happen. +# Edit config.gc, then make perl using GCC in a minimal configuration (i.e. +# with MULTI, ITHREADS, IMP_SYS, LARGE_FILES and PERLIO off), then make +# this target to regenerate config_H.gc. +regen_config_h: + $(MINIPERL) -I..\lib config_sh.PL --prebuilt $(CFG_VARS) $(CFGSH_TMPL) > ..\config.sh + $(MINIPERL) -I..\lib ..\configpm --chdir=.. + -del /f $(CFGH_TMPL) + -$(MINIPERL) -I..\lib config_h.PL "ARCHPREFIX=$(ARCHPREFIX)" + rename config.h $(CFGH_TMPL) + +$(CONFIGPM): ..\config.sh config_h.PL ..\git_version.h + $(MINIPERL) -I..\lib ..\configpm --chdir=.. + if not exist "$(FULLDIR)" mkdir "$(FULLDIR)" + $(MINIPERL) -I..\lib config_h.PL "CONFIG_H=$(CONFIG_H)" "ARCHPREFIX=$(ARCHPREFIX)" + +$(CONFIG_H) : $(CONFIGPM) + +# See the comment in Makefile.SH explaining this seemingly cranky ordering +..\lib\buildcustomize.pl : $(MINI_OBJ) ..\write_buildcustomize.pl +ifeq ($(CCTYPE),GCC) + $(LINK32) -mconsole -o $(MINIPERL) $(BLINK_FLAGS) $(MINI_OBJ) $(LIBFILES) +else + $(LINK32) -out:$(MINIPERL) $(BLINK_FLAGS) \ + $(DELAYLOAD) $(MINIDELAYLOAD) $(LIBFILES) $(MINI_OBJ) + +endif + $(MINIPERL) -I..\lib -f ..\write_buildcustomize.pl .. + +#convinence target, get a working miniperl +mp : $(CONFIGPM) + +$(MINIDIR)\.exists : $(CFGH_TMPL) + if not exist "$(MINIDIR)" mkdir "$(MINIDIR)" +# +# Copy the template config.h and set configurables at the end of it +# as per the options chosen and compiler used. +# Note: This config.h is only used to build miniperl.exe anyway, but +# it's as well to have its options correct to be sure that it builds +# and so that it's "-V" options are correct for use by makedef.pl. The +# real config.h used to build perl.exe is generated from the top-level +# config_h.SH by config_h.PL (run by miniperl.exe). +# +# MINIDIR generates config.h so miniperl.exe is not rebuilt when the 2nd +# config.h is generated in CONFIGPM target, see also the comments for $(MINI_OBJ). + copy $(CFGH_TMPL) $(MINI_CONFIG_H) + @(echo.&& \ + echo #ifndef _config_h_footer_&& \ + echo #define _config_h_footer_&& \ + echo #undef PTRSIZE&& \ + echo #undef SSize_t&& \ + echo #undef HAS_ATOLL&& \ + echo #undef HAS_STRTOLL&& \ + echo #undef HAS_STRTOULL&& \ + echo #undef Size_t_size&& \ + echo #undef IVTYPE&& \ + echo #undef UVTYPE&& \ + echo #undef IVSIZE&& \ + echo #undef UVSIZE&& \ + echo #undef NV_PRESERVES_UV&& \ + echo #undef NV_PRESERVES_UV_BITS&& \ + echo #undef IVdf&& \ + echo #undef UVuf&& \ + echo #undef UVof&& \ + echo #undef UVxf&& \ + echo #undef UVXf&& \ + echo #undef USE_64_BIT_INT&& \ + echo #undef Gconvert&& \ + echo #undef HAS_FREXPL&& \ + echo #undef HAS_ISNANL&& \ + echo #undef HAS_MODFL&& \ + echo #undef HAS_MODFL_PROTO&& \ + echo #undef HAS_SQRTL&& \ + echo #undef HAS_STRTOLD&& \ + echo #undef PERL_PRIfldbl&& \ + echo #undef PERL_PRIgldbl&& \ + echo #undef PERL_PRIeldbl&& \ + echo #undef PERL_SCNfldbl&& \ + echo #undef NVTYPE&& \ + echo #undef NVSIZE&& \ + echo #undef LONG_DOUBLESIZE&& \ + echo #undef NV_OVERFLOWS_INTEGERS_AT&& \ + echo #undef NVef&& \ + echo #undef NVff&& \ + echo #undef NVgf&& \ + echo #undef USE_LONG_DOUBLE&& \ + echo #undef I_QUADMATH&& \ + echo #undef USE_QUADMATH&& \ + echo #undef USE_CPLUSPLUS)>> $(MINI_CONFIG_H) + @(echo #undef FILE_ptr&& \ + echo #undef FILE_cnt&& \ + echo #undef FILE_base&& \ + echo #undef FILE_bufsiz&& \ + echo #define FILE_ptr^(fp^) PERLIO_FILE_ptr^(fp^)&& \ + echo #define FILE_cnt^(fp^) PERLIO_FILE_cnt^(fp^)&& \ + echo #define FILE_base^(fp^) PERLIO_FILE_base^(fp^)&& \ + echo #define FILE_bufsiz^(fp^) ^(PERLIO_FILE_cnt^(fp^) + PERLIO_FILE_ptr^(fp^) - PERLIO_FILE_base^(fp^)^)&& \ + echo #define I_STDBOOL)>> $(MINI_CONFIG_H) +ifeq ($(WIN64),define) +ifeq ($(CCTYPE),GCC) + @(echo #define LONG_DOUBLESIZE ^16)>> $(MINI_CONFIG_H) +else + @(echo #define LONG_DOUBLESIZE ^8)>> $(MINI_CONFIG_H) +endif + @(echo #define PTRSIZE ^8&& \ + echo #define SSize_t $(INT64)&& \ + echo #define HAS_ATOLL&& \ + echo #define HAS_STRTOLL&& \ + echo #define HAS_STRTOULL&& \ + echo #define Size_t_size ^8)>> $(MINI_CONFIG_H) +else +ifeq ($(CCTYPE),GCC) + @(echo #define LONG_DOUBLESIZE ^12)>> $(MINI_CONFIG_H) +else + @(echo #define LONG_DOUBLESIZE ^8)>> $(MINI_CONFIG_H) +endif + @(echo #define PTRSIZE ^4&& \ + echo #define SSize_t int&& \ + echo #undef HAS_ATOLL&& \ + echo #undef HAS_STRTOLL&& \ + echo #undef HAS_STRTOULL&& \ + echo #define Size_t_size ^4)>> $(MINI_CONFIG_H) +endif +ifeq ($(USE_64_BIT_INT),define) + @(echo #define IVTYPE $(INT64)&& \ + echo #define UVTYPE unsigned $(INT64)&& \ + echo #define IVSIZE ^8&& \ + echo #define UVSIZE ^8)>> $(MINI_CONFIG_H) +ifeq ($(USE_LONG_DOUBLE),define) + @(echo #define NV_PRESERVES_UV&& \ + echo #define NV_PRESERVES_UV_BITS 64)>> $(MINI_CONFIG_H) +else ifeq ($(USE_QUADMATH),define) + @(echo #define NV_PRESERVES_UV&& \ + echo #define NV_PRESERVES_UV_BITS 64)>> $(MINI_CONFIG_H) +else + @(echo #undef NV_PRESERVES_UV&& \ + echo #define NV_PRESERVES_UV_BITS 53)>> $(MINI_CONFIG_H) +endif + @(echo #define IVdf "I64d"&& \ + echo #define UVuf "I64u"&& \ + echo #define UVof "I64o"&& \ + echo #define UVxf "I64x"&& \ + echo #define UVXf "I64X"&& \ + echo #define USE_64_BIT_INT)>> $(MINI_CONFIG_H) +else + @(echo #define IVTYPE long&& \ + echo #define UVTYPE unsigned long&& \ + echo #define IVSIZE ^4&& \ + echo #define UVSIZE ^4&& \ + echo #define NV_PRESERVES_UV&& \ + echo #define NV_PRESERVES_UV_BITS 32&& \ + echo #define IVdf "ld"&& \ + echo #define UVuf "lu"&& \ + echo #define UVof "lo"&& \ + echo #define UVxf "lx"&& \ + echo #define UVXf "lX"&& \ + echo #undef USE_64_BIT_INT)>> $(MINI_CONFIG_H) +endif +ifeq ($(USE_LONG_DOUBLE),define) + @(echo #define Gconvert^(x,n,t,b^) sprintf^(^(b^),"%%.*""Lg",^(n^),^(x^)^)&& \ + echo #define HAS_FREXPL&& \ + echo #define HAS_ISNANL&& \ + echo #define HAS_MODFL&& \ + echo #define HAS_MODFL_PROTO&& \ + echo #define HAS_SQRTL&& \ + echo #define HAS_STRTOLD&& \ + echo #define PERL_PRIfldbl "Lf"&& \ + echo #define PERL_PRIgldbl "Lg"&& \ + echo #define PERL_PRIeldbl "Le"&& \ + echo #define PERL_SCNfldbl "Lf"&& \ + echo #define NVTYPE long double&& \ + echo #define NVSIZE LONG_DOUBLESIZE&& \ + echo #define NV_OVERFLOWS_INTEGERS_AT 256.0*256.0*256.0*256.0*256.0*256.0*256.0*2.0*2.0*2.0*2.0*2.0*2.0*2.0*2.0&& \ + echo #define NVef "Le"&& \ + echo #define NVff "Lf"&& \ + echo #define NVgf "Lg"&& \ + echo #undef I_QUADMATH&& \ + echo #undef USE_QUADMATH&& \ + echo #define USE_LONG_DOUBLE)>> $(MINI_CONFIG_H) +else ifeq ($(USE_QUADMATH),define) + @(echo #define Gconvert^(x,n,t,b^) sprintf^(^(b^),"%%.*""Lg",^(n^),^(x^)^)&& \ + echo #define HAS_FREXPL&& \ + echo #define HAS_ISNANL&& \ + echo #define HAS_MODFL&& \ + echo #define HAS_MODFL_PROTO&& \ + echo #define HAS_SQRTL&& \ + echo #define HAS_STRTOLD&& \ + echo #define PERL_PRIfldbl "Lf"&& \ + echo #define PERL_PRIgldbl "Lg"&& \ + echo #define PERL_PRIeldbl "Le"&& \ + echo #define PERL_SCNfldbl "Lf"&& \ + echo #define NVTYPE __float128&& \ + echo #define NVSIZE 16&& \ + echo #define NV_OVERFLOWS_INTEGERS_AT 256.0*256.0*256.0*256.0*256.0*256.0*256.0*256.0*256.0*256.0*256.0*256.0*256.0*256.0*2.0&& \ + echo #define NVef "Qe"&& \ + echo #define NVff "Qf"&& \ + echo #define NVgf "Qg"&& \ + echo #undef USE_LONG_DOUBLE&& \ + echo #define I_QUADMATH&& \ + echo #define USE_QUADMATH)>> $(MINI_CONFIG_H) +else + @(echo #define Gconvert^(x,n,t,b^) sprintf^(^(b^),"%%.*g",^(n^),^(x^)^)&& \ + echo #undef HAS_FREXPL&& \ + echo #undef HAS_ISNANL&& \ + echo #undef HAS_MODFL&& \ + echo #undef HAS_MODFL_PROTO&& \ + echo #undef HAS_SQRTL&& \ + echo #undef HAS_STRTOLD&& \ + echo #undef PERL_PRIfldbl&& \ + echo #undef PERL_PRIgldbl&& \ + echo #undef PERL_PRIeldbl&& \ + echo #undef PERL_SCNfldbl&& \ + echo #define NVTYPE double&& \ + echo #define NVSIZE ^8&& \ + echo #define NV_OVERFLOWS_INTEGERS_AT 256.0*256.0*256.0*256.0*256.0*256.0*2.0*2.0*2.0*2.0*2.0&& \ + echo #define NVef "e"&& \ + echo #define NVff "f"&& \ + echo #define NVgf "g"&& \ + echo #undef I_QUADMATH&& \ + echo #undef USE_QUADMATH&& \ + echo #undef USE_LONG_DOUBLE)>> $(MINI_CONFIG_H) +endif +ifeq ($(USE_CPLUSPLUS),define) + @(echo #define USE_CPLUSPLUS&& \ + echo #endif)>> $(MINI_CONFIG_H) +else + @(echo #undef USE_CPLUSPLUS&& \ + echo #endif)>> $(MINI_CONFIG_H) +endif +#separate line since this is sentinal that this target is done + @rem. > $(MINIDIR)\.exists + +$(MINIDIR)\\%$(o): %.c + $(CC) -c -I$(MINIDIR) $(CFLAGS) $(CWARNFLAGS) $(MINIBUILDOPT) -DPERL_EXTERNAL_GLOB -DPERL_IS_MINIPERL $(OBJOUT_FLAG)$@ $(PDBOUT) $< + +$(MINIDIR)\\%$(o): ..\%.c + $(CC) -c -I$(MINIDIR) $(CFLAGS) $(CWARNFLAGS) $(MINIBUILDOPT) -DPERL_EXTERNAL_GLOB -DPERL_IS_MINIPERL $(OBJOUT_FLAG)$@ $(PDBOUT) $< + +$(MINICORE_OBJ) : $(CORE_NOCFG_H) + +$(MINIWIN32_OBJ) : $(CORE_NOCFG_H) + +# -DPERL_IMPLICIT_SYS needs C++ for perllib.c +# rules wrapped in .IFs break Win9X build (we end up with unbalanced []s +# unless the .IF is true), so instead we use a .ELSE with the default. +# This is the only file that depends on perlhost.h, vmem.h, and vdir.h + +perllib$(o) : perllib.c perllibst.h .\perlhost.h .\vdir.h .\vmem.h +ifeq ($(USE_IMP_SYS),define) + $(CC) -c -I$(FULLDIR) -I. $(CFLAGS_O) $(CXX_FLAG) $(OBJOUT_FLAG)$@ $(PDBOUT) perllib.c +else + $(CC) -c -I$(FULLDIR) -I. $(CFLAGS_O) $(OBJOUT_FLAG)$@ $(PDBOUT) perllib.c +endif + +# We can't have miniperl.exe depend on git_version.h, as miniperl creates it +$(MINI_OBJ) : $(MINIDIR)\.exists $(CORE_NOCFG_H) + +$(WIN32_OBJ) : $(CORE_H) + +$(CORE_OBJ) : $(CORE_H) + +$(DLL_OBJ) : $(CORE_H) + + +perllibst.h : $(HAVEMINIPERL) $(CONFIGPM) create_perllibst_h.pl + $(MINIPERL) -I..\lib create_perllibst_h.pl + +perldll.def : $(HAVEMINIPERL) $(CONFIGPM) ..\embed.fnc ..\makedef.pl + $(MINIPERL) -I..\lib -w ..\makedef.pl PLATFORM=win32 CONFIG_H=$(CONFIG_H) $(OPTIMIZE) $(DEFINES) \ + $(BUILDOPT) CCTYPE=$(CCTYPE) TARG_DIR=..\ > perldll.def + +$(PERLEXPLIB) : $(PERLIMPLIB) + +$(PERLIMPLIB) : perldll.def +ifeq ($(CCTYPE),GCC) + $(IMPLIB) -k -d perldll.def -D $(PERLDLLBASE) -l $(PERLIMPLIB) -e $(PERLEXPLIB) +else + lib -def:perldll.def -machine:$(ARCHITECTURE) /OUT:$(PERLIMPLIB) +endif + +$(PERLDLL): $(PERLEXPLIB) $(PERLDLL_OBJ) $(PERLDLL_RES) Extensions_static +ifeq ($(CCTYPE),GCC) + $(LINK32) -shared -o $@ $(BLINK_FLAGS) \ + $(PERLDLL_OBJ) $(shell type Extensions_static) $(LIBFILES) $(PERLEXPLIB) +else + $(LINK32) -dll -out:$@ $(BLINK_FLAGS) \ + @Extensions_static \ + $(DELAYLOAD) $(LIBFILES) \ + $(PERLDLL_RES) $(PERLDLL_OBJ) $(PERLEXPLIB) +endif + +$(PERLSTATICLIB): $(PERLDLL_OBJ) Extensions_static +ifeq ($(CCTYPE),GCC) + $(LIB32) $(LIB_FLAGS) $@ $(PERLDLL_OBJ) + if exist $(STATICDIR) rmdir /s /q $(STATICDIR) + for %%i in ($(shell type Extensions_static)) do \ + @mkdir $(STATICDIR) && cd $(STATICDIR) && \ + $(ARCHPREFIX)ar x ..\%%i && \ + $(ARCHPREFIX)ar q ..\$@ *$(o) && \ + cd .. && rmdir /s /q $(STATICDIR) +else + $(LIB32) $(LIB_FLAGS) -out:$@ @Extensions_static \ + $(PERLDLL_OBJ) +endif + $(XCOPY) $(PERLSTATICLIB) $(COREDIR) + +$(PERLEXE_RES): perlexe.rc $(PERLEXE_MANIFEST) $(PERLEXE_ICO) + +$(MINIDIR)\globals$(o) : $(GENERATED_HEADERS) + +$(UUDMAP_H) $(MG_DATA_H) : $(BITCOUNT_H) + +$(BITCOUNT_H) : $(GENUUDMAP) + $(GENUUDMAP) $(GENERATED_HEADERS) + +$(GENUUDMAP) : ..\mg_raw.h +ifeq ($(CCTYPE),GCC) + $(LINK32) $(CFLAGS_O) -o..\generate_uudmap.exe ..\generate_uudmap.c \ + $(BLINK_FLAGS) $(LIBFILES) +else + $(CC) $(CFLAGS_O) $(PDBOUT) -Fe..\generate_uudmap.exe ..\generate_uudmap.c -link $(LIBFILES) $(BLINK_FLAGS) +endif + +.PHONY: MakePPPort + +MakePPPort : $(HAVEMINIPERL) $(CONFIGPM) + $(MINIPERL) -I..\lib ..\mkppport + +# also known as $(HAVE_COREDIR) +.coreheaders : $(CORE_H) + $(XCOPY) *.h $(COREDIR)\\*.* + $(RCOPY) include $(COREDIR)\\*.* + $(XCOPY) ..\\*.h $(COREDIR)\\*.* + rem. > $@ + +perlmain$(o) : runperl.c $(CONFIGPM) + $(CC) -I$(FULLDIR) $(subst -DPERLDLL,-UPERLDLL,$(CFLAGS_O)) $(OBJOUT_FLAG)$@ $(PDBOUT) -c runperl.c + +perlmainst$(o) : runperl.c $(CONFIGPM) + $(CC) -I$(FULLDIR) $(CFLAGS_O) $(OBJOUT_FLAG)$@ $(PDBOUT) -c runperl.c + +$(PERLEXE): $(CONFIGPM) $(PERLEXE_OBJ) $(PERLEXE_RES) $(PERLIMPLIB) +ifeq ($(CCTYPE),GCC) + $(LINK32) -mconsole -o $@ $(BLINK_FLAGS) \ + $(PERLEXE_OBJ) $(PERLEXE_RES) $(PERLIMPLIB) $(LIBFILES) +else + $(LINK32) -out:$@ $(BLINK_FLAGS) \ + $(PERLEXE_OBJ) $(PERLEXE_RES) $(PERLIMPLIB) $(LIBFILES) $(SETARGV_OBJ) +endif + copy $(PERLEXE) $(WPERLEXE) + $(MINIPERL) -I..\lib bin\exetype.pl $(WPERLEXE) WINDOWS + +$(PERLEXESTATIC): $(PERLSTATICLIB) $(CONFIGPM) $(PERLEXEST_OBJ) $(PERLEXE_RES) +ifeq ($(CCTYPE),GCC) + $(LINK32) -mconsole -o $@ $(BLINK_FLAGS) \ + $(PERLEXEST_OBJ) $(PERLEXE_RES) $(PERLSTATICLIB) $(LIBFILES) +else + $(LINK32) -out:$@ $(BLINK_FLAGS) \ + $(PERLEXEST_OBJ) $(PERLEXE_RES) $(PERLSTATICLIB) $(LIBFILES) $(SETARGV_OBJ) +endif + +#------------------------------------------------------------------------------- +# There's no direct way to mark a dependency on +# DynaLoader.pm, so this will have to do + +#most of deps of this target are in DYNALOADER and therefore omitted here +Extensions : $(PERLDEP) $(DYNALOADER) Extension_lib $(GLOBEXE) MakePPPort + $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --dynamic !Unicode/Normalize + +Normalize_static : $(CONFIGPM) $(GLOBEXE) $(HAVE_COREDIR) $(UNIDATAFILES) + $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --static +Unicode/Normalize + +Normalize_dyn : $(PERLDEP) $(DYNALOADER) $(GLOBEXE) $(UNIDATAFILES) + $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --dynamic +Unicode/Normalize + +Extensions_reonly : $(PERLDEP) $(DYNALOADER) + $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --dynamic +re + +Exts_static_general : ..\make_ext.pl $(CONFIGPM) Extension_lib $(GLOBEXE) $(HAVE_COREDIR) MakePPPort + $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --static !Unicode/Normalize + +Extensions_static : list_static_libs.pl Exts_static_general $(NORMALIZE_STATIC) + $(MINIPERL) -I..\lib list_static_libs.pl -o Extensions_static + +Extensions_nonxs : ..\make_ext.pl ..\pod\perlfunc.pod $(CONFIGPM) $(GLOBEXE) + $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --nonxs !libs + +Extension_lib : ..\make_ext.pl $(CONFIGPM) + $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) lib + +#lib must be built, it can't be buildcustomize.pl-ed, and is required for XS building +$(DYNALOADER) : ..\make_ext.pl $(CONFIGPM) $(HAVE_COREDIR) + $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(EXTDIR) --dir=$(DISTDIR) --dynaloader + +Extensions_clean : + -if exist $(MINIPERL) $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --all --target=clean + +Extensions_realclean : + -if exist $(MINIPERL) $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --all --target=realclean + +# all PE files need to be built by the time this target runs, PP files can still +# be running in parallel like UNIDATAFILES, this target a placeholder for the +# future +ifeq ($(PERLSTATIC),static) +rebasePE : Extensions $(PERLDLL) $(PERLEXE) $(PERLEXESTATIC) +else +rebasePE : Extensions $(PERLDLL) $(NORMALIZE_DYN) $(PERLEXE) +endif + $(NOOP) + +#------------------------------------------------------------------------------- + +doc: $(PERLEXE) $(PERLDLL) ..\pod\perltoc.pod + $(PERLEXE) -I..\lib ..\installhtml --podroot=.. --htmldir=$(HTMLDIR) \ + --podpath=pod:lib:utils --htmlroot="file://$(subst :,|,$(INST_HTML))"\ + --recurse + +..\utils\Makefile: $(CONFIGPM) ..\utils\Makefile.PL + $(MINIPERL) -I..\lib ..\utils\Makefile.PL .. + +# Note that this next section is parsed (and regenerated) by pod/buildtoc +# so please check that script before making structural changes here +utils: $(HAVEMINIPERL) ..\utils\Makefile + cd ..\utils && $(PLMAKE) PERL=$(MINIPERL) + copy ..\README.aix ..\pod\perlaix.pod + copy ..\README.amiga ..\pod\perlamiga.pod + copy ..\README.android ..\pod\perlandroid.pod + copy ..\README.bs2000 ..\pod\perlbs2000.pod + copy ..\README.cn ..\pod\perlcn.pod + copy ..\README.cygwin ..\pod\perlcygwin.pod + copy ..\README.freebsd ..\pod\perlfreebsd.pod + copy ..\README.haiku ..\pod\perlhaiku.pod + copy ..\README.hpux ..\pod\perlhpux.pod + copy ..\README.hurd ..\pod\perlhurd.pod + copy ..\README.irix ..\pod\perlirix.pod + copy ..\README.jp ..\pod\perljp.pod + copy ..\README.ko ..\pod\perlko.pod + copy ..\README.linux ..\pod\perllinux.pod + copy ..\README.macosx ..\pod\perlmacosx.pod + copy ..\README.openbsd ..\pod\perlopenbsd.pod + copy ..\README.os2 ..\pod\perlos2.pod + copy ..\README.os390 ..\pod\perlos390.pod + copy ..\README.os400 ..\pod\perlos400.pod + copy ..\README.plan9 ..\pod\perlplan9.pod + copy ..\README.qnx ..\pod\perlqnx.pod + copy ..\README.riscos ..\pod\perlriscos.pod + copy ..\README.solaris ..\pod\perlsolaris.pod + copy ..\README.synology ..\pod\perlsynology.pod + copy ..\README.tru64 ..\pod\perltru64.pod + copy ..\README.tw ..\pod\perltw.pod + copy ..\README.vos ..\pod\perlvos.pod + copy ..\README.win32 ..\pod\perlwin32.pod + copy ..\pod\perldelta.pod ..\pod\perl5401delta.pod + $(MINIPERL) -I..\lib $(PL2BAT) $(UTILS) + $(MINIPERL) -I..\lib ..\autodoc.pl -c "win32\$(CONFIG_H)" .. + $(MINIPERL) -I..\lib ..\pod\perlmodlib.PL -q .. + +..\pod\perltoc.pod: $(PERLEXE) $(PERLDLL) Extensions Extensions_nonxs $(NORMALIZE_DYN) utils + $(PERLEXE) -f ..\pod\buildtoc -q + +# Note that the pod cleanup in this next section is parsed (and regenerated +# by pod/buildtoc so please check that script before making changes here + +distclean: realclean + -del /f $(MINIPERL) $(PERLEXE) $(PERLDLL) $(GLOBEXE) \ + $(PERLIMPLIB) ..\miniperl$(a) $(PERLEXESTATIC) $(PERLSTATICLIB) + -del /f $(LIBDIR)\Encode.pm $(LIBDIR)\encoding.pm $(LIBDIR)\Errno.pm + -del /f $(LIBDIR)\Config.pod $(LIBDIR)\POSIX.pod $(LIBDIR)\threads.pm + -del /f $(LIBDIR)\.exists $(LIBDIR)\attributes.pm $(LIBDIR)\DynaLoader.pm + -del /f $(LIBDIR)\Fcntl.pm $(LIBDIR)\IO.pm $(LIBDIR)\Opcode.pm + -del /f $(LIBDIR)\ops.pm $(LIBDIR)\Safe.pm + -del /f $(LIBDIR)\SDBM_File.pm $(LIBDIR)\Socket.pm $(LIBDIR)\POSIX.pm + -del /f $(LIBDIR)\B.pm $(LIBDIR)\O.pm $(LIBDIR)\re.pm + -del /f $(LIBDIR)\File\Glob.pm + -del /f $(LIBDIR)\Sys\Hostname.pm + -del /f $(LIBDIR)\Time\HiRes.pm + -del /f $(LIBDIR)\Unicode\Normalize.pm + -del /f $(LIBDIR)\Math\BigInt\FastCalc.pm + -del /f $(LIBDIR)\Storable.pm $(LIBDIR)\Storable\Limit.pm + -del /f $(LIBDIR)\Win32.pm + -del /f $(LIBDIR)\Win32CORE.pm + -del /f $(LIBDIR)\Win32API\File.pm + -del /f $(LIBDIR)\Win32API\File\cFile.pc + -del /f $(LIBDIR)\buildcustomize.pl + -del /f $(DISTDIR)\XSLoader\XSLoader.pm + -del /f *.def *.map + -if exist $(LIBDIR)\Amiga rmdir /s /q $(LIBDIR)\Amiga + -if exist $(LIBDIR)\App rmdir /s /q $(LIBDIR)\App + -if exist $(LIBDIR)\Archive rmdir /s /q $(LIBDIR)\Archive + -if exist $(LIBDIR)\Attribute rmdir /s /q $(LIBDIR)\Attribute + -if exist $(LIBDIR)\autodie rmdir /s /q $(LIBDIR)\autodie + -if exist $(LIBDIR)\Carp rmdir /s /q $(LIBDIR)\Carp + -if exist $(LIBDIR)\Compress rmdir /s /q $(LIBDIR)\Compress + -if exist $(LIBDIR)\Config\Perl rmdir /s /q $(LIBDIR)\Config\Perl + -if exist $(LIBDIR)\CPAN rmdir /s /q $(LIBDIR)\CPAN + -if exist $(LIBDIR)\Data rmdir /s /q $(LIBDIR)\Data + -if exist $(LIBDIR)\Devel rmdir /s /q $(LIBDIR)\Devel + -if exist $(LIBDIR)\Digest rmdir /s /q $(LIBDIR)\Digest + -if exist $(LIBDIR)\Encode rmdir /s /q $(LIBDIR)\Encode + -if exist $(LIBDIR)\encoding rmdir /s /q $(LIBDIR)\encoding + -if exist $(LIBDIR)\Exporter rmdir /s /q $(LIBDIR)\Exporter + -if exist $(LIBDIR)\ExtUtils\CBuilder rmdir /s /q $(LIBDIR)\ExtUtils\CBuilder + -if exist $(LIBDIR)\ExtUtils\Command rmdir /s /q $(LIBDIR)\ExtUtils\Command + -if exist $(LIBDIR)\ExtUtils\Constant rmdir /s /q $(LIBDIR)\ExtUtils\Constant + -if exist $(LIBDIR)\ExtUtils\Liblist rmdir /s /q $(LIBDIR)\ExtUtils\Liblist + -if exist $(LIBDIR)\ExtUtils\MakeMaker rmdir /s /q $(LIBDIR)\ExtUtils\MakeMaker + -if exist $(LIBDIR)\ExtUtils\ParseXS rmdir /s /q $(LIBDIR)\ExtUtils\ParseXS + -if exist $(LIBDIR)\ExtUtils\Typemaps rmdir /s /q $(LIBDIR)\ExtUtils\Typemaps + -if exist $(LIBDIR)\File\Spec rmdir /s /q $(LIBDIR)\File\Spec + -if exist $(LIBDIR)\Filter rmdir /s /q $(LIBDIR)\Filter + -if exist $(LIBDIR)\Getopt\Long rmdir /s /q $(LIBDIR)\Getopt\Long + -if exist $(LIBDIR)\Hash rmdir /s /q $(LIBDIR)\Hash + -if exist $(LIBDIR)\HTTP rmdir /s /q $(LIBDIR)\HTTP + -if exist $(LIBDIR)\I18N rmdir /s /q $(LIBDIR)\I18N + -if exist $(LIBDIR)\inc rmdir /s /q $(LIBDIR)\inc + -if exist $(LIBDIR)\IO rmdir /s /q $(LIBDIR)\IO + -if exist $(LIBDIR)\IPC rmdir /s /q $(LIBDIR)\IPC + -if exist $(LIBDIR)\JSON rmdir /s /q $(LIBDIR)\JSON + -if exist $(LIBDIR)\List rmdir /s /q $(LIBDIR)\List + -if exist $(LIBDIR)\Locale rmdir /s /q $(LIBDIR)\Locale + -if exist $(LIBDIR)\Math rmdir /s /q $(LIBDIR)\Math + -if exist $(LIBDIR)\Memoize rmdir /s /q $(LIBDIR)\Memoize + -if exist $(LIBDIR)\MIME rmdir /s /q $(LIBDIR)\MIME + -if exist $(LIBDIR)\Module rmdir /s /q $(LIBDIR)\Module + -if exist $(LIBDIR)\Net\FTP rmdir /s /q $(LIBDIR)\Net\FTP + -if exist $(LIBDIR)\Params rmdir /s /q $(LIBDIR)\Params + -if exist $(LIBDIR)\Parse rmdir /s /q $(LIBDIR)\Parse + -if exist $(LIBDIR)\Perl rmdir /s /q $(LIBDIR)\Perl + -if exist $(LIBDIR)\PerlIO rmdir /s /q $(LIBDIR)\PerlIO + -if exist $(LIBDIR)\Pod\Html rmdir /s /q $(LIBDIR)\Pod\Html + -if exist $(LIBDIR)\Pod\Perldoc rmdir /s /q $(LIBDIR)\Pod\Perldoc + -if exist $(LIBDIR)\Pod\Simple rmdir /s /q $(LIBDIR)\Pod\Simple + -if exist $(LIBDIR)\Pod\Text rmdir /s /q $(LIBDIR)\Pod\Text + -if exist $(LIBDIR)\Scalar rmdir /s /q $(LIBDIR)\Scalar + -if exist $(LIBDIR)\Search rmdir /s /q $(LIBDIR)\Search + -if exist $(LIBDIR)\Sub rmdir /s /q $(LIBDIR)\Sub + -if exist $(LIBDIR)\Sys rmdir /s /q $(LIBDIR)\Sys + -if exist $(LIBDIR)\TAP rmdir /s /q $(LIBDIR)\TAP + -if exist $(LIBDIR)\Term rmdir /s /q $(LIBDIR)\Term + -if exist $(LIBDIR)\Test rmdir /s /q $(LIBDIR)\Test + -if exist $(LIBDIR)\Test2 rmdir /s /q $(LIBDIR)\Test2 + -if exist $(LIBDIR)\Text rmdir /s /q $(LIBDIR)\Text + -if exist $(LIBDIR)\Thread rmdir /s /q $(LIBDIR)\Thread + -if exist $(LIBDIR)\threads rmdir /s /q $(LIBDIR)\threads + -if exist $(LIBDIR)\Tie\Hash rmdir /s /q $(LIBDIR)\Tie\Hash + -if exist $(LIBDIR)\Unicode\Collate rmdir /s /q $(LIBDIR)\Unicode\Collate + -if exist $(LIBDIR)\Unicode\Collate\Locale rmdir /s /q $(LIBDIR)\Unicode\Collate\Locale + -if exist $(LIBDIR)\version rmdir /s /q $(LIBDIR)\version + -if exist $(LIBDIR)\VMS rmdir /s /q $(LIBDIR)\VMS + -if exist $(LIBDIR)\Win32API rmdir /s /q $(LIBDIR)\Win32API + -if exist $(LIBDIR)\XS rmdir /s /q $(LIBDIR)\XS + -cd $(PODDIR) && del /f *.html *.bat roffitall \ + perl5401delta.pod perlaix.pod perlamiga.pod perlandroid.pod \ + perlapi.pod perlbs2000.pod perlcn.pod perlcygwin.pod \ + perlfreebsd.pod perlhaiku.pod perlhpux.pod perlhurd.pod \ + perlintern.pod perlirix.pod perljp.pod perlko.pod perllinux.pod \ + perlmacosx.pod perlmodlib.pod perlopenbsd.pod perlos2.pod \ + perlos390.pod perlos400.pod perlplan9.pod perlqnx.pod \ + perlriscos.pod perlsolaris.pod perlsynology.pod perltoc.pod \ + perltru64.pod perltw.pod perluniprops.pod perlvos.pod \ + perlwin32.pod + -cd ..\utils && del /f h2ph splain perlbug pl2pm h2xs \ + perldoc perlivp libnetcfg enc2xs encguess piconv cpan *.bat \ + xsubpp pod2html instmodsh json_pp prove ptar ptardiff ptargrep shasum corelist zipdetails + -del /f ..\config.sh perlmain.c dlutils.c config.h.new \ + perlmainst.c + -del /f $(CONFIGPM) + -del /f ..\lib\Config_git.pl + -del /f "bin\*.bat" + -del /f perllibst.h + -del /f $(PERLEXE_RES) perl.base + -cd .. && del /s *$(a) *.map *.pdb *.ilk *.bs *$(o) .exists pm_to_blib ppport.h + -cd $(EXTDIR) && del /s *.def Makefile Makefile.old + -cd $(DISTDIR) && del /s *.def Makefile Makefile.old + -cd $(CPANDIR) && del /s *.def Makefile Makefile.old + -del /s ..\utils\Makefile + -if exist $(AUTODIR) rmdir /s /q $(AUTODIR) + -if exist $(COREDIR) rmdir /s /q $(COREDIR) + -if exist pod2htmd.tmp del pod2htmd.tmp + -if exist $(HTMLDIR) rmdir /s /q $(HTMLDIR) + -del /f ..\t\test_state + +install : all installbare installhtml + +installbare : utils ..\pod\perltoc.pod + $(PERLEXE) ..\installperl + if exist $(WPERLEXE) $(XCOPY) $(WPERLEXE) $(INST_BIN)\$(NULL) + if exist $(PERLEXESTATIC) $(XCOPY) $(PERLEXESTATIC) $(INST_BIN)\$(NULL) + $(XCOPY) $(GLOBEXE) $(INST_BIN)\$(NULL) + if exist ..\perl*.pdb $(XCOPY) ..\perl*.pdb $(INST_BIN)\$(NULL) + $(XCOPY) "bin\*.bat" $(INST_SCRIPT)\$(NULL) + +installhtml : doc + $(RCOPY) $(HTMLDIR)\*.* $(INST_HTML)\$(NULL) + +inst_lib : $(CONFIGPM) + $(RCOPY) ..\lib $(INST_LIB)\$(NULL) + +$(UNIDATAFILES) : ..\pod\perluniprops.pod + +..\pod\perluniprops.pod: ..\lib\unicore\mktables $(CONFIGPM) + $(MINIPERL) -I..\lib ..\lib\unicore\mktables -C ..\lib\unicore -P ..\pod -maketest -makelist -p + +minitest : $(HAVEMINIPERL) $(GLOBEXE) $(CONFIGPM) $(UNIDATAFILES) utils + $(XCOPY) $(MINIPERL) ..\t\$(NULL) + if exist ..\t\perl.exe del /f ..\t\perl.exe + rename ..\t\miniperl.exe perl.exe + $(XCOPY) $(GLOBEXE) ..\t\$(NULL) + attrib -r "..\t\*.*" + cd ..\t && \ + $(MINIPERL) -I..\lib harness base/*.t comp/*.t cmd/*.t io/*.t opbasic/*.t op/*.t pragma/*.t + +test-prep : all utils ..\pod\perltoc.pod $(TESTPREPGCC) + $(XCOPY) $(PERLEXE) ..\t\$(NULL) + $(XCOPY) $(PERLDLL) ..\t\$(NULL) + $(XCOPY) $(GLOBEXE) ..\t\$(NULL) +# If building with gcc versions 4.x.x or greater, then +# the GCC helper DLL will also need copied to the test directory. +# The name of the dll can change, depending upon which vendor has supplied +# your compiler, and upon the values of "x". +# libstdc++-6.dll is copied if it exists as it, too, may then be needed. +# Without this copying, the op/taint.t test script will fail. + +ifeq ($(CCTYPE),GCC) + +test-prep-gcc : + if exist $(CCDLLDIR)\libgcc_s_seh-1.dll $(XCOPY) $(CCDLLDIR)\libgcc_s_seh-1.dll ..\t\$(NULL) + if exist $(CCDLLDIR)\libgcc_s_sjlj-1.dll $(XCOPY) $(CCDLLDIR)\libgcc_s_sjlj-1.dll ..\t\$(NULL) + if exist $(CCDLLDIR)\libgcc_s_dw2-1.dll $(XCOPY) $(CCDLLDIR)\libgcc_s_dw2-1.dll ..\t\$(NULL) + if exist $(CCDLLDIR)\libstdc++-6.dll $(XCOPY) $(CCDLLDIR)\libstdc++-6.dll ..\t\$(NULL) + if exist $(CCDLLDIR)\libwinpthread-1.dll $(XCOPY) $(CCDLLDIR)\libwinpthread-1.dll ..\t\$(NULL) + if exist $(CCDLLDIR)\libquadmath-0.dll $(XCOPY) $(CCDLLDIR)\libquadmath-0.dll ..\t\$(NULL) + if exist $(CCDLLDIR)\libmcfgthread-1.dll $(XCOPY) $(CCDLLDIR)\libmcfgthread-1.dll ..\t\$(NULL) + +endif + +test : test-prep + set PERL_STATIC_EXT=$(STATIC_EXT) && \ + cd ..\t && perl.exe harness $(TEST_ARGS) $(TEST_SWITCHES) $(TEST_FILES) + +test_porting : test-prep + set PERL_STATIC_EXT=$(STATIC_EXT) && \ + cd ..\t && perl.exe harness $(TEST_ARGS) $(TEST_SWITCHES) porting\*.t ..\lib\diagnostics.t + +test-reonly : reonly utils + $(XCOPY) $(PERLEXE) ..\t\$(NULL) + $(XCOPY) $(PERLDLL) ..\t\$(NULL) + $(XCOPY) $(GLOBEXE) ..\t\$(NULL) + cd ..\t && perl.exe harness $(OPT) -re \bpat\\/ $(EXTRA) + +regen : + cd .. && regen.pl + +test-notty : test-prep + set PERL_STATIC_EXT=$(STATIC_EXT) && \ + set PERL_SKIP_TTY_TEST=1 && \ + cd ..\t && perl.exe harness $(TEST_ARGS) $(TEST_SWITCHES) $(TEST_FILES) + +_test : + $(XCOPY) $(PERLEXE) ..\t\$(NULL) + $(XCOPY) $(PERLDLL) ..\t\$(NULL) + $(XCOPY) $(GLOBEXE) ..\t\$(NULL) + set PERL_STATIC_EXT=$(STATIC_EXT) && \ + cd ..\t && perl.exe harness $(TEST_ARGS) $(TEST_SWITCHES) $(TEST_FILES) + +_clean : + -@erase miniperlmain$(o) + -@erase $(MINIPERL) + -@erase perlglob$(o) + -@erase perlmain$(o) + -@erase perlmainst$(o) + -@erase /f $(CONFIG_H) + -if exist $(FULLDIR) rmdir /s /q $(FULLDIR) + -@erase /f ..\git_version.h + -@erase $(GLOBEXE) + -@erase $(PERLEXE) + -@erase $(WPERLEXE) + -@erase $(PERLEXESTATIC) + -@erase $(PERLSTATICLIB) + -@erase $(PERLDLL) + -@erase $(CORE_OBJ) + -@erase $(GENUUDMAP) $(GENUUDMAP_OBJ) $(GENERATED_HEADERS) + -@erase .coreheaders + -if exist $(MINIDIR) rmdir /s /q $(MINIDIR) + -if exist $(UNIDATADIR1) rmdir /s /q $(UNIDATADIR1) + -if exist $(UNIDATADIR2) rmdir /s /q $(UNIDATADIR2) + -@erase $(UNIDATAFILES) + -@erase $(WIN32_OBJ) + -@erase $(DLL_OBJ) + -@erase ..\*$(o) ..\*$(a) ..\*.exp *$(o) *$(a) *.exp *.res + -@erase ..\t\*.exe ..\t\*.dll ..\t\*.bat + -@erase *.ilk + -@erase *.pdb ..\*.pdb + -@erase Extensions_static + +clean : Extensions_clean _clean + +realclean : Extensions_realclean _clean + +# Handy way to run perlbug -ok without having to install and run the +# installed perlbug. We don't re-run the tests here - we trust the user. +# Please *don't* use this unless all tests pass. +# If you want to report test failures, use "gmake nok" instead. +ok: utils $(PERLEXE) $(PERLDLL) Extensions_nonxs Extensions + $(PERLEXE) ..\utils\perlbug -ok -s "(UNINSTALLED)" + +okfile: utils $(PERLEXE) $(PERLDLL) Extensions_nonxs Extensions + $(PERLEXE) ..\utils\perlbug -ok -s "(UNINSTALLED)" -F perl.ok + +nok: utils $(PERLEXE) $(PERLDLL) Extensions_nonxs Extensions + $(PERLEXE) ..\utils\perlbug -nok -s "(UNINSTALLED)" + +nokfile: utils $(PERLEXE) $(PERLDLL) Extensions_nonxs Extensions + $(PERLEXE) ..\utils\perlbug -nok -s "(UNINSTALLED)" -F perl.nok + +# prevent implicit rule +%.c : %.y diff --git a/share/perl-5.40/gh23179_no_delta.patch b/share/perl-5.40/gh23179_no_delta.patch new file mode 100644 index 0000000..7a19b68 --- /dev/null +++ b/share/perl-5.40/gh23179_no_delta.patch @@ -0,0 +1,256 @@ +From f1b6fa6bb53480921fb0083d9c8b583b8df2e904 Mon Sep 17 00:00:00 2001 +From: Tony Cook +Date: Mon, 24 Feb 2025 15:56:09 +1100 +Subject: [PATCH 1/3] regcomp: handle cloning the rexc cleanup in the scope + stack + +Previous on Win32 this could cause a double-free of the RExC state if +an emulated fork was done with the free of the state on the scope +stack. + +Use a custom save type and prevent freeing in the cloned process to +prevent the double-free. + +Fixes #23022 + +XXX scope_types.h is elided from original patch and applied separately +after regen as it did not patch cleanly. +--- + embed.fnc | 4 ++- + embed.h | 1 + + proto.h | 6 ++++ + regcomp.c | 16 +++++++---- + regen/scope_types.pl | 1 + + scope.c | 6 ++++ + scope.h | 5 ++++ + scope_types.h | 68 +++++++++++++++++++++++--------------------- + sv.c | 5 ++++ + 9 files changed, 73 insertions(+), 39 deletions(-) + +diff --git a/embed.fnc b/embed.fnc +index 0332f63875ec..90b518a03f0a 100644 +--- a/embed.fnc ++++ b/embed.fnc +@@ -2791,6 +2791,9 @@ Cp |char * |re_intuit_start|NN REGEXP * const rx \ + |NULLOK re_scream_pos_data *data + Cp |SV * |re_intuit_string \ + |NN REGEXP * const r ++ ++p |void |release_RExC_state \ ++ |NN void *vstate + Xp |REGEXP *|re_op_compile |NULLOK SV ** const patternp \ + |int pat_count \ + |NULLOK OP *expr \ +@@ -2799,7 +2802,6 @@ Xp |REGEXP *|re_op_compile |NULLOK SV ** const patternp \ + |NULLOK bool *is_bare_re \ + |const U32 rx_flags \ + |const U32 pm_flags +- + ATdp |void |repeatcpy |NN char *to \ + |NN const char *from \ + |SSize_t len \ +diff --git a/embed.h b/embed.h +index e1e2bf4d02f1..d6926854177b 100644 +--- a/embed.h ++++ b/embed.h +@@ -1200,6 +1200,7 @@ + # define refcounted_he_new_pv(a,b,c,d,e) Perl_refcounted_he_new_pv(aTHX_ a,b,c,d,e) + # define refcounted_he_new_pvn(a,b,c,d,e,f) Perl_refcounted_he_new_pvn(aTHX_ a,b,c,d,e,f) + # define refcounted_he_new_sv(a,b,c,d,e) Perl_refcounted_he_new_sv(aTHX_ a,b,c,d,e) ++# define release_RExC_state(a) Perl_release_RExC_state(aTHX_ a) + # define report_evil_fh(a) Perl_report_evil_fh(aTHX_ a) + # define report_wrongway_fh(a,b) Perl_report_wrongway_fh(aTHX_ a,b) + # define rpeep(a) Perl_rpeep(aTHX_ a) +diff --git a/proto.h b/proto.h +index e132956f8ac8..6ded4aeb247f 100644 +--- a/proto.h ++++ b/proto.h +@@ -3893,6 +3893,12 @@ PERL_CALLCONV void + Perl_reginitcolors(pTHX); + #define PERL_ARGS_ASSERT_REGINITCOLORS + ++PERL_CALLCONV void ++Perl_release_RExC_state(pTHX_ void *vstate) ++ __attribute__visibility__("hidden"); ++#define PERL_ARGS_ASSERT_RELEASE_REXC_STATE \ ++ assert(vstate) ++ + PERL_CALLCONV void + Perl_repeatcpy(char *to, const char *from, SSize_t len, IV count); + #define PERL_ARGS_ASSERT_REPEATCPY \ +diff --git a/regcomp.c b/regcomp.c +index a79221079269..14e1390062e5 100644 +--- a/regcomp.c ++++ b/regcomp.c +@@ -1356,15 +1356,19 @@ S_is_ssc_worth_it(const RExC_state_t * pRExC_state, const regnode_ssc * ssc) + return true; + } + +-static void +-release_RExC_state(pTHX_ void *vstate) { +- RExC_state_t *pRExC_state = (RExC_state_t *)vstate; ++#ifdef PERL_RE_BUILD_AUX ++ ++void ++Perl_release_RExC_state(pTHX_ void *vstate) { ++ PERL_ARGS_ASSERT_RELEASE_REXC_STATE; + ++ RExC_state_t *pRExC_state = (RExC_state_t *)vstate; ++ + /* Any or all of these might be NULL. + + There's no point in setting them to NULL after the free, since + pRExC_state is about to be released. +- */ ++ */ + SvREFCNT_dec(RExC_rx_sv); + Safefree(RExC_open_parens); + Safefree(RExC_close_parens); +@@ -1374,6 +1378,8 @@ release_RExC_state(pTHX_ void *vstate) { + Safefree(pRExC_state); + } + ++#endif ++ + /* + * Perl_re_op_compile - the perl internal RE engine's function to compile a + * regular expression into internal code. +@@ -1475,7 +1481,7 @@ Perl_re_op_compile(pTHX_ SV ** const patternp, int pat_count, + * or error. */ + Newxz(pRExC_state, 1, RExC_state_t); + +- SAVEDESTRUCTOR_X(release_RExC_state, pRExC_state); ++ SAVE_FREE_REXC_STATE(pRExC_state); + + DEBUG_r({ + /* and then initialize RExC_mysv1 and RExC_mysv2 early so if +diff --git a/regen/scope_types.pl b/regen/scope_types.pl +index 3a7522d734b9..a3f406951793 100644 +--- a/regen/scope_types.pl ++++ b/regen/scope_types.pl +@@ -137,6 +137,7 @@ BEGIN + SAVEt_FREEPADNAME + SAVEt_STRLEN_SMALL + SAVEt_FREERCPV ++SAVEt_FREE_REXC_STATE + + /* two args */ + +diff --git a/scope.c b/scope.c +index 210ea36da3e8..b8063c27760b 100644 +--- a/scope.c ++++ b/scope.c +@@ -1391,6 +1391,12 @@ Perl_leave_scope(pTHX_ I32 base) + Safefree(a0.any_ptr); + break; + ++ case SAVEt_FREE_REXC_STATE: ++ a0 = ap[0]; ++ if (a0.any_ptr) ++ release_RExC_state(a0.any_ptr); ++ break; ++ + case SAVEt_CLEARPADRANGE: + { + I32 i; +diff --git a/scope.h b/scope.h +index 311c4a32ec1b..eccd3aaba2dc 100644 +--- a/scope.h ++++ b/scope.h +@@ -183,6 +183,11 @@ scope has the given name. C must be a literal string. + #define SAVESETSVFLAGS(sv,mask,val) save_set_svflags(sv,mask,val) + #define SAVEFREECOPHH(h) save_pushptr((void *)(h), SAVEt_FREECOPHH) + ++#if defined(PERL_CORE) || defined(PERL_EXT) ++# define SAVE_FREE_REXC_STATE(p) \ ++ save_pushptr((void *)(p), SAVEt_FREE_REXC_STATE) ++#endif ++ + #define SAVEDELETE(h,k,l) \ + save_delete(MUTABLE_HV(h), (char*)(k), (I32)(l)) + #define SAVEHDELETE(h,s) \ +diff --git a/sv.c b/sv.c +index e8c6e65a2717..ae6d09dea28a 100644 +--- a/sv.c ++++ b/sv.c +@@ -15515,6 +15515,11 @@ Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param) + c = (char*)POPPTR(ss,ix); + TOPPTR(nss,ix) = pv_dup_inc(c); + break; ++ case SAVEt_FREE_REXC_STATE: ++ (void)POPPTR(ss, ix); ++ /* free only once */ ++ TOPPTR(nss, ix) = NULL; ++ break; + case SAVEt_FREERCPV: + c = (char *)POPPTR(ss,ix); + TOPPTR(nss,ix) = rcpv_copy(c); + +From c54f9ca07b8390e9b917ea3b66fa605c8cf24b09 Mon Sep 17 00:00:00 2001 +From: Tony Cook +Date: Mon, 14 Apr 2025 10:46:13 +1000 +Subject: [PATCH 3/3] regcomp: ensure the RExC_state freed earlier rather than + later + +388bf71 (ignoring #23022 for now) ensured that the RExC_state +and its controlled pointers were freed once and only once, +regardless of whether re_op_compile() returned normally or threw +an exception. + +Unfortunately that free could happen very later, surviving well beyond +when the regexp was compiled. + +Add an ENTER/LEAVE pair to ensure the cleanup is done immediately +on a normal return. +--- + regcomp.c | 9 ++++++++- + 1 file changed, 8 insertions(+), 1 deletion(-) + +diff --git a/regcomp.c b/regcomp.c +index 14e1390062e5..0a84ad07606f 100644 +--- a/regcomp.c ++++ b/regcomp.c +@@ -1481,6 +1481,7 @@ Perl_re_op_compile(pTHX_ SV ** const patternp, int pat_count, + * or error. */ + Newxz(pRExC_state, 1, RExC_state_t); + ++ ENTER_with_name("re_op_compile"); + SAVE_FREE_REXC_STATE(pRExC_state); + + DEBUG_r({ +@@ -1578,6 +1579,8 @@ Perl_re_op_compile(pTHX_ SV ** const patternp, int pat_count, + "Precompiled pattern%s\n", + orig_rx_flags & RXf_SPLIT ? " for split" : "")); + ++ LEAVE_with_name("re_op_compile"); ++ + return (REGEXP*)re; + } + } +@@ -1593,7 +1596,9 @@ Perl_re_op_compile(pTHX_ SV ** const patternp, int pat_count, + pat = newSVpvn_flags(exp, plen, SVs_TEMP | + (IN_BYTES ? 0 : SvUTF8(pat))); + } +- return CALLREGCOMP_ENG(eng, pat, orig_rx_flags); ++ REGEXP *re = CALLREGCOMP_ENG(eng, pat, orig_rx_flags); ++ LEAVE_with_name("re_op_compile"); ++ return re; + } + + /* ignore the utf8ness if the pattern is 0 length */ +@@ -1643,6 +1648,7 @@ Perl_re_op_compile(pTHX_ SV ** const patternp, int pat_count, + Perl_re_printf( aTHX_ "%sSkipping recompilation of unchanged REx%s %s\n", + PL_colors[4], PL_colors[5], s); + }); ++ LEAVE_with_name("re_op_compile"); + return old_re; + } + +@@ -2477,6 +2483,7 @@ Perl_re_op_compile(pTHX_ SV ** const patternp, int pat_count, + if (old_re && SvREADONLY(old_re)) + SvREADONLY_on(Rx); + #endif ++ LEAVE_with_name("re_op_compile"); + return Rx; + } + diff --git a/share/perl-5.40/scope_types.h b/share/perl-5.40/scope_types.h new file mode 100644 index 0000000..c348298 --- /dev/null +++ b/share/perl-5.40/scope_types.h @@ -0,0 +1,153 @@ +/* -*- mode: C; buffer-read-only: t -*- + + Copyright (C) 2022 by Larry Wall and others + + You may distribute under the terms of either the GNU General Public + License or the Artistic License, as specified in the README file. + + !!!!!!! DO NOT EDIT THIS FILE !!!!!!! + This file is built by regen/scope_types.pl. + Any changes made here will be lost! + The defines and contents of the leave_scope_arg_counts[] array + must match. To add a new type modify the __DATA__ section in + regen/scope_types.pl and run `make regen` to rebuild the file. + */ + +/* zero args */ + +#define SAVEt_ALLOC 0 +#define SAVEt_CLEARPADRANGE 1 +#define SAVEt_CLEARSV 2 +#define SAVEt_REGCONTEXT 3 + +/* one arg */ + +#define SAVEt_TMPSFLOOR 4 +#define SAVEt_BOOL 5 +#define SAVEt_COMPILE_WARNINGS 6 +#define SAVEt_CURCOP_WARNINGS 7 +#define SAVEt_COMPPAD 8 +#define SAVEt_FREECOPHH 9 +#define SAVEt_FREEOP 10 +#define SAVEt_FREEPV 11 +#define SAVEt_FREESV 12 +#define SAVEt_I16 13 +#define SAVEt_I32_SMALL 14 +#define SAVEt_I8 15 +#define SAVEt_INT_SMALL 16 +#define SAVEt_MORTALIZESV 17 +#define SAVEt_NSTAB 18 +#define SAVEt_OP 19 +#define SAVEt_PARSER 20 +#define SAVEt_STACK_POS 21 +#define SAVEt_READONLY_OFF 22 +#define SAVEt_FREEPADNAME 23 +#define SAVEt_STRLEN_SMALL 24 +#define SAVEt_FREERCPV 25 +#define SAVEt_FREE_REXC_STATE 26 + +/* two args */ + +#define SAVEt_AV 27 +#define SAVEt_DESTRUCTOR 28 +#define SAVEt_DESTRUCTOR_X 29 +#define SAVEt_GENERIC_PVREF 30 +#define SAVEt_GENERIC_SVREF 31 +#define SAVEt_GP 32 +#define SAVEt_GVSV 33 +#define SAVEt_HINTS 34 +#define SAVEt_HPTR 35 +#define SAVEt_HV 36 +#define SAVEt_I32 37 +#define SAVEt_INT 38 +#define SAVEt_ITEM 39 +#define SAVEt_IV 40 +#define SAVEt_LONG 41 +#define SAVEt_PPTR 42 +#define SAVEt_SAVESWITCHSTACK 43 +#define SAVEt_SHARED_PVREF 44 +#define SAVEt_SPTR 45 +#define SAVEt_STRLEN 46 +#define SAVEt_SV 47 +#define SAVEt_SVREF 48 +#define SAVEt_VPTR 49 +#define SAVEt_ADELETE 50 +#define SAVEt_APTR 51 +#define SAVEt_RCPV 52 + +/* three args */ + +#define SAVEt_HELEM 53 +#define SAVEt_PADSV_AND_MORTALIZE 54 +#define SAVEt_SET_SVFLAGS 55 +#define SAVEt_GVSLOT 56 +#define SAVEt_AELEM 57 +#define SAVEt_DELETE 58 +#define SAVEt_HINTS_HH 59 + +static const U8 leave_scope_arg_counts[] = { + 0, /* SAVEt_ALLOC */ + 0, /* SAVEt_CLEARPADRANGE */ + 0, /* SAVEt_CLEARSV */ + 0, /* SAVEt_REGCONTEXT */ + 1, /* SAVEt_TMPSFLOOR */ + 1, /* SAVEt_BOOL */ + 1, /* SAVEt_COMPILE_WARNINGS */ + 1, /* SAVEt_CURCOP_WARNINGS */ + 1, /* SAVEt_COMPPAD */ + 1, /* SAVEt_FREECOPHH */ + 1, /* SAVEt_FREEOP */ + 1, /* SAVEt_FREEPV */ + 1, /* SAVEt_FREESV */ + 1, /* SAVEt_I16 */ + 1, /* SAVEt_I32_SMALL */ + 1, /* SAVEt_I8 */ + 1, /* SAVEt_INT_SMALL */ + 1, /* SAVEt_MORTALIZESV */ + 1, /* SAVEt_NSTAB */ + 1, /* SAVEt_OP */ + 1, /* SAVEt_PARSER */ + 1, /* SAVEt_STACK_POS */ + 1, /* SAVEt_READONLY_OFF */ + 1, /* SAVEt_FREEPADNAME */ + 1, /* SAVEt_STRLEN_SMALL */ + 1, /* SAVEt_FREERCPV */ + 1, /* SAVEt_FREE_REXC_STATE */ + 2, /* SAVEt_AV */ + 2, /* SAVEt_DESTRUCTOR */ + 2, /* SAVEt_DESTRUCTOR_X */ + 2, /* SAVEt_GENERIC_PVREF */ + 2, /* SAVEt_GENERIC_SVREF */ + 2, /* SAVEt_GP */ + 2, /* SAVEt_GVSV */ + 2, /* SAVEt_HINTS */ + 2, /* SAVEt_HPTR */ + 2, /* SAVEt_HV */ + 2, /* SAVEt_I32 */ + 2, /* SAVEt_INT */ + 2, /* SAVEt_ITEM */ + 2, /* SAVEt_IV */ + 2, /* SAVEt_LONG */ + 2, /* SAVEt_PPTR */ + 2, /* SAVEt_SAVESWITCHSTACK */ + 2, /* SAVEt_SHARED_PVREF */ + 2, /* SAVEt_SPTR */ + 2, /* SAVEt_STRLEN */ + 2, /* SAVEt_SV */ + 2, /* SAVEt_SVREF */ + 2, /* SAVEt_VPTR */ + 2, /* SAVEt_ADELETE */ + 2, /* SAVEt_APTR */ + 2, /* SAVEt_RCPV */ + 3, /* SAVEt_HELEM */ + 3, /* SAVEt_PADSV_AND_MORTALIZE */ + 3, /* SAVEt_SET_SVFLAGS */ + 3, /* SAVEt_GVSLOT */ + 3, /* SAVEt_AELEM */ + 3, /* SAVEt_DELETE */ + 3 /* SAVEt_HINTS_HH */ +}; + +#define MAX_SAVEt 59 + +/* ex: set ro ft=c: */