NetBSD/macppc (9.0_STABLE) で pkgsrc/databases/mysql57-client が作れない問題

どっかで見た話のようで別の話のような、そうでもないような。

現在、mysql57 は mysql-5.7.30。

ふつうに make すると、

[ 35%] Building C object mysys/CMakeFiles/mysys.dir/lf_alloc-pin.c.o
In file included from /.../work/mysql-5.7.30/include/lf.h:27:0,
                 from /.../work/mysql-5.7.30/mysys/lf_alloc-pin.c:110:
/.../work/mysql-5.7.30/include/my_atomic.h:72:4: error: #error Native atomics support not found!
 #  error Native atomics support not found!
(以下 my_atomic_… が定義されていないというエラーずらずら)

となって途中で終わる。

よくわからんけど atomic が必須?となると、実は、cmake の時点で敗北が約束されていて、

-- Performing Test HAVE_GCC_ATOMIC_BUILTINS
-- Performing Test HAVE_GCC_ATOMIC_BUILTINS - Failed

そこで何が起きているかというと、work/mysql-5.7.30/CMakeFiles/CMakeError.log を見るに、

ld: CMakeFiles/cmTC_f794f.dir/src.cxx.o: in function `main':
src.cxx:(.text.startup+0x124): undefined reference to `__atomic_fetch_add_8'
ld: src.cxx:(.text.startup+0x150): undefined reference to `__atomic_exchange_8'
ld: src.cxx:(.text.startup+0x194): undefined reference to `__atomic_compare_exchange_8'

多分このへん。

それで、これは libatomic.{a,so} をリンクすりゃいいらしいのですが、NetBSD にはないです。

NetBSD の gccsrc/external/gpl3/gcc/gcc2netbsd というツールでソースツリーに取り込まれるわけですが、その際に libatomic のディレクトリを削除しているんですよね。(ディレクトリだけ残してもダメですが。)

NetBSD でちゃんと libatomic を作るようにしてもらうのが正攻法な気がしますが、とりあえず pkgsrc/lang/gcc7 をインストールして、PATH の先頭に /usr/pkg/gcc7/bin を入れてから mysql57-client の make をすれば通ります。

$ ldd /usr/pkg/bin/mysql
/usr/pkg/bin/mysql:
        -lpthread.1 => /usr/lib/libpthread.so.1
        -lc.12 => /usr/lib/libc.so.12
        -ledit.0 => /usr/pkg/lib/libedit.so.0
        -lterminfo.1 => /usr/lib/libterminfo.so.1
        -lz.1 => /usr/lib/libz.so.1
        -latomic.3 => /usr/pkg/gcc7/lib/./libatomic.so.3
        -lexecinfo.0 => /usr/lib/libexecinfo.so.0
        -lelf.2 => /usr/lib/libelf.so.2
        -lgcc_s.1 => /usr/lib/libgcc_s.so.1
        -lssl.14 => /usr/lib/libssl.so.14
        -lcrypto.14 => /usr/lib/libcrypto.so.14
        -lcrypt.1 => /lib/libcrypt.so.1
        -lm.0 => /usr/lib/libm.so.0
        -lstdc++.7 => /usr/pkg/gcc7/lib/./libstdc++.so.7

ただ、これパッケージとして配るなら gcc7 への depend 書かなきゃいかんのですかね。
gcc のコンパイルにめっちゃ時間かかりますけど

カテゴリーBSD