Skip to content

Commit 02b3fb1

Browse files
f4z4onbukka
authored andcommitted
Remove CPP when invoking dtrace utility
We are experiencing an issue when building PHP with DTrace enabled with SystemTap (see GH-11847).† The issue is caused by inappropriate use C preprocessor detected by GNU Autoconf in our “configure” script. C preprocessor configuration found by AC_PROG_CPP macro is portable only to run on files with “.c” extension.‡ However, statically-defined tracing is described by D programs with “.d” extension which causes the issue. We experience this even on typical Linux distribution with GNU Compiler Collection (GCC) unless we override the defaults detected by our “configure” script. Many major Linux distributions use SystemTap to provide “dtrace” utility. It relies on both external C preprocessor and external C compiler. C preprocessor can be customized via CPP environment variable. Similarly, C compiler can be customized via CC environment variable. It also allows customization of C compiler flags via CFLAGS environment variable. We have recently aligned both CPP and CC environment variable with C preprocessor and C compiler we use to build regular C source code as provided by our “configure” script (see GH-11643).* We wanted to allow cross-compilation on Linux for which this was the only blocker. C compiler flags from CFLAGS_CLEAN macro have already been in place since versions 5.4.20 and 5.5.4 from 2013-09-18. We had modified all “dtrace” invocations in the same way to make it look consistent. However, only the C compiler (CC environment variable) is necessary to for cross-compilation. There have never been any reported issue with the C preprocessor. We acknowledge it would be great to allow C preprocessor customization as well. However, the implementation would require a lot of effort to do correctly given the limitations of AC_PROG_CPP macro from GNU Autoconf. This would be further complicated by the fact that all DTrace implementations, not just SystemTap, allow C preprocessor customization but Oracle DTrace, Open DTrace, and their forks do it differently. Nevertheless, they all default to “cpp” utility and they all have or had been working fine. Therefore, we believe simply removing CPP stabilizes “dtrace” invocation on Linux systems with SystemTap and aligns it with other system configurations on other platforms, until someone comes with complete solution with custom “m4” and “make” macros, while our build system on Linux with SystemTap supports cross-compilation. Fixes GH-11847 Closes GH-12083#11847https://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.71/autoconf.html#index-AC_005fPROG_005fCPP-1 * #11643
1 parent ea87501 commit 02b3fb1

File tree

3 files changed

+10
-8
lines changed

3 files changed

+10
-8
lines changed

NEWS

+2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ PHP NEWS
22
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
33
?? ??? ????, PHP 8.3.0RC2
44

5+
- Core:
6+
. Fixed GH-11847 (DTrace enabled build is broken). (Filip Zrůst)
57

68
31 Aug 2023, PHP 8.3.0RC1
79

build/php.m4

+4-4
Original file line numberDiff line numberDiff line change
@@ -2389,7 +2389,7 @@ dnl overwritten (Bug 61268).
23892389
$abs_srcdir/$ac_provsrc:;
23902390
23912391
$ac_bdir[$]ac_hdrobj: $abs_srcdir/$ac_provsrc
2392-
CPP="\$(CPP)" CC="\$(CC)" CFLAGS="\$(CFLAGS_CLEAN)" dtrace -h -C -s $ac_srcdir[$]ac_provsrc -o \$[]@.bak && \$(SED) -e 's,PHP_,DTRACE_,g' \$[]@.bak > \$[]@
2392+
CC="\$(CC)" CFLAGS="\$(CFLAGS_CLEAN)" dtrace -h -C -s $ac_srcdir[$]ac_provsrc -o \$[]@.bak && \$(SED) -e 's,PHP_,DTRACE_,g' \$[]@.bak > \$[]@
23932393
23942394
\$(PHP_DTRACE_OBJS): $ac_bdir[$]ac_hdrobj
23952395
@@ -2409,12 +2409,12 @@ EOF
24092409
$ac_bdir[$]ac_provsrc.lo: \$(PHP_DTRACE_OBJS)
24102410
echo "[#] Generated by Makefile for libtool" > \$[]@
24112411
@test -d "$dtrace_lib_dir" || mkdir $dtrace_lib_dir
2412-
if CPP="\$(CPP)" CC="\$(CC)" CFLAGS="\$(CFLAGS_CLEAN)" dtrace -G -o $dtrace_d_obj -s $abs_srcdir/$ac_provsrc $dtrace_lib_objs 2> /dev/null && test -f "$dtrace_d_obj"; then [\\]
2412+
if CC="\$(CC)" CFLAGS="\$(CFLAGS_CLEAN)" dtrace -G -o $dtrace_d_obj -s $abs_srcdir/$ac_provsrc $dtrace_lib_objs 2> /dev/null && test -f "$dtrace_d_obj"; then [\\]
24132413
echo "pic_object=['].libs/$dtrace_prov_name[']" >> \$[]@ [;\\]
24142414
else [\\]
24152415
echo "pic_object='none'" >> \$[]@ [;\\]
24162416
fi
2417-
if CPP="\$(CPP)" CC="\$(CC)" CFLAGS="\$(CFLAGS_CLEAN)" dtrace -G -o $ac_bdir[$]ac_provsrc.o -s $abs_srcdir/$ac_provsrc $dtrace_nolib_objs 2> /dev/null && test -f "$ac_bdir[$]ac_provsrc.o"; then [\\]
2417+
if CC="\$(CC)" CFLAGS="\$(CFLAGS_CLEAN)" dtrace -G -o $ac_bdir[$]ac_provsrc.o -s $abs_srcdir/$ac_provsrc $dtrace_nolib_objs 2> /dev/null && test -f "$ac_bdir[$]ac_provsrc.o"; then [\\]
24182418
echo "non_pic_object=[']$dtrace_prov_name[']" >> \$[]@ [;\\]
24192419
else [\\]
24202420
echo "non_pic_object='none'" >> \$[]@ [;\\]
@@ -2426,7 +2426,7 @@ EOF
24262426
*)
24272427
cat>>Makefile.objects<<EOF
24282428
$ac_bdir[$]ac_provsrc.o: \$(PHP_DTRACE_OBJS)
2429-
CPP="\$(CPP)" CC="\$(CC)" CFLAGS="\$(CFLAGS_CLEAN)" dtrace -G -o \$[]@ -s $abs_srcdir/$ac_provsrc $dtrace_objs
2429+
CC="\$(CC)" CFLAGS="\$(CFLAGS_CLEAN)" dtrace -G -o \$[]@ -s $abs_srcdir/$ac_provsrc $dtrace_objs
24302430
24312431
EOF
24322432
;;

ext/oci8/config.m4

+4-4
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ dnl overwritten (Bug 61268).
124124
PHP_EXT_SRCDIR([oci8])/$ac_provsrc:;
125125
126126
$ac_bdir[$]ac_hdrobj: $ac_srcdir[$]ac_provsrc
127-
CPP="\$(CPP)" CC="\$(CC)" CFLAGS="\$(CFLAGS_CLEAN)" dtrace -h -C -s $ac_srcdir[$]ac_provsrc -o \$[]@.bak && \$(SED) -e 's,PHPOCI_,DTRACE_,g' \$[]@.bak > \$[]@
127+
CC="\$(CC)" CFLAGS="\$(CFLAGS_CLEAN)" dtrace -h -C -s $ac_srcdir[$]ac_provsrc -o \$[]@.bak && \$(SED) -e 's,PHPOCI_,DTRACE_,g' \$[]@.bak > \$[]@
128128
129129
\$(OCI8_DTRACE_OBJS): $ac_bdir[$]ac_hdrobj
130130
@@ -145,12 +145,12 @@ EOF
145145
$ac_bdir[$]ac_provsrc.lo: \$(OCI8_DTRACE_OBJS)
146146
echo "[#] Generated by Makefile for libtool" > \$[]@
147147
@test -d "$dtrace_lib_dir" || mkdir $dtrace_lib_dir
148-
if CPP="\$(CPP)" CC="\$(CC)" CFLAGS="\$(CFLAGS_CLEAN)" dtrace -G -o $dtrace_d_obj -s $ac_srcdir[$]ac_provsrc $dtrace_oci8_lib_objs 2> /dev/null && test -f "$dtrace_d_obj"; then [\\]
148+
if CC="\$(CC)" CFLAGS="\$(CFLAGS_CLEAN)" dtrace -G -o $dtrace_d_obj -s $ac_srcdir[$]ac_provsrc $dtrace_oci8_lib_objs 2> /dev/null && test -f "$dtrace_d_obj"; then [\\]
149149
echo "pic_object=['].libs/$dtrace_prov_name[']" >> \$[]@ [;\\]
150150
else [\\]
151151
echo "pic_object='none'" >> \$[]@ [;\\]
152152
fi
153-
if CPP="\$(CPP)" CC="\$(CC)" CFLAGS="\$(CFLAGS_CLEAN)" dtrace -G -o $ac_bdir[$]ac_provsrc.o -s $ac_srcdir[$]ac_provsrc $dtrace_nolib_objs 2> /dev/null && test -f "$ac_bdir[$]ac_provsrc.o"; then [\\]
153+
if CC="\$(CC)" CFLAGS="\$(CFLAGS_CLEAN)" dtrace -G -o $ac_bdir[$]ac_provsrc.o -s $ac_srcdir[$]ac_provsrc $dtrace_nolib_objs 2> /dev/null && test -f "$ac_bdir[$]ac_provsrc.o"; then [\\]
154154
echo "non_pic_object=[']$dtrace_prov_name[']" >> \$[]@ [;\\]
155155
else [\\]
156156
echo "non_pic_object='none'" >> \$[]@ [;\\]
@@ -162,7 +162,7 @@ EOF
162162
AC_MSG_WARN([OCI8 extension: OCI8 DTrace support is not confirmed on this platform])
163163
cat>>Makefile.objects<<EOF
164164
$ac_bdir[$]ac_provsrc.o: \$(OCI8_DTRACE_OBJS)
165-
CPP="\$(CPP)" CC="\$(CC)" CFLAGS="\$(CFLAGS_CLEAN)" dtrace -G -o \$[]@ -s $ac_srcdir[$]ac_provsrc $dtrace_oci8_objs
165+
CC="\$(CC)" CFLAGS="\$(CFLAGS_CLEAN)" dtrace -G -o \$[]@ -s $ac_srcdir[$]ac_provsrc $dtrace_oci8_objs
166166
167167
EOF
168168
;;

0 commit comments

Comments
 (0)