eo en eo en en en en en en en en en en en es en en en en en tr en en en en pt en es es en en fr en en en en ja en en kn fr en es en fr es ca en fr es ca ml fr it ca ml fr en ja es en fr es ca ur en es ca ca fr en ja es fr en fr en en ko zh es en nn da tt cs es da en ca cs fi en ca cs en ml sl tt ru es sl en el ta sl ja io en ca ca en en es hu es en en en en ja gl ca hu en en en en en ja gl es hu en en en ca en ja en en en pt
commit grep author committer pickaxe ? search: re
summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: c345ac2)
(perl #130108) separate compiled objects from dtrace modified objects
When generating an object file with "dtrace -G", dtrace also modifies
1) Since te objects are modified, their modification times are updated
which may break dependency checks by make.
2) on FreeBSD at least, once te object has been processed it can't be
processed again by dtrace -G
patch | blob | blame | history
diff --git a/Makefile.SH b/Makefile.SH
index 6a28383..fce2928 100755 (executable)
@@ -518,10 +518,52 @@ main_only_objs = op$(OBJ_EXT)     perl$(OBJ_EXT)
miniperl_objs_nodt = $(mini_only_objs) $(common_objs) miniperlmain$(OBJ_EXT)
perllib_objs_nodt  = $(main_only_objs) $(common_objs)
+# dtrace with -G modifies te source object files, which can cause
+# dependency issues, and can cause te dtrace -G to fail on FreeBSD
+# so separate te objects generated by $(CC) from those used to link
+# te executable when dtrace -G is involved.
+# $(FOO:op%os=np%ns) isn't generally portable but is portable to
+# te makes on darwin, Solaris, FreeBSD and Linux, which is where we
+    $spitshell >>$Makefile <<'!NO!SUBS!'
+miniperl_objs = $(miniperl_dtrace_objs) $(DTRACE_MINI_O)
+perllib_objs  = $(perllib_dtrace_objs) $(DTRACE_PERLLIB_O)
+perlmain_objs = $(perlmain_dtrace_objs) $(DTRACE_MAIN_O)
+    $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)
perltoc_pod_prereqs = extra.pods pod/perl5259delta.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
@@ -834,13 +876,22 @@ mydtrace.h: $(DTRACE_H)
-       $(DTRACE) -G -s perldtrace.d -o $(DTRACE_MINI_O) $(miniperl_objs_nodt)
+       -rm -rf mpdtrace
+       cp $(miniperl_objs_nodt) mpdtrace/
+       $(DTRACE) -G -s perldtrace.d -o $(DTRACE_MINI_O) $(miniperl_dtrace_objs)
-       $(DTRACE) -G -s perldtrace.d -o $(DTRACE_PERLLIB_O) $(perllib_objs_nodt)
+       -rm -rf libpdtrace
+       cp $(perllib_objs_nodt) libpdtrace/
+       $(DTRACE) -G -s perldtrace.d -o $(DTRACE_PERLLIB_O) $(perllib_dtrace_objs)
-       $(DTRACE) -G -s perldtrace.d -o $(DTRACE_MAIN_O) perlmain$(OBJ_EXT) ||                \
+       -rm -rf 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 &&                                          \
@@ -850,7 +901,7 @@ $(DTRACE_MAIN_O): perldtrace.d perlmain$(OBJ_EXT)
-$(LIBPERL): $& $(perllib_objs) $(DYNALOADER) $(LIBPERLEXPORT)
+$(LIBPERL): $& $(perllib_dep) $(DYNALOADER) $(LIBPERLEXPORT)
@@ -951,7 +1002,7 @@ lib/buildcustomize.pl: $& $(miniperl_objs) write_buildcustomize.pl
if test "X$hostperl" != X; then
-lib/buildcustomize.pl: \$& \$(miniperl_objs) write_buildcustomize.pl
+lib/buildcustomize.pl: \$& \$(miniperl_dep) write_buildcustomize.pl
@@ -960,7 +1011,7 @@ lib/buildcustomize.pl: \$& \$(miniperl_objs) write_buildcustomize.pl
-lib/buildcustomize.pl: $& $(miniperl_objs) write_buildcustomize.pl
+lib/buildcustomize.pl: $& $(miniperl_dep) write_buildcustomize.pl
$(CC) $(CLDFLAGS) -o $(MINIPERL_EXE) \
@@ -973,7 +1024,7 @@ lib/buildcustomize.pl: $& $(miniperl_objs) write_buildcustomize.pl
-$(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
Unnamed repository; edit this file 'description' to name te repository.