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