Notes on Perl on the Hurd
-Last Updated: Fri, 12 Feb 1999 21:11:14 +0100
+Last Updated: Sat, 6 Mar 1999 16:07:59 +0100
Written by: Mark Kettenis <kettenis@gnu.org>
-* Known Problems
+If you want to use Perl on the Hurd, I recommend using the Debian
+GNU/Hurd distribution (see http://www.debian.org), even if an
+official, stable release has not yet been made. The old `gnu-0.2'
+binary distribution will most certainly have additional problems.
-There are several problems with Perl on the Hurd. Most of them are
-related to bugs in the OS, some might be actual bugs in Perl.
+* Known Problems
-The database code has problems that make Perl crash. When running the
-test-suite one of the tests will crash. Note that on the Hurd when a
-program crashes, the crash server suspends the program. Continuing
-the program will cause it to exit.
+The Perl testsuite may still report some errors on the Hurd. The
+`lib/anydbm.t' and `op/stat.t' tests will most certainly fail. The
+first fails because Berkeley DB 2 does not allow empty keys and the
+test tries to use them anyway. This is not really a Hurd bug. The
+same test fails on Linux with version 2.1 of the GNU C Library. The
+second failure is caused by a bug in the Hurd's filesystem servers,
+that we have not been able to fix yet. I don't think it is crucial.
The socket tests may fail if the network is not configured. You have
to make `/hurd/pfinet' the translator for `/servers/socket/2', giving
it the right arguments. Try `/hurd/pfinet --help' for more
-information. It seems that it is currently not possible to do this
-right when you do not have a supported network device. Therefore all
-tests that use INET sockets fail on my system, suggesting that the
-`localhost' address may not be defined.
+information.
Here are the statistics for Perl 5.005_03 on my system:
Failed Test Status Wstat Total Fail Failed List of failed
-------------------------------------------------------------------------------
-lib/anydbm.t 12 3 25.00% 1, 4, 9
-lib/db-btree.t 0 11 ?? ?? % ??
-lib/db-hash.t 255 65280 62 42 67.74% 15, 22-62
-lib/db-recno.t 2 512 78 61 78.21% 17, 19-78
-lib/io_pipe.t 10 ?? % ??
-lib/io_sock.t 46 11776 5 5 100.00% 1-5
-lib/io_udp.t 46 11776 3 3 100.00% 1-3
-lib/socket.t 6 6 100.00% 1-6
+lib/anydbm.t 12 1 8.33% 12
op/stat.t 58 1 1.72% 4
-op/time.t 5 1 20.00% 2
5 tests skipped, plus 14 subtests skipped.
-Failed 10/188 test scripts, 94.68% okay. 121/6467 subtests failed, 98.13% okay.
+Failed 2/189 test scripts, 98.94% okay. 2/6669 subtests failed, 99.97% okay.
+
+There are quite a few systems out there that do worse!
+
+However, since I am running a very recent Hurd snapshot, in which a lot of
+bugs that were exposed by the Perl testsuite have been fixed, you may
+encounter more failures. Likely candidates are: `lib/io_pipe.t',
+`lib/io_sock.t', `lib/io_udp.t' and `lib/time.t'.
$ perl_d_telldirproto="define"
$ perl_i_sysmount="undef"
$ perl_d_fstatfs="undef"
+$ perl_i_machcthreads="undef"
+$ perl_i_pthread="define"
$ perl_d_fstatvfs="undef"
$ perl_d_statfsflags="undef"
$ perl_i_sysstatvfs="undef"
$ WC "d_fstatfs='" + perl_d_fstatfs + "'"
$ WC "d_statfsflags='" + perl_d_statfsflags + "'"
$ WC "i_sysstatvfs='" + perl_i_sysstatvfs + "'"
+$ WC "i_machcthreads='" + perl_i_machcthreads + "'"
+$ WC "i_pthread='" + perl_i_pthread + "'"
$ WC "d_fstatvfs='" + perl_d_fstatvfs + "'"
$ WC "i_mntent='" + perl_i_mntent + "'"
$ WC "d_getmntent='" + perl_d_getmntent + "'"
/* This is config.h for Stratus VOS. It was created by hand
from the distribution copy of config_h.SH. */
-/* Configuration time: September 4, 1998
+/* Configuration time: March 5, 1999
* Configured by: Paul Green
* Target system: Stratus VOS
*/
* This symbol is defined if the C compiler can cast negative
* or large floating point numbers to 32-bit ints.
*/
-#define CASTI32 /**/
+/*#define CASTI32 /**/
/* CASTNEGFLOAT:
* This symbol is defined if the C compiler can cast negative
*/
#define ARCHNAME "vos" /**/
+/* I_MACH_CTHREADS:
+ * This symbol, if defined, indicates to the C program that it should
+ * include <mach/cthreads.h>.
+ */
+/*#define I_MACH_CTHREADS /**/
+
+/* I_PTHREAD:
+ * This symbol, if defined, indicates to the C program that it should
+ * include <pthread.h>.
+ */
+/*#define I_PTHREAD /**/
+
/* HAS_PTHREAD_YIELD:
* This symbol, if defined, indicates that the pthread_yield
* routine is available to yield the execution of the current
*/
#$d_fsetpos HAS_FSETPOS /**/
+/* I_SYS_MOUNT:
+ * This symbol, if defined, indicates to the C program that it should
+ * include <sys/mount.h>.
+ */
+#$i_sysmount I_SYS_MOUNT /**/
+
+/* HAS_FSTATFS:
+ * This symbol, if defined, indicates that the fstatfs routine is
+ * available to stat the filesystem of a file descriptor.
+ */
+#$d_fstatfs HAS_FSTATFS /**/
+
+/* HAS_STRUCT_STATFS_FLAGS:
+ * This symbol, if defined, indicates that the struct statfs has
+ * the f_flags member for mount flags.
+ */
+#$d_statfsflags HAS_STRUCT_STATFS_FLAGS /**/
+
+/* I_SYS_STATVFS:
+ * This symbol, if defined, indicates to the C program that it should
+ * include <sys/statvfs.h>.
+ */
+#$i_sysstatvfs I_SYS_STATVFS /**/
+
+/* HAS_FSTATVFS:
+ * This symbol, if defined, indicates that the fstatvfs routine is
+ * available to stat the filesystem of a file descriptor.
+ */
+#$d_fstatvfs HAS_FSTATVFS /**/
+
+/* I_MNTENT:
+ * This symbol, if defined, indicates to the C program that it should
+ * include <mntent.h>.
+ */
+#$i_mntent I_MNTENT /**/
+
+/* HAS_GETMNTENT:
+ * This symbol, if defined, indicates that the getmntent routine is
+ * available to lookup mount entries in some data base or other.
+ */
+#$d_getmntent HAS_GETMNTENT /**/
+
+/* HAS_HASMNTOPT:
+ * This symbol, if defined, indicates that the hasmntopt routine is
+ * available to query mount entries returned by getmntent.
+ */
+#$d_hasmntopt HAS_HASMNTOPT /**/
+
/* HAS_GETTIMEOFDAY:
* This symbol, if defined, indicates that the gettimeofday() system
* call is available for a sub-second accuracy clock. Usually, the file
* the sig_name list.
*/
#define SIG_NAME $sig_name_init /**/
-#define SIG_NUM $sig_num /**/
+#define SIG_NUM $sig_num_init /**/
/* VOIDFLAGS:
* This symbol indicates how much support of the void type is given by this
#define PRIVLIB "$privlib" /**/
#define PRIVLIB_EXP "$privlibexp" /**/
+/* SELECT_MIN_BITS:
+ * This symbol holds the minimum number of bits operated by select.
+ * That is, if you do select(n, ...), how many bits at least will be
+ * cleared in the masks if some activity is detected. Usually this
+ * is either n or 32*ceil(n/32), especially many little-endians do
+ * the latter. This is only useful if you have select(), naturally.
+ */
+#define SELECT_MIN_BITS $selectminbits /**/
+
/* SITEARCH:
* This symbol contains the name of the private library for this package.
* The library is private in the sense that it needn't be in anyone's
*/
#define ARCHNAME "$archname" /**/
+/* I_MACH_CTHREADS:
+ * This symbol, if defined, indicates to the C program that it should
+ * include <mach/cthreads.h>.
+ */
+/*#define I_MACH_CTHREADS /**/
+
+/* I_PTHREAD:
+ * This symbol, if defined, indicates to the C program that it should
+ * include <pthread.h>.
+ */
+/*#define I_PTHREAD /**/
+
/* HAS_PTHREAD_YIELD:
* This symbol, if defined, indicates that the pthread_yield
* routine is available to yield the execution of the current