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