Edit report at https://bugs.php.net/bug.php?id=61268&edit=1
ID: 61268
Comment by: alasdairrr at gmail dot com
Reported by: mike at harschsystems dot com
Summary: --enable-dtrace leads make to clobber
Zend/zend_dtrace.d
Status: Open
Type: Bug
Package: Compile Failure
Operating System: solaris
PHP Version: 5.4.0
Block user comment: N
Private report: N
New Comment:
I can confirm I'm seeing this problem too on both Solaris 10 and SmartOS.
Previous Comments:
------------------------------------------------------------------------
[2012-03-03 20:19:39] mike at harschsystems dot com
Description:
------------
5.4.0 bundle configured with only one option: --enable-dtrace
The configure script runs fine and the build finishes without error. However,
the next invocation of
make (probably from trying to run 'make install') fails with the following
error:
[jack@fjpe6maa ~/php-5.4.0]$ make install
gcc /home/jack/php-5.4.0/Zend/zend_dtrace.d.o -o /home/jack/php-
5.4.0/Zend/zend_dtrace.d
Undefined first referenced
symbol in file
main /usr/lib/crt1.o
php_request_startup /home/jack/php-5.4.0/Zend/zend_dtrace.d.o
dtrace_execute_internal /home/jack/php-5.4.0/Zend/zend_dtrace.d.o
dtrace_execute /home/jack/php-5.4.0/Zend/zend_dtrace.d.o
php_request_shutdown /home/jack/php-5.4.0/Zend/zend_dtrace.d.o
zend_throw_exception_internal /home/jack/php-5.4.0/Zend/zend_dtrace.d.o
dtrace_compile_file /home/jack/php-5.4.0/Zend/zend_dtrace.d.o
$dtrace185178.ZEND_CATCH_SPEC_CONST_CV_HANDLER /home/jack/php-
5.4.0/Zend/zend_dtrace.d.o
zend_error_noreturn /home/jack/php-5.4.0/Zend/zend_dtrace.d.o
ld: fatal: symbol referencing errors. No output written to /home/jack/php-
5.4.0/Zend/zend_dtrace.d
collect2: ld returned 1 exit status
make: *** [/home/jack/php-5.4.0/Zend/zend_dtrace.d] Error 1
What's happening here is that make has determined that the file
Zend/zend_dtrace.d is out of date and
must be rebuilt. It matches a built-in implicit rule that ends up running:
gcc /home/jack/php-5.4.0/Zend/zend_dtrace.d.o -o /home/jack/php-
5.4.0/Zend/zend_dtrace.d
This command fails with the error that you see, but it also clobbers
zend_dtrace.d
Here's a bit more detail from 'make -d':
<snip>
Prerequisite `/home/jack/php-5.4.0/Zend/zend_dtrace.d.o' is newer
than target
`/home/jack/php-5.4.0/Zend/zend_dtrace.d'.
Must remake target `/home/jack/php-5.4.0/Zend/zend_dtrace.d'.
Invoking builtin recipe to update target `/home/jack/php-
5.4.0/Zend/zend_dtrace.d'.
gcc /home/jack/php-5.4.0/Zend/zend_dtrace.d.o -o /home/jack/php-
5.4.0/Zend/zend_dtrace.d
Putting child 80bdaa0 (/home/jack/php-5.4.0/Zend/zend_dtrace.d) PID 5104 on the
chain.
Live child 80bdaa0 (/home/jack/php-5.4.0/Zend/zend_dtrace.d) PID 5104
Undefined first referenced
symbol in file
main /usr/lib/crt1.o
php_request_startup /home/jack/php-5.4.0/Zend/zend_dtrace.d.o
dtrace_execute_internal /home/jack/php-5.4.0/Zend/zend_dtrace.d.o
dtrace_execute /home/jack/php-5.4.0/Zend/zend_dtrace.d.o
$dtrace187054.ZEND_CATCH_SPEC_CONST_CV_HANDLER /home/jack/php-
5.4.0/Zend/zend_dtrace.d.o
php_request_shutdown /home/jack/php-5.4.0/Zend/zend_dtrace.d.o
zend_throw_exception_internal /home/jack/php-5.4.0/Zend/zend_dtrace.d.o
dtrace_compile_file /home/jack/php-5.4.0/Zend/zend_dtrace.d.o
zend_error_noreturn /home/jack/php-5.4.0/Zend/zend_dtrace.d.o
ld: fatal: symbol referencing errors. No output written to /home/jack/php-
5.4.0/Zend/zend_dtrace.d
collect2: ld returned 1 exit status
Reaping losing child 80bdaa0 PID 5104
make: *** [/home/jack/php-5.4.0/Zend/zend_dtrace.d] Error 1
I was able to work-around this issue by disabling built-in implicit rules with
'make -r'. Obviously, I
had to recover the clobbered file before this worked.
The offending Makefile may be seen here: http://harschsystems.com/bugs/php-
54_sol_dtrace/Makefile.txt
For reference:
On solaris (and solaris-derived) systems, the compilation of USDT dtrace probes
goes something like this:
$ dtrace -h -o foo_provider.h -s foo_provider.d
>> Generates header file
$ gcc -c foo_src.c
$ dtrace -G -o foo_provider.o -s foo_provider.d foo_src.o
>> Generates object file
$ gcc -o a.out foo_provider.o foo_src.o
For more detail, see: http://dtrace.org/blogs/dap/2011/12/13/usdt-providers-
redux/
This test system is running an Illumos variant (derived from OpenSolaris).
gmake 3.82
This bug deals with the same part of the build system as another bug I filed
back in the 5.3 dev branch:
https://bugs.php.net/bug.php?id=53338
As these were the only 2 times I've tried compiling php with dtrace, I'd say
there should be better test
coverage of solaris + --enable-dtrace.
Expected result:
----------------
make shouldn't delete source files
Actual result:
--------------
make deletes a source file, rendering the build system inoperable.
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=61268&edit=1