やること
- ソースコード取得
- build
ソースコード取得
前回(ls コードリーディング⓪)ではmacOS版ls
ソースコードを取得した。
恐らく最新verであろうfile_cmds-272.tar.gzをダウンロードしてgcc
でbuildしたけど、membershipPriv.h
とか、humanize_number
がsymbol not foundとかとか。
足りないものを検索して同ディレクトリに置いて再ビルドするもそれでも何かが足りずにbuild errorになる…
違うverで試してみたところ、file_cmds-82.tar.gzではbuildがすんなり行けた。 ひとまず、今後はこれを用いるかな。
build
$ gcc --version Apple LLVM version 10.0.0 (clang-1000.10.44.2) Target: x86_64-apple-darwin18.0.0 Thread model: posix InstalledDir: /Library/Developer/CommandLineTools/usr/bin
$ curl -O https://opensource.apple.com/tarballs/file_cmds/file_cmds-82.tar.gz $ tar zxvf ile_cmds-82.tar.gz $ cd file_cmds-82/ls/ $ gcc -o ls ls.c cmp.c print.c util.c ls.c:455:30: warning: incompatible function pointer types passing 'int (*)(const FTSENT *const *, const FTSENT *const *)' (aka 'int (*)(const struct _ftsent *const *, const struct _ftsent *const *)') to parameter of type 'int (*)(const FTSENT **, const FTSENT **)' (aka 'int (*)(const struct _ftsent **, const struct _ftsent **)') [-Wincompatible-function-pointer-types] fts_open(argv, options, f_nosort ? NULL : mastercmp)) == NULL) ^~~~~~~~~~~~~~~~~~~~~~~~~~~ /Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/usr/include/fts.h:173:12: note: passing argument to parameter here int (*)(const FTSENT **, const FTSENT **)) __DARWIN_INODE64(fts_open); ^ 1 warning generated. print.c:617:20: warning: field width should have type 'int', but argument has type 'size_t' (aka 'unsigned long') [-Wformat] (void)printf("%*s ", width, "0B"); ~~^ ~~~~~ print.c:619:20: warning: field width should have type 'int', but argument has type 'unsigned long' [-Wformat] (void)printf("%*lld%c ", width - 1, bytes, ~~^~~ ~~~~~~~~~ print.c:622:19: warning: field width should have type 'int', but argument has type 'size_t' (aka 'unsigned long') [-Wformat] (void)printf("%*lld ", width, bytes); ~~^~~ ~~~~~ 3 warnings generated. $ ./ls Makefile Makefile.preamble cmp.c ls ls.c print.c util.c Makefile.postamble PB.project extern.h ls.1 ls.h stat_flags.c $
warningは出るものの、build, runできた。 (はてぶのコードハイライトでbashが対応してないのか…)