1 If you read this file _as_is_, just ignore the funny characters you
2 see. It is written in the POD format (see pod/perlpod.pod) which is
3 specially designed to be readable as is.
7 perlwin32 - Perl under WindowsNT [XXX and perhaps under Windows95]
11 These are instructions for building Perl under WindowsNT (versions
12 3.51 or 4.0), using Visual C++.
16 Before you start, you should glance through the README file found
17 found in the top-level directory where the Perl distribution
18 was extracted. Make sure you read and understand the terms under
19 which this software is being distributed.
21 Make sure you read the L<BUGS AND CAVEATS> section below for the
22 known limitations of this port.
24 The INSTALL file in the perl top-level has much information that is
25 only relevant to people building Perl on Unix-like systems. In
26 particular, you can safely ignore any information that talks about
29 You should probably also read the README.os2 file, which gives a
30 different set of rules to build a Perl that will work on Win32
31 platforms. That method will probably enable you to build a more
32 Unix-compatible perl, but you will also need to download and use
33 various other support software described in that file.
35 This set of instructions is meant to describe a so-called "native"
36 port of Perl to Win32 platforms. The resulting Perl requires no
37 additional software to run (other than what came with your operating
38 system). Currently, this port is only capable of using Microsoft's
39 Visual C++ compiler. The ultimate goal is to support the other major
40 compilers that can be used on the platforms.
48 Use the default "cmd" shell that comes with NT. In particular, do
49 *not* use the 4DOS/NT shell. The Makefile has commands that are not
50 compatible with that shell.
54 Run the VCVARS32.BAT file usually found somewhere like C:\MSDEV4.2\BIN.
55 This will set your build environment.
59 Depending on how you extracted the distribution, you have to make sure
60 all the files are writable by you. The easiest way to make sure of
65 from the perl toplevel directory. You don't I<have> to do this if you
66 used the right tools to extract the files in the standard distribution,
67 but it doesn't hurt to do so.
71 =head2 Building and Installation
77 The "win32" directory contains *.mak files for use with the NMAKE that
78 comes with Visual C++ ver. 4.0 and above. If you wish to build perl
79 using Visual C++ versions between 2.0 and 4.0, do the following three
80 additional steps (these three steps are not required if you are
81 using Visual C++ versions 4.0 and above):
87 Overwrite the *.mak files in the win32 subdirectory with the versions
88 in the win32\VC-2.0 directory. (The only difference in those makefiles
89 is in how the $(INCLUDE) variable is handled--VC 2.0 NMAKE does not
90 grok a path list in $(INCLUDE)).
94 Reset your INCLUDE environment variable to the MSVC include directory.
97 set INCLUDE=E:\MSVC20\INCLUDE
99 This must have only one directory (a list of directories will not work).
100 VCVARS32.BAT may put multiple locations in there, which is why this step
105 Apply the patch found in win32\VC-2.0\vc2.patch, like so:
108 patch -p2 -N < VC-2.0\vc2.patch
110 You may have to edit win32\win32.c manually if you don't have GNU patch.
116 Make sure you are in the "win32" subdirectory under the perl toplevel.
120 Type "nmake" while in the "win32" subdirectory. This should build
121 everything. Specifically, it will create perl.exe, perl.dll, and
122 perlglob.exe at the perl toplevel, and various other extension dll's
123 under the lib\auto directory. If the make fails for any reason, make
124 sure you have done the previous steps correctly.
128 Type "nmake install". This will put the newly built perl and the
129 libraries under C:\PERL. If you want to alter this location, to say,
130 D:\FOO\PERL, you will have to say:
132 nmake install INST_TOP=D:\FOO\PERL
134 instead. To use the Perl you just installed, make sure you set your
135 PATH environment variable to C:\PERL\BIN (or D:\FOO\PERL\BIN).
141 Type "nmake test". This will run most of the tests from the
142 testsuite (many tests will be skipped, and some tests will fail).
143 Most failures are due to UNIXisms in the standard perl testsuite.
145 To get a more detailed breakdown of the tests that failed, say:
150 This should produce a summary very similar to the following:
152 Failed Test Status Wstat Total Fail Failed List of failed
153 ------------------------------------------------------------------------------
154 io/fs.t 26 16 61.54% 1-5, 7-11, 16-18, 23-25
155 io/tell.t 13 1 7.69% 10
156 lib/anydbm.t 12 1 8.33% 2
157 lib/findbin.t 1 1 100.00% 1
158 lib/sdbm.t 12 1 8.33% 2
159 op/mkdir.t 7 2 28.57% 3, 7
160 op/runlevel.t 8 1 12.50% 4
161 op/stat.t 56 3 5.36% 3-4, 20
162 op/taint.t 98 20 20.41% 1-6, 14, 16, 19-21, 24, 26, 35-3
163 pragma/locale.t 98 40 40.82% 1, 13-14, 21-27, 33, 39, 45-53,
164 Failed 10/149 test scripts, 93.29% okay. 86/3506 subtests failed, 97.55% okay.
166 Check if any additional tests other than the ones shown here
167 failed. The standard testsuite will ultimately be modified so
168 that the testsuite avoids running irrelevant tests on Win32.
170 =head1 BUGS AND CAVEATS
172 This is still very much an experimental port, and should be considered
173 alpha quality software. You can expect changes in virtually all of
174 these areas: build process, installation structure, supported
175 utilities/modules, and supported perl functionality. Specifically,
176 functionality that supports the Win32 environment may be ultimately
177 be supported as either core modules or extensions.
179 Many tests from the standard testsuite either fail or produce different
180 results under this port. Most of the problems fall under one of these
187 C<stat()> and C<lstat()> functions may not behave as documented. They
188 may return values that bear no resemblance to those reported on Unix
189 platforms, and some fields may be completely bogus.
193 The following functions are currently unavailable: C<fork()>, C<exec()>,
194 C<dump()>, C<kill()>, C<chown()>, C<link()>, C<symlink()>, C<chroot()>,
195 C<setpgrp()>, C<getpgrp()>, C<setpriority()>, C<getpriority()>,
196 C<syscall()>, C<fcntl()>, C<flock()>. This list is possibly incomplete.
200 Various C<socket()> related calls are supported, but they may not
201 behave as on Unix platforms.
205 The four-argument C<select()> call is only supported on sockets.
209 The behavior of C<system()> or the C<qx[]> operator (a.k.a. "backticks"),
210 when used to call interactive commands, is ill-defined.
214 C<$!> doesn't work reliably yet.
218 Building modules available on CPAN is mostly supported, but this
219 hasn't been tested much yet. Expect strange problems, and be
220 prepared to deal with the consequences.
224 C<utime()>, C<times()> and process-related functions may not
225 behave as described in the documentation, and some of the
226 returned values or effects may be bogus.
230 Signal handling may not behave as on Unix platforms.
234 File globbing may not behave as on Unix platforms.
238 Not all of the utilities that come with the Perl distribution
243 Please send detailed descriptions of any problems and solutions that
244 you may find to <F<perlbug@perl.com>>, along with the output produced
251 =item Gary Ng <F<71564.1743@CompuServe.COM>>
253 =item Gurusamy Sarathy <F<gsar@umich.edu>>
255 =item Nick Ing-Simmons <F<nick@ni-s.u-net.com>>
265 This port was originally contributed by Gary Ng around 5.003_24,
266 and borrowed from the Hip Communications port that was available
269 Nick Ing-Simmons and Gurusamy Sarathy have made numerous and
270 sundry hacks since then.
272 Last updated: 19 March 1997