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