FreeBSD stable/13 の ar のエラーは手元の不整合だった様子2022年02月23日 13時15分38秒

FreeBSD stable/13 の ar がコンパイル出来なかった。

エラーの出力。

/usr/src/usr.bin/ar/acpyacc.y:280:32: error: incompatible integer to pointer conversion passing 'int' to parameter of type 'const char *' [-Werror,-Wint-conversion]
                        bsdar_errc(bsdar, EX_IOERR, errno, "unlink failed");
                                                    ^~~~~
/usr/include/errno.h:48:16: note: expanded from macro 'errno'
#define errno           (* __error())
                        ^~~~~~~~~~~~~
/usr/src/usr.bin/ar/ar.h:120:56: note: passing argument to parameter 'fmt' here
void    bsdar_errc(struct bsdar *, int _code, const char *fmt, ...) __dead2;
                                                          ^
/usr/src/usr.bin/ar/acpyacc.y:286:34: error: incompatible integer to pointer conversion passing 'int' to parameter of type 'const char *' [-Werror,-Wint-conversion]
                bsdar_errc(bsdar, EX_SOFTWARE, errno, "strdup failed");
                                               ^~~~~
/usr/include/errno.h:48:16: note: expanded from macro 'errno'
#define errno           (* __error())

ちょっとエラーが気になったので少し調べてみた。

% grep -R bsdar_errc /usr/src/ | grep .h:
/usr/src/contrib/elftoolchain/ar/ar.h:          bsdar_errc(bsdar, 0, "%s",              \
/usr/src/contrib/elftoolchain/ar/ar.h:void      bsdar_errc(struct bsdar *, int _code, const char *fmt, ...);
/usr/src/usr.bin/ar/ar.h:               bsdar_errc(bsdar, archive_errno(a), "%s",               \
/usr/src/usr.bin/ar/ar.h:void   bsdar_errc(struct bsdar *, int _code, const char *fmt, ...) __dead2;
% 
書式を指定する第三引数に errno が渡されている。全て削除してから buildworld を始めたはずだが。

ar ディレクトリを削除したら、今度はコンパイルが成功した。

% find /usr/src -name ar | xargs rm -rf

前回次回