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