Closed taka-tuos closed 3 months ago
とりあえずここにメモします。個別の issue のほうがよければ指摘してください。
(1) Makefile
の $(RM)
の定義
make clean
がエラーになる
rm
直接表記でも良いような。 GNU make の Makefile.am
でも rm
っぽいので(2) strptime(3)
, timegm(3)
, strftime(3)
のプロトタイプ
strptime(3)
は XPG4 もしくは POSIX.1-2008
(Ubuntu manだと POSIX.1-2001 と書いてあるけど、正しくは POSIX.1-2008 で追加っぽい)timegm(3)
は GNU拡張strftime(3)
は C99<time.h>
では
<sys/features.h>
で、 _XOPEN_SOURCE
や _POSIX_C_SOURCE
等の標準定義がなければ _NETBSD_SOURCE
が定義されるstrptime(3)
は _XOPEN_SOURCE
あり もしくは _NETBSD_SOURCE
ありで有効
(POSIX.1-2008 の定義は反映されていないっぽい?)timegm(3)
は _XOPEN_SOURCE
も _POSIX_C_SOURCE
も無い場合に有効strftime(3)
は常時有効_XOPEN_SOURCE
ありでないと strptime(3)
が定義されない?というわけで、どう定義するのがよいのかを他の事例で見たほうが良さそうです
とりあえず(1)に関しては直接表記に直しておきます。
(2)は面倒だな~~~というのもあり、あとなんかmacだとstrptimeの挙動がアレらしいので
(ref: https://qiita.com/YujiSoftware/items/1b65591efda79933fc79)
がさっと書き換えてもいいのかもなあと思いつつ。
昔[いつ?]は_XOPEN_SOURCE
ナシでもLinuxでビルドできていたわけなので、そこもちょっと追っかけたいところです
昔[いつ?]は
_XOPEN_SOURCE
ナシでもLinuxでビルドできていたわけなので、そこもちょっと追っかけたいところです
単純に「昔はプロトタイプなくても警告が出るだけでビルドは通ってた」だけという気はします。 gcc11くらいからNGになってませんでしたっけ。(NetBSD 10.0 の gcc10 は警告だけで通るっぽいが)
ただ、 64bit time_t
を返す関数で暗黙 int
と解釈されると big endian マシンで動かなくなるかも? (試してない)
glibc の <feature.h>
を見ると
_GNU_SOURCE
を定義すると何でもありになるようなので、それだけにするか、
_GNU_SOURCE
_BSD_SOURCE
_NETBSD_SOURCE
全部定義するか、くらい?
単純に「昔はプロトタイプなくても警告が出るだけでビルドは通ってた」だけという気はします。
多分これです!Archメインなのでもうgcc14という
_GNU_SOURCE
_BSD_SOURCE
_NETBSD_SOURCE
全部定義するか、くらい?
とりあえずこれで行けそうなので行ってみます(glibcには_BSD_SOURCE
がdeprecatedだ、と怒られるがまあよいでしょう)
https://github.com/taka-tuos/nanotodon/commit/b9cf143dba15e6c6cb5ec451cfce651ea451e1e7 で NetBSD/i386 10.0 ではとりあえず通っています
mirage-% make
cc -O2 -g -DSUPPORT_XDG_BASE_DIR -D_GNU_SOURCE -D_BSD_SOURCE -D_NETBSD_SOURCE -I/usr/pkg/include -c nanotodon.c -o nanotodon.o
cc -O2 -g -DSUPPORT_XDG_BASE_DIR -D_GNU_SOURCE -D_BSD_SOURCE -D_NETBSD_SOURCE -I/usr/pkg/include -c sbuf.c -o sbuf.o
cc -O2 -g -DSUPPORT_XDG_BASE_DIR -D_GNU_SOURCE -D_BSD_SOURCE -D_NETBSD_SOURCE -I/usr/pkg/include -c squeue.c -o squeue.o
cc -O2 -g -DSUPPORT_XDG_BASE_DIR -D_GNU_SOURCE -D_BSD_SOURCE -D_NETBSD_SOURCE -I/usr/pkg/include -c utils.c -o utils.o
cc -O2 -g -DSUPPORT_XDG_BASE_DIR -D_GNU_SOURCE -D_BSD_SOURCE -D_NETBSD_SOURCE -I/usr/pkg/include -c config.c -o config.o
cc -O2 -g -DSUPPORT_XDG_BASE_DIR -D_GNU_SOURCE -D_BSD_SOURCE -D_NETBSD_SOURCE -I/usr/pkg/include -c messages.c -o messages.o
cc -o nanotodon nanotodon.o sbuf.o squeue.o utils.o config.o messages.o -L/usr/pkg/lib -Wl,-R/usr/pkg/lib -lcurl -lpthread -lm
mirage-%
pkgsrc用定義がコメントであれば手抜きできるかも(ドキュメントサボれるかも)というくらいです
diff --git a/Makefile b/Makefile
index 1f9f4e9..1af865a 100644
--- a/Makefile
+++ b/Makefile
@@ -3,6 +3,8 @@ OBJS = nanotodon.o sbuf.o squeue.o utils.o config.o messages.o
# Use $XDG_CONFIG_HOME or ~/.config dir to save config files
CFLAGS += -g -DSUPPORT_XDG_BASE_DIR -D_GNU_SOURCE -D_BSD_SOURCE -D_NETBSD_SOURCE
+#CFLAGS += -I/usr/pkg/include
+#LDFLAGS += -L/usr/pkg/lib -Wl,-R/usr/pkg/lib
LDLIBS += -lcurl -lpthread -lm
# default
コメント返し忘れてた:pkgsrc用のコメントも追記しておきます
とりあえず現状OKそうなのでいったんCloseします(また怪しければ開ける)
どちらか片方: