GNU core utilitiesのビルド(Mx Linux, Debian stretch)
coreutilsのビルド時にgnulibのacl-internal.hがエラーを吐いた。たぶんgccが古いんだと思う。
# 環境と今回ビルドしたcoreutilsのバージョン $ gcc --version gcc (Debian 6.3.0-18+deb9u1) 6.3.0 20170516 $ cat /etc/os-release PRETTY_NAME="Debian GNU/Linux 9 (stretch)" $ cat src/version.c #include <config.h> char const *Version = "8.31.48-f2dfea";
coreutils をビルド
$ git clone git://git.sv.gnu.org/coreutils $ cd coreutils $ ./bootstrap --skip-po $ ./configure $ make -j $(nproc)
gnulibのacl-internal.hがエラー。
CC lib/acl-internal.o lib/acl-internal.c: In function 'free_permission_context': lib/acl-internal.c:479:1: error: function might be candidate for attribute 'const' [-Werror=suggest-attribute=const] free_permission_context (struct permission_context *ctx) ^~~~~~~~~~~~~~~~~~~~~~~ cc1: all warnings being treated as errors Makefile:9705: recipe for target 'lib/acl-internal.o' failed make[2]: *** [lib/acl-internal.o] Error 1
acl-internal.hを編集
--- a/lib/acl-internal.h 2019-08-28 17:22:43.146398122 +0900 +++ b/lib/acl-internal.h 2019-08-28 17:27:29.011391134 +0900 @@ -297,6 +297,10 @@ int get_permissions (const char *, int, mode_t, struct permission_context *); int set_permissions (struct permission_context *, const char *, int); -void free_permission_context (struct permission_context *); +void free_permission_context (struct permission_context *) +#if ! (defined USE_ACL && (HAVE_ACL_GET_FILE || defined GETACL)) + _GL_ATTRIBUTE_CONST +#endif + ; _GL_INLINE_HEADER_END
再度make。
$ make -j $(nproc) # 成功
一旦、全てをビルドしてしまえば、今後は個別にビルドできる。改変してみよう。
--- a/src/cat.c 2019-08-28 17:21:10.126750050 +0900 +++ b/src/cat.c 2019-08-28 18:12:31.683477943 +0900 @@ -624,11 +624,17 @@ break; case_GETOPT_HELP_CHAR; - + /* printf("myusage"); */ case_GETOPT_VERSION_CHAR (PROGRAM_NAME, AUTHORS); + /* printf("myusage"); */ default: - usage (EXIT_FAILURE); + printf("-----------\n"); + printf("-----------\n"); + printf("-----------\n"); + printf("-----------\n"); + exit (EXIT_FAILURE); + /* usage (EXIT_FAILURE); */ } }
実行。
$ make src/cat && src/cat --abcd CC src/cat.o CCLD src/cat src/cat: unrecognized option '--abcd' ----------- ----------- ----------- -----------