ports/lang/perl5.24/files/patch-dtrace
Mathieu Arnold 8f4260180f Update to 5.24.3.
Sponsored by:	Absolight
2017-09-25 13:01:22 +00:00

266 lines
8.3 KiB
Text

--- Configure.orig 2017-09-22 14:26:35 UTC
+++ Configure
@@ -940,6 +940,7 @@ lddlflags=''
usedl=''
doublesize=''
dtraceobject=''
+dtracexnolibs=''
ebcdic=''
fflushNULL=''
fflushall=''
@@ -8154,10 +8155,19 @@ while $test 1 ; do
if $test -f $dtrace
then
- if $dtrace -h -s ../perldtrace.d \
+ if $dtrace -h -xnolibs -s ../perldtrace.d \
-o perldtrace.tmp >/dev/null 2>&1 \
&& rm -f perldtrace.tmp
then
+ default_xnolibs=$define
+ echo " "
+ echo "Good: your $dtrace knows about the -h flag"
+ echo "and apparently the -xnolibs flag."
+ elif $dtrace -h -s ../perldtrace.d \
+ -o perldtrace.tmp >/dev/null 2>&1 \
+ && rm -f perldtrace.tmp
+ then
+ default_xnolibs=$undef
echo " "
echo "Good: your $dtrace knows about the -h flag."
else
@@ -8171,6 +8181,17 @@ while $test 1 ; do
EOM
exit 1
fi
+ case "$dtracexnolibs" in
+ $define|true|[yY]*)
+ dtracxnolibs=$define
+ ;;
+ ''|' ')
+ dtracexnolibs=$default_xnolibs
+ ;;
+ *)
+ dtracexnolibs=$undef
+ ;;
+ esac
break;
fi
@@ -20770,7 +20791,11 @@ $define)
dtraceobject=$define
;;
' '|'')
- $dtrace -h -s ../perldtrace.d -o perldtrace.h
+ case "$dtracexnolibs" in
+ $define) xnolibs_option=-xnolibs ;;
+ *) xnolibs_option= ;;
+ esac
+ $dtrace -h $xnolibs_option -s ../perldtrace.d -o perldtrace.h
$cat >try.c <<EOM
#include "perldtrace.h"
int main(void) {
@@ -20780,14 +20805,14 @@ int main(void) {
EOM
dtraceobject=$undef
if $cc -c -o try.o $optimize $ccflags try.c \
- && $dtrace -G -s ../perldtrace.d try.o >/dev/null 2>&1; then
+ && $dtrace -G $xnolibs_option -s ../perldtrace.d try.o >/dev/null 2>&1; then
dtraceobject=$define
echo "Your dtrace builds an object file"
fi
- $rm -f try.c try.o perldtrace.o
;;
*) dtraceobject=$undef ;;
esac
+ $rm -f try.c try.o perldtrace.o perldtrace.h
esac
: Determine if this is an EBCDIC system
@@ -24736,6 +24761,7 @@ drand01='$drand01'
drand48_r_proto='$drand48_r_proto'
dtrace='$dtrace'
dtraceobject='$dtraceobject'
+dtracexnolibs='$dtracexnolibs'
dynamic_ext='$dynamic_ext'
eagain='$eagain'
ebcdic='$ebcdic'
--- Makefile.SH.orig 2017-07-15 18:00:51 UTC
+++ Makefile.SH
@@ -390,8 +390,13 @@ VG_TEST ?= ./perl -e 1 2>/dev/null
;;
esac
+case "$dtracexnolibs" in
+define) xnolibs=-xnolibs ;;
+*) xnolibs= ;;
+esac
+
$spitshell >>$Makefile <<!GROK!THIS!
-DTRACE = $dtrace
+DTRACE = $dtrace $xnolibs
DTRACE_H = $dtrace_h
DTRACE_PERLLIB_O = $dtrace_perllib_o # "dtrace -G" output for perllib_objs
@@ -518,10 +523,53 @@ main_only_objs = op$(OBJ_EXT) perl$(
miniperl_objs_nodt = $(mini_only_objs) $(common_objs) miniperlmain$(OBJ_EXT)
perllib_objs_nodt = $(main_only_objs) $(common_objs)
+!NO!SUBS!
+
+# dtrace with -G modifies the source object files, which can cause
+# dependency issues, and can cause the dtrace -G to fail on FreeBSD
+# so separate the objects generated by $(CC) from those used to link
+# the executable when dtrace -G is involved.
+#
+# $(FOO:op%os=np%ns) isn't generally portable but is portable to
+# the makes on darwin, Solaris, FreeBSD and Linux, which is where we
+# use dtrace
+
+case "$usedtrace:$dtraceobject" in
+define:define)
+ $spitshell >>$Makefile <<'!NO!SUBS!'
+
+miniperl_dtrace_objs = $(miniperl_objs_nodt:%=mpdtrace/%)
+perllib_dtrace_objs = $(perllib_objs_nodt:%=libpdtrace/%)
+perlmain_dtrace_objs = maindtrace/perlmain$(OBJ_EXT)
+
+miniperl_objs = $(miniperl_dtrace_objs) $(DTRACE_MINI_O)
+perllib_objs = $(perllib_dtrace_objs) $(DTRACE_PERLLIB_O)
+perlmain_objs = $(perlmain_dtrace_objs) $(DTRACE_MAIN_O)
+
+miniperl_dep = $(DTRACE_MINI_O)
+perllib_dep = $(DTRACE_PERLLIB_O)
+perlmain_dep = $(DTRACE_MAIN_O)
+
+!NO!SUBS!
+ ;;
+ *)
+
+ $spitshell >>$Makefile <<'!NO!SUBS!'
+
miniperl_objs = $(miniperl_objs_nodt) $(DTRACE_MINI_O)
perllib_objs = $(perllib_objs_nodt) $(DTRACE_PERLLIB_O)
perlmain_objs = perlmain$(OBJ_EXT) $(DTRACE_MAIN_O)
+miniperl_dep = $(miniperl_objs)
+perllib_dep = $(perllib_objs)
+perlmain_dep = $(perlmain_objs)
+
+!NO!SUBS!
+ ;;
+esac
+
+$spitshell >>$Makefile <<'!NO!SUBS!'
+
perltoc_pod_prereqs = extra.pods pod/perl5243delta.pod pod/perlapi.pod pod/perlintern.pod pod/perlmodlib.pod pod/perluniprops.pod
generated_pods = pod/perltoc.pod $(perltoc_pod_prereqs)
generated_headers = uudmap.h bitcount.h mg_data.h
@@ -860,19 +908,32 @@ mydtrace.h: $(DTRACE_H)
define)
$spitshell >>$Makefile <<'!NO!SUBS!'
$(DTRACE_MINI_O): perldtrace.d $(miniperl_objs_nodt)
- $(DTRACE) -G -s perldtrace.d -o $(DTRACE_MINI_O) $(miniperl_objs_nodt)
+ -rm -rf mpdtrace
+ mkdir mpdtrace
+ cp $(miniperl_objs_nodt) mpdtrace/
+ $(DTRACE) -G -s perldtrace.d -o $(DTRACE_MINI_O) $(miniperl_dtrace_objs)
$(DTRACE_PERLLIB_O): perldtrace.d $(perllib_objs_nodt)
- $(DTRACE) -G -s perldtrace.d -o $(DTRACE_PERLLIB_O) $(perllib_objs_nodt)
+ -rm -rf libpdtrace
+ mkdir libpdtrace
+ cp $(perllib_objs_nodt) libpdtrace/
+ $(DTRACE) -G -s perldtrace.d -o $(DTRACE_PERLLIB_O) $(perllib_dtrace_objs)
$(DTRACE_MAIN_O): perldtrace.d perlmain$(OBJ_EXT)
- $(DTRACE) -G -s perldtrace.d -o $(DTRACE_MAIN_O) perlmain$(OBJ_EXT)
+ -rm -rf maindtrace
+ mkdir maindtrace
+ cp perlmain$(OBJ_EXT) maindtrace/
+ $(DTRACE) -G -s perldtrace.d -o $(DTRACE_MAIN_O) $(perlmain_dtrace_objs) || \
+ ( $(ECHO) "No probes in perlmain$(OBJ_EXT), generating a dummy $(DTRACE_MAIN_O)" && \
+ $(ECHO) >dtrace_main.c && \
+ `$(CCCMD)` $(PLDLFLAGS) dtrace_main.c && \
+ rm -f dtrace_main.c )
!NO!SUBS!
;;
esac
$spitshell >>$Makefile <<'!NO!SUBS!'
-$(LIBPERL): $& $(perllib_objs) $(DYNALOADER) $(LIBPERLEXPORT)
+$(LIBPERL): $& $(perllib_dep) $(DYNALOADER) $(LIBPERLEXPORT)
!NO!SUBS!
case "$useshrplib" in
true)
@@ -973,7 +1034,7 @@ lib/buildcustomize.pl: $& $(miniperl_obj
*)
if test "X$hostperl" != X; then
$spitshell >>$Makefile <<!GROK!THIS!
-lib/buildcustomize.pl: \$& \$(miniperl_objs) write_buildcustomize.pl
+lib/buildcustomize.pl: \$& \$(miniperl_dep) write_buildcustomize.pl
-@rm -f miniperl.xok
-@rm \$(MINIPERL_EXE)
\$(LNS) \$(HOST_PERL) \$(MINIPERL_EXE)
@@ -982,7 +1043,7 @@ lib/buildcustomize.pl: \$& \$(miniperl_o
!GROK!THIS!
else
$spitshell >>$Makefile <<'!NO!SUBS!'
-lib/buildcustomize.pl: $& $(miniperl_objs) write_buildcustomize.pl
+lib/buildcustomize.pl: $& $(miniperl_dep) write_buildcustomize.pl
-@rm -f miniperl.xok
$(CC) $(CLDFLAGS) -o $(MINIPERL_EXE) \
$(miniperl_objs) $(libs)
@@ -995,7 +1056,7 @@ lib/buildcustomize.pl: $& $(miniperl_obj
$spitshell >>$Makefile <<'!NO!SUBS!'
-$(PERL_EXE): $& $(perlmain_objs) $(LIBPERL) $(static_ext) ext.libs $(PERLEXPORT) write_buildcustomize.pl
+$(PERL_EXE): $& $(perlmain_dep) $(LIBPERL) $(static_ext) ext.libs $(PERLEXPORT) write_buildcustomize.pl
-@rm -f miniperl.xok
!NO!SUBS!
--- Porting/Glossary.orig 2017-06-30 21:03:20 UTC
+++ Porting/Glossary
@@ -2949,6 +2949,11 @@ dtrace (usedtrace.U):
dtraceobject (dtraceobject.U):
Whether we need to build an object file with the dtrace tool.
+dtracexnolibs (dtraceobject.U):
+ Whether dtrace accepts -xnolibs. If available we call dtrace -h
+ and dtrace -G with -xnolibs to allow dtrace to run in a jail on
+ FreeBSD.
+
dynamic_ext (Extensions.U):
This variable holds a list of XS extension files we want to
link dynamically into the package. It is used by Makefile.
--- ext/XS-APItest/Makefile.PL.orig 2017-06-30 21:03:22 UTC
+++ ext/XS-APItest/Makefile.PL
@@ -58,7 +58,8 @@ sub MY::postamble
DTRACE_D = ../../perldtrace.d
dtrace\$(OBJ_EXT): \$(DTRACE_D) core\$(OBJ_EXT)
- $Config{dtrace} -G -s \$(DTRACE_D) -o dtrace\$(OBJ_EXT) core\$(OBJ_EXT)
+ $Config{dtrace} -G -s \$(DTRACE_D) -o dtrace\$(OBJ_EXT) core\$(OBJ_EXT) || \\
+ ( \$(ECHO) >dtrace.c && \$(CCCMD) \$(CCCDLFLAGS) dtrace.c && rm -f dtrace.c )
POSTAMBLE
return $post;
--- hints/freebsd.sh.orig 2017-06-30 21:03:22 UTC
+++ hints/freebsd.sh
@@ -105,6 +105,15 @@ case "$osvers" in
;;
esac
+case "$osvers" in
+10.*)
+ # dtrace on 10.x needs libelf symbols, but we don't know if the
+ # user is going to request usedtrace and there's no .cbu for usedtrace
+ libswanted="$libswanted elf"
+ echo "libswanted $libswanted" >&4
+ ;;
+esac
+
# Dynamic Loading flags have not changed much, so they are separated
# out here to avoid duplicating them everywhere.
case "$osvers" in