Change 34630 by [EMAIL PROTECTED] on 2008/10/29 08:09:06

        Subject: [PATCH] Haiku Port
        From: Ingo Weinhold <[EMAIL PROTECTED]>
        Date: Wed, 29 Oct 2008 02:25:44 +0100
        Message-Id: <[EMAIL PROTECTED]>

Affected files ...

... //depot/perl/Configure#710 edit
... //depot/perl/MANIFEST#1739 edit
... //depot/perl/README.haiku#1 add
... //depot/perl/ext/Errno/Errno_pm.PL#50 edit
... //depot/perl/ext/Time/HiRes/t/HiRes.t#35 edit
... //depot/perl/haiku/Haiku/Haiku.pm#1 add
... //depot/perl/haiku/Haiku/Haiku.xs#1 add
... //depot/perl/haiku/Haiku/Makefile.PL#1 add
... //depot/perl/haiku/haikuish.h#1 add
... //depot/perl/lib/CPANPLUS/Internals/Constants/Report.pm#3 edit
... //depot/perl/lib/ExtUtils/CBuilder.pm#16 edit
... //depot/perl/lib/ExtUtils/MM.pm#21 edit
... //depot/perl/lib/Module/Build.pm#18 edit
... //depot/perl/perl.h#841 edit
... //depot/perl/pod/perlport.pod#165 edit
... //depot/perl/t/io/fs.t#65 edit

Differences ...

==== //depot/perl/Configure#710 (xtext) ====
Index: perl/Configure
--- perl/Configure#709~34617~   2008-10-28 10:52:04.000000000 -0700
+++ perl/Configure      2008-10-29 01:09:06.000000000 -0700
@@ -25,7 +25,7 @@
 
 # $Id: Head.U 6 2006-08-25 22:21:46Z rmanfredi $
 #
-# Generated on Tue Oct 28 18:51:20 CET 2008 [metaconfig 3.5 PL0]
+# Generated on Wed Oct 29 09:08:09 CET 2008 [metaconfig 3.5 PL0]
 # (with additional metaconfig patches by [EMAIL PROTECTED])
 
 cat >c1$$ <<EOF
@@ -8014,6 +8014,7 @@
     case "$lddlflags" in
     '') case "$osname" in
                        beos) dflt='-nostart' ;;
+                       haiku) dflt='-shared' ;;
                        hpux) dflt='-b';
                              case "$gccversion" in
                              '') dflt="$dflt +vnocompatwarnings" ;;
@@ -8107,7 +8108,7 @@
        ;;
 *)     case "$useshrplib" in
        '')     case "$osname" in
-               svr4*|nonstopux|dgux|dynixptx|esix|powerux|beos|cygwin*)
+               svr4*|nonstopux|dgux|dynixptx|esix|powerux|beos|haiku|cygwin*)
                        dflt=y
                        also='Building a shared libperl is required for dynamic 
loading to work on your system.'
                        ;;
@@ -8274,6 +8275,9 @@
        beos)
                # beos doesn't like the default, either.
                ;;
+       haiku)
+               # Haiku doesn't like the default, either.
+               ;;
        hpux*)
                # hpux doesn't like the default, either.
                tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""

==== //depot/perl/MANIFEST#1739 (text) ====
Index: perl/MANIFEST
--- perl/MANIFEST#1738~34590~   2008-10-25 08:06:56.000000000 -0700
+++ perl/MANIFEST       2008-10-29 01:09:06.000000000 -0700
@@ -1478,6 +1478,10 @@
 h2pl/README                    How to turn .ph files into .pl files
 h2pl/tcbreak                   cbreak test routine using .ph
 h2pl/tcbreak2                  cbreak test routine using .pl
+haiku/haikuish.h               Header for the Haiku port
+haiku/Haiku/Haiku.pm           Haiku extension Perl module
+haiku/Haiku/Haiku.xs           Haiku extension external subroutines
+haiku/Haiku/Makefile.PL                Haiku extension makefile writer
 handy.h                                Handy definitions
 hints/3b1cc                    Hints for named architecture
 hints/3b1.sh                   Hints for named architecture
@@ -1513,6 +1517,7 @@
 hints/gnuknetbsd.sh                    Hints for named architecture
 hints/gnu.sh                   Hints for named architecture
 hints/greenhills.sh            Hints for named architecture
+hints/haiku.sh                 Hints for named architecture
 hints/hpux.sh                  Hints for named architecture
 hints/i386.sh                  Hints for named architecture
 hints/interix.sh               Hints for named architecture
@@ -1982,6 +1987,7 @@
 lib/ExtUtils/MM_Cygwin.pm      MakeMaker methods for Cygwin
 lib/ExtUtils/MM_Darwin.pm      MakeMaker methods for Darwin
 lib/ExtUtils/MM_DOS.pm         MakeMaker methods for DOS
+lib/ExtUtils/MM_Haiku.pm       MakeMaker methods for Haiku
 lib/ExtUtils/MM_MacOS.pm       MakeMaker methods for MacOS
 lib/ExtUtils/MM_NW5.pm         MakeMaker methods for NetWare
 lib/ExtUtils/MM_OS2.pm         MakeMaker methods for OS/2
@@ -3535,6 +3541,7 @@
 README.dos                     Perl notes for DOS
 README.epoc                    Perl notes for EPOC
 README.freebsd                 Perl notes for FreeBSD
+README.haiku                   Perl notes for Haiku
 README.hpux                    Perl notes for HP-UX
 README.hurd                    Perl notes for Hurd
 README.irix                    Perl notes for Irix

==== //depot/perl/README.haiku#1 (text) ====
Index: perl/README.haiku
--- /dev/null   2008-10-24 09:33:31.292628696 -0700
+++ perl/README.haiku   2008-10-29 01:09:06.000000000 -0700
@@ -0,0 +1,64 @@
+If you read this file _as_is_, just ignore the funny characters you see.
+It is written in the POD format (see pod/perlpod.pod) which is specially
+designed to be readable as is.
+
+=head1 NAME
+
+README.haiku - Perl version 5.10+ on Haiku
+
+=head1 DESCRIPTION
+
+This file contains instructions how to build Perl for Haiku and lists
+known problems.
+
+=head1 BUILD AND INSTALL
+
+The build procedure is completely standard:
+
+  ./Configure -de
+  make
+  make install
+
+Make perl executable and create a symlink for libperl:
+
+  chmod a+x /boot/common/bin/perl
+  cd /boot/common/lib; ln -s perl5/5.10.0/BePC-haiku/CORE/libperl.so .
+
+Replace C<5.10.0> with your respective version of Perl.
+
+=head1 KNOWN PROBLEMS
+
+The following problems are encountered with Haiku revision 28311:
+
+=over 4
+
+=item *
+
+Perl cannot be compiled with threading support ATM.
+
+=item *
+
+The C<ext/Socket/t/socketpair.t> test fails. More precisely: the subtests
+using datagram sockets fail. Unix datagram sockets aren't implemented in
+Haiku yet.
+
+=item *
+
+A subtest of the C<ext/Sys/Syslog/t/syslog.t> test fails. This is due to Haiku
+not implementing C</dev/log> support yet.
+
+=item *
+
+The tests C<lib/Net/Ping/t/450_service.t> and C<lib/Net/Ping/t/510_ping_udp.t>
+fail. This is due to bugs in Haiku's network stack implementation.
+
+=back
+
+=head1 CONTACT
+
+For Haiku specific problems contact the HaikuPorts developers:
+http://ports.haiku-files.org/
+
+The initial Haiku port was done by Ingo Weinhold <[EMAIL PROTECTED]>.
+
+Last update: 2008-10-29

==== //depot/perl/ext/Errno/Errno_pm.PL#50 (text) ====
Index: perl/ext/Errno/Errno_pm.PL
--- perl/ext/Errno/Errno_pm.PL#49~29627~        2006-12-27 11:36:13.000000000 
-0800
+++ perl/ext/Errno/Errno_pm.PL  2008-10-29 01:09:06.000000000 -0700
@@ -155,7 +155,7 @@
        # we might miss out on compiler-specific ones
        $file{"$ENV{GUSI}include:sys:errno.h"} = 1;
 
-    } elsif ($^O eq 'beos') {
+    } elsif ($^O eq 'beos' || $^O eq 'haiku') {
        # hidden in a special place
        $file{'/boot/develop/headers/posix/errno.h'} = 1;
 

==== //depot/perl/ext/Time/HiRes/t/HiRes.t#35 (text) ====
Index: perl/ext/Time/HiRes/t/HiRes.t
--- perl/ext/Time/HiRes/t/HiRes.t#34~33673~     2008-04-13 07:02:38.000000000 
-0700
+++ perl/ext/Time/HiRes/t/HiRes.t       2008-10-29 01:09:06.000000000 -0700
@@ -337,7 +337,8 @@
        && defined &Time::HiRes::getitimer
        && has_symbol('ITIMER_VIRTUAL')
        && $Config{sig_name} =~ m/\bVTALRM\b/
-        && $^O !~ /^(nto)$/) { # nto: QNX 6 has the API but no implementation
+       && $^O !~ /^(nto)$/ # nto: QNX 6 has the API but no implementation
+       && $^O ne 'haiku') { # same for Haiku
     for (18..19) {
        print "ok $_ # Skip: no virtual interval timers\n";
     }

==== //depot/perl/haiku/Haiku/Haiku.pm#1 (text) ====
Index: perl/haiku/Haiku/Haiku.pm
--- /dev/null   2008-10-24 09:33:31.292628696 -0700
+++ perl/haiku/Haiku/Haiku.pm   2008-10-29 01:09:06.000000000 -0700
@@ -0,0 +1,54 @@
+package Haiku;
+
+BEGIN {
+    use strict;
+    use vars qw|$VERSION $XS_VERSION @ISA @EXPORT @EXPORT_OK|;
+
+    require Exporter;
+    require DynaLoader;
+
+    @ISA = qw|Exporter DynaLoader|;
+    $VERSION = '0.34';
+    $XS_VERSION = $VERSION;
+    $VERSION = eval $VERSION;
+
+    @EXPORT = qw(
+    );
+    @EXPORT_OK = qw(
+    );
+}
+
+bootstrap Haiku;
+
+1;
+
+__END__
+
+=head1 NAME
+
+Haiku - Interfaces to some Haiku API Functions
+
+=head1 DESCRIPTION
+
+The Haiku module contains functions to access Haiku APIs.
+
+=head2 Alphabetical Listing of Haiku Functions
+
+=over
+
+=item Haiku::debug_printf(FORMAT,...)
+
+Similar to printf, but prints to system debug output.
+
+=item Haiku::debugger(FORMAT,...)
+
+Drops the program into the debugger. The printf like arguments define the
+debugger message.
+
+=item Haiku::ktrace_printf(FORMAT,...)
+
+Similar to printf, but prints to a kernel tracing entry.
+
+=back
+
+=cut

==== //depot/perl/haiku/Haiku/Haiku.xs#1 (text) ====
Index: perl/haiku/Haiku/Haiku.xs
--- /dev/null   2008-10-24 09:33:31.292628696 -0700
+++ perl/haiku/Haiku/Haiku.xs   2008-10-29 01:09:06.000000000 -0700
@@ -0,0 +1,137 @@
+#define PERL_NO_GET_CONTEXT
+#include "EXTERN.h"
+#include "perl.h"
+#include "XSUB.h"
+
+#include <stdarg.h>
+
+#include <OS.h>
+
+static void
+haiku_do_debugger(const char* format,...)
+{
+    char buffer[1024];
+    va_list args;
+    va_start(args, format);
+    my_vsnprintf(buffer, sizeof(buffer), format, args);
+    va_end(args);
+
+    debugger(buffer);
+}
+
+static void
+haiku_do_debug_printf(pTHX_ register SV *sv,
+    void (*printfFunc)(const char*,...))
+{
+    dVAR;
+
+    if (!sv)
+       return;
+    if (SvTYPE(sv) == SVt_IV && SvIOK(sv)) {
+       assert(!SvGMAGICAL(sv));
+       if (SvIsUV(sv))
+           (*printfFunc)("%"UVuf, (UV)SvUVX(sv));
+       else
+           (*printfFunc)("%"IVdf, (IV)SvIVX(sv));
+       return;
+    }
+    else {
+       STRLEN len;
+       /* Do this first to trigger any overloading.  */
+       const char *tmps = SvPV_const(sv, len);
+       U8 *tmpbuf = NULL;
+
+       if (!SvUTF8(sv)) {
+           /* We don't modify the original scalar.  */
+           tmpbuf = bytes_to_utf8((const U8*) tmps, &len);
+           tmps = (char *) tmpbuf;
+       }
+
+       if (len)
+           (*printfFunc)("%.*s", (int)len, tmps);
+       Safefree(tmpbuf);
+    }
+}
+
+XS(haiku_debug_printf)
+{
+    dVAR;
+    dXSARGS;
+    dORIGMARK;
+    SV *sv;
+
+    if (items < 1)
+       Perl_croak(aTHX_ "usage: Haiku::debug_printf($format,...)");
+
+    sv = newSV(0);
+
+    if (SvTAINTED(MARK[1]))
+       TAINT_PROPER("debug_printf");
+    do_sprintf(sv, SP - MARK, MARK + 1);
+
+    haiku_do_debug_printf(sv, &debug_printf);
+
+    SvREFCNT_dec(sv);
+    SP = ORIGMARK;
+    PUSHs(&PL_sv_yes);
+}
+
+XS(haiku_ktrace_printf)
+{
+    dVAR;
+    dXSARGS;
+    dORIGMARK;
+    SV *sv;
+
+    if (items < 1)
+       Perl_croak(aTHX_ "usage: Haiku::debug_printf($format,...)");
+
+    sv = newSV(0);
+
+    if (SvTAINTED(MARK[1]))
+       TAINT_PROPER("ktrace_printf");
+    do_sprintf(sv, SP - MARK, MARK + 1);
+
+    haiku_do_debug_printf(sv, &ktrace_printf);
+
+    SvREFCNT_dec(sv);
+    SP = ORIGMARK;
+    PUSHs(&PL_sv_yes);
+}
+
+XS(haiku_debugger)
+{
+    dVAR;
+    dXSARGS;
+    dORIGMARK;
+    SV *sv;
+
+    if (items < 1)
+       Perl_croak(aTHX_ "usage: Haiku::debugger($format,...)");
+
+    sv = newSV(0);
+
+    if (SvTAINTED(MARK[1]))
+       TAINT_PROPER("debugger");
+    do_sprintf(sv, SP - MARK, MARK + 1);
+
+    haiku_do_debug_printf(sv, &haiku_do_debugger);
+
+    SvREFCNT_dec(sv);
+    SP = ORIGMARK;
+    PUSHs(&PL_sv_yes);
+}
+
+MODULE = Haiku            PACKAGE = Haiku
+
+PROTOTYPES: DISABLE
+
+BOOT:
+{
+    char *file = __FILE__;
+
+    newXS("Haiku::debug_printf", haiku_debug_printf, file);
+    newXS("Haiku::ktrace_printf", haiku_ktrace_printf, file);
+    newXS("Haiku::debugger", haiku_debugger, file);
+    XSRETURN_YES;
+}

==== //depot/perl/haiku/Haiku/Makefile.PL#1 (text) ====
Index: perl/haiku/Haiku/Makefile.PL
--- /dev/null   2008-10-24 09:33:31.292628696 -0700
+++ perl/haiku/Haiku/Makefile.PL        2008-10-29 01:09:06.000000000 -0700
@@ -0,0 +1,20 @@
+use 5.006;
+use ExtUtils::MakeMaker;
+
+unless ($^O eq "haiku") {
+    die "OS unsupported\n";
+}
+
+#my @libs;
+#push @libs, '-L/lib/w32api -lole32 -lversion' if $^O eq "cygwin";
+
+WriteMakefile(
+    NAME          => 'Haiku',
+    VERSION_FROM  => 'Haiku.pm',
+#    LIBS          => [EMAIL PROTECTED],
+    INSTALLDIRS   => ($] >= 5.008004 ? 'perl' : 'site'),
+    NO_META       => 1,
+
+    AUTHOR        => 'Ingo Weinhold <[EMAIL PROTECTED]>',
+    ABSTRACT_FROM => 'Haiku.pm',
+);

==== //depot/perl/haiku/haikuish.h#1 (text) ====
Index: perl/haiku/haikuish.h
--- /dev/null   2008-10-24 09:33:31.292628696 -0700
+++ perl/haiku/haikuish.h       2008-10-29 01:09:06.000000000 -0700
@@ -0,0 +1,11 @@
+#ifndef PERL_HAIKU_HAIKUISH_H
+#define PERL_HAIKU_HAIKUISH_H
+
+#include "../unixish.h"
+
+/* We need <sys/wait.h> or else the W* macros aren't defined in perl.h. */
+
+#include <sys/wait.h>
+
+#endif
+

==== //depot/perl/lib/CPANPLUS/Internals/Constants/Report.pm#3 (text) ====
Index: perl/lib/CPANPLUS/Internals/Constants/Report.pm
--- perl/lib/CPANPLUS/Internals/Constants/Report.pm#2~31292~    2007-05-28 
06:17:54.000000000 -0700
+++ perl/lib/CPANPLUS/Internals/Constants/Report.pm     2008-10-29 
01:09:06.000000000 -0700
@@ -29,6 +29,7 @@
     Cygwin      => 'cygwin',
     Darwin      => 'darwin',
     EBCDIC      => 'os390|os400|posix-bc|vmesa',
+    Haiku       => 'haiku',
     HPUX        => 'hpux',
     Linux       => 'linux',
     MSDOS       => 'dos|os2|MSWin32|cygwin',

==== //depot/perl/lib/ExtUtils/CBuilder.pm#16 (text) ====
Index: perl/lib/ExtUtils/CBuilder.pm
--- perl/lib/ExtUtils/CBuilder.pm#15~34303~     2008-09-07 03:56:19.000000000 
-0700
+++ perl/lib/ExtUtils/CBuilder.pm       2008-10-29 01:09:06.000000000 -0700
@@ -38,6 +38,7 @@
                 os2       Unix
                 gnu       Unix
                 gnukfreebsd Unix
+                haiku     Unix
                 
                 dos       Windows
                 MSWin32   Windows

==== //depot/perl/lib/ExtUtils/MM.pm#21 (text) ====
Index: perl/lib/ExtUtils/MM.pm
--- perl/lib/ExtUtils/MM.pm#20~34541~   2008-10-20 13:29:13.000000000 -0700
+++ perl/lib/ExtUtils/MM.pm     2008-10-29 01:09:06.000000000 -0700
@@ -68,6 +68,7 @@
 $Is{QNX}    = $^O eq 'qnx';
 $Is{AIX}    = $^O eq 'aix';
 $Is{Darwin} = $^O eq 'darwin';
+$Is{Haiku}  = $^O eq 'haiku';
 
 $Is{Unix}   = !grep { $_ } values %Is;
 

==== //depot/perl/lib/Module/Build.pm#18 (text) ====
Index: perl/lib/Module/Build.pm
--- perl/lib/Module/Build.pm#17~34446~  2008-09-30 04:25:01.000000000 -0700
+++ perl/lib/Module/Build.pm    2008-10-29 01:09:06.000000000 -0700
@@ -30,6 +30,7 @@
                 dynixptx  Unix
                 freebsd   Unix
                 linux     Unix
+                haiku     Unix
                 hpux      Unix
                 irix      Unix
                 darwin    Unix

==== //depot/perl/perl.h#841 (text) ====
Index: perl/perl.h
--- perl/perl.h#840~34585~      2008-10-25 05:23:01.000000000 -0700
+++ perl/perl.h 2008-10-29 01:09:06.000000000 -0700
@@ -1539,15 +1539,15 @@
 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
 #endif
 
-/* BeOS 5.0 seems to define S_IREAD and S_IWRITE in <posix/fcntl.h>
+/* BeOS 5.0 and Haiku R1 seem to define S_IREAD and S_IWRITE in <posix/fcntl.h>
  * which would get included through <sys/file.h >, but that is 3000
  * lines in the future.  --jhi */
 
-#if !defined(S_IREAD) && !defined(__BEOS__)
+#if !defined(S_IREAD) && !(defined(__BEOS__) || defined(__HAIKU__))
 #   define S_IREAD S_IRUSR
 #endif
 
-#if !defined(S_IWRITE) && !defined(__BEOS__)
+#if !defined(S_IWRITE) && !(defined(__BEOS__) || defined(__HAIKU__))
 #   define S_IWRITE S_IWUSR
 #endif
 
@@ -2571,7 +2571,10 @@
 #   define ISHISH "macos classic"
 #endif
 
-#if defined(__BEOS__)
+#if defined(__HAIKU__)
+#   include "haiku/haikuish.h"
+#   define ISHISH "haiku"
+#elif defined(__BEOS__)
 #   include "beos/beosish.h"
 #   define ISHISH "beos"
 #endif
@@ -5690,9 +5693,10 @@
 #if O_TEXT != O_BINARY
     /* If you have different O_TEXT and O_BINARY and you are a CLRF shop,
      * that is, you are somehow DOSish. */
-#   if defined(__BEOS__) || defined(__VOS__) || defined(__CYGWIN__)
-    /* BeOS has O_TEXT != O_BINARY but O_TEXT and O_BINARY have no effect;
-     * BeOS is always UNIXoid (LF), not DOSish (CRLF). */
+#   if defined(__BEOS__) || defined(__HAIKU__) || defined(__VOS__) || \
+       defined(__CYGWIN__)
+    /* BeOS/Haiku has O_TEXT != O_BINARY but O_TEXT and O_BINARY have no 
effect;
+     * BeOS/Haiku is always UNIXoid (LF), not DOSish (CRLF). */
     /* VOS has O_TEXT != O_BINARY, and they have effect,
      * but VOS always uses LF, never CRLF. */
     /* If you have O_TEXT different from your O_BINARY but you still are

==== //depot/perl/pod/perlport.pod#165 (text) ====
Index: perl/pod/perlport.pod
--- perl/pod/perlport.pod#164~33566~    2008-03-25 09:23:46.000000000 -0700
+++ perl/pod/perlport.pod       2008-10-29 01:09:06.000000000 -0700
@@ -815,6 +815,7 @@
     dgux          dgux       AViiON-dgux
     DYNIX/ptx     dynixptx   i386-dynixptx
     FreeBSD       freebsd    freebsd-i386    
+    Haiku         haiku      BePC-haiku
     Linux         linux      arm-linux
     Linux         linux      i386-linux
     Linux         linux      i586-linux

==== //depot/perl/t/io/fs.t#65 (xtext) ====
Index: perl/t/io/fs.t
--- perl/t/io/fs.t#64~34203~    2008-08-12 20:10:16.000000000 -0700
+++ perl/t/io/fs.t      2008-10-29 01:09:06.000000000 -0700
@@ -281,7 +281,7 @@
                is( $atime, 500000001,          'atime' );
                is( $mtime, 500000000 + $delta, 'mtime' );
            }
-           elsif ($^O eq 'beos') {
+           elsif ($^O eq 'beos' || $^O eq 'haiku') {
             SKIP: {
                    skip "atime not updated", 1;
                }
End of Patch.

Reply via email to