This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Implement IV/UV/NV/long double pack/unpack with
[perl5.git] / README.win32
index dc90ada..9d27b39 100644 (file)
@@ -14,7 +14,7 @@ These are instructions for building Perl under Windows (9x, NT and
 =head1 DESCRIPTION
 
 Before you start, you should glance through the README file
-found in the top-level directory where the Perl distribution
+found in the top-level directory to which the Perl distribution
 was extracted.  Make sure you read and understand the terms under
 which this software is being distributed.
 
@@ -28,10 +28,10 @@ particular, you can safely ignore any information that talks about
 
 You may also want to look at two other options for building
 a perl that will work on Windows NT:  the README.cygwin and
-README.os2 files, which each give a different set of rules to build
-a Perl that will work on Win32 platforms.  Those two methods will
-probably enable you to build a more Unix-compatible perl, but you
-will also need to download and use various other build-time and
+README.os2 files, each of which give a different set of rules to
+build a Perl that will work on Win32 platforms.  Those two methods
+will probably enable you to build a more Unix-compatible perl, but
+you will also need to download and use various other build-time and
 run-time support software described in those files.
 
 This set of instructions is meant to describe a so-called "native"
@@ -51,9 +51,9 @@ not to work.)
 This port currently supports MakeMaker (the set of modules that
 is used to build extensions to perl).  Therefore, you should be
 able to build and install most extensions found in the CPAN sites.
-See L<Usage Hints> below for general hints about this.
+See L<Usage Hints for Perl on Win32> below for general hints about this.
 
-=head2 Setting Up
+=head2 Setting Up Perl on Win32
 
 =over 4
 
@@ -70,14 +70,24 @@ A port of dmake for Windows is available from:
 
     http://www.cpan.org/authors/id/GSAR/dmake-4.1pl1-win32.zip
 
-(This is a fixed version of original dmake sources obtained from
-http://www.wticorp.com/dmake/.  As of version 4.1PL1, the original
-sources did not build as shipped, and had various other problems.
+(This is a fixed version of the original dmake sources obtained from
+http://www.wticorp.com/.  As of version 4.1PL1, the original
+sources did not build as shipped and had various other problems.
 A patch is included in the above fixed version.)
 
 Fetch and install dmake somewhere on your path (follow the instructions
 in the README.NOW file).
 
+There exists a minor coexistence problem with dmake and Borland C++
+compilers.  Namely, if a distribution has C files named with mixed
+case letters, they will be compiled into appropriate .obj-files named
+with all lowercase letters, and every time dmake is invoked
+to bring files up to date, it will try to recompile such files again.
+For example, Tk distribution has a lot of such files, resulting in
+needless recompiles every time dmake is invoked.  To avoid this, you
+may use the script "sync_ext.pl" after a successful build.  It is
+available in the win32 subdirectory of the Perl source distribution.
+
 =item Command Shell
 
 Use the default "cmd" shell that comes with NT.  Some versions of the
@@ -97,20 +107,20 @@ build usually works in this circumstance, but some tests will fail.
 =item Borland C++
 
 If you are using the Borland compiler, you will need dmake.
-(The make that Borland supplies is seriously crippled, and will not
+(The make that Borland supplies is seriously crippled and will not
 work for MakeMaker builds.)
 
-See L/"Make"> above.
+See L</"Make"> above.
 
 =item Microsoft Visual C++
 
 The nmake that comes with Visual C++ will suffice for building.
-You will need to run the VCVARS32.BAT file usually found somewhere
+You will need to run the VCVARS32.BAT file, usually found somewhere
 like C:\MSDEV4.2\BIN.  This will set your build environment.
 
-You can also use dmake to build using Visual C++, provided:
+You can also use dmake to build using Visual C++; provided, however,
 you set OSRELEASE to "microsft" (or whatever the directory name
-under which the Visual C dmake configuration lives) in your environment,
+under which the Visual C dmake configuration lives) in your environment
 and edit win32/config.vc to change "make=nmake" into "make=dmake".  The
 latter step is only essential if you want to use dmake as your default
 make for building extensions using MakeMaker.
@@ -121,17 +131,41 @@ GCC-2.95.2 binaries can be downloaded from:
 
     ftp://ftp.xraylith.wisc.edu/pub/khan/gnu-win32/mingw32/
 
+You also need dmake.  See L</"Make"> above on how to get it.
+
 The GCC-2.95.2 bundle comes with Mingw32 libraries and headers.
 
 Make sure you install the binaries that work with MSVCRT.DLL as indicated
 in the README for the GCC bundle.  You may need to set up a few environment
-variables (usually run from a batch file).
+variables (usually ran from a batch file).
 
-The version of gcc-2.95.2-msvcrt.exe released 7 November 1999 left out
-a fix for certain command line quotes, so be sure to download and install
-fixes/quote-fix-msvcrt.exe too.
+There are a couple of problems with the version of gcc-2.95.2-msvcrt.exe
+released 7 November 1999:
 
-You also need dmake.  See L</"Make"> above on how to get it.
+=over
+
+=item *
+
+It left out a fix for certain command line quotes.  To fix this, be sure
+to download and install the file fixes/quote-fix-msvcrt.exe from the above
+ftp location.
+
+=item *
+
+The definition of the fpos_t type in stdio.h may be wrong.  If your
+stdio.h has this problem, you will see an exception when running the
+test t/lib/io_xs.t.  To fix this, change the typedef for fpos_t from
+"long" to "long long" in the file i386-mingw32msvc/include/stdio.h,
+and rebuild.
+
+=back
+
+A potentially simpler to install (but probably soon-to-be-outdated) bundle
+of the above package with the mentioned fixes already applied is available
+here:
+
+    http://downloads.ActiveState.com/pub/staff/gsar/gcc-2.95.2-msvcrt.zip
+    ftp://ftp.ActiveState.com/pub/staff/gsar/gcc-2.95.2-msvcrt.zip
 
 =back
 
@@ -149,12 +183,12 @@ makefile are setup to build using the GCC compiler.
 
 =item *
 
-Edit the makefile.mk (or Makefile, if using nmake) and change the values
-of INST_DRV and INST_TOP.   You can also enable various build
-flags.  These are explained in the makefiles.
+Edit the makefile.mk (or Makefile, if you're using nmake) and change 
+the values of INST_DRV and INST_TOP.   You can also enable various
+build flags.  These are explained in the makefiles.
 
-You will have to make sure CCTYPE is set correctly, and CCHOME points
-to wherever you installed your compiler.
+You will have to make sure that CCTYPE is set correctly and that 
+CCHOME points to wherever you installed your compiler.
 
 The default value for CCHOME in the makefiles for Visual C++
 may not be correct for some versions.  Make sure the default exists
@@ -165,8 +199,8 @@ enable the appropriate option in the makefile.  des_fcrypt() is not
 bundled with the distribution due to US Government restrictions
 on the export of cryptographic software.  Nevertheless, this routine
 is part of the "libdes" library (written by Eric Young) which is widely
-available worldwide, usually along with SSLeay (for example:
-"ftp://fractal.mta.ca/pub/crypto/SSLeay/DES/").  Set CRYPT_SRC to the
+available worldwide, usually along with SSLeay (for example
+"ftp://ftp.funet.fi/pub/crypt/mirrors/dsi/libdes/").  Set CRYPT_SRC to the
 name of the file that implements des_fcrypt().  Alternatively, if
 you have built a library that contains des_fcrypt(), you can set
 CRYPT_LIB to point to the library name.  The location above contains
@@ -176,6 +210,12 @@ self-contained file (fcrypt.c) that implements crypt(), so they may be
 easier to use.  A patch against the fcrypt.c found in libdes-3.06 is
 in des_fcrypt.patch.
 
+An easier alternative may be to get the pre-patched and ready-to-use
+fcrypt.c that can be found here:
+
+    http://downloads.ActiveState.com/pub/staff/gsar/fcrypt.c
+    ftp://ftp.ActiveState.com/pub/staff/gsar/fcrypt.c
+
 Perl will also build without des_fcrypt(), but the crypt() builtin will
 fail at run time.
 
@@ -192,7 +232,7 @@ sure you have done the previous steps correctly.
 
 =back
 
-=head2 Testing
+=head2 Testing Perl on Win32
 
 Type "dmake test" (or "nmake test").  This will run most of the tests from
 the testsuite (many tests will be skipped).
@@ -212,11 +252,19 @@ If you're using the Borland compiler, you may see a failure in op/taint.t
 arising from the inability to find the Borland Runtime DLLs on the system
 default path.  You will need to copy the DLLs reported by the messages
 from where Borland chose to install it, into the Windows system directory
-(usually somewhere like C:\WINNT\SYSTEM32), and rerun the test.
+(usually somewhere like C:\WINNT\SYSTEM32) and rerun the test.
+
+If you're using Borland compiler versions 5.2 and below, you may run into
+problems finding the correct header files when building extensions.  For
+example, building the "Tk" extension may fail because both perl and Tk
+contain a header file called "patchlevel.h".  The latest Borland compiler
+(v5.5) is free of this misbehaviour, and it even supports an
+option -VI- for backward (bugward) compatibility for using the old Borland
+search algorithm  to locate header files.
 
 Please report any other failures as described under L<BUGS AND CAVEATS>.
 
-=head2 Installation
+=head2 Installation of Perl on Win32
 
 Type "dmake install" (or "nmake install").  This will put the newly
 built perl and the libraries under whatever C<INST_TOP> points to in the
@@ -224,7 +272,7 @@ Makefile.  It will also install the pod documentation under
 C<$INST_TOP\$VERSION\lib\pod> and HTML versions of the same under
 C<$INST_TOP\$VERSION\lib\pod\html>.  To use the Perl you just installed,
 you will need to add two components to your PATH environment variable,
-C<$INST_TOP\$VERSION\bin>, and C<$INST_TOP\$VERSION\bin\$ARCHNAME>.
+C<$INST_TOP\$VERSION\bin> and C<$INST_TOP\$VERSION\bin\$ARCHNAME>.
 For example:
 
     set PATH c:\perl\5.6.0\bin;c:\perl\5.6.0\bin\MSWin32-x86;%PATH%
@@ -235,7 +283,7 @@ sufficient to add a single entry to the path, for instance:
 
     set PATH c:\perl\bin;%PATH%
 
-=head2 Usage Hints
+=head2 Usage Hints for Perl on Win32
 
 =over 4
 
@@ -301,24 +349,28 @@ runtime do any wildcard expansions of command-line arguments (so
 wildcards need not be quoted).  Also, the quoting behaviours of the
 shell and the C runtime are rudimentary at best (and may, if you are
 using a non-standard shell, be inconsistent).  The only (useful) quote
-character is the double quote (").  It can be used to protect spaces in
-arguments and other special characters.  The Windows NT documentation
-has almost no description of how the quoting rules are implemented, but
-here are some general observations based on experiments:  The C runtime
-breaks arguments at spaces and passes them to programs in argc/argv.
-Doublequotes can be used to prevent arguments with spaces in them from
-being split up.  You can put a double quote in an argument by escaping
-it with a backslash and enclosing the whole argument within double
-quotes.  The backslash and the pair of double quotes surrounding the
-argument will be stripped by the C runtime.
+character is the double quote (").  It can be used to protect spaces
+and other special characters in arguments.
+
+The Windows NT documentation has almost no description of how the
+quoting rules are implemented, but here are some general observations
+based on experiments: The C runtime breaks arguments at spaces and
+passes them to programs in argc/argv.  Double quotes can be used to
+prevent arguments with spaces in them from being split up.  You can
+put a double quote in an argument by escaping it with a backslash and
+enclosing the whole argument within double quotes.  The backslash and
+the pair of double quotes surrounding the argument will be stripped by
+the C runtime.
 
 The file redirection characters "<", ">", and "|" can be quoted by
 double quotes (although there are suggestions that this may not always
-be true).  Single quotes are not treated as quotes by the shell or the C
-runtime.  The caret "^" has also been observed to behave as a quoting
-character, but this appears to be a shell feature, and the caret is not
-stripped from the command line, so Perl still sees it (and the C runtime
-phase does not treat the caret as a quote character).
+be true).  Single quotes are not treated as quotes by the shell or
+the C runtime, they don't get stripped by the shell (just to make
+this type of quoting completely useless).  The caret "^" has also
+been observed to behave as a quoting character, but this appears
+to be a shell feature, and the caret is not stripped from the command
+line, so Perl still sees it (and the C runtime phase does not treat
+the caret as a quote character).
 
 Here are some examples of usage of the "cmd" shell:
 
@@ -386,20 +438,20 @@ be built, tested and installed with the standard mantra:
 
 where $MAKE is whatever 'make' program you have configured perl to
 use.  Use "perl -V:make" to find out what this is.  Some extensions
-may not provide a testsuite (so "$MAKE test" may not do anything, or
+may not provide a testsuite (so "$MAKE test" may not do anything or
 fail), but most serious ones do.
 
 It is important that you use a supported 'make' program, and
 ensure Config.pm knows about it.  If you don't have nmake, you can
-either get dmake from the location mentioned earlier, or get an
+either get dmake from the location mentioned earlier or get an
 old version of nmake reportedly available from:
 
     ftp://ftp.microsoft.com/Softlib/MSLFILES/nmake15.exe
 
 Another option is to use the make written in Perl, available from
-CPAN:
+CPAN.
 
-    http://www.cpan.org/authors/id/NI-S/Make-0.03.tar.gz
+    http://www.cpan.org/modules/by-module/Make/
 
 You may also use dmake.  See L</"Make"> above on how to get it.
 
@@ -439,11 +491,11 @@ be a source of frustration if you use such a perl binary with an
 alternate shell that *does* expand wildcards.
 
 Instead, the following solution works rather well. The nice things
-about it: 1) you can start using it right away 2) it is more powerful,
-because it will do the right thing with a pattern like */*/*.c
-3) you can decide whether you do/don't want to use it 4) you can
-extend the method to add any customizations (or even entirely
-different kinds of wildcard expansion).
+about it are 1) you can start using it right away; 2) it is more 
+powerful, because it will do the right thing with a pattern like
+*/*/*.c; 3) you can decide whether you do/don't want to use it; and
+4) you can extend the method to add any customizations (or even 
+entirely different kinds of wildcard expansion).
 
        C:\> copy con c:\perl\lib\Wild.pm
        # Wild.pm - emulate shell @ARGV expansion on shells that don't
@@ -485,7 +537,7 @@ from CPAN.  You may find that many of these extensions are meant to
 be used under the Activeware port of Perl, which used to be the only
 native port for the Win32 platform.  Since the Activeware port does not
 have adequate support for Perl's extension building tools, these
-extensions typically do not support those tools either, and therefore
+extensions typically do not support those tools either and, therefore,
 cannot be built using the generic steps shown in the previous section.
 
 To ensure smooth transitioning of existing code that uses the
@@ -541,7 +593,7 @@ If you use the 4DOS/NT or similar command shell, note that
 refer to all the command line arguments, so you may need to make
 sure that construct works in batch files.  As of this writing,
 4DOS/NT users will need a "ParameterChar = *" statement in their
-4NT.INI file, or will need to execute "setdos /p*" in the 4DOS/NT
+4NT.INI file or will need to execute "setdos /p*" in the 4DOS/NT
 startup file to enable this to work.
 
 =item 3
@@ -591,11 +643,25 @@ find a mailer on your system).
 
 =head1 BUGS AND CAVEATS
 
+Norton AntiVirus interferes with the build process, particularly if 
+set to "AutoProtect, All Files, when Opened". Unlike large applications 
+the perl build process opens and modifies a lot of files. Having the  
+the AntiVirus scan each and every one slows build the process significantly.
+Worse, with PERLIO=stdio the build process fails with peculiar messages
+as the virus checker interacts badly with miniperl.exe writing configure 
+files (it seems to either catch file part written and treat it as suspicious,
+or virus checker may have it "locked" in a way which inhibits miniperl
+updating it). The build does complete with 
+
+   set PERLIO=perlio
+
+but that may be just luck. Other AntiVirus software may have similar issues.
+
 Some of the built-in functions do not act exactly as documented in
 L<perlfunc>, and a few are not implemented at all.  To avoid
 surprises, particularly if you have had prior exposure to Perl
 in other operating environments or if you intend to write code
-that will be portable to other environments, see L<perlport>
+that will be portable to other environments.  See L<perlport>
 for a reasonably definitive list of these differences.
 
 Not all extensions available from CPAN may build or work properly
@@ -624,7 +690,7 @@ by C<perl -V>.
 
 =item Gurusamy Sarathy E<lt>gsar@activestate.comE<gt>
 
-=item Nick Ing-Simmons E<lt>nick@ni-s.u-net.comE<gt>
+=item Nick Ing-Simmons E<lt>nick@ing-simmons.netE<gt>
 
 =back
 
@@ -651,6 +717,6 @@ Support for fork() emulation was added in 5.6 (ActiveState Tool Corp).
 
 Win9x support was added in 5.6 (Benjamin Stuhl).
 
-Last updated: 22 March 2000
+Last updated: 1 April 2001
 
 =cut