NOTES ON BUILDING TLPERL 2017 BUILD PLATFORM 64-bits Windows 7 SP1 running under VirtualBox on Linux. GETTING THE PERL SOURCE I downloaded the latest stable Perl source 5.24.1 from CPAN. THE COMPILER The file README.win32 in the root of the distribution contains compilation instructions, which lists various supported MinGW distributions. I used mingw64-w32-gcc4.9.2_20150513.zip from https://sourceforge.net/projects/mingw-w64/ and 32bit_dmake-4.12.2-bin_20140810.zip from http://strawberryperl.com/package/kmx/32_tools/ respectively. dmake.exe and the dmake startup subdirectory are in the bin subdirectory of the unpacked mingw. This MinGW compiler does not require installation; it is sufficient to prepend \bin to the searchpath before use. BUILDING PERL I went to the win32 subdirectory of the Perl source. In makefile.mk I adjusted relevant settings to my build environment. A diff for this makefile.mk is included. I compiled with dmake dmake test (Result: PASS) I installed with dmake installbare `installbare' omits the generation of html. MAKING PERL PORTABLE There were hard-coded paths in lib/Config.pm and lib/Config_heavy.pl, which were likely to cause problems. I edited lib/Config.pm and lib/Config_heavy.pl to compute Perl's location dynamically. To both I add the code my $rootdir = __FILE__; $rootdir =~ s![\\/][^\\/]*[\\/][^\\/]*$!!; $rootdir =~ s!/!\\!g; and used this in Config.pm for the definition of %Config, taking care to replace single-quoted strings with double-quoted ones and escaping backslashes and other characters where necessary. I also parameterized the location of the mingw compiler. Config_heavy.pl got a similar treatment, in particular the single-quoted here-documents with markers !END! (very long) and EOVIRTUAL. The original versions are still present in the lib directory under the names Config.pm.orig and Config_heavy.pl.orig. INSTALLING MODULES When adding modules, I added the new Perl bin directory to the searchpath. I downloaded needed modules from CPAN and added them with perl Makefile.PL && dmake && dmake test && dmake install All modules for which tests were defined got a pass. They are, in order of processing: Math::Int64 0.54 IO::String 1.08 Digest::SHA1 2.13 File::Which 1.21 Encode::compat 0.07 Encode::Locale 1.05 Windows-specific: Win32::API 0.84 Win32::WinError 0.04 (just copying WinError.pm to site/lib/Win32) Win32API::Registry 0.33 Win32::Console 0.10 (no tests) Win32::TieRegistry 0.30 Win32::Shortcut 0.08 (no tests) Win32::OLE 0.1712 Win32-Process-0.16 LWP and dependencies, in order of compilation/installation: Socket 2.024 Date::Parse 2.30 (file TimeDate-2.30.tar.gz) HTTP::Date 6.02 File::Listing 6.04 IO::HTML 1.001 LWP::MediaTypes 6.02 URI 1.71 HTTP::Message 6.11 HTML::Tagset 3.20 HTML::Parser 3.72 WWW::RobotRules 6.02 HTTP::Negotiate 6.01 Net::HTTP 6.13 Mozilla::CA 20160104 HTTP::Daemon 6.01 HTTP::Cookies 6.03 Try::Tiny 0.28 Test::Fatal 0.014 Test::RequiresInternet 0.05 LWP 6.25 (file libwww-perl-6.15.tar.gz) Perl/Tk: Tk 804.033 This module did not compile rightaway: 1. In Tk-804.033/PNG/zlib/win32/zlib.def I had to comment out the LIBRARY line at the start of the file. It might be well to do this before running 'perl Makefile.PL'. 2. An entry '-limm32' somehow did not make it into LDLOADLIBS in the generated Makefile in the Tk source root directory. After manually adding this at the end of the LDLOADLIBS definition, dmake did succeed. Tk-DirSelect 1.12 JSON support, added october 25 2017: JSON 2.94 Canary::Stability 2012 common::sense 3.74 Types::Serialiser 1.0 JSON::XS 3.04 I temporarily added pl2bat.[bin|pl] to tlperl/bin/ because dmake test required it for one of these modules. MODIFICATIONS FOR TEXLIVE - As explained above: our versions of lib/Config.pm and lib/Config_heavy.pl compute the location of tlperl dynamically. These files still contain a hard-coded path for mingw. - The lib/pods directory has been removed, to save some space. - The bin subdirectory now only contains exe- and dll files; batch files and Perl scripts have been removed. - Copied from mingw/bin to tlperl/bin: libgcc_s_dw2-1.dll, libstdc++-6.dll and libwinpthread-1.dll TESTING WITH TEXLIVE For testing the new Perl with the installer, I unpacked the net installer and replaced its tlperl with the new one. For testing the new Perl with tlmgr-gui.exe from the installed TeX Live, I copied it into the fresh installation. Both tests were done with 32-bits Windows 7 Home Premium as regular user and 64-bits Windows 7 Professional as admin user. tlmgr-gui appeared to work as intended. I also successfully ran the uninstaller. Siep Kroonenberg Last revision: April 2017