daily memorandum 2.3.0
CBUG | FreeBSD | Hiki | Knoppix | Mac | Ruby | W-ZERO3 | Windows | ad | amd64 | ks | linux | momonga | net | print | security | tdiary | unix | www | 会社 | 鯖缶 | 全学ゼミ | 本
2008-01-06 (Sun)
_ [会社] いまさらあけおめ
冬休み終わりの日に何言ってんだって感じですが(苦笑)。 その前に「月記」になってるのを何とかしろなんて声もありますが。;)
そうそう。日記 ;) に書き忘れてたけど、 退職 日は今年の1月末になりました。ってことで、あとちょっと今の会社で働かないといけません。 ま、半分近くは有休消化だけどね。;)
_ [FreeBSD] Installation problem of depended ports that are not yet instaled.
portupgrade < 2.3 では、依存する ports にまだインストールされてないものがあった場合、 シレッと無視するという「仕様」になってました *1。 まぁ、portupgrade が無視してても ports system (bsd.ports.mk) の方で よきに計らってくれるし、それで大抵問題ないのでふつーの人は気にしないと思うのだけど、 pkgtools.conf に書いた諸々が無視されてしまうなど、 あんまり気持ちのいいものではないわけです。
portupgrade 2.3 でこれがちゃんと実装されたというのをいつかどこかで読んで、 早速試してみたわけです。たしか FreeBSD の xorg が 6.9 から 7.3 に上がった時だから、 去年の9月か10月頃だったかな。
で、その結果は…全然だめぽ。前と全くおんなじ。orz
これってテストしたのかなーとか思いつつ、2日ほど debug してみたけど、 根が深そうなのでそのまま放置。 で、冬休みになってようやくまとまった時間が取れたので、 正月から再度 debug開始。一時期は「アルゴリズムからして完全に見直さないとダメちゃうか?」 って頭抱えてたのだけど、結論としてはこんな修正で直ったようです。;)
Index: bin/portupgrade
===================================================================
RCS file: /cvsroot/portupgrade/pkgtools/bin/portupgrade,v
retrieving revision 1.38
diff -u -r1.38 portupgrade
--- bin/portupgrade 9 Aug 2007 15:28:05 -0000 1.38
+++ bin/portupgrade 6 Jan 2008 15:52:37 -0000
@@ -695,7 +695,7 @@
make_env = get_make_env(dep)
# If has not yet installed
- if $pkgdb.deorigin(origin)
+ if !$pkgdb.deorigin(origin)
install_tasks << dep
$task_options[dep] = {
:make_args => make_args
つか、そもそもこの if 文って常に false になってないか? ってことで、最終的にはこの if 文削除して send-pr しておきました。( ports/119383 )
テスト
- portupgrade とその依存パッケージのみをインストール
- portupgrade -N bash を実行
したログを置いておきます。
_ [FreeBSD] これで問題はすべて解決したのか?
portupgrade >= 2.3 では
- 未インストールの依存 ports を先にインストール
- インストール済の ports のうち、アップグレードすべきものをインストール
という順番で処理されるようになってます。 簡単なケースではこれで問題ないわけですが、
- 未インストールの ports が、インストール済の ports の新しいバージョンを必要とする
なんてケースでは問題が起こります。例えば、
LIB_DEPENDS= slang.2:${PORTSDIR}/japanese/libslang
と書いてある時に、インストールされてる libslang の shlib version が古い時、などですね。 この場合は、下手すると同一 ports の古いバージョンと新しいバージョンが 混在することになるので(portupgrade が処理出来ないから bsd.port.mk の方が処理するわけだけど、こいつは「アップグレード」処理は出来ない」)、 より困ったことになるかも。:(
ただ、これを実装しようとすると、bsd.port.mk の依存関係まわりの処理を Ruby で丸々再実装しないといけない気がするので、ちょっと気が重い… いろんな場面で「車輪の再発明」が発生するのは、何とかならんかなぁ… とか言い出すと、「make ステ」って話にしかならんので、言わないことにするわけですが。
*1 「これ、実装してないよ」ってコメントが書いてあった。;)
2007-12-01 (Sat)
_ C で bool型
ISO C++ とか C99 とかの規格が固まって処理系の実装が進んでいる頃(GCC 3.2 の頃)に 開発から足を洗ってしまったせいで、すっかりその辺の事情に疎くなってるらしい… 最近の C って bool型(より正確には _Bool型)とか true/false 使えるのね。
_Bool型と bool/true/false
組み込みの _Bool型が定義され、 stdbool.h では bool/true/false というマクロが(C++との互換性のため?)定義されてます。
ISO/IEC 9899:TC2 によると、
- マクロ bool は _Bool に展開されるべし。
- マクロ true は整数定数値 1 に展開されるべし。
- マクロ false は整数定数値 0 に展開されるべし。
だそうで、実際 FreeBSD 6.2 の /usr/include/stdbool.h では
#define false 0 #define true 1 #define bool _Bool
なんて定義されてます。
最初にこの実装の方を見てしまったので、 「これって implemetation dependent だったりしないよね?」と ちょっと心配になったのだけど、 規格にちゃんと書いてあるので「true が 1 で false が 0」というのは 安心して使って良さそう。
_Bool 型の変数に 0, 1 以外を代入すると?
When anyscalar value is converted to _Bool, the result is 0 if the value compares equal to 0; otherwise, the result is 1.
とあるので、bool (_Bool) 型の変数に 0, 1 以外の値を代入しても 強制的に 0 or 1 にされてしまいます。
#include <stdio.h>
int main() {
_Bool a = 1;
_Bool b = 2;
printf("a=%d, b=%d\n", a, b);
return 0;
}
% gcc bool.c
% ./a.out
a=1, b=1
つーことで、enum 使って bool の emurate するよりマトモに使えそう。
#include <stdio.h>
typedef enum {true = 1, false = 0} bool;
int main() {
bool hoge = 2;
printf("%d\n", hoge);
return 0;
}
% gcc enum.c
% ./a.out
2
参考
_ ISO C99 の規格
ISO JTC1/SC22/WG14 のページからダウンロード出来る なんて、実は今日の今日まで知らなかったりして…orz
ISO C++ は相変わらず ANSI から買う 以外ないみたいだけど。しかも、今 ANSI のサイト見たら、$30 に値上げされてるし… (C++ FAQには $18 とあるのに…)。
2007-10-25 (Thu)
_ [unix] Real UNIX MAGAZINE Day来場の案内
っつーメールがようやく来ますた。無事に申込出来てたようです。;)
このたびは、Real UNIX MAGAZINE Dayへ申し込みいただき、ありがとうございました。 開催日が近くなってまいりましたので、来場の案内をいたします。 (以下略)
いろいろウワサのあった2次会ですが、こっちも決まったみたいで、一緒に案内が来ました。 で、こっちはメール出したら1分後に返事が返って来たという…^^; やっぱ自動返信なのかなぁ(の割りには、X-Mailer: Mew version 5.1 とかあって、 変なところに凝ってる気もするけど ;)。 それとも、頻繁にメールチェックしてるのだろうか…
# 最近、素早い反応を求められる時は IM 送られることが多いので、メールチェックの頻度は大幅に下がったなぁ…ロクなメールが来ないから、というのもあるが。
2007-10-16 (Tue)
_ [会社] 実は今年で退職します
TRD君に先を越されちゃったけど ;)、 私も先週退職願を出しました。今年一杯で退職します。
会社でも相変わらずウルサイやつだったので、いなくなればさぞかし 風通しが良くなる ことでしょうね。;) まぁ、トップの口からこういう言葉が出てくる時点で推して知るべしって感じですが、 この一件に限らず、入社当時から「人を大事にしない雰囲気」 というのをずっと感じていて、ついにそれに耐え切れなくなったということです。
今後については、予定は未定です。 まぁいろいろ疲れたので、ちょっと休んでからゆっくり考えようかと。 あ、スカウトとか大歓迎ですよ。(ぉ
2007-10-07 (Sun)
_ 実は今日で退職しました
なぬ!全然知らなかった。先を越されたよ…
_ [unix] REAL UNIX MAGAZINE Dayのご案内
「やる」というウワサがあった、UNIX MAGAZINE の著者サイン会イベント、
決まったみたいです。早速申し込んどきました。
- 日時
- 2007年11月3日(土)10:30〜17:30(10:00 開場)
- 会場
- 神保町三井ビル 17F 株式会社インターネットイニシアティブ(IIJ)大会議室
- 参加
- 申込み順で120人
- 会費
- 無料
で、申し込んだはいいけど、確認のメールとか飛んで来ないのね… :( ちゃんと登録されてるのかなぁ。

_ kuma [JTC1/SC22/WG14のページからダウンロードできるものは、厳密に言えば「規格書」ではなくて、「規格書と同一内..]
_ koma2 [kumaさん、コメントありがとうございます。今ごろ気付きました(苦笑)。 厳密な意味での「規格書」が欲しければ..]