Skip to content

Commit

Permalink
Haiku Port
Browse files Browse the repository at this point in the history
Message-Id: <20081029022544.413.1@knochen-vm.localdomain>

p4raw-id: //depot/perl@34630
  • Loading branch information
weinhold authored and H.Merijn Brand committed Oct 29, 2008
1 parent 85fbaab commit df00ff3
Show file tree
Hide file tree
Showing 16 changed files with 319 additions and 12 deletions.
8 changes: 6 additions & 2 deletions Configure
Expand Up @@ -25,7 +25,7 @@


# $Id: Head.U 6 2006-08-25 22:21:46Z rmanfredi $ # $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 perlbug@perl.org) # (with additional metaconfig patches by perlbug@perl.org)


cat >c1$$ <<EOF cat >c1$$ <<EOF
Expand Down Expand Up @@ -8014,6 +8014,7 @@ EOM
case "$lddlflags" in case "$lddlflags" in
'') case "$osname" in '') case "$osname" in
beos) dflt='-nostart' ;; beos) dflt='-nostart' ;;
haiku) dflt='-shared' ;;
hpux) dflt='-b'; hpux) dflt='-b';
case "$gccversion" in case "$gccversion" in
'') dflt="$dflt +vnocompatwarnings" ;; '') dflt="$dflt +vnocompatwarnings" ;;
Expand Down Expand Up @@ -8107,7 +8108,7 @@ $undef)
;; ;;
*) case "$useshrplib" in *) case "$useshrplib" in
'') case "$osname" in '') case "$osname" in
svr4*|nonstopux|dgux|dynixptx|esix|powerux|beos|cygwin*) svr4*|nonstopux|dgux|dynixptx|esix|powerux|beos|haiku|cygwin*)
dflt=y dflt=y
also='Building a shared libperl is required for dynamic loading to work on your system.' also='Building a shared libperl is required for dynamic loading to work on your system.'
;; ;;
Expand Down Expand Up @@ -8274,6 +8275,9 @@ if "$useshrplib"; then
beos) beos)
# beos doesn't like the default, either. # beos doesn't like the default, either.
;; ;;
haiku)
# Haiku doesn't like the default, either.
;;
hpux*) hpux*)
# hpux doesn't like the default, either. # hpux doesn't like the default, either.
tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\"" tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
Expand Down
7 changes: 7 additions & 0 deletions MANIFEST
Expand Up @@ -1478,6 +1478,10 @@ h2pl/mkvars Program to make .pl from .ph files
h2pl/README How to turn .ph files into .pl files h2pl/README How to turn .ph files into .pl files
h2pl/tcbreak cbreak test routine using .ph h2pl/tcbreak cbreak test routine using .ph
h2pl/tcbreak2 cbreak test routine using .pl 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 handy.h Handy definitions
hints/3b1cc Hints for named architecture hints/3b1cc Hints for named architecture
hints/3b1.sh Hints for named architecture hints/3b1.sh Hints for named architecture
Expand Down Expand Up @@ -1513,6 +1517,7 @@ hints/gnukfreebsd.sh Hints for named architecture
hints/gnuknetbsd.sh Hints for named architecture hints/gnuknetbsd.sh Hints for named architecture
hints/gnu.sh Hints for named architecture hints/gnu.sh Hints for named architecture
hints/greenhills.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/hpux.sh Hints for named architecture
hints/i386.sh Hints for named architecture hints/i386.sh Hints for named architecture
hints/interix.sh Hints for named architecture hints/interix.sh Hints for named architecture
Expand Down Expand Up @@ -1982,6 +1987,7 @@ lib/ExtUtils/MM_BeOS.pm MakeMaker methods for BeOS
lib/ExtUtils/MM_Cygwin.pm MakeMaker methods for Cygwin lib/ExtUtils/MM_Cygwin.pm MakeMaker methods for Cygwin
lib/ExtUtils/MM_Darwin.pm MakeMaker methods for Darwin lib/ExtUtils/MM_Darwin.pm MakeMaker methods for Darwin
lib/ExtUtils/MM_DOS.pm MakeMaker methods for DOS 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_MacOS.pm MakeMaker methods for MacOS
lib/ExtUtils/MM_NW5.pm MakeMaker methods for NetWare lib/ExtUtils/MM_NW5.pm MakeMaker methods for NetWare
lib/ExtUtils/MM_OS2.pm MakeMaker methods for OS/2 lib/ExtUtils/MM_OS2.pm MakeMaker methods for OS/2
Expand Down Expand Up @@ -3535,6 +3541,7 @@ README.dgux Perl notes for DG/UX
README.dos Perl notes for DOS README.dos Perl notes for DOS
README.epoc Perl notes for EPOC README.epoc Perl notes for EPOC
README.freebsd Perl notes for FreeBSD README.freebsd Perl notes for FreeBSD
README.haiku Perl notes for Haiku
README.hpux Perl notes for HP-UX README.hpux Perl notes for HP-UX
README.hurd Perl notes for Hurd README.hurd Perl notes for Hurd
README.irix Perl notes for Irix README.irix Perl notes for Irix
Expand Down
64 changes: 64 additions & 0 deletions README.haiku
@@ -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 <ingo_weinhold@gmx.de>.

Last update: 2008-10-29
2 changes: 1 addition & 1 deletion ext/Errno/Errno_pm.PL
Expand Up @@ -155,7 +155,7 @@ sub get_files {
# we might miss out on compiler-specific ones # we might miss out on compiler-specific ones
$file{"$ENV{GUSI}include:sys:errno.h"} = 1; $file{"$ENV{GUSI}include:sys:errno.h"} = 1;


} elsif ($^O eq 'beos') { } elsif ($^O eq 'beos' || $^O eq 'haiku') {
# hidden in a special place # hidden in a special place
$file{'/boot/develop/headers/posix/errno.h'} = 1; $file{'/boot/develop/headers/posix/errno.h'} = 1;


Expand Down
3 changes: 2 additions & 1 deletion ext/Time/HiRes/t/HiRes.t
Expand Up @@ -337,7 +337,8 @@ unless ( defined &Time::HiRes::setitimer
&& defined &Time::HiRes::getitimer && defined &Time::HiRes::getitimer
&& has_symbol('ITIMER_VIRTUAL') && has_symbol('ITIMER_VIRTUAL')
&& $Config{sig_name} =~ m/\bVTALRM\b/ && $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) { for (18..19) {
print "ok $_ # Skip: no virtual interval timers\n"; print "ok $_ # Skip: no virtual interval timers\n";
} }
Expand Down
54 changes: 54 additions & 0 deletions haiku/Haiku/Haiku.pm
@@ -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
137 changes: 137 additions & 0 deletions haiku/Haiku/Haiku.xs
@@ -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;
}
20 changes: 20 additions & 0 deletions haiku/Haiku/Makefile.PL
@@ -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 => \@libs,
INSTALLDIRS => ($] >= 5.008004 ? 'perl' : 'site'),
NO_META => 1,

AUTHOR => 'Ingo Weinhold <ingo_weinhold@gmx.de>',
ABSTRACT_FROM => 'Haiku.pm',
);
11 changes: 11 additions & 0 deletions haiku/haikuish.h
@@ -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

1 change: 1 addition & 0 deletions lib/CPANPLUS/Internals/Constants/Report.pm
Expand Up @@ -29,6 +29,7 @@ my %OS = (
Cygwin => 'cygwin', Cygwin => 'cygwin',
Darwin => 'darwin', Darwin => 'darwin',
EBCDIC => 'os390|os400|posix-bc|vmesa', EBCDIC => 'os390|os400|posix-bc|vmesa',
Haiku => 'haiku',
HPUX => 'hpux', HPUX => 'hpux',
Linux => 'linux', Linux => 'linux',
MSDOS => 'dos|os2|MSWin32|cygwin', MSDOS => 'dos|os2|MSWin32|cygwin',
Expand Down
1 change: 1 addition & 0 deletions lib/ExtUtils/CBuilder.pm
Expand Up @@ -38,6 +38,7 @@ my %OSTYPES = qw(
os2 Unix os2 Unix
gnu Unix gnu Unix
gnukfreebsd Unix gnukfreebsd Unix
haiku Unix
dos Windows dos Windows
MSWin32 Windows MSWin32 Windows
Expand Down

0 comments on commit df00ff3

Please sign in to comment.