mirror of
https://gitlab.redox-os.org/redox-os/redox.git
synced 2026-06-21 04:14:17 +08:00
Make perl5 recipe to build perl 5.40.
This commit is contained in:
parent
eaa76f41c1
commit
89135c7109
351
recipes/wip/dev/lang/perl5/configure_tool.sh
Normal file
351
recipes/wip/dev/lang/perl5/configure_tool.sh
Normal file
@ -0,0 +1,351 @@
|
||||
# Toolchain detection
|
||||
|
||||
tryprog() {
|
||||
log "trying $1=$2"
|
||||
if command -v $2 1>/dev/null 2>/dev/null; then
|
||||
define "$1" "$2"
|
||||
result "$2"
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
tryfromenv() {
|
||||
if [ "$mode" = "buildmini" ]; then
|
||||
getenv ev "HOST$2"
|
||||
else
|
||||
getenv ev "$2"
|
||||
fi
|
||||
|
||||
if [ -n "$ev" ]; then
|
||||
tryprog $1 "$ev" && return 0
|
||||
die "Supplied $ev is not usable"
|
||||
fi
|
||||
|
||||
unset ev
|
||||
return 1
|
||||
}
|
||||
|
||||
# This is only a function for easy access to return-s
|
||||
# try.out contains `$cc --version` output.
|
||||
#
|
||||
# Figuring out gcc is necessary to make sure -fwrapv fix gets applied.
|
||||
|
||||
detect_cc_version() {
|
||||
_v=`sed -ne '/^gcc version \([0-9][0-9.]*\).*/s//\1/p' try.out`
|
||||
|
||||
if [ -n "$_v" ]; then
|
||||
define cctype 'gcc'
|
||||
define ccversion "$_v"
|
||||
define gccversion "$_v"
|
||||
result "gcc $_v"
|
||||
return
|
||||
fi
|
||||
|
||||
_v=`sed -ne '/^clang version \([0-9][0-9.]*\).*/s//\1/p' try.out`
|
||||
|
||||
if [ -n "$_v" ]; then
|
||||
define cctype 'clang'
|
||||
define ccversion "$_v"
|
||||
define gccversion "0.0"
|
||||
result "clang $_v"
|
||||
return
|
||||
fi
|
||||
|
||||
define cctype 'cc'
|
||||
define ccversion ''
|
||||
define gccversion '0.0'
|
||||
result 'unknown'
|
||||
}
|
||||
|
||||
# whichprog symbol VAR prog1 prog2
|
||||
whichprog() {
|
||||
mstart "Checking for $1"
|
||||
hinted "$1" && return 0
|
||||
|
||||
# Maybe we've got $CC or $HOSTCC?
|
||||
tryfromenv "$1" "$2" && return 0
|
||||
|
||||
# For anything that sounds like a native compilation,
|
||||
# try no-prefix tools *first*. This is to avoid using
|
||||
# long names is case the host happens to have them.
|
||||
if [ "$mode" = 'native' -o "$mode" = 'buildmini' ]; then
|
||||
tryprog $1 "$3" && return 0
|
||||
fi
|
||||
|
||||
# Finally, try $target-gcc
|
||||
test -n "$toolsprefix" && tryprog $1 "$toolsprefix$3" && return 0
|
||||
test -n "$target" && tryprog $1 "$target-$3" && return 0
|
||||
test -n "$targetarch" && tryprog $1 "$targetarch-$3" && return 0
|
||||
|
||||
result "none found"
|
||||
return 1
|
||||
}
|
||||
|
||||
whichprog cc CC gcc || whichprog cc CC cc || die "No C compiler found"
|
||||
#whichprog ld LD ld # while correct, this breaks MM library test
|
||||
whichprog ar AR ar || die "Cannot find ar"
|
||||
whichprog nm NM nm
|
||||
whichprog ranlib RANLIB ranlib
|
||||
whichprog readelf READELF readelf || die "Cannot find readelf"
|
||||
whichprog objdump OBJDUMP objdump || die "Cannot find objdump"
|
||||
|
||||
# XXX: this looks wrong, but the usemmldlt code depends on $ld being able
|
||||
# to compile try.c. What kind of moron could have written that. Oh wait.
|
||||
#
|
||||
# But, there was probably a reason to assume this, likely becase mainline
|
||||
# Configure did and still does the same. So, ugh, leaving it as is for now.
|
||||
# Speak of backward bug compatibility.
|
||||
define ld "$cc"
|
||||
|
||||
log
|
||||
|
||||
mstart "Trying $cc"
|
||||
if not hinted 'cctype'; then
|
||||
run $cc -v >try.out 2>&1
|
||||
try_dump_out
|
||||
detect_cc_version
|
||||
fi
|
||||
|
||||
mstart "Checking whether $cc is a C++ compiler"
|
||||
if not hinted 'd_cplusplus'; then
|
||||
try_start
|
||||
try_cat <<END
|
||||
#if defined(__cplusplus)
|
||||
YES
|
||||
#endif
|
||||
END
|
||||
try_dump
|
||||
if not run $cc $ccflags -E try.c > try.out 2>>$cfglog; then
|
||||
define d_cplusplus 'undef'
|
||||
result "probably no"
|
||||
else
|
||||
_r=`grep -v '^#' try.out | grep . | head -1 | grep '^YES'`
|
||||
if [ -n "$_r" ]; then
|
||||
define d_cplusplus 'define'
|
||||
result "yes"
|
||||
else
|
||||
define d_cplusplus 'undef'
|
||||
result 'no'
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
mstart "Deciding how to declare external symbols"
|
||||
if not hinted "extern_C"; then
|
||||
case "$d_cplusplus" in
|
||||
define)
|
||||
define "extern_C" 'extern "C"'
|
||||
result "$extern_C"
|
||||
;;
|
||||
*)
|
||||
define "extern_C" 'extern'
|
||||
result "$extern_C"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
# File name extensions, must be set before running any compile/link tests
|
||||
define _o '.o'
|
||||
define _a '.a'
|
||||
define so 'so'
|
||||
define _exe ''
|
||||
|
||||
# Used only for modules
|
||||
define cccdlflags '-fPIC -Wno-unused-function'
|
||||
define ccdlflags '-Wl,-E'
|
||||
|
||||
# Misc flags setup
|
||||
predef lddlflags "-shared" # modules
|
||||
predef ccflags '' # perl and modules
|
||||
predef ldflags '' # perl only?
|
||||
predef cppflags '' # unused?
|
||||
|
||||
# setfromvar what SHELLVAR
|
||||
setfromenv() {
|
||||
getenv v "$2"
|
||||
test -n "$v" && append "$1" "$v"
|
||||
}
|
||||
|
||||
if [ "$mode" = 'target' -o "$mode" = 'native' ]; then
|
||||
setfromenv ccflags CFLAGS
|
||||
setfromenv ldflags LDFLAGS
|
||||
if [ -n "$sysroot" ]; then
|
||||
msg "Adding --sysroot to {cc,ld}flags"
|
||||
prepend ccflags "--sysroot=$sysroot"
|
||||
prepend ldflags "--sysroot=$sysroot"
|
||||
# While cccdlflags are used together with ccflags,
|
||||
# ld is always called with lddlflags *instead*of* ldflags
|
||||
prepend lddlflags "--sysroot=$sysroot"
|
||||
# Same for cpp
|
||||
prepend cppflags "--sysroot=$sysroot"
|
||||
fi
|
||||
elif [ "$mode" = 'buildmini' ]; then
|
||||
setfromenv ccflags HOSTCFLAGS
|
||||
setfromenv ldflags HOSTLDFLAGS
|
||||
fi
|
||||
|
||||
# Use $ldflags as default value for $lddlflags, together with whatever
|
||||
# hints provided, but avoid re-setting anyting specified in the command line
|
||||
if [ -n "$ldflags" -a "$x_lddlflags" != "user" ]; then
|
||||
append lddlflags "$ldflags"
|
||||
fi
|
||||
|
||||
# enddef ccflags # done later in _hdrs because of LARGEFILE_SOURCE
|
||||
enddef ldflags
|
||||
enddef lddlflags
|
||||
enddef cppflags
|
||||
|
||||
mstart "Checking whether ld supports scripts"
|
||||
if not hinted 'ld_can_script'; then
|
||||
cat > try.c <<EOM
|
||||
void foo() {}
|
||||
void bar() {}
|
||||
EOM
|
||||
cat > try.h <<EOM
|
||||
LIBTEST_42 {
|
||||
global:
|
||||
foo;
|
||||
local: *;
|
||||
};
|
||||
EOM
|
||||
log "try.c"
|
||||
try_dump
|
||||
log "try.h"
|
||||
try_dump_h
|
||||
rm -f a.out 2>/dev/null
|
||||
|
||||
if run $cc $cccdlflags $ccdlflags $ccflags $lddlflags -o a.out try.c \
|
||||
-Wl,--version-script=try.h >/dev/null 2>&1 \
|
||||
&& test -s a.out
|
||||
then
|
||||
define ld_can_script 'define'
|
||||
result "yes"
|
||||
else
|
||||
define ld_can_script 'undef'
|
||||
result "no"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Guessing OS is better done with the toolchain available.
|
||||
# CC output is crucial here -- Android toolchains come with
|
||||
# generic armeabi prefix and "android" is one of the few osname
|
||||
# values that make difference later.
|
||||
|
||||
mstart "Trying to guess target OS"
|
||||
if not hinted 'osname'; then
|
||||
run $cc -v > try.out 2>&1
|
||||
try_dump_out
|
||||
|
||||
_ct=`sed -ne '/^Target: /s///p' try.out`
|
||||
test -z "$_ct" && _ct="$targetarch"
|
||||
|
||||
case "$_ct" in
|
||||
*-mingw32)
|
||||
define osname "MSWin32"
|
||||
result "MSWin32"
|
||||
;;
|
||||
*-android|*-androideabi)
|
||||
define osname "android"
|
||||
result "Android"
|
||||
;;
|
||||
*-linux*)
|
||||
define osname "linux"
|
||||
result "Linux"
|
||||
;;
|
||||
*-netbsd*)
|
||||
define osname "netbsd"
|
||||
result "NetBSD"
|
||||
;;
|
||||
*-bsd*)
|
||||
define osname "bsd"
|
||||
result "BSD"
|
||||
;;
|
||||
*-gnu*)
|
||||
define osname "gnu"
|
||||
result "GNU"
|
||||
;;
|
||||
*-midipix*)
|
||||
define osname "midipix"
|
||||
result "Midipix"
|
||||
;;
|
||||
*-redox*)
|
||||
define osname "redox"
|
||||
result "Redox"
|
||||
;;
|
||||
*)
|
||||
result "no"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
# Check whether debugging should be enabled
|
||||
# Allow -DEBUGGING as well (sets EBUGGING=define)
|
||||
case "$DEBUGGING:$EBUGGING" in
|
||||
:*)
|
||||
DEBUGGING=$EBUGGING
|
||||
;;
|
||||
esac
|
||||
|
||||
mstart "Checking whether to enable -g"
|
||||
predef optimize ''
|
||||
case "$DEBUGGING" in
|
||||
both|define)
|
||||
append optimize "-g"
|
||||
result "yes" ;;
|
||||
*)
|
||||
result "no" ;;
|
||||
esac
|
||||
|
||||
mstart "Checking whether to use -DDEBUGGING"
|
||||
case "$DEBUGGING" in
|
||||
both|define)
|
||||
append optimize '-DDEBUGGING'
|
||||
result "yes" ;;
|
||||
*)
|
||||
result "no" ;;
|
||||
esac
|
||||
|
||||
# gcc 4.9 and above does some optimizations that break perl.
|
||||
# see perl ticket 121505.
|
||||
if [ "$cctype" = 'gcc' ]; then
|
||||
case "$ccversion" in
|
||||
1.*|2.*|3.*) ;;
|
||||
4.9*) append 'optimize' '-fwrapv -fno-strict-aliasing' ;;
|
||||
4.*) ;;
|
||||
*) append 'optimize' '-fwrapv -fno-strict-aliasing' ;;
|
||||
esac
|
||||
fi
|
||||
enddef optimize
|
||||
|
||||
# These are kind-of part of toolchain, but we do not test them
|
||||
|
||||
# For newer gcc-s, -E alone is *not* enough! Perl expects cpp not to break
|
||||
# lines, but gcc injects #line directives in-between tokens, subtly breaking
|
||||
# try_preproc and Errno.pm
|
||||
define cpp "$cc -E -P"
|
||||
define cpprun "$cpp"
|
||||
define cppstdin "$cpp"
|
||||
|
||||
define cpplast -
|
||||
define cppminus -
|
||||
define cppsymbols
|
||||
|
||||
define nm_opt
|
||||
define nm_so_opt
|
||||
|
||||
# cperl wants to know this for some reason
|
||||
mstart "Checking whether address sanitizer is enabled"
|
||||
if not hinted sanitize_address 'yes' 'no'; then
|
||||
case "$ccflags" in
|
||||
*-fsanitize=address*|*-faddress-sanitizer*)
|
||||
define sanitize_address 'define'
|
||||
result 'yes'
|
||||
;;
|
||||
*)
|
||||
define sanitize_address 'undef'
|
||||
result 'no'
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
@ -1,320 +0,0 @@
|
||||
diff -ru source/ext/POSIX/POSIX.xs source-new/ext/POSIX/POSIX.xs
|
||||
--- source/ext/POSIX/POSIX.xs 2017-06-30 14:03:22.000000000 -0700
|
||||
+++ source-new/ext/POSIX/POSIX.xs 2017-08-17 19:21:59.498359355 -0700
|
||||
@@ -1302,6 +1302,7 @@
|
||||
#endif
|
||||
#include <fcntl.h>
|
||||
|
||||
+#if 0
|
||||
#ifdef HAS_TZNAME
|
||||
# if !defined(WIN32) && !defined(__CYGWIN__) && !defined(NETWARE) && !defined(__UWIN__)
|
||||
extern char *tzname[];
|
||||
@@ -1311,6 +1312,7 @@
|
||||
char *tzname[] = { "" , "" };
|
||||
#endif
|
||||
#endif
|
||||
+#endif
|
||||
|
||||
#if defined(__VMS) && !defined(__POSIX_SOURCE)
|
||||
|
||||
@@ -1327,10 +1329,11 @@
|
||||
#if defined (__CYGWIN__)
|
||||
# define tzname _tzname
|
||||
#endif
|
||||
-#if defined (WIN32) || defined (NETWARE)
|
||||
+#if 1
|
||||
# undef mkfifo
|
||||
# define mkfifo(a,b) not_here("mkfifo")
|
||||
# define ttyname(a) (char*)not_here("ttyname")
|
||||
+# define pause() not_here("pause")
|
||||
# define sigset_t long
|
||||
# define pid_t long
|
||||
# ifdef _MSC_VER
|
||||
@@ -1397,7 +1400,7 @@
|
||||
typedef HV* POSIX__SigAction;
|
||||
typedef int POSIX__SigNo;
|
||||
typedef int POSIX__Fd;
|
||||
-#ifdef I_TERMIOS
|
||||
+#if 0
|
||||
typedef struct termios* POSIX__Termios;
|
||||
#else /* Define termios types to int, and call not_here for the functions.*/
|
||||
#define POSIX__Termios int
|
||||
@@ -1829,7 +1832,7 @@
|
||||
const char * packname
|
||||
CODE:
|
||||
{
|
||||
-#ifdef I_TERMIOS
|
||||
+#if 0
|
||||
void *const p = allocate_struct(aTHX_ (ST(0) = sv_newmortal()),
|
||||
sizeof(struct termios), packname);
|
||||
/* The previous implementation stored a pointer to an uninitialised
|
||||
@@ -1896,7 +1899,7 @@
|
||||
getcflag = 2
|
||||
getlflag = 3
|
||||
CODE:
|
||||
-#ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
|
||||
+#if 0 /* References a termios structure member so ifdef it out. */
|
||||
switch(ix) {
|
||||
case 0:
|
||||
RETVAL = termios_ref->c_iflag;
|
||||
@@ -1925,7 +1928,7 @@
|
||||
POSIX::Termios termios_ref
|
||||
unsigned int ccix
|
||||
CODE:
|
||||
-#ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
|
||||
+#if 0 /* References a termios structure member so ifdef it out. */
|
||||
if (ccix >= NCCS)
|
||||
croak("Bad getcc subscript");
|
||||
RETVAL = termios_ref->c_cc[ccix];
|
||||
@@ -1957,7 +1960,7 @@
|
||||
setcflag = 2
|
||||
setlflag = 3
|
||||
CODE:
|
||||
-#ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
|
||||
+#if 0 /* References a termios structure member so ifdef it out. */
|
||||
switch(ix) {
|
||||
case 0:
|
||||
termios_ref->c_iflag = flag;
|
||||
@@ -1982,7 +1985,7 @@
|
||||
unsigned int ccix
|
||||
cc_t cc
|
||||
CODE:
|
||||
-#ifdef I_TERMIOS /* References a termios structure member so ifdef it out. */
|
||||
+#if 0 /* References a termios structure member so ifdef it out. */
|
||||
if (ccix >= NCCS)
|
||||
croak("Bad setcc subscript");
|
||||
termios_ref->c_cc[ccix] = cc;
|
||||
@@ -3540,15 +3543,15 @@
|
||||
void
|
||||
times()
|
||||
PPCODE:
|
||||
- struct tms tms;
|
||||
- clock_t realtime;
|
||||
- realtime = times( &tms );
|
||||
+ //struct tms tms;
|
||||
+ //clock_t realtime;
|
||||
+ //realtime = times( &tms );
|
||||
EXTEND(SP,5);
|
||||
- PUSHs( sv_2mortal( newSViv( (IV) realtime ) ) );
|
||||
- PUSHs( sv_2mortal( newSViv( (IV) tms.tms_utime ) ) );
|
||||
- PUSHs( sv_2mortal( newSViv( (IV) tms.tms_stime ) ) );
|
||||
- PUSHs( sv_2mortal( newSViv( (IV) tms.tms_cutime ) ) );
|
||||
- PUSHs( sv_2mortal( newSViv( (IV) tms.tms_cstime ) ) );
|
||||
+ PUSHs( sv_2mortal( newSViv( (IV) 0 ) ) );
|
||||
+ PUSHs( sv_2mortal( newSViv( (IV) 0 ) ) );
|
||||
+ PUSHs( sv_2mortal( newSViv( (IV) 0 ) ) );
|
||||
+ PUSHs( sv_2mortal( newSViv( (IV) 0 ) ) );
|
||||
+ PUSHs( sv_2mortal( newSViv( (IV) 0 ) ) );
|
||||
|
||||
double
|
||||
difftime(time1, time2)
|
||||
diff -ru source/mg.c source-new/mg.c
|
||||
--- source/mg.c 2017-06-30 14:03:22.000000000 -0700
|
||||
+++ source-new/mg.c 2017-08-17 14:40:37.669507085 -0700
|
||||
@@ -3034,16 +3034,16 @@
|
||||
#ifdef HAS_SETRESUID
|
||||
PERL_UNUSED_RESULT(setresuid(new_uid, (Uid_t)-1, (Uid_t)-1));
|
||||
#else
|
||||
- if (new_uid == PerlProc_geteuid()) { /* special case $< = $> */
|
||||
+// if (new_uid == PerlProc_geteuid()) { /* special case $< = $> */
|
||||
#ifdef PERL_DARWIN
|
||||
/* workaround for Darwin's setuid peculiarity, cf [perl #24122] */
|
||||
if (new_uid != 0 && PerlProc_getuid() == 0)
|
||||
PERL_UNUSED_RESULT(PerlProc_setuid(0));
|
||||
#endif
|
||||
- PERL_UNUSED_RESULT(PerlProc_setuid(new_uid));
|
||||
- } else {
|
||||
+// PERL_UNUSED_RESULT(PerlProc_setuid(new_uid));
|
||||
+// } else {
|
||||
Perl_croak(aTHX_ "setruid() not implemented");
|
||||
- }
|
||||
+// }
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
@@ -3067,11 +3067,11 @@
|
||||
#ifdef HAS_SETRESUID
|
||||
PERL_UNUSED_RESULT(setresuid((Uid_t)-1, new_euid, (Uid_t)-1));
|
||||
#else
|
||||
- if (new_euid == PerlProc_getuid()) /* special case $> = $< */
|
||||
- PERL_UNUSED_RESULT(PerlProc_setuid(new_euid));
|
||||
- else {
|
||||
+// if (new_euid == PerlProc_getuid()) /* special case $> = $< */
|
||||
+// PERL_UNUSED_RESULT(PerlProc_setuid(new_euid));
|
||||
+// else {
|
||||
Perl_croak(aTHX_ "seteuid() not implemented");
|
||||
- }
|
||||
+// }
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
@@ -3095,11 +3095,11 @@
|
||||
#ifdef HAS_SETRESGID
|
||||
PERL_UNUSED_RESULT(setresgid(new_gid, (Gid_t)-1, (Gid_t) -1));
|
||||
#else
|
||||
- if (new_gid == PerlProc_getegid()) /* special case $( = $) */
|
||||
- PERL_UNUSED_RESULT(PerlProc_setgid(new_gid));
|
||||
- else {
|
||||
+// if (new_gid == PerlProc_getegid()) /* special case $( = $) */
|
||||
+// PERL_UNUSED_RESULT(PerlProc_setgid(new_gid));
|
||||
+// else {
|
||||
Perl_croak(aTHX_ "setrgid() not implemented");
|
||||
- }
|
||||
+// }
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
@@ -3178,11 +3178,11 @@
|
||||
#ifdef HAS_SETRESGID
|
||||
PERL_UNUSED_RESULT(setresgid((Gid_t)-1, new_egid, (Gid_t)-1));
|
||||
#else
|
||||
- if (new_egid == PerlProc_getgid()) /* special case $) = $( */
|
||||
- PERL_UNUSED_RESULT(PerlProc_setgid(new_egid));
|
||||
- else {
|
||||
+// if (new_egid == PerlProc_getgid()) /* special case $) = $( */
|
||||
+// PERL_UNUSED_RESULT(PerlProc_setgid(new_egid));
|
||||
+// else {
|
||||
Perl_croak(aTHX_ "setegid() not implemented");
|
||||
- }
|
||||
+// }
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
diff -ru source/perl.h source-new/perl.h
|
||||
--- source/perl.h 2017-06-30 14:03:22.000000000 -0700
|
||||
+++ source-new/perl.h 2017-08-17 13:14:01.806883580 -0700
|
||||
@@ -1061,7 +1061,6 @@
|
||||
#ifndef PERL_MICRO
|
||||
#ifndef memchr
|
||||
# ifndef HAS_MEMCHR
|
||||
-# define memchr(s,c,n) ninstr((char*)(s), ((char*)(s)) + n, &(c), &(c) + 1)
|
||||
# endif
|
||||
#endif
|
||||
#endif
|
||||
diff -ru source/pp_hot.c source-new/pp_hot.c
|
||||
--- source/pp_hot.c 2017-06-30 14:03:22.000000000 -0700
|
||||
+++ source-new/pp_hot.c 2017-08-17 13:16:20.234635700 -0700
|
||||
@@ -1583,11 +1583,13 @@
|
||||
PL_delaymagic &= ~DM_EUID;
|
||||
}
|
||||
# endif /* HAS_SETEUID */
|
||||
+#if 0
|
||||
if (PL_delaymagic & DM_UID) {
|
||||
if (PL_delaymagic_uid != PL_delaymagic_euid)
|
||||
DIE(aTHX_ "No setreuid available");
|
||||
PERL_UNUSED_RESULT(PerlProc_setuid(PL_delaymagic_uid));
|
||||
}
|
||||
+#endif
|
||||
# endif /* HAS_SETREUID */
|
||||
#endif /* HAS_SETRESUID */
|
||||
|
||||
@@ -1619,11 +1621,13 @@
|
||||
PL_delaymagic &= ~DM_EGID;
|
||||
}
|
||||
# endif /* HAS_SETEGID */
|
||||
+#if 0
|
||||
if (PL_delaymagic & DM_GID) {
|
||||
if (PL_delaymagic_gid != PL_delaymagic_egid)
|
||||
DIE(aTHX_ "No setregid available");
|
||||
PERL_UNUSED_RESULT(PerlProc_setgid(PL_delaymagic_gid));
|
||||
}
|
||||
+#endif
|
||||
# endif /* HAS_SETREGID */
|
||||
#endif /* HAS_SETRESGID */
|
||||
|
||||
diff -ru source/pp_sys.c source-new/pp_sys.c
|
||||
--- source/pp_sys.c 2017-06-30 14:03:22.000000000 -0700
|
||||
+++ source-new/pp_sys.c 2017-08-17 14:57:00.983541027 -0700
|
||||
@@ -2413,7 +2413,7 @@
|
||||
TAINT_PROPER(PL_op_desc[optype]);
|
||||
|
||||
if (optype == OP_IOCTL)
|
||||
-#ifdef HAS_IOCTL
|
||||
+#if 0
|
||||
retval = PerlLIO_ioctl(PerlIO_fileno(IoIFP(io)), func, s);
|
||||
#else
|
||||
DIE(aTHX_ "ioctl is not implemented");
|
||||
@@ -2705,7 +2705,7 @@
|
||||
if (!IoIFP(io))
|
||||
goto nuts;
|
||||
|
||||
- PUSHi( PerlSock_shutdown(PerlIO_fileno(IoIFP(io)), how) >= 0 );
|
||||
+ PUSHi( 0 );
|
||||
RETURN;
|
||||
|
||||
nuts:
|
||||
@@ -2980,7 +2980,7 @@
|
||||
sv_setuid(PUSHmortal, PL_statcache.st_uid);
|
||||
sv_setgid(PUSHmortal, PL_statcache.st_gid);
|
||||
|
||||
-#ifdef USE_STAT_RDEV
|
||||
+#if 0
|
||||
mPUSHi(PL_statcache.st_rdev);
|
||||
#else
|
||||
PUSHs(newSVpvs_flags("", SVs_TEMP));
|
||||
@@ -4186,7 +4186,7 @@
|
||||
|
||||
PP(pp_fork)
|
||||
{
|
||||
-#ifdef HAS_FORK
|
||||
+#if 1
|
||||
dSP; dTARGET;
|
||||
Pid_t childpid;
|
||||
#ifdef HAS_SIGPROCMASK
|
||||
@@ -4332,7 +4332,7 @@
|
||||
TAINT_PROPER("system");
|
||||
}
|
||||
PERL_FLUSHALL_FOR_CHILD;
|
||||
-#if (defined(HAS_FORK) || defined(__amigaos4__)) && !defined(VMS) && !defined(OS2) || defined(PERL_MICRO)
|
||||
+#if 1
|
||||
{
|
||||
#ifdef __amigaos4__
|
||||
struct UserData userdata;
|
||||
@@ -5582,7 +5582,7 @@
|
||||
|
||||
PP(pp_ggrent)
|
||||
{
|
||||
-#ifdef HAS_GROUP
|
||||
+#if 0
|
||||
dSP;
|
||||
const I32 which = PL_op->op_type;
|
||||
const struct group *grent;
|
||||
diff -ru source/util.c source-new/util.c
|
||||
--- source/util.c 2017-06-30 14:03:22.000000000 -0700
|
||||
+++ source-new/util.c 2017-08-17 15:42:05.328932377 -0700
|
||||
@@ -2456,7 +2456,7 @@
|
||||
PerlIO *
|
||||
Perl_my_popen_list(pTHX_ const char *mode, int n, SV **args)
|
||||
{
|
||||
-#if (!defined(DOSISH) || defined(HAS_FORK)) && !defined(OS2) && !defined(VMS) && !defined(NETWARE) && !defined(__LIBCATAMOUNT__) && !defined(__amigaos4__)
|
||||
+#if 1
|
||||
int p[2];
|
||||
I32 This, that;
|
||||
Pid_t pid;
|
||||
@@ -2821,7 +2821,7 @@
|
||||
Pid_t
|
||||
Perl_my_fork(void)
|
||||
{
|
||||
-#if defined(HAS_FORK)
|
||||
+#if 1
|
||||
Pid_t pid;
|
||||
#if defined(USE_ITHREADS) && !defined(HAS_PTHREAD_ATFORK)
|
||||
atfork_lock();
|
||||
@@ -2842,7 +2842,7 @@
|
||||
#endif /* HAS_FORK */
|
||||
}
|
||||
|
||||
-#ifndef HAS_DUP2
|
||||
+#if 0
|
||||
int
|
||||
dup2(int oldfd, int newfd)
|
||||
{
|
||||
@@ -3196,7 +3196,7 @@
|
||||
|
||||
#if defined(OS2)
|
||||
int pclose();
|
||||
-#ifdef HAS_FORK
|
||||
+#if 1
|
||||
int /* Cannot prototype with I32
|
||||
in os2ish.h. */
|
||||
my_syspclose(PerlIO *ptr)
|
||||
@ -1,24 +1,50 @@
|
||||
#TODO incomplete script
|
||||
#TODO does the patch is still needed?
|
||||
#TODO update the patch to match the current version
|
||||
#TODO compiles, works in a basic way, but needs figuring out why -ldl is ignored
|
||||
#TODO also until new signal implementation gets to be the default, remove siginfo struct from relibc's include/bits/signal.h
|
||||
# and modify relibc/src/header/signal/mod.rs sigtimedwait second parameter's type from siginfo_t to siginfo (cbindgen needs a reference)
|
||||
#TODO needs further testing
|
||||
[source]
|
||||
tar = "https://www.cpan.org/src/5.0/perl-5.40.0.tar.gz"
|
||||
patches = [
|
||||
"perl.patch",
|
||||
]
|
||||
[build]
|
||||
template = "custom"
|
||||
script = """
|
||||
curl -L -O --time-cond perl-cross-1.5.3.tar.gz https://github.com/arsv/perl-cross/releases/download/1.5.3/perl-cross-1.5.3.tar.gz
|
||||
tar --strip-components=1 -xvf perl-cross-1.5.3.tar.gz
|
||||
wget -O cnf/config.sub "https://gitlab.redox-os.org/redox-os/gnu-config/-/raw/master/config.sub?inline=false"
|
||||
sysroot="$($HOST-gcc -print-sysroot)" # does it is still needed?
|
||||
sed -i "s/^#define Netdb_name_t.*/#define Netdb_name_t const char*/" config.h # XXX
|
||||
sed -i 's/#define Strerror(e).*$/#define Strerror(e) strerror(e)/' config.h #
|
||||
echo "#define HAS_VPRINTF" >> config.h
|
||||
COOKBOOK_CONFIGURE_FLAGS+=(
|
||||
rsync -av --delete "${COOKBOOK_SOURCE}/" ./ #move it to the top of the script after debugging - BP
|
||||
curl -L -O --time-cond perl-cross-1.6.tar.gz https://github.com/arsv/perl-cross/releases/download/1.6/perl-cross-1.6.tar.gz
|
||||
tar --strip-components=1 -xvf perl-cross-1.6.tar.gz
|
||||
wget -O ./cnf/config.sub "https://gitlab.redox-os.org/redox-os/gnu-config/-/raw/master/config.sub?inline=false"
|
||||
#Note: since perl-cross can run only inside the source-tree (out-of-tree is bugged) it's easier to do everything in the build directory
|
||||
COOKBOOK_CONFIGURE=${COOKBOOK_BUILD}/configure
|
||||
#Note: non-standard configure, familiar flags can have different meaning!
|
||||
COOKBOOK_CONFIGURE_FLAGS=(
|
||||
--host-cc=gcc
|
||||
--host-cpp=g++
|
||||
--target=x86_64-unknown-redox
|
||||
--prefix=
|
||||
--sysroot=${COOKBOOK_SYSROOT}
|
||||
--disable-mod=Sys-Syslog,Time-HiRes
|
||||
--with-libs='m'
|
||||
#--with-libs='m'
|
||||
)
|
||||
cookbook_configure
|
||||
cp ${COOKBOOK_RECIPE}/configure_tool.sh ${COOKBOOK_BUILD}/cnf/configure_tool.sh
|
||||
cp ${COOKBOOK_RECIPE}/redox ${COOKBOOK_BUILD}/cnf/hints/redox
|
||||
mkdir ${COOKBOOK_SYSROOT}/usr
|
||||
cp -r /mnt/c/commd/redox/redox/prefix/x86_64-unknown-redox/relibc-install/x86_64-unknown-redox/include ${COOKBOOK_SYSROOT}/usr
|
||||
./configure --host-cc=gcc --host-cpp=g++ --target=x86_64-unknown-redox --sysroot=${COOKBOOK_SYSROOT} --disable-mod=Sys-Syslog
|
||||
sed -i "s/^#define Netdb_name_t.*/#define Netdb_name_t const char*/" config.h
|
||||
#OSNAME sed -i 's/^#define OSNAME.*/#define OSNAME "redox"/' config.h
|
||||
sed -i "s/^# HAS_NANOSLEEP.*/#define HAS_NANOSLEEP/" config.h
|
||||
sed -i "s|^/.#define I_GRP.*|#define I_GRP|" config.h
|
||||
echo "#define HAS_GROUP" >> config.h
|
||||
#sed -i 's/#define Strerror(e).*$/#define Strerror(e) strerror(e)/' config.h
|
||||
#echo "#define HAS_VPRINTF" >> config.h
|
||||
make -j4
|
||||
make install DESTDIR="${COOKBOOK_STAGE}"
|
||||
pushd .
|
||||
cd "${COOKBOOK_STAGE}/usr/share/man/man3"
|
||||
for f in *; do
|
||||
case "$f" in
|
||||
*::*)
|
||||
mv "$f" "${f//::/__}";
|
||||
;;
|
||||
esac
|
||||
done
|
||||
popd
|
||||
"""
|
||||
|
||||
5
recipes/wip/dev/lang/perl5/redox
Normal file
5
recipes/wip/dev/lang/perl5/redox
Normal file
@ -0,0 +1,5 @@
|
||||
# NetBSD syscalls
|
||||
d_nanosleep='define'
|
||||
|
||||
# libraries to test
|
||||
libswanted='m dl'
|
||||
Loading…
Reference in New Issue
Block a user