NOTES ON BUILDING TLPERL 2012 November update BUILD PLATFORM 32-bits Windows 7 SP1 running under VirtualBox on Linux. GETTING THE PERL SOURCE Release version: I downloaded from CPAN: the latest stable Perl source 5.18.2 THE COMPILER I found in the root of the distribution a file README.win32 containing compilation instructions, which listed both mingw32 from mingw.org and the newer mingw64 from mingw-w64.sf.net as possible compilers, the latter one also being packaged with Strawberry Perl. I used this bundled mingw, but not the rest on SP. It includes dmake. BUILDING I went to the win32 subdirectory of the Perl source. In makefile.mk I adjusted relevant settings to my build environment. As in the previous release, I turned off optimization to avoid some intractable failures. In addition, to avoid some errors while running the test suite, I applied a patch which I found at https://github.com/Alexpux/MINGW-packages/blob/master/mingw-w64-perl/perl-5.18.0-add-missing-mingw-libs.patch *** makefile.mk.orig 2014-01-06 23:46:46.000000000 +0100 --- makefile.mk 2014-04-22 14:51:45.000000000 +0200 *************** *** 187,193 **** # not be quoted) # .IF "$(CCTYPE)" == "GCC" ! CCHOME *= C:\MinGW .ELSE CCHOME *= $(MSVCDIR) .ENDIF --- 187,193 ---- # not be quoted) # .IF "$(CCTYPE)" == "GCC" ! CCHOME *= x:\strawberry\c .ELSE CCHOME *= $(MSVCDIR) .ENDIF *************** *** 434,440 **** OPTIMIZE = -g -O2 -DDEBUGGING LINK_DBG = -g .ELSE ! OPTIMIZE = -s -O2 LINK_DBG = -s .ENDIF --- 434,440 ---- OPTIMIZE = -g -O2 -DDEBUGGING LINK_DBG = -g .ELSE ! OPTIMIZE = -s -O0 LINK_DBG = -s .ENDIF *************** *** 1505,1510 **** --- 1505,1512 ---- 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)\libgcc_s_seh-1.dll $(XCOPY) $(CCDLLDIR)\libgcc_s_seh-1.dll ..\t\$(NULL) .ENDIF test : test-prep [end of patch] I compiled with dmake and installed with dmake installbare `installbare' omits the generation of html. 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 under the names Config.pm.orig and Config_heavy.pl.orig. When adding modules, I added the new Perl bin directory to the searchpath. I downloaded all the modules from CPAN and added them with perl Makefile.PL dmake dmake install They are, in order of processing: Math-Int64-0.30.tar.gz Windows-specific: Win32-API-0.77.tar.gz Win32API-Registry-0.32.tar.gz Win32-TieRegistry-0.26.tar.gz Win32-Shortcut-0.08.tar.gz Win32-Process-Info-1.020.tar.gz Win32-OLE-0.1711.tar.gz - warnings Perl/Tk: Tk-804.032.tar.gz This module did not compile rightaway: an entry '-limm32' somehow did not make it into LDLOADLIBS in the generated makefile. After manually adding this at the end of the definition, the module compiled. Tk-DirSelect-1.12.tar.gz LWP and dependencies, in order of compilation/installation: HTML-Tagset-3.20.tar.gz HTML-Parser-3.71.tar.gz URI-1.60.tar.gz Encode-Locale-1.03.tar.gz HTTP-Date-6.02.tar.gz File-Listing-6.04.tar.gz LWP-MediaTypes-6.02.tar.gz IO-HTML-1.00.tar.gz HTTP-Message-6.06.tar.gz HTTP-Cookies-6.01.tar.gz HTTP-Daemon-6.01.tar.gz HTTP-Negotiate-6.01.tar.gz Net-HTTP-6.06.tar.gz WWW-RobotRules-6.02.tar.gz LWP-Protocol-https-6.06.tar.gz libwww-perl-6.06.tar.gz Other: IO-String-1.08.tar.gz Digest-SHA1-2.13.tar.gz (for 3rd-party scripts) MODIFICATIONS FOR TEXLIVE - as explained above: our versions of lib/Config.pm and lib/Config_heavy.pl compute the location of tlperl dynamically. - The site/lib subdirectory is folded into lib. - 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_sjlj_1.dll, libstdc++-6.dll, libpng16-16_.dll and. 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 the installed TeX Live, I copied it into the fresh installation. Both tests with 32-bits Windows XP Enterprise as regular user and 64-bits Windows 7 Professional as admin user. These tests do not require a for perl updated texlive.tlpdb. tlmgr appeared to work as intended. I also successfully ran the uninstaller. Siep Kroonenberg Last revision: April 23 2014