=head1 NAME
-Pumpkin - Notes on handling the Perl Patch Pumpkin
+Pumpkin - Notes on handling the Perl Patch Pumpkin And Porting Perl
=head1 SYNOPSIS
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/README.html , which automatically points you to a
+http://www.cpan.org/README.html , which automatically points you to a
mirror site "close" to you.
=head2 Perl5-porters mailing list
If feasible, try to keep filenames 8.3-compliant to humor those poor
souls that get joy from running Perl under such dire limitations.
+There's a script, check83.pl, for keeping your nose 8.3-clean.
=head2 Seek consensus on major changes
File::Copy to become aware of your native filesystem syntax and
peculiarities.
+Remember to have a $VERSION in the modules. You can use the
+Porting/checkVERSION.pl script for checking this.
+
=item documentation
If your operating system comes from outside UNIX you almost certainly
incorporate that feedback quickly (e.g. within 1 week) and send out a
second patch.
+If you update the subversion number, you may need to change the version
+number near the top of the F<Changes> file.
+
=head2 run metaconfig
If you need to make changes to Configure or config_h.SH, it may be best to
that comes with Perl's metaconfig units. Perl's metaconfig units
should be available on CPAN. A set of units that will work with
perl5.005 is in the file F<mc_units-5.005_00-01.tar.gz> under
-http://www.perl.com/CPAN/authors/id/ANDYD/ . The mc_units tar file
+http://www.cpan.org/authors/id/ANDYD/ . The mc_units tar file
should be unpacked in your main perl source directory. Note: those
units were for use with 5.005. There may have been changes since then.
Check for later versions or contact perl5-porters@perl.org to obtain a
mv y.tab.c perly.c
patch perly.c <perly_c.diff
# manually apply any failed hunks
- diff -c2 perly.c.orig perly.c >perly_c.diff
+ diff -c perly.c.orig perly.c >perly_c.diff
One chunk of lines that often fails begins with
separately in the patch file (or both). There is no disagreement that
detailed descriptions ought to be easily available somewhere.
+If you update the subversion number in F<patchlevel.h>, you may need
+to change the version number near the top of the F<Changes> file.
+
=head2 Todo
The F<Todo> file contains a roughly-catgorized unordered list of
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/ . There are a couple
+http://www.cpan.org/authors/Johan_Vromans/ . There are a couple
of differences between my version and the standard one. I have mine do
a
A more accurate approach is the following commands:
- sh Configure -des -Dccflags=-Wformat ...
- make miniperl # without -DCHECK_FORMAT
- perl -i.orig -pwe 's/-Wformat/-DCHECK_FORMAT $&/' config.sh
- sh Configure -S
- make >& make.log # build from correct miniperl
+=over 4
+
+=item *
+
+build miniperl with -DCHECK_FORMAT
+
+ make clean
+ make miniperl OPTIMIZE=-DCHECK_FORMAT >& mini.log
+
+=item *
+
+build a clean miniperl,
+and build everything else from that with -DCHECK_FORMAT
+
make clean
- make miniperl >& mini.log # build miniperl with -DCHECK_FORMAT
- perl -nwe 'print if /^\S+:/ and not /^make\b/' mini.log make.log
+ make miniperl
+ make all OPTIMIZE=-DCHECK_FORMAT >& make.log
+
+=item *
+
+clean up, and print warnings from the log files
+
make clean
+ perl -nwe 'print if /^\S+:/ and not /^make\b/' \
+ mini.log make.log
+
+=back
(-Wformat support by Robin Barker.)
make all pureperl
cd t
ln -s ../pureperl perl
- setenv PERL_DESTRUCT_LEVEL 5
+ setenv PERL_DESTRUCT_LEVEL 2
./perl TEST
Disabling Perl's malloc allows Purify to monitor allocations and leaks
=item Metaconfig worked for me
-My system at the time was Interactive 2.2, a SVR3.2/386 derivative that
+My system at the time was Interactive 2.2, an SVR3.2/386 derivative that
also had some POSIX support. Metaconfig-generated Configure scripts
worked fine for me on that system. On the other hand, autoconf-generated
scripts usually didn't. (They did come quite close, though, in some
=head1 Upload Your Work to CPAN
You can upload your work to CPAN if you have a CPAN id. Check out
-http://www.perl.com/CPAN/modules/04pause.html for information on
+http://www.cpan.org/modules/04pause.html for information on
_PAUSE_, the Perl Author's Upload Server.
I typically upload both the patch file, e.g. F<perl5.004_08.pat.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.cpan.org/CPAN.html ).
=head1 Help Save the World
items that merit consideration. This list isn't exhaustive, it's just
what I came up with off the top of my head.
+=head2 Adding missing library functions to Perl
+
+The perl Configure script automatically determines which headers and
+functions you have available on your system and arranges for them to be
+included in the compilation and linking process. Occasionally, when porting
+perl to an operating system for the first time, you may find that the
+operating system is missing a key function. While perl may still build
+without this function, no perl program will be able to reference the missing
+function. You may be able to write the missing function yourself, or you
+may be able to find the missing function in the distribution files for
+another software package. In this case, you need to instruct the perl
+configure-and-build process to use your function. Perform these steps.
+
+=over 3
+
+=item *
+
+Code and test the function you wish to add. Test it carefully; you will
+have a much easier time debugging your code independently than when it is a
+part of perl.
+
+=item *
+
+Here is an implementation of the POSIX truncate function for an operating
+system (VOS) that does not supply one, but which does supply the ftruncate()
+function.
+
+ /* Beginning of modification history */
+ /* Written 02-01-02 by Nick Ing-Simmons (nick@ing-simmons.net) */
+ /* End of modification history */
+
+ /* VOS doesn't supply a truncate function, so we build one up
+ from the available POSIX functions. */
+
+ #include <fcntl.h>
+ #include <sys/types.h>
+ #include <unistd.h>
+
+ int
+ truncate(const char *path, off_t len)
+ {
+ int fd = open(path,O_WRONLY);
+ int code = -1;
+ if (fd >= 0) {
+ code = ftruncate(fd,len);
+ close(fd);
+ }
+ return code;
+ }
+
+Place this file into a subdirectory that has the same name as the operating
+system. This file is named perl/vos/vos.c
+
+=item *
+
+If your operating system has a hints file (in perl/hints/XXX.sh for an
+operating system named XXX), then start with it. If your operating system
+has no hints file, then create one. You can use a hints file for a similar
+operating system, if one exists, as a template.
+
+=item *
+
+Add lines like the following to your hints file. The first line
+(d_truncate="define") instructs Configure that the truncate() function
+exists. The second line (archobjs="vos.o") instructs the makefiles that the
+perl executable depends on the existence of a file named "vos.o". (Make
+will automatically look for "vos.c" and compile it with the same options as
+the perl source code). The final line ("test -h...") adds a symbolic link
+to the top-level directory so that make can find vos.c. Of course, you
+should use your own operating system name for the source file of extensions,
+not "vos.c".
+
+ # VOS does not have truncate() but we supply one in vos.c
+ d_truncate="define"
+ archobjs="vos.o"
+
+ # Help gmake find vos.c
+ test -h vos.c || ln -s vos/vos.c vos.c
+
+The hints file is a series of shell commands that are run in the top-level
+directory (the "perl" directory). Thus, these commands are simply executed
+by Configure at an appropriate place during its execution.
+
+=item *
+
+At this point, you can run the Configure script and rebuild perl. Carefully
+test the newly-built perl to ensure that normal paths, and error paths,
+behave as you expect.
+
+=back
+
=head2 Good ideas waiting for round tuits
=over 4