1If you read this file _as_is_, just ignore the funny characters you 2see. It is written in the POD format (see pod/perlpod.pod) which is 3specially designed to be readable as is. 4 5=head1 NAME 6 7perlwin32 - Perl under Windows 8 9=head1 SYNOPSIS 10 11These are instructions for building Perl under Windows 9x/NT/2000/XP 12on the Intel x86 and Itanium architectures. 13 14=head1 DESCRIPTION 15 16Before you start, you should glance through the README file 17found in the top-level directory to which the Perl distribution 18was extracted. Make sure you read and understand the terms under 19which this software is being distributed. 20 21Also make sure you read L<BUGS AND CAVEATS> below for the 22known limitations of this port. 23 24The INSTALL file in the perl top-level has much information that is 25only relevant to people building Perl on Unix-like systems. In 26particular, you can safely ignore any information that talks about 27"Configure". 28 29You may also want to look at two other options for building 30a perl that will work on Windows NT: the README.cygwin and 31README.os2 files, each of which give a different set of rules to 32build a Perl that will work on Win32 platforms. Those two methods 33will probably enable you to build a more Unix-compatible perl, but 34you will also need to download and use various other build-time and 35run-time support software described in those files. 36 37This set of instructions is meant to describe a so-called "native" 38port of Perl to Win32 platforms. This includes both 32-bit and 3964-bit Windows operating systems. The resulting Perl requires no 40additional software to run (other than what came with your operating 41system). Currently, this port is capable of using one of the 42following compilers on the Intel x86 architecture: 43 44 Borland C++ version 5.02 or later 45 Microsoft Visual C++ version 2.0 or later 46 MinGW with gcc gcc version 2.95.2 or later 47 Gcc by mingw.org gcc version 2.95.2 or later 48 Gcc by mingw-w64.sf.net gcc version 4.4.3 or later 49 50Note that the last two of these are actually competing projects both 51delivering complete gcc toolchain for MS Windows: 52- http://mingw.org - delivers gcc toolchain targeting 32-bit Windows 53 platform. 54 Use version 3.2.x or later for the best results with this compiler. 55- http://mingw-w64.sf.net - delivers gcc toolchain targeting both 64-bit 56 Windows and 32-bit Windows platforms (despite the project name "mingw-w64" 57 they are not only 64-bit oriented). They deliver the native gcc compilers 58 + cross-compilers that are also supported by perl's makefile. 59 60The Borland C++ and Microsoft Visual C++ compilers are also now being given 61away free. The Borland compiler is available as "Borland C++ Compiler Free 62Command Line Tools" and is the same compiler that ships with the full 63"Borland C++ Builder" product. The Microsoft compiler is available as 64"Visual C++ Toolkit 2003" or "Visual C++ 2005/2008 Express Edition" (and also 65as part of the ".NET Framework SDK") and is the same compiler that ships with 66"Visual C++ .NET 2003 Professional" or "Visual C++ 2005/2008 Professional" 67respectively. 68 69This port can also be built on IA64/AMD64 using: 70 71 Microsoft Platform SDK Nov 2001 (64-bit compiler and tools) 72 MinGW64 compiler (gcc version 4.4.3 or later) 73 74The MS Platform SDK can be downloaded from http://www.microsoft.com/. 75The MinGW64 compiler is available at http://sourceforge.net/projects/mingw-w64. 76The latter is actually a cross-compiler targeting Win64. There's also a trimmed 77down compiler (no java, or gfortran) suitable for building perl available at: 78http://strawberryperl.com/package/kmx/64_gcctoolchain/mingw64-w64-20100123-kmx-v2.zip 79 80NOTE: If you're using a 32-bit compiler to build perl on a 64-bit Windows 81operating system, then you should set the WIN64 environment variable to "undef". 82Also, the trimmed down compiler only passes tests when USE_ITHREADS *= define 83(as opposed to undef) and when the CFG *= Debug line is commented out. 84 85This port fully supports MakeMaker (the set of modules that 86is used to build extensions to perl). Therefore, you should be 87able to build and install most extensions found in the CPAN sites. 88See L<Usage Hints for Perl on Win32> below for general hints about this. 89 90=head2 Setting Up Perl on Win32 91 92=over 4 93 94=item Make 95 96You need a "make" program to build the sources. If you are using 97Visual C++ or the Platform SDK tools under Windows NT/2000/XP, nmake 98will work. All other builds need dmake. 99 100dmake is a freely available make that has very nice macro features 101and parallelability. 102 103A port of dmake for Windows is available from: 104 105 http://search.cpan.org/dist/dmake/ 106 107Fetch and install dmake somewhere on your path. 108 109There exists a minor coexistence problem with dmake and Borland C++ 110compilers. Namely, if a distribution has C files named with mixed 111case letters, they will be compiled into appropriate .obj-files named 112with all lowercase letters, and every time dmake is invoked 113to bring files up to date, it will try to recompile such files again. 114For example, Tk distribution has a lot of such files, resulting in 115needless recompiles every time dmake is invoked. To avoid this, you 116may use the script "sync_ext.pl" after a successful build. It is 117available in the win32 subdirectory of the Perl source distribution. 118 119=item Command Shell 120 121Use the default "cmd" shell that comes with NT. Some versions of the 122popular 4DOS/NT shell have incompatibilities that may cause you trouble. 123If the build fails under that shell, try building again with the cmd 124shell. 125 126The nmake Makefile also has known incompatibilities with the 127"command.com" shell that comes with Windows 9x. You will need to 128use dmake and makefile.mk to build under Windows 9x. 129 130The surest way to build it is on Windows NT/2000/XP, using the cmd shell. 131 132Make sure the path to the build directory does not contain spaces. The 133build usually works in this circumstance, but some tests will fail. 134 135=item Borland C++ 136 137If you are using the Borland compiler, you will need dmake. 138(The make that Borland supplies is seriously crippled and will not 139work for MakeMaker builds.) 140 141See L</"Make"> above. 142 143=item Microsoft Visual C++ 144 145The nmake that comes with Visual C++ will suffice for building. 146You will need to run the VCVARS32.BAT file, usually found somewhere 147like C:\MSDEV4.2\BIN or C:\Program Files\Microsoft Visual Studio\VC98\Bin. 148This will set your build environment. 149 150You can also use dmake to build using Visual C++; provided, however, 151you set OSRELEASE to "microsft" (or whatever the directory name 152under which the Visual C dmake configuration lives) in your environment 153and edit win32/config.vc to change "make=nmake" into "make=dmake". The 154latter step is only essential if you want to use dmake as your default 155make for building extensions using MakeMaker. 156 157=item Microsoft Visual C++ 2008 Express Edition 158 159This free version of Visual C++ 2008 Professional contains the same compiler 160and linker that ship with the full version, and also contains everything 161necessary to build Perl, rather than requiring a separate download of the 162Platform SDK like previous versions did. 163 164This package can be downloaded by searching for "Visual Studio 2008 Express 165Edition" in the Download Center at 166http://www.microsoft.com/downloads/search.aspx?displaylang=en. (Providing exact 167links to these packages has proven a pointless task because the links keep on 168changing so often.) 169 170Install Visual C++ 2008, then setup your environment using 171 172 C:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\vsvars32.bat 173 174(assuming the default installation location was chosen). 175 176Perl should now build using the win32/Makefile. You will need to edit that 177file to set 178 179 CCTYPE = MSVC90FREE 180 181first. 182 183=item Microsoft Visual C++ 2005 Express Edition 184 185This free version of Visual C++ 2005 Professional contains the same compiler 186and linker that ship with the full version, but doesn't contain everything 187necessary to build Perl. 188 189You will also need to download the "Platform SDK" (the "Core SDK" and "MDAC 190SDK" components are required) for more header files and libraries. 191 192These packages can both be downloaded by searching in the Download Center at 193http://www.microsoft.com/downloads/search.aspx?displaylang=en. (Providing exact 194links to these packages has proven a pointless task because the links keep on 195changing so often.) 196 197Try to obtain the latest version of the Platform SDK. Sometimes these packages 198contain a particular Windows OS version in their name, but actually work on 199other OS versions too. For example, the "Windows Server 2003 R2 Platform SDK" 200also runs on Windows XP SP2 and Windows 2000. 201 202According to the download pages these packages are only supported on Windows 2032000/XP/2003, so trying to use these tools on Windows 95/98/ME and even Windows 204NT probably won't work. 205 206Install Visual C++ 2005 first, then the Platform SDK. Setup your environment 207as follows (assuming default installation locations were chosen): 208 209 SET PlatformSDKDir=C:\Program Files\Microsoft Platform SDK 210 211 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 212 213 SET INCLUDE=C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE;%PlatformSDKDir%\include 214 215 SET LIB=C:\Program Files\Microsoft Visual Studio 8\VC\LIB;C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\lib;%PlatformSDKDir%\lib 216 217 SET LIBPATH=C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 218 219(The PlatformSDKDir might need to be set differently depending on which version 220you are using. Earlier versions installed into "C:\Program Files\Microsoft SDK", 221while the latest versions install into version-specific locations such as 222"C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2".) 223 224Perl should now build using the win32/Makefile. You will need to edit that 225file to set 226 227 CCTYPE = MSVC80FREE 228 229and to set CCHOME, CCINCDIR and CCLIBDIR as per the environment setup above. 230 231=item Microsoft Visual C++ Toolkit 2003 232 233This free toolkit contains the same compiler and linker that ship with 234Visual C++ .NET 2003 Professional, but doesn't contain everything 235necessary to build Perl. 236 237You will also need to download the "Platform SDK" (the "Core SDK" and "MDAC 238SDK" components are required) for header files, libraries and rc.exe, and 239".NET Framework SDK" for more libraries and nmake.exe. Note that the latter 240(which also includes the free compiler and linker) requires the ".NET 241Framework Redistributable" to be installed first. This can be downloaded and 242installed separately, but is included in the "Visual C++ Toolkit 2003" anyway. 243 244These packages can all be downloaded by searching in the Download Center at 245http://www.microsoft.com/downloads/search.aspx?displaylang=en. (Providing exact 246links to these packages has proven a pointless task because the links keep on 247changing so often.) 248 249Try to obtain the latest version of the Platform SDK. Sometimes these packages 250contain a particular Windows OS version in their name, but actually work on 251other OS versions too. For example, the "Windows Server 2003 R2 Platform SDK" 252also runs on Windows XP SP2 and Windows 2000. 253 254According to the download pages these packages are only supported on Windows 2552000/XP/2003, so trying to use these tools on Windows 95/98/ME and even Windows 256NT probably won't work. 257 258Install the Toolkit first, then the Platform SDK, then the .NET Framework SDK. 259Setup your environment as follows (assuming default installation locations 260were chosen): 261 262 SET PlatformSDKDir=C:\Program Files\Microsoft Platform SDK 263 264 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 265 266 SET INCLUDE=C:\Program Files\Microsoft Visual C++ Toolkit 2003\include;%PlatformSDKDir%\include;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include 267 268 SET LIB=C:\Program Files\Microsoft Visual C++ Toolkit 2003\lib;%PlatformSDKDir%\lib;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\lib 269 270(The PlatformSDKDir might need to be set differently depending on which version 271you are using. Earlier versions installed into "C:\Program Files\Microsoft SDK", 272while the latest versions install into version-specific locations such as 273"C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2".) 274 275Several required files will still be missing: 276 277=over 4 278 279=item * 280 281cvtres.exe is required by link.exe when using a .res file. It is actually 282installed by the .NET Framework SDK, but into a location such as the 283following: 284 285 C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322 286 287Copy it from there to %PlatformSDKDir%\Bin 288 289=item * 290 291lib.exe is normally used to build libraries, but link.exe with the /lib 292option also works, so change win32/config.vc to use it instead: 293 294Change the line reading: 295 296 ar='lib' 297 298to: 299 300 ar='link /lib' 301 302It may also be useful to create a batch file called lib.bat in 303C:\Program Files\Microsoft Visual C++ Toolkit 2003\bin containing: 304 305 @echo off 306 link /lib %* 307 308for the benefit of any naughty C extension modules that you might want to build 309later which explicitly reference "lib" rather than taking their value from 310$Config{ar}. 311 312=item * 313 314setargv.obj is required to build perlglob.exe (and perl.exe if the USE_SETARGV 315option is enabled). The Platform SDK supplies this object file in source form 316in %PlatformSDKDir%\src\crt. Copy setargv.c, cruntime.h and 317internal.h from there to some temporary location and build setargv.obj using 318 319 cl.exe /c /I. /D_CRTBLD setargv.c 320 321Then copy setargv.obj to %PlatformSDKDir%\lib 322 323Alternatively, if you don't need perlglob.exe and don't need to enable the 324USE_SETARGV option then you can safely just remove all mention of $(GLOBEXE) 325from win32/Makefile and setargv.obj won't be required anyway. 326 327=back 328 329Perl should now build using the win32/Makefile. You will need to edit that 330file to set 331 332 CCTYPE = MSVC70FREE 333 334and to set CCHOME, CCINCDIR and CCLIBDIR as per the environment setup above. 335 336=item Microsoft Platform SDK 64-bit Compiler 337 338The nmake that comes with the Platform SDK will suffice for building 339Perl. Make sure you are building within one of the "Build Environment" 340shells available after you install the Platform SDK from the Start Menu. 341 342=item MinGW release 3 with gcc 343 344The latest release of MinGW at the time of writing is 3.1.0, which contains 345gcc-3.2.3. It can be downloaded here: 346 347 http://www.mingw.org/ 348 349Perl also compiles with earlier releases of gcc (2.95.2 and up). See below 350for notes about using earlier versions of MinGW/gcc. 351 352And perl also compiles with gcc-4.3.0 and up, and perhaps even some of the 353earlier 4.x.x versions. 354 355You also need dmake. See L</"Make"> above on how to get it. 356 357=item MinGW release 1 with gcc 358 359The MinGW-1.1 bundle contains gcc-2.95.3. 360 361Make sure you install the binaries that work with MSVCRT.DLL as indicated 362in the README for the GCC bundle. You may need to set up a few environment 363variables (usually ran from a batch file). 364 365There are a couple of problems with the version of gcc-2.95.2-msvcrt.exe 366released 7 November 1999: 367 368=over 369 370=item * 371 372It left out a fix for certain command line quotes. To fix this, be sure 373to download and install the file fixes/quote-fix-msvcrt.exe from the above 374ftp location. 375 376=item * 377 378The definition of the fpos_t type in stdio.h may be wrong. If your 379stdio.h has this problem, you will see an exception when running the 380test t/lib/io_xs.t. To fix this, change the typedef for fpos_t from 381"long" to "long long" in the file i386-mingw32msvc/include/stdio.h, 382and rebuild. 383 384=back 385 386A potentially simpler to install (but probably soon-to-be-outdated) bundle 387of the above package with the mentioned fixes already applied is available 388here: 389 390 http://downloads.ActiveState.com/pub/staff/gsar/gcc-2.95.2-msvcrt.zip 391 ftp://ftp.ActiveState.com/pub/staff/gsar/gcc-2.95.2-msvcrt.zip 392 393=back 394 395=head2 Building 396 397=over 4 398 399=item * 400 401Make sure you are in the "win32" subdirectory under the perl toplevel. 402This directory contains a "Makefile" that will work with 403versions of nmake that come with Visual C++ or the Platform SDK, and 404a dmake "makefile.mk" that will work for all supported compilers. The 405defaults in the dmake makefile are setup to build using MinGW/gcc. 406 407=item * 408 409Edit the makefile.mk (or Makefile, if you're using nmake) and change 410the values of INST_DRV and INST_TOP. You can also enable various 411build flags. These are explained in the makefiles. 412 413Note that it is generally not a good idea to try to build a perl with 414INST_DRV and INST_TOP set to a path that already exists from a previous 415build. In particular, this may cause problems with the 416lib/ExtUtils/t/Embed.t test, which attempts to build a test program and 417may end up building against the installed perl's lib/CORE directory rather 418than the one being tested. 419 420You will have to make sure that CCTYPE is set correctly and that 421CCHOME points to wherever you installed your compiler. If building with 422gcc-4.x.x, you'll also need to uncomment the assignment to GCC_4XX and 423uncomment the assignment to the appropriate GCCHELPERDLL in the makefile.mk. 424 425If building with the cross-compiler provided by 426mingw-w64.sourceforge.net you'll need to uncomment the line that sets 427GCCCROSS in the makefile.mk. Do this only if it's the cross-compiler - ie 428only if the bin folder doesn't contain a gcc.exe. (The cross-compiler 429does not provide a gcc.exe, g++.exe, ar.exe, etc. Instead, all of these 430executables are prefixed with 'x86_64-w64-mingw32-'.) 431 432The default value for CCHOME in the makefiles for Visual C++ 433may not be correct for some versions. Make sure the default exists 434and is valid. 435 436You may also need to comment out the C<DELAYLOAD = ...> line in the 437Makefile if you're using VC++ 6.0 without the latest service pack and 438the linker reports an internal error. 439 440If you are using VC++ 4.2 or earlier then you'll have to change the /EHsc 441option in the CXX_FLAG macro to the equivalent /GX option. 442 443If you have either the source or a library that contains des_fcrypt(), 444enable the appropriate option in the makefile. A ready-to-use version 445of fcrypt.c, based on the version originally written by Eric Young at 446ftp://ftp.funet.fi/pub/crypt/mirrors/dsi/libdes/, is bundled with the 447distribution and CRYPT_SRC is set to use it. 448Alternatively, if you have built a library that contains des_fcrypt(), 449you can set CRYPT_LIB to point to the library name. 450Perl will also build without des_fcrypt(), but the crypt() builtin will 451fail at run time. 452 453If you want build some core extensions statically into perl's dll, specify 454them in the STATIC_EXT macro. 455 456Be sure to read the instructions near the top of the makefiles carefully. 457 458=item * 459 460Type "dmake" (or "nmake" if you are using that make). 461 462This should build everything. Specifically, it will create perl.exe, 463perl512.dll at the perl toplevel, and various other extension dll's 464under the lib\auto directory. If the build fails for any reason, make 465sure you have done the previous steps correctly. 466 467=back 468 469=head2 Testing Perl on Win32 470 471Type "dmake test" (or "nmake test"). This will run most of the tests from 472the testsuite (many tests will be skipped). 473 474There should be no test failures when running under Windows NT/2000/XP. 475Many tests I<will> fail under Windows 9x due to the inferior command shell. 476 477Some test failures may occur if you use a command shell other than the 478native "cmd.exe", or if you are building from a path that contains 479spaces. So don't do that. 480 481If you are running the tests from a emacs shell window, you may see 482failures in op/stat.t. Run "dmake test-notty" in that case. 483 484If you're using the Borland compiler, you may see a failure in op/taint.t 485arising from the inability to find the Borland Runtime DLLs on the system 486default path. You will need to copy the DLLs reported by the messages 487from where Borland chose to install it, into the Windows system directory 488(usually somewhere like C:\WINNT\SYSTEM32) and rerun the test. 489 490If you're using Borland compiler versions 5.2 and below, you may run into 491problems finding the correct header files when building extensions. For 492example, building the "Tk" extension may fail because both perl and Tk 493contain a header file called "patchlevel.h". The latest Borland compiler 494(v5.5) is free of this misbehaviour, and it even supports an 495option -VI- for backward (bugward) compatibility for using the old Borland 496search algorithm to locate header files. 497 498If you run the tests on a FAT partition, you may see some failures for 499C<link()> related tests (I<op/write.t>, I<op/stat.t> ...). Testing on 500NTFS avoids these errors. 501 502Furthermore, you should make sure that during C<make test> you do not 503have any GNU tool packages in your path: some toolkits like Unixutils 504include some tools (C<type> for instance) which override the Windows 505ones and makes tests fail. Remove them from your path while testing to 506avoid these errors. 507 508Please report any other failures as described under L<BUGS AND CAVEATS>. 509 510=head2 Installation of Perl on Win32 511 512Type "dmake install" (or "nmake install"). This will put the newly 513built perl and the libraries under whatever C<INST_TOP> points to in the 514Makefile. It will also install the pod documentation under 515C<$INST_TOP\$INST_VER\lib\pod> and HTML versions of the same under 516C<$INST_TOP\$INST_VER\lib\pod\html>. 517 518To use the Perl you just installed you will need to add a new entry to 519your PATH environment variable: C<$INST_TOP\bin>, e.g. 520 521 set PATH=c:\perl\bin;%PATH% 522 523If you opted to uncomment C<INST_VER> and C<INST_ARCH> in the makefile 524then the installation structure is a little more complicated and you will 525need to add two new PATH components instead: C<$INST_TOP\$INST_VER\bin> and 526C<$INST_TOP\$INST_VER\bin\$ARCHNAME>, e.g. 527 528 set PATH=c:\perl\5.6.0\bin;c:\perl\5.6.0\bin\MSWin32-x86;%PATH% 529 530=head2 Usage Hints for Perl on Win32 531 532=over 4 533 534=item Environment Variables 535 536The installation paths that you set during the build get compiled 537into perl, so you don't have to do anything additional to start 538using that perl (except add its location to your PATH variable). 539 540If you put extensions in unusual places, you can set PERL5LIB 541to a list of paths separated by semicolons where you want perl 542to look for libraries. Look for descriptions of other environment 543variables you can set in L<perlrun>. 544 545You can also control the shell that perl uses to run system() and 546backtick commands via PERL5SHELL. See L<perlrun>. 547 548Perl does not depend on the registry, but it can look up certain default 549values if you choose to put them there. Perl attempts to read entries from 550C<HKEY_CURRENT_USER\Software\Perl> and C<HKEY_LOCAL_MACHINE\Software\Perl>. 551Entries in the former override entries in the latter. One or more of the 552following entries (of type REG_SZ or REG_EXPAND_SZ) may be set: 553 554 lib-$] version-specific standard library path to add to @INC 555 lib standard library path to add to @INC 556 sitelib-$] version-specific site library path to add to @INC 557 sitelib site library path to add to @INC 558 vendorlib-$] version-specific vendor library path to add to @INC 559 vendorlib vendor library path to add to @INC 560 PERL* fallback for all %ENV lookups that begin with "PERL" 561 562Note the C<$]> in the above is not literal. Substitute whatever version 563of perl you want to honor that entry, e.g. C<5.6.0>. Paths must be 564separated with semicolons, as usual on win32. 565 566=item File Globbing 567 568By default, perl handles file globbing using the File::Glob extension, 569which provides portable globbing. 570 571If you want perl to use globbing that emulates the quirks of DOS 572filename conventions, you might want to consider using File::DosGlob 573to override the internal glob() implementation. See L<File::DosGlob> for 574details. 575 576=item Using perl from the command line 577 578If you are accustomed to using perl from various command-line 579shells found in UNIX environments, you will be less than pleased 580with what Windows offers by way of a command shell. 581 582The crucial thing to understand about the Windows environment is that 583the command line you type in is processed twice before Perl sees it. 584First, your command shell (usually CMD.EXE on Windows NT, and 585COMMAND.COM on Windows 9x) preprocesses the command line, to handle 586redirection, environment variable expansion, and location of the 587executable to run. Then, the perl executable splits the remaining 588command line into individual arguments, using the C runtime library 589upon which Perl was built. 590 591It is particularly important to note that neither the shell nor the C 592runtime do any wildcard expansions of command-line arguments (so 593wildcards need not be quoted). Also, the quoting behaviours of the 594shell and the C runtime are rudimentary at best (and may, if you are 595using a non-standard shell, be inconsistent). The only (useful) quote 596character is the double quote ("). It can be used to protect spaces 597and other special characters in arguments. 598 599The Windows NT documentation has almost no description of how the 600quoting rules are implemented, but here are some general observations 601based on experiments: The C runtime breaks arguments at spaces and 602passes them to programs in argc/argv. Double quotes can be used to 603prevent arguments with spaces in them from being split up. You can 604put a double quote in an argument by escaping it with a backslash and 605enclosing the whole argument within double quotes. The backslash and 606the pair of double quotes surrounding the argument will be stripped by 607the C runtime. 608 609The file redirection characters "E<lt>", "E<gt>", and "|" can be quoted by 610double quotes (although there are suggestions that this may not always 611be true). Single quotes are not treated as quotes by the shell or 612the C runtime, they don't get stripped by the shell (just to make 613this type of quoting completely useless). The caret "^" has also 614been observed to behave as a quoting character, but this appears 615to be a shell feature, and the caret is not stripped from the command 616line, so Perl still sees it (and the C runtime phase does not treat 617the caret as a quote character). 618 619Here are some examples of usage of the "cmd" shell: 620 621This prints two doublequotes: 622 623 perl -e "print '\"\"' " 624 625This does the same: 626 627 perl -e "print \"\\\"\\\"\" " 628 629This prints "bar" and writes "foo" to the file "blurch": 630 631 perl -e "print 'foo'; print STDERR 'bar'" > blurch 632 633This prints "foo" ("bar" disappears into nowhereland): 634 635 perl -e "print 'foo'; print STDERR 'bar'" 2> nul 636 637This prints "bar" and writes "foo" into the file "blurch": 638 639 perl -e "print 'foo'; print STDERR 'bar'" 1> blurch 640 641This pipes "foo" to the "less" pager and prints "bar" on the console: 642 643 perl -e "print 'foo'; print STDERR 'bar'" | less 644 645This pipes "foo\nbar\n" to the less pager: 646 647 perl -le "print 'foo'; print STDERR 'bar'" 2>&1 | less 648 649This pipes "foo" to the pager and writes "bar" in the file "blurch": 650 651 perl -e "print 'foo'; print STDERR 'bar'" 2> blurch | less 652 653 654Discovering the usefulness of the "command.com" shell on Windows 9x 655is left as an exercise to the reader :) 656 657One particularly pernicious problem with the 4NT command shell for 658Windows NT is that it (nearly) always treats a % character as indicating 659that environment variable expansion is needed. Under this shell, it is 660therefore important to always double any % characters which you want 661Perl to see (for example, for hash variables), even when they are 662quoted. 663 664=item Building Extensions 665 666The Comprehensive Perl Archive Network (CPAN) offers a wealth 667of extensions, some of which require a C compiler to build. 668Look in http://www.cpan.org/ for more information on CPAN. 669 670Note that not all of the extensions available from CPAN may work 671in the Win32 environment; you should check the information at 672http://testers.cpan.org/ before investing too much effort into 673porting modules that don't readily build. 674 675Most extensions (whether they require a C compiler or not) can 676be built, tested and installed with the standard mantra: 677 678 perl Makefile.PL 679 $MAKE 680 $MAKE test 681 $MAKE install 682 683where $MAKE is whatever 'make' program you have configured perl to 684use. Use "perl -V:make" to find out what this is. Some extensions 685may not provide a testsuite (so "$MAKE test" may not do anything or 686fail), but most serious ones do. 687 688It is important that you use a supported 'make' program, and 689ensure Config.pm knows about it. If you don't have nmake, you can 690either get dmake from the location mentioned earlier or get an 691old version of nmake reportedly available from: 692 693 http://download.microsoft.com/download/vc15/Patch/1.52/W95/EN-US/nmake15.exe 694 695Another option is to use the make written in Perl, available from 696CPAN. 697 698 http://www.cpan.org/modules/by-module/Make/ 699 700You may also use dmake. See L</"Make"> above on how to get it. 701 702Note that MakeMaker actually emits makefiles with different syntax 703depending on what 'make' it thinks you are using. Therefore, it is 704important that one of the following values appears in Config.pm: 705 706 make='nmake' # MakeMaker emits nmake syntax 707 make='dmake' # MakeMaker emits dmake syntax 708 any other value # MakeMaker emits generic make syntax 709 (e.g GNU make, or Perl make) 710 711If the value doesn't match the 'make' program you want to use, 712edit Config.pm to fix it. 713 714If a module implements XSUBs, you will need one of the supported 715C compilers. You must make sure you have set up the environment for 716the compiler for command-line compilation. 717 718If a module does not build for some reason, look carefully for 719why it failed, and report problems to the module author. If 720it looks like the extension building support is at fault, report 721that with full details of how the build failed using the perlbug 722utility. 723 724=item Command-line Wildcard Expansion 725 726The default command shells on DOS descendant operating systems (such 727as they are) usually do not expand wildcard arguments supplied to 728programs. They consider it the application's job to handle that. 729This is commonly achieved by linking the application (in our case, 730perl) with startup code that the C runtime libraries usually provide. 731However, doing that results in incompatible perl versions (since the 732behavior of the argv expansion code differs depending on the 733compiler, and it is even buggy on some compilers). Besides, it may 734be a source of frustration if you use such a perl binary with an 735alternate shell that *does* expand wildcards. 736 737Instead, the following solution works rather well. The nice things 738about it are 1) you can start using it right away; 2) it is more 739powerful, because it will do the right thing with a pattern like 740*/*/*.c; 3) you can decide whether you do/don't want to use it; and 7414) you can extend the method to add any customizations (or even 742entirely different kinds of wildcard expansion). 743 744 C:\> copy con c:\perl\lib\Wild.pm 745 # Wild.pm - emulate shell @ARGV expansion on shells that don't 746 use File::DosGlob; 747 @ARGV = map { 748 my @g = File::DosGlob::glob($_) if /[*?]/; 749 @g ? @g : $_; 750 } @ARGV; 751 1; 752 ^Z 753 C:\> set PERL5OPT=-MWild 754 C:\> perl -le "for (@ARGV) { print }" */*/perl*.c 755 p4view/perl/perl.c 756 p4view/perl/perlio.c 757 p4view/perl/perly.c 758 perl5.005/win32/perlglob.c 759 perl5.005/win32/perllib.c 760 perl5.005/win32/perlglob.c 761 perl5.005/win32/perllib.c 762 perl5.005/win32/perlglob.c 763 perl5.005/win32/perllib.c 764 765Note there are two distinct steps there: 1) You'll have to create 766Wild.pm and put it in your perl lib directory. 2) You'll need to 767set the PERL5OPT environment variable. If you want argv expansion 768to be the default, just set PERL5OPT in your default startup 769environment. 770 771If you are using the Visual C compiler, you can get the C runtime's 772command line wildcard expansion built into perl binary. The resulting 773binary will always expand unquoted command lines, which may not be 774what you want if you use a shell that does that for you. The expansion 775done is also somewhat less powerful than the approach suggested above. 776 777=item Win32 Specific Extensions 778 779A number of extensions specific to the Win32 platform are available 780from CPAN. You may find that many of these extensions are meant to 781be used under the Activeware port of Perl, which used to be the only 782native port for the Win32 platform. Since the Activeware port does not 783have adequate support for Perl's extension building tools, these 784extensions typically do not support those tools either and, therefore, 785cannot be built using the generic steps shown in the previous section. 786 787To ensure smooth transitioning of existing code that uses the 788ActiveState port, there is a bundle of Win32 extensions that contains 789all of the ActiveState extensions and several other Win32 extensions from 790CPAN in source form, along with many added bugfixes, and with MakeMaker 791support. The latest version of this bundle is available at: 792 793 http://search.cpan.org/dist/libwin32/ 794 795See the README in that distribution for building and installation 796instructions. 797 798=item Notes on 64-bit Windows 799 800Windows .NET Server supports the LLP64 data model on the Intel Itanium 801architecture. 802 803The LLP64 data model is different from the LP64 data model that is the 804norm on 64-bit Unix platforms. In the former, C<int> and C<long> are 805both 32-bit data types, while pointers are 64 bits wide. In addition, 806there is a separate 64-bit wide integral type, C<__int64>. In contrast, 807the LP64 data model that is pervasive on Unix platforms provides C<int> 808as the 32-bit type, while both the C<long> type and pointers are of 80964-bit precision. Note that both models provide for 64-bits of 810addressability. 811 81264-bit Windows running on Itanium is capable of running 32-bit x86 813binaries transparently. This means that you could use a 32-bit build 814of Perl on a 64-bit system. Given this, why would one want to build 815a 64-bit build of Perl? Here are some reasons why you would bother: 816 817=over 818 819=item * 820 821A 64-bit native application will run much more efficiently on 822Itanium hardware. 823 824=item * 825 826There is no 2GB limit on process size. 827 828=item * 829 830Perl automatically provides large file support when built under 83164-bit Windows. 832 833=item * 834 835Embedding Perl inside a 64-bit application. 836 837=back 838 839=back 840 841=head2 Running Perl Scripts 842 843Perl scripts on UNIX use the "#!" (a.k.a "shebang") line to 844indicate to the OS that it should execute the file using perl. 845Win32 has no comparable means to indicate arbitrary files are 846executables. 847 848Instead, all available methods to execute plain text files on 849Win32 rely on the file "extension". There are three methods 850to use this to execute perl scripts: 851 852=over 8 853 854=item 1 855 856There is a facility called "file extension associations" that will 857work in Windows NT 4.0. This can be manipulated via the two 858commands "assoc" and "ftype" that come standard with Windows NT 8594.0. Type "ftype /?" for a complete example of how to set this 860up for perl scripts (Say what? You thought Windows NT wasn't 861perl-ready? :). 862 863=item 2 864 865Since file associations don't work everywhere, and there are 866reportedly bugs with file associations where it does work, the 867old method of wrapping the perl script to make it look like a 868regular batch file to the OS, may be used. The install process 869makes available the "pl2bat.bat" script which can be used to wrap 870perl scripts into batch files. For example: 871 872 pl2bat foo.pl 873 874will create the file "FOO.BAT". Note "pl2bat" strips any 875.pl suffix and adds a .bat suffix to the generated file. 876 877If you use the 4DOS/NT or similar command shell, note that 878"pl2bat" uses the "%*" variable in the generated batch file to 879refer to all the command line arguments, so you may need to make 880sure that construct works in batch files. As of this writing, 8814DOS/NT users will need a "ParameterChar = *" statement in their 8824NT.INI file or will need to execute "setdos /p*" in the 4DOS/NT 883startup file to enable this to work. 884 885=item 3 886 887Using "pl2bat" has a few problems: the file name gets changed, 888so scripts that rely on C<$0> to find what they must do may not 889run properly; running "pl2bat" replicates the contents of the 890original script, and so this process can be maintenance intensive 891if the originals get updated often. A different approach that 892avoids both problems is possible. 893 894A script called "runperl.bat" is available that can be copied 895to any filename (along with the .bat suffix). For example, 896if you call it "foo.bat", it will run the file "foo" when it is 897executed. Since you can run batch files on Win32 platforms simply 898by typing the name (without the extension), this effectively 899runs the file "foo", when you type either "foo" or "foo.bat". 900With this method, "foo.bat" can even be in a different location 901than the file "foo", as long as "foo" is available somewhere on 902the PATH. If your scripts are on a filesystem that allows symbolic 903links, you can even avoid copying "runperl.bat". 904 905Here's a diversion: copy "runperl.bat" to "runperl", and type 906"runperl". Explain the observed behavior, or lack thereof. :) 907Hint: .gnidnats llits er'uoy fi ,"lrepnur" eteled :tniH 908 909=back 910 911=head2 Miscellaneous Things 912 913A full set of HTML documentation is installed, so you should be 914able to use it if you have a web browser installed on your 915system. 916 917C<perldoc> is also a useful tool for browsing information contained 918in the documentation, especially in conjunction with a pager 919like C<less> (recent versions of which have Win32 support). You may 920have to set the PAGER environment variable to use a specific pager. 921"perldoc -f foo" will print information about the perl operator 922"foo". 923 924One common mistake when using this port with a GUI library like C<Tk> 925is assuming that Perl's normal behavior of opening a command-line 926window will go away. This isn't the case. If you want to start a copy 927of C<perl> without opening a command-line window, use the C<wperl> 928executable built during the installation process. Usage is exactly 929the same as normal C<perl> on Win32, except that options like C<-h> 930don't work (since they need a command-line window to print to). 931 932If you find bugs in perl, you can run C<perlbug> to create a 933bug report (you may have to send it manually if C<perlbug> cannot 934find a mailer on your system). 935 936=head1 BUGS AND CAVEATS 937 938Norton AntiVirus interferes with the build process, particularly if 939set to "AutoProtect, All Files, when Opened". Unlike large applications 940the perl build process opens and modifies a lot of files. Having the 941the AntiVirus scan each and every one slows build the process significantly. 942Worse, with PERLIO=stdio the build process fails with peculiar messages 943as the virus checker interacts badly with miniperl.exe writing configure 944files (it seems to either catch file part written and treat it as suspicious, 945or virus checker may have it "locked" in a way which inhibits miniperl 946updating it). The build does complete with 947 948 set PERLIO=perlio 949 950but that may be just luck. Other AntiVirus software may have similar issues. 951 952Some of the built-in functions do not act exactly as documented in 953L<perlfunc>, and a few are not implemented at all. To avoid 954surprises, particularly if you have had prior exposure to Perl 955in other operating environments or if you intend to write code 956that will be portable to other environments, see L<perlport> 957for a reasonably definitive list of these differences. 958 959Not all extensions available from CPAN may build or work properly 960in the Win32 environment. See L</"Building Extensions">. 961 962Most C<socket()> related calls are supported, but they may not 963behave as on Unix platforms. See L<perlport> for the full list. 964Perl requires Winsock2 to be installed on the system. If you're 965running Win95, you can download Winsock upgrade from here: 966 967http://www.microsoft.com/windows95/downloads/contents/WUAdminTools/S_WUNetworkingTools/W95Sockets2/Default.asp 968 969Later OS versions already include Winsock2 support. 970 971Signal handling may not behave as on Unix platforms (where it 972doesn't exactly "behave", either :). For instance, calling C<die()> 973or C<exit()> from signal handlers will cause an exception, since most 974implementations of C<signal()> on Win32 are severely crippled. 975Thus, signals may work only for simple things like setting a flag 976variable in the handler. Using signals under this port should 977currently be considered unsupported. 978 979Please send detailed descriptions of any problems and solutions that 980you may find to E<lt>F<perlbug@perl.org>E<gt>, along with the output 981produced by C<perl -V>. 982 983=head1 ACKNOWLEDGEMENTS 984 985The use of a camel with the topic of Perl is a trademark 986of O'Reilly and Associates, Inc. Used with permission. 987 988=head1 AUTHORS 989 990=over 4 991 992=item Gary Ng E<lt>71564.1743@CompuServe.COME<gt> 993 994=item Gurusamy Sarathy E<lt>gsar@activestate.comE<gt> 995 996=item Nick Ing-Simmons E<lt>nick@ing-simmons.netE<gt> 997 998=item Jan Dubois E<lt>jand@activestate.comE<gt> 999 1000=item Steve Hay E<lt>steve.hay@uk.radan.comE<gt> 1001 1002=back 1003 1004This document is maintained by Jan Dubois. 1005 1006=head1 SEE ALSO 1007 1008L<perl> 1009 1010=head1 HISTORY 1011 1012This port was originally contributed by Gary Ng around 5.003_24, 1013and borrowed from the Hip Communications port that was available 1014at the time. Various people have made numerous and sundry hacks 1015since then. 1016 1017Borland support was added in 5.004_01 (Gurusamy Sarathy). 1018 1019GCC/mingw32 support was added in 5.005 (Nick Ing-Simmons). 1020 1021Support for PERL_OBJECT was added in 5.005 (ActiveState Tool Corp). 1022 1023Support for fork() emulation was added in 5.6 (ActiveState Tool Corp). 1024 1025Win9x support was added in 5.6 (Benjamin Stuhl). 1026 1027Support for 64-bit Windows added in 5.8 (ActiveState Corp). 1028 1029Last updated: 29 August 2007 1030 1031=cut 1032