Edit report at https://bugs.php.net/bug.php?id=61268&edit=1
ID: 61268 Comment by: mike at harschsystems dot com Reported by: mike at harschsystems dot com Summary: --enable-dtrace leads make to clobber Zend/zend_dtrace.d Status: Feedback Type: Bug Package: Compile Failure Operating System: solaris PHP Version: 5.4.0 Assigned To: dsp Block user comment: N Private report: N New Comment: This bug is still present in 5.5.0 alpha 1. I just reproduced it on Oracle Solaris 11.1. You must run the configure script with '--enable-dtrace' to trigger the failure (and be using gnu make as mentioned already). mharsch@eleven:~/tmp/php-5.5.0alpha1$ uname -a SunOS eleven 5.11 11.1 i86pc i386 i86pc mharsch@eleven:~/tmp/php-5.5.0alpha1$ gmake --version GNU Make 3.82 Built for i386-pc-solaris2.11 Copyright (C) 2010 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Previous Comments: ------------------------------------------------------------------------ [2012-11-16 05:48:47] d...@php.net I see what the problem is but cannot reproduce it myself with 5.5.0alpha1. Please try the 5.5.0alpha snapshots from http://downloads.php.net/dsp and provide me with 'uname -a' and 'gmake --version'. ./configure && gmake works fine for me on $ uname -a SunOS foo 5.11 11.0 i86pc i386 i86pc Solaris which is a Oracle Solaris 5.11. $ gmake -- version GNU Make 3.81 ------------------------------------------------------------------------ [2012-05-08 04:35:50] mike at harschsystems dot com I've seen the same failing behavior on 5.4.1 as well. It's worth noting that gmake exhibits this failure mode while regular (non-GNU) make works fine. So, the 2 workarounds are: 1.) run gmake with the '-r' option or 2.) run non-GNU make instead of gmake ------------------------------------------------------------------------ [2012-04-22 13:13:01] alasdairrr at gmail dot com I can confirm I'm seeing this problem too on both Solaris 10 and SmartOS. ------------------------------------------------------------------------ [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