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.