pthread_condattr_init in thread.h for OLD_PTHREADS_API.
[p5sagit/p5-mst-13.2.git] / Porting / pumpkin.pod
index 3744548..5260e65 100644 (file)
@@ -24,7 +24,7 @@ and all the various auxiliary files that are part of the distribution.
 
 The Comprehensive Perl Archive Network (or CPAN) is the place to go.
 There are many mirrors, but the easiest thing to use is probably
-http://www.perl.com/CPAN, which automatically points you to a
+http://www.perl.com/CPAN/README.html , which automatically points you to a
 mirror site "close" to you.
 
 =head2 Perl5-porters mailing list
@@ -43,21 +43,30 @@ to perl5-porters-request@perl.org .
 
 =head1 How are Perl Releases Numbered?
 
-Perl version numbers are floating point numbers, such as 5.004.  The
-major version number is 5, the minor version is '0', and '03' is the
-patchlevel.  The version number is available as the magic variable $],
+Perl version numbers are floating point numbers, such as 5.004.
+(Observations about the imprecision of floating point numbers for
+representing reality probably have more relevance than you might
+imagine :-) The major version number is 5 and the '004' is the
+patchlevel.  (Questions such as whether or not '004' is really a minor
+version number can safely be ignored.:)
+
+The version number is available as the magic variable $],
 and can be used in comparisons, e.g.
 
        print "You've got an old perl\n" if $] < 5.002;
 
-(Observations about the imprecision of floating point numbers for
-representing reality probably have more relevance than you might
-imagine :-)
-
 You can also require particular version (or later) with
 
        use 5.002;
 
+At some point in the future, we may need to decide what to call the
+next big revision.  In the .package file used by metaconfig to
+generate Configure, there are two variables that might be relevant:
+$baserev=5.0 and $package=perl5.   At various times, I have suggested
+we might change them to $baserev=5.1 and $package=perl5.1 if want
+to signify a fairly major update.  Or, we might want to jump to perl6.
+Let's worry about that problem when we get there.
+
 =head2 Subversions
 
 In addition, there may be "developer" sub-versions available.  These
@@ -71,21 +80,35 @@ also might not.  Sub-versions are allowed to be subversive.
 These sub-versions can also be used as floating point numbers, so
 you can do things such as
 
-       print "You've got an unstable perl\n" if $] == 5.00403;
+       print "You've got an unstable perl\n" if $] == 5.00303;
 
 You can also require particular version (or later) with
 
-       use 5.004_03;    # the "_" is optional
+       use 5.003_03;    # the "_" is optional
 
 Sub-versions produced by the members of perl5-porters are usually
 available on CPAN in the F<src/5.0/unsupported> directory.
 
+=head2 Maintenance and Development Subversions
+
+As an experiment, starting with version 5.004, subversions _01 through
+_49 will be reserved for bug-fix maintenance releases, and subversions
+_50 through _99 will be available for unstable development versions.
+
+The separate bug-fix track is being established to allow us an easy
+way to distribute important bug fixes without waiting for the
+developers to untangle all the other problems in the current
+developer's release.
+
+Watch for announcements of maintenance subversions in
+comp.lang.perl.announce.
+
 =head2 Why such a complicated scheme?
 
 Two reasons, really.  At least.
 
-First, we need some way to identify releases that are known to
-have new features that need testing and exploration.  The
+First, we need some way to identify and release collections of patches
+that are known to have new features that need testing and exploration.  The
 subversion scheme does that nicely while fitting into the
 C<use 5.004;> mold.
 
@@ -128,7 +151,16 @@ have tried to follow as I apply patches to the perl sources.
 
 =head2 Solve problems as generally as possible
 
-(I still have to think of a good example here.)
+Never implement a specific restricted solution to a problem when you
+can solve the same problem in a more general, flexible way.
+
+For example, for dynamic loading to work on some SVR4 systems, we had
+to build a shared libperl.so library.  In order to build "FAT" binaries
+on NeXT 4.0 systems, we had to build a special libperl library.  Rather
+than continuing to build a contorted nest of special cases, I
+generalized the process of building libperl so that NeXT and SVR4 users
+could still get their work done, but others could build a shared
+libperl if they wanted to as well.
 
 =head2 Seek consensus on major changes
 
@@ -142,7 +174,7 @@ that the documentation is in sync with your changes.  Be sure to
 check all the files F<pod/*.pod> and also the F<INSTALL> document.
 
 Consider writing the appropriate documentation first and then
-implementing it to correspond to the documentation.
+implementing your change to correspond to the documentation.
 
 =head2 Avoid machine-specific #ifdef's
 
@@ -157,7 +189,17 @@ may help out folks on another platform who have the same problem.
 We should never release a main version without testing it as a
 subversion first.
 
-=head2 Automate generatation of derivative files
+=head2 Test popular applications and modules.
+
+We should never release a main version without testing whether or not
+it breaks various popular modules and applications.  A partial list of
+such things would include majordomo, metaconfig, apache, Tk, CGI,
+libnet, and libwww, to name just a few.  Of course it's quite possible
+that some of those things will be just plain broken and need to be fixed,
+but, in general, we ought to try to avoid breaking widely-installed
+things.
+
+=head2 Automate generation of derivative files
 
 The F<embed.h>, F<keywords.h>, F<opcode.h>, and F<perltoc.pod> files
 are all automatically generated by perl scripts.  In general, don't
@@ -177,7 +219,8 @@ learned how to use yet.  Some of them may make this all a bit easier.
 
 Here are the steps I go through to prepare a patch & distribution.
 
-Lots of it could doubtless be automated but isn't.
+Lots of it could doubtless be automated but isn't.  The Porting/makerel
+(make release) perl script does now help automate some parts of it.
 
 =head2 Announce your intentions
 
@@ -192,8 +235,8 @@ bug fixes and documentation improvements that are posted while he or
 she has the pumpkin, but there might also be larger issues at stake.
 
 One of the precepts of the subversion idea is that we shouldn't give
-it to anyone unless we have some idea what you're going to do with
-it.
+the patch pumpkin to anyone unless we have some idea what he or she
+is going to do with it.
 
 =head2 refresh pod/perltoc.pod
 
@@ -202,6 +245,8 @@ directory.  Before you C<make spotless> (if you do), and if you have
 changed any documentation in any module or pod file, change to the
 F<pod> directory and run C<make toc>.
 
+=head2 run installhtml to check the validity of the pod files
+
 =head2 update patchlevel.h
 
 Don't be shy about using the subversion number, even for a relatively
@@ -222,10 +267,12 @@ will regenerate Configure and config_h.SH.  More information on
 obtaining and running metaconfig is in the F<U/README> file that comes
 with Perl's metaconfig units.  Perl's metaconfig units should be
 available the same place you found this file.  On CPAN, look under my
-directory F<id/ANDYD/> for a file such as F<5.003_07-02.U.tar.gz>.
+directory F<authors/id/ANDYD/> for a file such as F<5.003_07-02.U.tar.gz>.
 That file should be unpacked in your main perl source directory.  It
 contains the files needed to run B<metaconfig> to reproduce Perl's
-Configure script.
+Configure script.  (Those units are for 5.003_07.  There have been
+changes since then; please contact me if you want more recent
+versions, and I will try to point you in the right direction.)
 
 Alternatively, do consider if the F<*ish.h> files might be a better
 place for your changes.
@@ -235,12 +282,10 @@ place for your changes.
 Make sure the MANIFEST is up-to-date.  You can use dist's B<manicheck>
 program for this.  You can also use
 
-    perl -MExtUtils::Manifest -e fullcheck
+    perl -w -MExtUtils::Manifest=fullcheck -e fullcheck
 
-to do half the job.  This will make sure everything listed in MANIFEST
-is included in the distribution.  dist's B<manicheck> command will
-also list extra files in the directory that are not listed in
-MANIFEST.
+Both commands will also list extra files in the directory that are not
+listed in MANIFEST.
 
 The MANIFEST is normally sorted, with one exception.  Perl includes
 both a F<Configure> script and a F<configure> script.  The
@@ -277,7 +322,6 @@ In all, the following files should probably be executable:
     installperl
     installman
     keywords.pl
-    lib/splain
     myconfig
     opcode.pl
     perly.fixer
@@ -337,7 +381,7 @@ Some additional notes from Larry on this:
 
 Don't forget to regenerate perly.c.diff.
 
-    byacc perly.y
+    byacc -d perly.y
     mv y.tab.c perly.c
     patch perly.c <perly.c.diff
     # manually apply any failed hunks
@@ -375,13 +419,13 @@ I used to include rules like the following in the makefile:
            - perl keywords.pl
 
 
-However, I got lots of mail consisting of people worrying because the
+However, I got B<lots> of mail consisting of people worrying because the
 command failed.  I eventually decided that I would save myself time
 and effort by manually running C<make regen_headers> myself rather
 than answering all the questions and complaints about the failing
 command.
 
-=head2 global.sym and interp.sym
+=head2 global.sym, interp.sym and perlio.sym
 
 Make sure these files are up-to-date.  Read the comments in these
 files and in perl_exp.SH to see what to do.
@@ -404,7 +448,7 @@ Let's not force people to keep changing it.
 
 Be sure to update the F<Changes> file.  Try to include both an overall
 summary as well as detailed descriptions of the changes.  Your
-audience will include bother developers and users, so describe
+audience will include other developers and users, so describe
 user-visible changes (if any) in terms they will understand, not in
 code like "initialize foo variable in bar function".
 
@@ -420,6 +464,9 @@ diffs against B<Configure>.  If you make changes to Configure, you may
 want to consider regenerating this diff file to save trouble for the
 OS/2 maintainer.
 
+You can also consider the OS/2 diffs as reminders of portability
+things that need to be fixed in Configure.
+
 =head2 VMS-specific updates
 
 If you have changed F<perly.y>, then you may want to update
@@ -440,20 +487,28 @@ do something like the following
        tar cf perl5.004_08.tar perl5.004_08
        gzip --best perl5.004_08.tar
 
+These steps, with extra checks, are automated by the Porting/makerel
+script.
+
 =head2 Making a new patch
 
 I find the F<makepatch> utility quite handy for making patches.
 You can obtain it from any CPAN archive under
-http://www.perl.com/CPAN/authors/Johan_Vromans/.  The only
-difference between my version and the standard one is that I have mine
-do a
+http://www.perl.com/CPAN/authors/Johan_Vromans/ .  There are a couple
+of differences between my version and the standard one. I have mine do
+a
 
        # Print a reassuring "End of Patch" note so people won't
        # wonder if their mailer truncated patches.
        print "\n\nEnd of Patch.\n";
 
-at the end.  That's because I used to get questions from people asking if
-their mail was truncated.
+at the end.  That's because I used to get questions from people asking
+if their mail was truncated.
+
+It also writes Index: lines which include the new directory prefix
+(change Index: print, approx line 294 or 310 depending on the version,
+to read:  print PATCH ("Index: $newdir$new\n");).  That helps patches
+work with more POSIX conformant patch programs.
 
 Here's how I generate a new patch.  I'll use the hypothetical
 5.004_07 to 5.004_08 patch as an example.
@@ -483,10 +538,10 @@ shell commands at the top of the patch.  Next, I delete all the patch parts
 of perl5.004_08.pat, leaving just the shell commands.  Then, I do the
 following:
 
-       cd perl5.003_07
-       sh ../perl5.003_08.pat
+       cd perl5.004_07
+       sh ../perl5.004_08.pat
        cd ..
-       makepatch perl5.003_07 perl5.003_08 >> perl5.003_08.pat
+       makepatch perl5.004_07 perl5.004_08 >> perl5.004_08.pat
 
 (Note the append to preserve my shell commands.)
 Now, my patch will line up with what the end users are going to do.
@@ -496,13 +551,13 @@ Now, my patch will line up with what the end users are going to do.
 It seems obvious, but be sure to test your patch.  That is, verify that
 it produces exactly the same thing as your full distribution.
 
-       rm -rf perl5.003_07
-       gzip -d -c perl5.003_07.tar.gz | tar -xf -
-       cd perl5.003_07
-       sh ../perl5.003_08.pat
-       patch -p1 -N < ../perl5.003_08.pat
+       rm -rf perl5.004_07
+       gzip -d -c perl5.004_07.tar.gz | tar -xf -
+       cd perl5.004_07
+       sh ../perl5.004_08.pat
+       patch -p1 -N < ../perl5.004_08.pat
        cd ..
-       gdiff -r perl5.003_07 perl5.003_08
+       gdiff -r perl5.004_07 perl5.004_08
 
 where B<gdiff> is GNU diff.  Other diff's may also do recursive checking.
 
@@ -976,7 +1031,7 @@ and the full tar file, e.g. F<perl5.004_08.tar.gz>.
 
 If you want your patch to appear in the F<src/5.0/unsupported>
 directory on CPAN, send e-mail to the CPAN master librarian.  (Check
-out http://www.perl.com/CPAN/CPAN.html).
+out http://www.perl.com/CPAN/CPAN.html ).
 
 =head1 Help Save the World
 
@@ -1061,16 +1116,9 @@ a nice malloc that is well-tuned for the system.)
 
 =over 4
 
-=item Win95, WinNT, and Win32 support
-
-We need to get something into the distribution for 32-bit Windows.
-I'm tired of all the private e-mail questions I get, and I'm saddened
-that so many folks keep trying to reinvent the same wheel.
-
 =item MacPerl
 
-Get some of the Macintosh stuff folded back into the main
-distribution.
+Get some of the Macintosh stuff folded back into the main distribution.
 
 =item gconvert replacement
 
@@ -1113,10 +1161,10 @@ and/or fcntl() file locking.  It's a mess.
 
 Andy Dougherty <doughera@lafcol.lafayette.edu>.
 
-Additions by Chip Salzenberg <chip@atlantic.net>.
+Additions by Chip Salzenberg <chip@perl.com>.
 
 All opinions expressed herein are those of the authorZ<>(s).
 
 =head1 LAST MODIFIED
 
-$Id: pumpkin.pod,v 1.8 1997/02/18 18:19:20 chip Released $
+$Id: pumpkin.pod,v 1.10.1.1 1997/06/10 20:46:47 timbo Exp $