揮発性のメモ2

http://d.hatena.ne.jp/iww/

アーキテクチャの取得

apt-getするとき、アーキテクチャをどうやって取得してるのか

http://dennou-h.gfd-dennou.org/debian/dists/wheezy/main/binary-armhf/
http://dennou-h.gfd-dennou.org/debian/pool/main/libc/libc++/libc++-dev_1.0~svn205159-1_armhf.deb


とりあえず適当に全ファイル検索したら、mkinitramfsコマンドのなかでarmhfという文字列を発見

DPKG_ARCH=`dpkg --print-architecture`

とかやってる箇所があった。


次にdpkgコマンドのソースを見てみる
--print-architectureオプション使用時にはprintarch()を呼んでいるらしい。

src/enquiry.c

 printf("%s\n", architecture);

src/main.c

const char architecture[]= ARCHITECTURE;

アーキテクチャ名は、dpkgコマンドのコンパイル時に埋め込まれている。


コンパイル時にはどう決めているか

dpkg_arch=$(cd $srcdir/scripts; \
    PERL5LIB=$(pwd) ./dpkg-architecture.pl -t$host -qDEB_HOST_ARCH 2>/dev/null)

scripts/dpkg-architecture.pl

$v{DEB_HOST_ARCH} = get_raw_host_arch();


scripts/Dpkg/Arch.pm

  1. gcc -dumpmachineアーキテクチャを調べる
  2. CPU名とOS名を取り出し、対応表を見ながらdpkgで使っている名前に変換する
  3. これでわからなかったら dpkg --print-architecture で調べる*1