追記
対処された模様。pkgsrc/databases/mysql57-client/hacks.mk:
pkgsrc/databases/mysql57-server/hacks.mk:
# [Tue Sep 22 21:38:02 CEST 2020 : he]
# On NetBSD/powerpc, use devel/libatomic to get 8-byte atomics.
.if ${MACHINE_ARCH} == "powerpc"
.include "../../devel/libatomic/buildlink3.mk"
.endif
なるほど、あれこれやっている間に devel/libatomic
というのができてたのね。
以下、過去の記録:
――――――――――――――――――――――――――――――――
どっかで見た話のようで別の話のような、そうでもないような。
現在、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 の gcc
は src/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
のコンパイルにめっちゃ時間かかりますけど。