was extracted. Make sure you read and understand the terms under
which this software is being distributed.
-Also make sure you read L<BUGS AND CAVEATS> below for the
+Also make sure you read L</BUGS AND CAVEATS> below for the
known limitations of this port.
The INSTALL file in the perl top-level has much information that is
Microsoft Visual C++ version 6.0 or later
Intel C++ Compiler (experimental)
Gcc by mingw.org gcc version 3.4.5 or later
- Gcc by mingw-w64.sf.net gcc version 4.4.3 or later
+ Gcc by mingw-w64.org gcc version 4.4.3 or later
Note that the last two of these are actually competing projects both
delivering complete gcc toolchain for MS Windows:
Delivers gcc toolchain targeting 32-bit Windows platform.
-=item L<http://mingw-w64.sf.net>
+=item L<http://mingw-w64.org>
Delivers gcc toolchain targeting both 64-bit Windows and 32-bit Windows
platforms (despite the project name "mingw-w64" they are not only 64-bit
=back
The Microsoft Visual C++ compilers are also now being given away free. They are
-available as "Visual C++ Toolkit 2003" or "Visual C++ 2005-2013 Express
-Edition" (and also as part of the ".NET Framework SDK") and are the same
-compilers that ship with "Visual C++ .NET 2003 Professional" or "Visual C++
-2005-2013 Professional" respectively.
+available as "Visual C++ Toolkit 2003" or "Visual C++ 2005-2017 Express [or
+Community, from 2017] Edition" (and also as part of the ".NET Framework SDK")
+and are the same compilers that ship with "Visual C++ .NET 2003 Professional"
+or "Visual C++ 2005-2017 Professional" respectively.
This port can also be built on IA64/AMD64 using:
MinGW64 compiler (gcc version 4.4.3 or later)
The Windows SDK can be downloaded from L<http://www.microsoft.com/>.
-The MinGW64 compiler is available at L<http://sourceforge.net/projects/mingw-w64>.
+The MinGW64 compiler is available at L<http://mingw-w64.org>.
The latter is actually a cross-compiler targeting Win64. There's also a trimmed
down compiler (no java, or gfortran) suitable for building perl available at:
L<http://strawberryperl.com/package/kmx/64_gcctoolchain/>
This port fully supports MakeMaker (the set of modules that
is used to build extensions to perl). Therefore, you should be
able to build and install most extensions found in the CPAN sites.
-See L<Usage Hints for Perl on Windows> below for general hints about this.
+See L</Usage Hints for Perl on Windows> below for general hints about this.
=head2 Setting Up Perl on Windows
=item Make
You need a "make" program to build the sources. If you are using
-Visual C++ or the Windows SDK tools, nmake will work. Builds using
-the gcc need dmake.
-
-dmake is a freely available make that has very nice macro features
-and parallelability.
+Visual C++ or the Windows SDK tools, you can use nmake supplied with Visual C++
+or Windows SDK. You may also use, for Visual C++ or Windows SDK, dmake or gmake
+instead of nmake. dmake is open source software, but is not included with
+Visual C++ or Windows SDK. Builds using gcc need dmake or gmake. nmake is not
+supported for gcc builds. Parallel building is only supported with dmake and
+gmake, not nmake. When using dmake it is recommended to use dmake 4.13 or newer
+for parallel building. Older dmakes, in parallel mode, have very high CPU usage
+and pound the disk/filing system with duplicate I/O calls in an aggressive
+polling loop.
A port of dmake for Windows is available from:
With the newer compilers, you may also use the older batch files if you choose
so.
-You can also use dmake to build using Visual C++; provided, however,
-you set OSRELEASE to "microsft" (or whatever the directory name
-under which the Visual C dmake configuration lives) in your environment
-and edit win32/config.vc to change "make=nmake" into "make=dmake". The
-latter step is only essential if you want to use dmake as your default
-make for building extensions using MakeMaker.
-
-=item Microsoft Visual C++ 2008-2013 Express Edition
+=item Microsoft Visual C++ 2008-2017 Express/Community Edition
-These free versions of Visual C++ 2008-2013 Professional contain the same
+These free versions of Visual C++ 2008-2017 Professional contain the same
compilers and linkers that ship with the full versions, and also contain
everything necessary to build Perl, rather than requiring a separate download
of the Windows SDK like previous versions did.
links to these packages has proven a pointless task because the links keep on
changing so often.)
-Install Visual C++ 2008-2013 Express, then setup your environment using, e.g.
+Install Visual C++ 2008-2017 Express/Community, then setup your environment
+using, e.g.
- C:\Program Files\Microsoft Visual Studio 12.0\Common7\Tools\vsvars32.bat
+ C:\Program Files\Microsoft Visual Studio 12.0\Common7\Tools\vsvars32.bat
(assuming the default installation location was chosen).
Perl should now build using the win32/Makefile. You will need to edit that
-file to set CCTYPE to one of MSVC90FREE-MSVC120FREE first.
+file to set CCTYPE to one of MSVC90-MSVC141 first.
=item Microsoft Visual C++ 2005 Express Edition
Install Visual C++ 2005 first, then the Platform SDK. Setup your environment
as follows (assuming default installation locations were chosen):
- SET PlatformSDKDir=C:\Program Files\Microsoft Platform SDK
+ SET PlatformSDKDir=C:\Program Files\Microsoft Platform SDK
- SET PATH=%SystemRoot%\system32;%SystemRoot%;C:\Program Files\Microsoft Visual Studio 8\Common7\IDE;C:\Program Files\Microsoft Visual Studio 8\VC\BIN;C:\Program Files\Microsoft Visual Studio 8\Common7\Tools;C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\bin;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727;C:\Program Files\Microsoft Visual Studio 8\VC\VCPackages;%PlatformSDKDir%\Bin
+ SET PATH=%SystemRoot%\system32;%SystemRoot%;C:\Program Files\Microsoft Visual Studio 8\Common7\IDE;C:\Program Files\Microsoft Visual Studio 8\VC\BIN;C:\Program Files\Microsoft Visual Studio 8\Common7\Tools;C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\bin;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727;C:\Program Files\Microsoft Visual Studio 8\VC\VCPackages;%PlatformSDKDir%\Bin
- SET INCLUDE=C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE;%PlatformSDKDir%\include
+ SET INCLUDE=C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE;%PlatformSDKDir%\include
- SET LIB=C:\Program Files\Microsoft Visual Studio 8\VC\LIB;C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\lib;%PlatformSDKDir%\lib
+ SET LIB=C:\Program Files\Microsoft Visual Studio 8\VC\LIB;C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\lib;%PlatformSDKDir%\lib
- SET LIBPATH=C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727
+ SET LIBPATH=C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727
(The PlatformSDKDir might need to be set differently depending on which version
you are using. Earlier versions installed into "C:\Program Files\Microsoft SDK",
Perl should now build using the win32/Makefile. You will need to edit that
file to set
- CCTYPE = MSVC80FREE
+ CCTYPE = MSVC80
and to set CCHOME, CCINCDIR and CCLIBDIR as per the environment setup above.
Setup your environment as follows (assuming default installation locations
were chosen):
- SET PlatformSDKDir=C:\Program Files\Microsoft Platform SDK
+ SET PlatformSDKDir=C:\Program Files\Microsoft Platform SDK
- SET PATH=%SystemRoot%\system32;%SystemRoot%;C:\Program Files\Microsoft Visual C++ Toolkit 2003\bin;%PlatformSDKDir%\Bin;C:\Program Files\Microsoft.NET\SDK\v1.1\Bin
+ SET PATH=%SystemRoot%\system32;%SystemRoot%;C:\Program Files\Microsoft Visual C++ Toolkit 2003\bin;%PlatformSDKDir%\Bin;C:\Program Files\Microsoft.NET\SDK\v1.1\Bin
- SET INCLUDE=C:\Program Files\Microsoft Visual C++ Toolkit 2003\include;%PlatformSDKDir%\include;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include
+ SET INCLUDE=C:\Program Files\Microsoft Visual C++ Toolkit 2003\include;%PlatformSDKDir%\include;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include
- SET LIB=C:\Program Files\Microsoft Visual C++ Toolkit 2003\lib;%PlatformSDKDir%\lib;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\lib
+ SET LIB=C:\Program Files\Microsoft Visual C++ Toolkit 2003\lib;%PlatformSDKDir%\lib;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\lib
(The PlatformSDKDir might need to be set differently depending on which version
you are using. Earlier versions installed into "C:\Program Files\Microsoft SDK",
installed by the .NET Framework SDK, but into a location such as the
following:
- C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322
+ C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322
Copy it from there to %PlatformSDKDir%\Bin
appropriate. Then run nmake as usually in that prompt box.
Only Intel C++ Compiler v12.1 has been tested. Other versions probably will
-work.
+work. Using Intel C++ Compiler instead of Visual C has the benefit of C99
+compatibility which is needed by some CPAN XS modules, while maintaining
+compatibility with Visual C object code and Visual C debugging infrastructure
+unlike GCC.
=back
CCHOME points to wherever you installed your compiler.
If building with the cross-compiler provided by
-mingw-w64.sourceforge.net you'll need to uncomment the line that sets
+mingw-w64.org you'll need to uncomment the line that sets
GCCCROSS in the makefile.mk. Do this only if it's the cross-compiler - ie
only if the bin folder doesn't contain a gcc.exe. (The cross-compiler
does not provide a gcc.exe, g++.exe, ar.exe, etc. Instead, all of these
Type "dmake" (or "nmake" if you are using that make).
This should build everything. Specifically, it will create perl.exe,
-perl521.dll at the perl toplevel, and various other extension dll's
+perl527.dll at the perl toplevel, and various other extension dll's
under the lib\auto directory. If the build fails for any reason, make
sure you have done the previous steps correctly.
+To try dmake's parallel mode, type "dmake -P2", where 2, is the maximum number
+of parallel jobs you want to run. A number of things in the build process will
+run in parallel, but there are serialization points where you will see just 1
+CPU maxed out. This is normal.
+
If you are advanced enough with building C code, here is a suggestion to speed
up building perl, and the later C<make test>. Try to keep your PATH enviromental
variable with the least number of folders possible (remember to keep your C
If you build with Visual C++ 2013 then three tests currently may fail with
Daylight Saving Time related problems: F<t/io/fs.t>,
-F<cpan/HTTP-Tiny/t/110_mirror.t> and F<lib/File.Copy.t>. The failures are
-caused by bugs in the CRT in VC++ 2013 which will be fixed in future releases
-of VC++, as explained by Microsoft here:
+F<cpan/HTTP-Tiny/t/110_mirror.t> and F<lib/File/Copy.t>. The failures are
+caused by bugs in the CRT in VC++ 2013 which are fixed in VC++2015 and
+later, as explained by Microsoft here:
L<https://connect.microsoft.com/VisualStudio/feedback/details/811534/utime-sometimes-fails-to-set-the-correct-file-times-in-visual-c-2013>. In the meantime,
if you need fixed C<stat> and C<utime> functions then have a look at the
CPAN distribution Win32::UTCFileTime.
ones and makes tests fail. Remove them from your path while testing to
avoid these errors.
-Please report any other failures as described under L<BUGS AND CAVEATS>.
+Please report any other failures as described under L</BUGS AND CAVEATS>.
=head2 Installation of Perl on Windows
backtick commands via PERL5SHELL. See L<perlrun>.
Perl does not depend on the registry, but it can look up certain default
-values if you choose to put them there. Perl attempts to read entries from
-C<HKEY_CURRENT_USER\Software\Perl> and C<HKEY_LOCAL_MACHINE\Software\Perl>.
-Entries in the former override entries in the latter. One or more of the
-following entries (of type REG_SZ or REG_EXPAND_SZ) may be set:
-
- lib-$] version-specific standard library path to add to @INC
- lib standard library path to add to @INC
- sitelib-$] version-specific site library path to add to @INC
- sitelib site library path to add to @INC
- vendorlib-$] version-specific vendor library path to add to @INC
- vendorlib vendor library path to add to @INC
- PERL* fallback for all %ENV lookups that begin with "PERL"
+values if you choose to put them there unless disabled at build time with
+USE_NO_REGISTRY. On Perl process start Perl checks if
+C<HKEY_CURRENT_USER\Software\Perl> and C<HKEY_LOCAL_MACHINE\Software\Perl>
+exist. If the keys exists, they will be checked for remainder of the Perl
+process's run life for certain entries. Entries in
+C<HKEY_CURRENT_USER\Software\Perl> override entries in
+C<HKEY_LOCAL_MACHINE\Software\Perl>. One or more of the following entries
+(of type REG_SZ or REG_EXPAND_SZ) may be set in the keys:
+
+ lib-$] version-specific standard library path to add to @INC
+ lib standard library path to add to @INC
+ sitelib-$] version-specific site library path to add to @INC
+ sitelib site library path to add to @INC
+ vendorlib-$] version-specific vendor library path to add to @INC
+ vendorlib vendor library path to add to @INC
+ PERL* fallback for all %ENV lookups that begin with "PERL"
Note the C<$]> in the above is not literal. Substitute whatever version
of perl you want to honor that entry, e.g. C<5.6.0>. Paths must be
4) you can extend the method to add any customizations (or even
entirely different kinds of wildcard expansion).
- C:\> copy con c:\perl\lib\Wild.pm
- # Wild.pm - emulate shell @ARGV expansion on shells that don't
- use File::DosGlob;
- @ARGV = map {
- my @g = File::DosGlob::glob($_) if /[*?]/;
- @g ? @g : $_;
- } @ARGV;
- 1;
- ^Z
- C:\> set PERL5OPT=-MWild
- C:\> perl -le "for (@ARGV) { print }" */*/perl*.c
- p4view/perl/perl.c
- p4view/perl/perlio.c
- p4view/perl/perly.c
- perl5.005/win32/perlglob.c
- perl5.005/win32/perllib.c
- perl5.005/win32/perlglob.c
- perl5.005/win32/perllib.c
- perl5.005/win32/perlglob.c
- perl5.005/win32/perllib.c
+ C:\> copy con c:\perl\lib\Wild.pm
+ # Wild.pm - emulate shell @ARGV expansion on shells that don't
+ use File::DosGlob;
+ @ARGV = map {
+ my @g = File::DosGlob::glob($_) if /[*?]/;
+ @g ? @g : $_;
+ } @ARGV;
+ 1;
+ ^Z
+ C:\> set PERL5OPT=-MWild
+ C:\> perl -le "for (@ARGV) { print }" */*/perl*.c
+ p4view/perl/perl.c
+ p4view/perl/perlio.c
+ p4view/perl/perly.c
+ perl5.005/win32/perlglob.c
+ perl5.005/win32/perllib.c
+ perl5.005/win32/perlglob.c
+ perl5.005/win32/perllib.c
+ perl5.005/win32/perlglob.c
+ perl5.005/win32/perllib.c
Note there are two distinct steps there: 1) You'll have to create
Wild.pm and put it in your perl lib directory. 2) You'll need to
Support for 64-bit Windows added in 5.8 (ActiveState Corp).
-Last updated: 07 October 2014
+Last updated: 16 June 2017
=cut