2005/11/19

Mozilla を build すると. libpixman 関係のソースでasが失敗する原因をしらべる (その1)

15日あたりから Mozilla cvs を Debian sid 上で build したら失敗するので、原因をしらべてみる。
同じ例は以下にあり。
bugzilla 316845
新秀の介の日記
こちらの環境は

gcc -v
Using built-in specs.
Target: x86_64-linux-gnu
コンフィグオプション: ../src/configure -v --enable-languages=c,c++,java,f95,objc,ada,treelang --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --program-suffix=-4.0 --enable-__cxa_atexit --enable-clocale=gnu --enable-libstdcxx-debug --enable-java-awt=gtk-default --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-4.0-1.4.2.0/jre --enable-mpfr --disable-werror --enable-checking=release x86_64-linux-gnu
スレッドモデル: posix
gcc バージョン 4.0.3 20051111 (prerelease) (Debian 4.0.2-4)

libpng12-0 1.2.8rel-5
libpngoxft2 1.10.1-1
libgtk2.0 2.8.7-1
libcairo 1.0.2-1
libglib2.0 2.8.4-1
libatk1.0 1.10.3-1
xorg 6.8.2.dfsg.1-10
binutils 2.16.1cvs20051109-1

です。
さて、こんな場合はまずエラーを見るのが常道ですね。

gcc -o fbpict.o -c -DMOZILLA_INTERNAL_API -DOSTYPE=\"Linux2.6.14\" -DOSARCH=\"Linux\" -DBUILD_ID=0000000000 -I${SOURCE_DIR}/gfx/cairo/libpixman/src -I../../../../dist/include/libpixman -I../../../../dist/include -I../../../../dist/include/nspr -I../../../../dist/sdk/include -I/usr/X11R6/include -fPIC -I/usr/X11R6/include -Wall -W -Wno-unused -Wpointer-arith -Wcast-align -Wno-long-long -pedantic -pthread -pipe -DNDEBUG -DTRIMMED -O -I/usr/X11R6/include -include ../../../../mozilla-config.h -DMOZILLA_CLIENT -Wp,-MD,.deps/fbpict.pp ${SOURCE_DIR}/gfx/cairo/libpixman/src/fbpict.c
${SOURCE_DIR}/gfx/cairo/libpixman/src/fbpict.c: In function '_cairo_pixman_composite':
${SOURCE_DIR}/gfx/cairo/libpixman/src/fbpict.c:1421: warning: enumeration value 'PIXMAN_OPERATOR_CLEAR' not handled in switch
${SOURCE_DIR}/gfx/cairo/libpixman/src/fbpict.c:1421: warning: enumeration value 'PIXMAN_OPERATOR_DST' not handled in switch
${SOURCE_DIR}/gfx/cairo/libpixman/src/fbpict.c:1421: warning: enumeration value 'PIXMAN_OPERATOR_OVER_REVERSE' not handled in switch
${SOURCE_DIR}/gfx/cairo/libpixman/src/fbpict.c:1421: warning: enumeration value 'PIXMAN_OPERATOR_IN' not handled in switch
${SOURCE_DIR}/gfx/cairo/libpixman/src/fbpict.c:1421: warning: enumeration value 'PIXMAN_OPERATOR_IN_REVERSE' not handled in switch
${SOURCE_DIR}/gfx/cairo/libpixman/src/fbpict.c:1421: warning: enumeration value 'PIXMAN_OPERATOR_OUT' not handled in switch
${SOURCE_DIR}/gfx/cairo/libpixman/src/fbpict.c:1421: warning: enumeration value 'PIXMAN_OPERATOR_OUT_REVERSE' not handled in switch
${SOURCE_DIR}/gfx/cairo/libpixman/src/fbpict.c:1421: warning: enumeration value 'PIXMAN_OPERATOR_ATOP' not handled in switch
${SOURCE_DIR}/gfx/cairo/libpixman/src/fbpict.c:1421: warning: enumeration value 'PIXMAN_OPERATOR_ATOP_REVERSE' not handled in switch
${SOURCE_DIR}/gfx/cairo/libpixman/src/fbpict.c:1421: warning: enumeration value 'PIXMAN_OPERATOR_XOR' not handled in switch
${SOURCE_DIR}/gfx/cairo/libpixman/src/fbpict.c:1421: warning: enumeration value 'PIXMAN_OPERATOR_SATURATE' not handled in switch
${SOURCE_DIR}/gfx/cairo/libpixman/src/fbpict.c:1870: warning: comparison between signed and unsigned
${SOURCE_DIR}/gfx/cairo/libpixman/src/fbpict.c:1876: warning: comparison between signed and unsigned
${SOURCE_DIR}/gfx/cairo/libpixman/src/fbpict.c:1885: warning: comparison between signed and unsigned
${SOURCE_DIR}/gfx/cairo/libpixman/src/fbpict.c:1891: warning: comparison between signed and unsigned
{standard input}: Assembler messages:
{standard input}:5212: Error: symbol `_cairo_pixman_composite' is already defined
make[6]: *** [fbpict.o] Error 1

gcc -o iccolor.o -c -DMOZILLA_INTERNAL_API -DOSTYPE=\"Linux2.6.14\" -DOSARCH=\"Linux\" -DBUILD_ID=0000000000 -I${SOURCE_DIR}/gfx/cairo/libpixman/src -I../../../../dist/inclu
de/libpixman -I../../../../dist/include -I../../../../dist/include/nspr -I../../../../dist/sdk/include -I/usr/X11R6/include -fPIC -I/usr/X11R6/include -Wall -W -Wno-unused -Wpointer-arith -Wcast-align -Wno-long-long -pedantic -pthread -pipe -DNDEBUG -DTRIMMED -O -I/usr/X11R6/include -include ../../../../mozilla-config.h -DMOZILLA_CLIENT -Wp,-MD,.deps/iccolor.pp ${SOURCE_DIR}/gfx/cairo/libpixman/src/iccolor.c
{standard input}: Assembler messages:
{standard input}:140: Error: symbol `_cairo_pixman_color_to_pixel' is already defined
make[6]: *** [iccolor.o] Error 1


なるほど ./gfx/cairo/libpixman/src/fbpict.c ./gfx/cairo/libpixman/src/iccolor.c が問題なわけね。
ん?

{standard input}: Assembler messages:
{standard input}:5212: Error: symbol `_cairo_pixman_composite' is already defined

Assembler messages: かよ、エラー出してんのはアセンブラかよ、しかもコンパイラが出したアセンラコードがアセンブルできないってどういうこと?
なんかgccのバグな気が…。

とりあえず、気を取りなおしてソースを見てみよう。
./gfx/cairo/libpixman/src/fbpict.c は…、おや、_cairo_pixman_composite なんて存在しない、何故?
おや、ヘッダに * Author: Keith Packard, SuSE, Inc. の文字が。X.org の Keith だろうか? 彼はMozilla の開発に参加してたっけ?
ちょとまて、二つ上のディレクトリにある README に
cairo 1.1.1 (cvs)
って書いてあるんですよ、mozilla の fbpict.c はこれ fbpict.cと一緒じゃねーかよ。
iccolor.c も これと一致するし。
cairo 1.1.1なんてリリースされてない物を使うために、cairoのソースをそのまま mozilla の CVS ツリーに入れるのか、mozilla も恐しいことをするなぁ。
とりあえずソースがどこから来たかは判った。次はどこで止っているか調べることにしようか。