update.なぜ?僕には、Linux、OSをもっとよく知りたいという漠然とした欲求がありますいや、じゃあカーネルのコード読めよって話ですがまずは身近な所から始めようと思った所存でございます。bashとかzshとかは、ソースコードがあまりにも大きすぎるので、小さめのdashでshellがどういう風に作られているかを見ていきたいと思います。はじめに前提のスキル(というか僕の経験)Linuxの基礎スキルOpenStack構築やWEBサービス開発で基礎的なLinuxスキルはきっとあるのでしょう何かしらのプログラミング言語経験WEBサービスをスクラッチで書いた経験(4年以上前ですが。)PythonのOSSへのバグパッチ提供ただ上記を見ていただいて分かるように、C言語を使ってバリバリ商用コードを書いていたわけではないので、文法などは適宜調べながら読んでいきます。ソースコードバージョンは、0.5.9.1を読むことにします。srcChangeLogやCOPYINGは、明確なので説明を省きますがその他のMakefile.amやaclocal.m4について、目的を調べます。普段pythonやrubyなどで開発をしてる人には、これらはあまり馴染みのないものだと思います。automakeによって生成される、Makefile.amからMakefile.inを生成。用意してくれることのあるスクリプト。用意してくれるスクリプト。忘れ物を教えてくれる。用意してくれるスクリプト。installのときに使われることがある。configure.acを元にautoconfが生成する調べてみると、boldした文字以外のファイルは、autotoolsによって生成される中間ファイルであることがわかります。1度全部削除して1からビルドして見ましょう。(なんで、中間ファイルがそのままtarballに入っていたんだろう。srcaclocal.m4とautom4te.cacheが生成された。(まだ読んでない...)どうやら上記サイトに詳しい説明が載っているAutoconfには、Macroという概念があり複雑な処理を1つの定義にまとめている。Autoconfが読み込めるMacroの定義ファイルは1つと決まっているので、Macroが定義されているファイルをかき集めて、aclocal.m4という1つのファイルにしている。srcconfigureというファイルが生成されたautoconfとはconfigure.acを元にconfigureを生成するソフトウェアconfigure.acは、autoscanでsrc配下のCプログラムから自動生成することもできますが、今回のdashのケースでは、すでに定義済みのconfigure.acが用意されてますのでそれを元にしています。config.h.inというファイルが生成されたautoheaderとはhttp://markuskimius.wikidot.com/programming:tut:autotools:3https://www.gnu.org/software/autoconf/manual/autoconf-2.66/html_node/autoheader-Invocation.htmlautoheaderは、configure.acを元にconfig.h.inというファイルを生成するconfig.h.inは、config.hの元になるファイルである。環境情報を元に定数の値を操作するような定義ファイルがconfig.h.inであり、configureによってconfig.hになる。install-shはautomakeパッケージに含まれるシェルスクリプトのシンボリックリンクである。mksyntax.dSYM実行可能ファイルがいくつかsrcディレクトリ配下に作成されていることがわかります。ukinau$とビルドしたdashがログインシェルに設定できるとこまで確認しましたここまでできたので、もし拡張したりしたらビルドし直すことによって自分だけのshellが作れそうです。そんなことはしないのですが。遊びでもできることが大事です。考察なんだか薄っぺらい情報しか載せていませんが、なんとなくどういうプロセスでインストールされるのかわかった気がするので、ちょっと整理します。configure.acとMakefile.amが大元になっており、ゴールは、Makefileを作ること。configure.acには、どのような条件でどのような定数を指定するかみたいな定義が羅列されておりマクロが大量に使われている。マクロは、automakeパッケージに含まれているものも使われている。前述のようにデフォルトで使えないマクロもあるので、aclocalを使って、それらのマクロ定義ファイルのマクロをaclocal.m4にコピーすることで、autoconfで使えるようになる。上述で作ったaclocal.m4のマクロを利用して、autoconfでconfigureスクリプトを生成する。configureスクリプトは、.inのファイルからというファイルを生成する。環境(XXがインストールされているかなど)に応じた変数の置換がベースである。autoheaderは、config.hの元になるconfig.inを生成するconfig.hは、プリプロセッサに処理されるの定数の定義ファイルである(モチベーションについてはここをみると良い)。環境に応じて、それらの定数の値を変更したいので、configureを利用してconfig.hを生成したい。config.h.inは、configure.acでAC_DEFINE.*マクロで定義されている置換ルールが抜粋されて作られている。最後に、automakeを利用してMakefile.inを生成する。ここで、configure.inとMakefile.inが揃ったので、configureスクリプトで変数置換を実施して、Makefileを作る。することで、私の環境に適応したMakefileとconfig.hができて、プログラムのビルドができるようになった。深く追いすぎてもアレなので、autotoolsはどんな目的でざっくりどんなプロセスを踏むのかを見ていきました。次の投稿から実際にソースコードを読み進めたいと思います。参考にしたサイト記事中に基本的には書いてありますが特に参考になるなーと思ったものを下記に記しておきます。upLoginユーザーは見つかりませんでした。