ます’s Blog - どうでもいい記事100選

どうでもいい記事100選

Fail-Safe C: 安全なC言語コンパイラ(続きの続きの続き)

先日のですが。
ずーっと放置していましたが、Fail-Safe C version 1.0.1 (revision 1735) がリリースされていたのでPHPのビルドに再挑戦。今回は5.2.6が対象。

「/(php-src)/main/streams/php_stream_filter_api.h」でenumリストの一番最後の定義が「,」で終わっていてビルドできない)はPHP側で修正されているみたい。
他は変わらず。。。後、今回はコメント表記で引っかかるようになった(//の一行コメント)。

% su
% uname -a
Linux **** 2.6.18-6-686 #1 SMP Mon Aug 18 08:42:39 UTC 2008 i686 GNU/Linux

% gcc -v
Reading specs from /usr/lib/gcc/i486-linux-gnu/3.4.6/specs
Configured with: ../src/configure -v --enable-languages=c,c++,f77,pascal --prefix=/usr --libexecdir=/usr/lib --with-gxx-include-dir=/usr/include/c++/3.4 --enable-shared --with-system-zlib --enable-nls --without-included-gettext --program-suffix=-3.4 --enable-__cxa_atexit --enable-clocale=gnu --enable-libstdcxx-debug --with-tune=i686 i486-linux-gnu
Thread model: posix
gcc version 3.4.6 (Debian 3.4.6-5)

% ocaml -version
The Objective Caml toplevel, version 3.09.2

% cd /usr/local/src
% gzip -dc ./FailSafeC-1.0.1.1735.tar.gz | tar xf -
% cd ./FailSafeC-1.0.1.1735
% make
% make install
% cd ../
% gzip -dc ./php-5.2.6.tar.gz | tar xf -
% cd ./php-5.2.6
% less -N ./main/streams/php_stream_filter_api.h

        〜 省略 〜

     62 typedef enum {
     63         PSFS_ERR_FATAL, /* error in data stream */
     64         PSFS_FEED_ME,   /* filter needs more data; stop processing chain until more is available */
     65         PSFS_PASS_ON    /* filter generated output buckets; pass them on to next in chain */
     66 } php_stream_filter_status_t;

        〜 省略 〜

% env CC=fscc \
./configure \
--disable-all \
--without-iconv \
--with-regex=system

% cat ./Makefile | grep fscc
CC = fscc
CPP = fscc -E

% make
/bin/sh /usr/local/src/php-5.2.6/libtool --silent --preserve-dup-deps --mode=compile fscc -Iext/date/lib -Iext/date/ -I/usr/local/src/php-5.2.6/ext/date/ -DPHP_ATOM_INC -I/usr/local/src/php-5.2.6/include -I/usr/local/src/php-5.2.6/main -I/usr/local/src/php-5.2.6 -I/usr/local/src/php-5.2.6/ext/date/lib -I/usr/local/src/php-5.2.6/TSRM -I/usr/local/src/php-5.2.6/Zend    -g  -c /usr/local/src/php-5.2.6/ext/date/php_date.c -o ext/date/php_date.lo
In file included from /usr/local/src/php-5.2.6/main/php.h:74,
                 from /usr/local/src/php-5.2.6/ext/date/php_date.c:21:
/usr/local/src/php-5.2.6/main/php_regex.h:59:19: regex.h: No such file or directory
Fatal error: exception Failure("/usr/local/src/php-5.2.6/ext/date/php_date.c(272): parse error")
+ /usr/local/lib/fsc/default/compiler/trans.nc ---systemdir /usr/local/lib/fsc/default -f multi-module -I ext/date/lib -I ext/date/ -I /usr/local/src/php-5.2.6/ext/date/ -I /usr/local/src/php-5.2.6/include -I /usr/local/src/php-5.2.6/main -I /usr/local/src/php-5.2.6 -I /usr/local/src/php-5.2.6/ext/date/lib -I /usr/local/src/php-5.2.6/TSRM -I /usr/local/src/php-5.2.6/Zend -D PHP_ATOM_INC ---output-file /tmp/fsc-0-IKpunFiw/php_date.safe.c ---input-file /usr/local/src/php-5.2.6/ext/date/php_date.c
fscc: command /usr/local/lib/fsc/default/compiler/trans.nc returned status 2
make: *** [ext/date/php_date.lo] Error 1

% cat ../php-5.2.6-php_regex.h.diff
--- ../php-5.2.6,orig/main/php_regex.h	2007-12-31 16:20:15.000000000 +0900
+++ main/php_regex.h	2008-09-02 13:49:29.000000000 +0900
@@ -56,7 +56,7 @@
 #define _H_REGEX 1              /* This one is for AIX */
 #endif
 #elif REGEX == 0
-#include <regex.h>
+#include </usr/include/regex.h>
 #ifndef _REGEX_H_
 #define _REGEX_H_ 1
 #endif
% patch -p0 < ../php-5.2.6-php_regex.h.diff
patching file main/php_regex.h

% make
/bin/sh /usr/local/src/php-5.2.6/libtool --silent --preserve-dup-deps --mode=compile fscc -Iext/date/lib -Iext/date/ -I/usr/local/src/php-5.2.6/ext/date/ -DPHP_ATOM_INC -I/usr/local/src/php-5.2.6/include -I/usr/local/src/php-5.2.6/main -I/usr/local/src/php-5.2.6 -I/usr/local/src/php-5.2.6/ext/date/lib -I/usr/local/src/php-5.2.6/TSRM -I/usr/local/src/php-5.2.6/Zend    -g  -c /usr/local/src/php-5.2.6/ext/date/php_date.c -o ext/date/php_date.lo
Fatal error: exception Failure("/usr/local/src/php-5.2.6/ext/date/php_date.c(272): parse error")
+ /usr/local/lib/fsc/default/compiler/trans.nc ---systemdir /usr/local/lib/fsc/default -f multi-module -I ext/date/lib -I ext/date/ -I /usr/local/src/php-5.2.6/ext/date/ -I /usr/local/src/php-5.2.6/include -I /usr/local/src/php-5.2.6/main -I /usr/local/src/php-5.2.6 -I /usr/local/src/php-5.2.6/ext/date/lib -I /usr/local/src/php-5.2.6/TSRM -I /usr/local/src/php-5.2.6/Zend -D PHP_ATOM_INC ---output-file /tmp/fsc-0-F48fDwvg/php_date.safe.c ---input-file /usr/local/src/php-5.2.6/ext/date/php_date.c
fscc: command /usr/local/lib/fsc/default/compiler/trans.nc returned status 2
make: *** [ext/date/php_date.lo] Error 1

% cat ../php-5.2.6-php_date.c.diff
--- ../php-5.2.6,orig/ext/date/php_date.c	2008-04-17 02:21:46.000000000 +0900
+++ ext/date/php_date.c	2008-09-02 13:49:54.000000000 +0900
@@ -269,9 +269,9 @@
 	int             initialized;
 	int             type;
 	union {
-		timelib_tzinfo *tz; // TIMELIB_ZONETYPE_ID;
-		timelib_sll     utc_offset; // TIMELIB_ZONETYPE_OFFSET
-		struct                      // TIMELIB_ZONETYPE_ABBR
+		timelib_tzinfo *tz;
+		timelib_sll     utc_offset;
+		struct
 		{
 			timelib_sll  utc_offset;
 			char        *abbr;
% patch -p0 < ../php-5.2.6-php_date.c.diff
patching file ext/date/php_date.c

% make
cc1: out of memory allocating 386300880 bytes after a total of 7385088 bytes
+ gcc -I/usr/local/lib/fsc/default/runtime -march=pentium4 -Wall -Wno-unused -O0 -g -fno-strict-aliasing -DFSC_DEBUG_RUNTIME -o ext/date/lib/parse_date.o -c -xc /tmp/fsc-0-dSl3l3Cm/parse_date.safe.c
fscc: command gcc returned status 1
make: *** [ext/date/lib/parse_date.lo] Error 1

% limit
cputime      unlimited
filesize     unlimited
datasize     unlimited
stacksize    8192 kbytes
coredumpsize 0 kbytes
memoryuse    unlimited
vmemoryuse   unlimited
descriptors  1024
memorylocked unlimited
maxproc      unlimited

% limit -h
cputime      unlimited
filesize     unlimited
datasize     unlimited
stacksize    unlimited
coredumpsize unlimited
memoryuse    unlimited
vmemoryuse   unlimited
descriptors  1024
memorylocked unlimited
maxproc      unlimited

% id
uid=0(root) gid=0(root) groups=0(root)

って、どんだけメモリを使うんだよ。。。またしても撃沈。_| ̄|○
DebianのPackage化も進行しているみたいだけど、そんなに期待できない気がするなぁ。