From 4bef2ada1d8a38b4dff88f0659a3b9e181bf1950 Mon Sep 17 00:00:00 2001 From: Oliver Tappe Date: Sun, 22 Sep 2013 14:52:03 +0200 Subject: Tell perl that BFS has a link count of 1 diff --git a/cpan/File-Temp/lib/File/Temp.pm b/cpan/File-Temp/lib/File/Temp.pm index ac57c26..759690c 100644 --- a/cpan/File-Temp/lib/File/Temp.pm +++ b/cpan/File-Temp/lib/File/Temp.pm @@ -2051,7 +2051,8 @@ sub unlink0 { # On NFS the link count may still be 1 but we can't know that # we are on NFS. Since we can't be sure, we'll defer it - return 1 if $fh[3] == 0 || $^O eq 'cygwin'; + # On haiku, the link count seems to be always 1 (at least for BFS) + return 1 if $fh[3] == 0 || $^O eq 'cygwin' || $^O eq 'haiku'; } # fall-through if we can't unlink now _deferred_unlink($fh, $path, 0); -- 1.8.3.4 From e54a8f98abfea2be3eec53b4bbe2cbaaf9f39139 Mon Sep 17 00:00:00 2001 From: Oliver Tappe Date: Sun, 22 Sep 2013 14:52:53 +0200 Subject: Haiku defines, but does not implement O_EXLOCK diff --git a/cpan/File-Temp/t/lock.t b/cpan/File-Temp/t/lock.t index ff8c7f9..4364bf6 100644 --- a/cpan/File-Temp/t/lock.t +++ b/cpan/File-Temp/t/lock.t @@ -8,7 +8,8 @@ use Fcntl; BEGIN { # see if we have O_EXLOCK eval { &Fcntl::O_EXLOCK; }; - if ($@) { + if ($@ || $^O eq 'haiku') { + # haiku doesn't implement O_EXLOCK yet (but it defines the value) plan skip_all => 'Do not seem to have O_EXLOCK'; } else { plan tests => 4; -- 1.8.3.4 From 30f81dcecdfb9c49ad8824314348cd23ef43ec0f Mon Sep 17 00:00:00 2001 From: Oliver Tappe Date: Sun, 22 Sep 2013 14:53:40 +0200 Subject: haiku sets all its specifics via Configure diff --git a/hints/haiku.sh b/hints/haiku.sh index fa8ebe5..0f09f53 100644 --- a/hints/haiku.sh +++ b/hints/haiku.sh @@ -1,44 +1 @@ -# Haiku hints file -# $Id$ - -case "$prefix" in -'') prefix="/boot/common" ;; -*) ;; # pass the user supplied value through -esac - -libpth='/boot/home/config/lib /boot/common/lib /system/lib' -usrinc='/boot/develop/headers/posix' -locinc='/boot/home/config/include /boot/common/include /boot/develop/headers' - -libc='/system/lib/libroot.so' -libs='-lnetwork' - -# Use Haiku's malloc() by default. -case "$usemymalloc" in -'') usemymalloc='n' ;; -esac - -# Haiku generally supports hard links, but the default file system (BFS) -# doesn't. So better avoid using hard links. -d_link='undef' -dont_use_nlink='define' - -# The array syserrlst[] is useless for the most part. -# Large negative numbers really kind of suck in arrays. -d_syserrlst='undef' - -# Haiku uses gcc. -cc="gcc" -ld='gcc' - -# The runtime loader library path variable is LIBRARY_PATH. -case "$ldlibpthname" in -'') ldlibpthname=LIBRARY_PATH ;; -esac - -# as of alpha 4.1 (at the latest) some symbols are versioned, -# confusing the nm lookup -case "$usenm" in -'') usenm='undef' ;; -esac - +# haiku sets all its specifics via Configure -- 1.8.3.4 From 187343906d2ed78aa5e5b4b3a6cfb7ad199c726f Mon Sep 17 00:00:00 2001 From: Oliver Tappe Date: Sun, 22 Sep 2013 14:54:15 +0200 Subject: Tell perl that Haiku needs haikuish.h installed as well diff --git a/installperl b/installperl index e64b1c3..8ae20cc 100755 --- a/installperl +++ b/installperl @@ -379,6 +379,11 @@ elsif ($Is_Cygwin) { # On Cygwin symlink it to CORE to make Makefile happy # AIX needs perl.exp installed as well. push(@corefiles,'perl.exp') if $^O eq 'aix'; + if ($^O eq 'haiku') { + # Haiku needs haikuish.h installed as well. + mkpath("$installarchlib/CORE/haiku", $opts{verbose}, 0777); + push(@corefiles,'haiku/haikuish.h'); + } } foreach my $file (@corefiles) { # HP-UX (at least) needs to maintain execute permissions -- 1.8.3.4 From 936c1f0486788b814578ea469f4441d1755dac71 Mon Sep 17 00:00:00 2001 From: Oliver Tappe Date: Sun, 22 Sep 2013 14:55:13 +0200 Subject: Fix handling of exit codes on Haiku diff --git a/t/run/exit.t b/t/run/exit.t index 02e57c6..e836410 100644 --- a/t/run/exit.t +++ b/t/run/exit.t @@ -55,18 +55,18 @@ is( ${^CHILD_ERROR_NATIVE}, $native_success, 'Normal exit ${^CHILD_ERROR_NATIVE if (!$vms_exit_mode) { my $posix_ok = eval { require POSIX; }; my $wait_macros_ok = defined &POSIX::WIFEXITED; - eval { POSIX::WIFEXITED(${^CHILD_ERROR_NATIVE}) }; + eval { POSIX::WIFEXITED($?) }; $wait_macros_ok = 0 if $@; $exit = run('exit 42'); is( $exit >> 8, 42, 'Non-zero exit' ); is( $exit, $?, 'Non-zero exit $?' ); - isnt( !${^CHILD_ERROR_NATIVE}, 0, 'Non-zero exit ${^CHILD_ERROR_NATIVE}' ); + isnt( ${^CHILD_ERROR_NATIVE}, 0, 'Non-zero exit ${^CHILD_ERROR_NATIVE}' ); SKIP: { skip("No POSIX", 3) unless $posix_ok; skip("No POSIX wait macros", 3) unless $wait_macros_ok; - ok(POSIX::WIFEXITED(${^CHILD_ERROR_NATIVE}), "WIFEXITED"); - ok(!POSIX::WIFSIGNALED(${^CHILD_ERROR_NATIVE}), "WIFSIGNALED"); - is(POSIX::WEXITSTATUS(${^CHILD_ERROR_NATIVE}), 42, "WEXITSTATUS"); + ok(POSIX::WIFEXITED($?), "WIFEXITED"); + ok(!POSIX::WIFSIGNALED($?), "WIFSIGNALED"); + is(POSIX::WEXITSTATUS($?), 42, "WEXITSTATUS"); } SKIP: { @@ -85,9 +85,9 @@ if (!$vms_exit_mode) { SKIP: { skip("No POSIX", 3) unless $posix_ok; skip("No POSIX wait macros", 3) unless $wait_macros_ok; - ok(!POSIX::WIFEXITED(${^CHILD_ERROR_NATIVE}), "WIFEXITED"); - ok(POSIX::WIFSIGNALED(${^CHILD_ERROR_NATIVE}), "WIFSIGNALED"); - is(POSIX::WTERMSIG(${^CHILD_ERROR_NATIVE}), 15, "WTERMSIG"); + ok(!POSIX::WIFEXITED($?), "WIFEXITED"); + ok(POSIX::WIFSIGNALED($?), "WIFSIGNALED"); + is(POSIX::WTERMSIG($?), 15, "WTERMSIG"); } } -- 1.8.3.4 From c8c19c0e4b6493dd5122749ba0f0d7d8b1b89117 Mon Sep 17 00:00:00 2001 From: Oliver Tappe Date: Sun, 22 Sep 2013 15:00:44 +0200 Subject: Fix include path of errno.h diff --git a/ext/Errno/Errno_pm.PL b/ext/Errno/Errno_pm.PL index b707911..7999ae4 100644 --- a/ext/Errno/Errno_pm.PL +++ b/ext/Errno/Errno_pm.PL @@ -143,7 +143,7 @@ sub get_files { $file{$linux_errno_h} = 1; } elsif ($^O eq 'haiku') { # hidden in a special place - $file{'/boot/develop/headers/posix/errno.h'} = 1; + $file{'/boot/system/develop/headers/posix/errno.h'} = 1; } elsif ($^O eq 'vos') { # avoid problem where cpp returns non-POSIX pathnames -- 1.8.3.4 From 46ed1ae1bc678bda0d0fe3efb589847798afab58 Mon Sep 17 00:00:00 2001 From: Oliver Tappe Date: Sat, 28 Sep 2013 13:46:42 +0200 Subject: Adjust ExtUtils::MakeMaker for PM-Haiku. * MakeMaker-projects trying to install into 'site-perl' while specifying PREFIX would end up using a wrong 'site-perl' prefix. * Split MM_Haiku.pm off MM_BeOS.pm, implementing Haiku-specific overrides for MakeMaker. diff --git a/cpan/ExtUtils-MakeMaker/MANIFEST b/cpan/ExtUtils-MakeMaker/MANIFEST index 72feb7d..8eb81f3 100644 --- a/cpan/ExtUtils-MakeMaker/MANIFEST +++ b/cpan/ExtUtils-MakeMaker/MANIFEST @@ -48,6 +48,7 @@ lib/ExtUtils/MM_BeOS.pm lib/ExtUtils/MM_Cygwin.pm lib/ExtUtils/MM_Darwin.pm lib/ExtUtils/MM_DOS.pm +lib/ExtUtils/MM_Haiku.pm lib/ExtUtils/MM_MacOS.pm lib/ExtUtils/MM_NW5.pm lib/ExtUtils/MM_OS2.pm diff --git a/cpan/ExtUtils-MakeMaker/NOTES b/cpan/ExtUtils-MakeMaker/NOTES index cb29aec..bfa628c 100644 --- a/cpan/ExtUtils-MakeMaker/NOTES +++ b/cpan/ExtUtils-MakeMaker/NOTES @@ -80,9 +80,9 @@ The MM_* hierarchy MM_Win95 MM_NW5 \ / -MM_BeOS MM_Cygwin MM_OS2 MM_VMS MM_Win32 MM_DOS MM_UWIN - \ | | | / / / - ------------------------------------------------ +MM_BeOS MM_Cygwin MM_OS2 MM_VMS MM_Win32 MM_DOS MM_UWIN MM_Haiku + \ | | | / / / / + -------------------------------------------------------- | | MM_Unix | | | diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM.pm index 26ed594..dfeea45 100644 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM.pm +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM.pm @@ -59,7 +59,8 @@ if( $^O eq 'MSWin32' ) { $Is{UWIN} = $^O =~ /^uwin(-nt)?$/; $Is{Cygwin} = $^O eq 'cygwin'; $Is{NW5} = $Config{osname} eq 'NetWare'; # intentional -$Is{BeOS} = ($^O =~ /beos/i or $^O eq 'haiku'); +$Is{BeOS} = $^O =~ /beos/i; +$Is{Haiku} = $^O eq 'haiku'; $Is{DOS} = $^O eq 'dos'; if( $Is{NW5} ) { $^O = 'NetWare'; diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Haiku.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Haiku.pm new file mode 100644 index 0000000..81e5f99 --- /dev/null +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Haiku.pm @@ -0,0 +1,70 @@ +package ExtUtils::MM_Haiku; + +use strict; + +=head1 NAME + +ExtUtils::MM_Haiku - methods to override UN*X behaviour in ExtUtils::MakeMaker + +=head1 SYNOPSIS + + use ExtUtils::MM_Haiku; # Done internally by ExtUtils::MakeMaker if needed + +=head1 DESCRIPTION + +See ExtUtils::MM_Unix for a documentation of the methods provided +there. This package overrides the implementation of these methods, not +the semantics. + +=over 4 + +=cut + +use ExtUtils::MakeMaker::Config; +use File::Spec; +require ExtUtils::MM_Any; +require ExtUtils::MM_Unix; + +our @ISA = qw( ExtUtils::MM_Any ExtUtils::MM_Unix ); +our $VERSION = '6.66'; + + +=item os_flavor + +Haiku is Haiku. + +=cut + +sub os_flavor { + return('Haiku'); +} + +=head3 init_INSTALL_from_PREFIX + + $mm->init_INSTALL_from_PREFIX; + +=cut + +sub init_INSTALL_from_PREFIX { + my $self = shift; + + # If a prefix has been given from outside, the default implementation + # will set PERLPREFIX, SITEPREFIX and VENDORPREFIX to identical values, + # but due to the way how Haiku's package management works, PERLPREFIX + # and VENDORPREFIX are not writable at all (as they're being populated + # from installed packages via package-fs). SITEPREFIX, however needs to + # be set to a path which can be written to (since site packages are + # expected to be installed "manually") - so we make sure it points + # to a 'non-packaged'-folder: + my $prefixGiven = $self->{PREFIX}; + $self->SUPER::init_INSTALL_from_PREFIX(); + if ($prefixGiven) { + $self->{SITEPREFIX} = '$(PREFIX)/non-packaged'; + } +} + +=back + +1; +__END__ + -- 1.8.3.4 From f9458e30c41213d315721183c9f10c3605812f57 Mon Sep 17 00:00:00 2001 From: Oliver Tappe Date: Tue, 8 Oct 2013 22:16:37 +0200 Subject: Avoid using -rpath for dynamic modules. diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Haiku.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Haiku.pm index 81e5f99..25ace13 100644 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Haiku.pm +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Haiku.pm @@ -65,6 +65,33 @@ sub init_INSTALL_from_PREFIX { =back +=head3 init_others + + $MM->init_others(); + +Initializes the macro definitions having to do with compiling and +linking used by tools_other() and places them in the $MM object. + +If there is no description, its the same as the parameter to +WriteMakefile() documented in ExtUtils::MakeMaker. + +=cut + +sub init_others { + my $self = shift; + + $self->SUPER::init_others(); + + # Don't use run-time paths for libraries required by dynamic + # modules on Haiku, as that wouldn't work should a library be moved + # (for instance because the package has been activated somewhere else). + $self->{LD_RUN_PATH} = ""; + + return; +} + +=back + 1; __END__ -- 1.8.3.4 From 5d6dde9cb0022bdeee490b383ff1991eacc3b9cc Mon Sep 17 00:00:00 2001 From: Oliver Tappe Date: Tue, 8 Oct 2013 22:17:26 +0200 Subject: Add script sitecustomize.pl for setting up @INC as we need it. diff --git a/sitecustomize.pl b/sitecustomize.pl new file mode 100644 index 0000000..a321e51 --- /dev/null +++ b/sitecustomize.pl @@ -0,0 +1,36 @@ +#! perl + +use Config; + +# Remove all compiled-in paths referring to Perl's installation dir +# and replace them with a static set of paths that implement the intended +# searching order: +my @ourINC = ( + "/boot/home/config/lib/perl5/$Config{version}/$Config{archname}", + "/boot/home/config/lib/perl5/$Config{version}", + "/boot/home/config/non-packaged/lib/perl5/site_perl/$Config{version}/$Config{archname}", + "/boot/home/config/non-packaged/lib/perl5/site_perl/$Config{version}", + "/boot/home/config/lib/perl5/vendor_perl/$Config{version}/$Config{archname}", + "/boot/home/config/lib/perl5/vendor_perl/$Config{version}", + "/boot/home/config/lib/perl5/vendor_perl", + "/boot/system/lib/perl5/$Config{version}/$Config{archname}", + "/boot/system/lib/perl5/$Config{version}", + "/boot/system/non-packaged/lib/perl5/site_perl/$Config{version}/$Config{archname}", + "/boot/system/non-packaged/lib/perl5/site_perl/$Config{version}", + "/boot/system/lib/perl5/vendor_perl/$Config{version}/$Config{archname}", + "/boot/system/lib/perl5/vendor_perl/$Config{version}", + "/boot/system/lib/perl5/vendor_perl", +); +my @newINC; +my $removedPerlPaths; +foreach my $inc (@INC) { + if ($inc =~ m[^/packages/perl-$Config{version}-\d+/.self/]o) { + if (! $removedPerlPaths) { + push @newINC, @ourINC; + $removedPerlPaths = 1; + } + next; + } + push @newINC, $inc; +} +@INC = @newINC; -- 1.8.3.4 From f33151a4535dd22acaae24d4b16da3115b6cef64 Mon Sep 17 00:00:00 2001 From: Oliver Tappe Date: Wed, 9 Oct 2013 20:29:38 +0200 Subject: Fix initialization check for CPAN. * On Haiku, only the site-lib directories will ever be writable, as the others read-only. This avoids CPAN asking for a way to circumvent unwritable lib dirs. diff --git a/cpan/CPAN/lib/CPAN/FirstTime.pm b/cpan/CPAN/lib/CPAN/FirstTime.pm index b099b04..55bf194 100644 --- a/cpan/CPAN/lib/CPAN/FirstTime.pm +++ b/cpan/CPAN/lib/CPAN/FirstTime.pm @@ -2010,6 +2010,12 @@ sub _print_urllist { } sub _can_write_to_libdirs { + if ($^O eq 'haiku') { + # on Haiku, the other dirs are never writable, as they are + # being populated by packagefs + return -w $Config{installsitelib} + && -w $Config{installsitearch} + } return -w $Config{installprivlib} && -w $Config{installarchlib} && -w $Config{installsitelib} -- 1.8.3.4 From 6fbbb6e99558e992f373cddd6ae02a3656ad7ce0 Mon Sep 17 00:00:00 2001 From: Oliver Tappe Date: Sun, 13 Oct 2013 17:32:50 +0200 Subject: Add support for HAIKU_USE_VENDOR_DIRECTORIES. * Adjust MakeMaker to automatically switch to vendor directories if requested via HAIKU_USE_VENDOR_DIRECTORIES. diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Haiku.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Haiku.pm index 25ace13..0be8c3d 100644 --- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Haiku.pm +++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Haiku.pm @@ -29,21 +29,20 @@ our @ISA = qw( ExtUtils::MM_Any ExtUtils::MM_Unix ); our $VERSION = '6.66'; -=item os_flavor - -Haiku is Haiku. - -=cut - sub os_flavor { return('Haiku'); } -=head3 init_INSTALL_from_PREFIX +sub init_main { + my $self = shift; - $mm->init_INSTALL_from_PREFIX; + # switch to vendor directories if requested. + if ($ENV{'HAIKU_USE_VENDOR_DIRECTORIES'}) { + $self->{INSTALLDIRS} ||= 'vendor'; + } -=cut + $self->SUPER::init_main(); +} sub init_INSTALL_from_PREFIX { my $self = shift; @@ -63,20 +62,6 @@ sub init_INSTALL_from_PREFIX { } } -=back - -=head3 init_others - - $MM->init_others(); - -Initializes the macro definitions having to do with compiling and -linking used by tools_other() and places them in the $MM object. - -If there is no description, its the same as the parameter to -WriteMakefile() documented in ExtUtils::MakeMaker. - -=cut - sub init_others { my $self = shift; @@ -90,8 +75,6 @@ sub init_others { return; } -=back - 1; __END__ -- 1.8.3.4