grep-ccopt - Cコンパイル時の引数にgrepする(特定コンパイラのみ)

目的

とあるコンパイラ*1が、コンパイル時の引数をオブジェクトファイルの特定セクション*2に埋め込んでいる。
これにgrepをかけることで、コンパイル引数が意図通りかどうか、チェックしたい。

結果

特定セクションを取り出してgrepするスクリプトを作成。

例)

% find . -name '*.o' | xargs grep-ccopt -mam33 | head -10
./init/version.o: -mam33
./init/initramfs.o: -mam33
./init/do_mounts.o: -mam33
./init/calibrate.o: -mam33
./mm/rmap.o: -mam33
...

*1:am33_2.0-linux-gnu-

*2:.note.GCC-command-line

続きを読む

ssh-env - ssh実行時に環境変数を設定/変更したい

目的

sshリモートホストでコマンドを実行するときに、PATHやその他の環境変数を設定して実行したい。

例えば、勝手にコマンドのバージョンアップができない重要なサーバで、自分のホーム以下にインストールしたコマンドをssh経由で実行したいのだが、PATHが/usr/local/binなどにしか通っていなくて困っている。

結果

  • sshdの設定変更 (PermitUserEnvironment=yes)、sshd再起動
  • ~/.ssh/environment に環境変数を書く (VAR=VAL 形式で一行一変数で)

※ "~" や "$" の置換はしてくれないので、PATHを書くときはフルパスで書くこと。
※ ~/.ssh/rc に書いてもダメです

続きを読む

compound-literal - コンパウンドリテラル

目的

C99の拡張機能(GCCでも独自に拡張している)である、コンパウンドリテラルについて知る。

結果

コンパウンドリテラルとは、無名変数を記述する方法で、C99での拡張仕様。
文法的にはキャストと中括弧での変数定義を組み合わせて記述する。
gccでは、グローバルスコープでのコンパウンドリテラルは.dataセクションに置かれる(.rodataに置かれることを期待する場合でも!)。

続きを読む

環境変数の設定値とカレントディレクトリの一致をチェックする

目的

build時に、ツリーの位置を環境変数で指定する必要があるとする。
この場合に、環境変数の設定が不適切ならMakeが中止されるようにしたい。

結果

GNU Makeの関数(if, shell, error, call)を組み合わせて、include用のMakefileを作成した。

check-env.mk
https://sssvn.jp/svn/spikelet/make/check-env/check-env.mk
続きを読む

『Rubyクックブック』

Rubyクックブック ―エキスパートのための応用レシピ集

Rubyでできること/したいことを、マクロな視点(データベースアクセスやウェブサービス構築)からミクロな視点(メソッドの削除や細かい言語仕様など)まで、一問一答形式で紹介した本。
Rubyの細かい知識を前提に書かれているのでRubyをはじめる人がいきなり読むには向かないと思うが、普段からRuby使っている人がもうちょっと知識を広げるためやRubyでの流行を把握するためには丁度良いレベル。
特に、帯にも書かれているが、リフレクション関係の説明が逆引きできる形でまとまっているものはあまり見たことがないので、リファレンスとして役立ちそう。

続きを読む

cross-compile - オープンソースソフトウェアのクロスコンパイル

目的

各種ソフトウェアパッケージをクロスコンパイルしたい。
そのときの作業メモを、まとめておく。

結果

現在、以下のパッケージのクロスコンパイルに成功している。

続きを読む