Hatena::ブログ(Diary)

Debian GNU/Linux 3.1 on PowerMac G4 このページをアンテナに追加 RSSフィード Twitter

2008-01-15 SimCity が Micropolis になったので make した!

CDS

Micropolis についての詳細はココに。

というわけで、さっそくソースコードダウンロードして make してちょびっとだけ触ってみた。けど、make はエラーが出まくりで大変だったので、取り急ぎメモだけ残しておく。

[][][]遊べるまでのメモ 21:23 遊べるまでのメモを含むブックマーク 遊べるまでのメモのブックマークコメント

動作した環境は…

事前に用意するものは…

  • X11 アプリケーション(OS のインストールディスクからカスタムインストールで入れておく)
  • XCodeTools(インストール時に X11 SDK も必ず入れる!)
  • Micropolis のソースコード
  • stargo さんの Mac 用のパッチ

とりあえずこんだけだと思うけど、もしかしたら MacPorts で元々入っていたものが必要かも。

手順はココのをそのまま。

まずはダウンロードしてきたファイルを展開。うちの環境では safari が勝手に .tar にしてくれちゃう。tgz のままの場合は xvf を xvzf に。

debian:~/myTest paraches$ tar xvf micropolis-activity-source.tar

次にパッチをあてる。パッチファイルは .tar や展開されたフォルダと同じ場所に置いておく。

debian:~/myTest paraches$ patch < micropolis_mac-osx.patch  -p2

で、ソースファイルのあるフォルダへ移動して make

debian:~/myTest paraches$ cd micropolis-activity/src/
debian:~/myTest/micropolis-activity/src paraches$ make

ここで、いくつか報告が既にあるけど途中でエラーになる場合があるみたい。自分の場合がまさにそれ! というわけで、エラーになる箇所をちょこっと(適当に)修正する。

最初のエラーはコレ。

tclenv.c:63: error: conflicting types for 'unsetenv'
/usr/include/stdlib.h:243: error: previous declaration of 'unsetenv' was here
tclenv.c:303: error: conflicting types for 'unsetenv'
/usr/include/stdlib.h:243: error: previous declaration of 'unsetenv' was here
make[1]: *** [tclenv.o] Error 1
make: *** [all] Error 2

tclenv.c は int だけど、stdlib.h は void。だから tclenv.c を以下のように void に修正。

63行目の場所

//int			unsetenv _ANSI_ARGS_((const char *name));
void			unsetenv _ANSI_ARGS_((const char *name));

303行目の場所

//int
void
unsetenv(name)

次のエラーはコレ。

tclxid.c:242: error: too few arguments to function 'setpgrp'
make[2]: *** [tclxid.o] Error 1
make[1]: *** [TCLX_MAKES] Error 2
make: *** [all] Error 2

tklx/src/tclxid.c の中で呼び出している setpgrp 関数に渡す引数が足りないって。足りないって言われても…。とりあえずググってそれっぽいのを持ってきた。(これで良いのかどうかはかなり怪しい!)

まずは tklx/src/tclxid.c の 150行目、変数宣言してる場所の最後に以下を加える

    pid_t         pid;

次に 243行目(問題の箇所)をこんな感じに

            pid = getpid ();
            setpgid (pid, pid);
//            setpgrp ();

最後の問題は /usr/X11/lib が無いって怒られる。

/usr/bin/ld: warning -L: directory name (/usr/X11/lib) does not exist
/usr/bin/ld: can't locate file for: -lX11
collect2: ld returned 1 exit status
make[1]: *** [sim] Error 1
make: *** [all] Error 2

これは sim/makefile の 19行目をこんな感じに。

#LDFLAGS=-L/usr/X11/lib
LDFLAGS=-L/usr/X11R6/lib

これで私の場合は make が通るようになった。

あとは make install

debian:~/myTest/micropolis-activity/src paraches$ make install

問題なし。

後は実行だけど、1つ上のフォルダの Micropolis が実行ファイル。でも、何も気にせずに起動したらダメだった。

iMac:~/myTest/micropolis-activity/src paraches$ cd ..
iMac:~/myTest/micropolis-activity paraches$ ./Micropolis 
Starting Micropolis in /Users/paraches/myTest/micropolis-activity ... 
Welcome to X11 Multi Player Micropolis version 4.0 by Will Wright, Don Hopkins.
Copyright (C) 2002 by Electronic Arts, Maxis. All rights reserved.
couldn't connect to display ":0"
iMac:~/myTest/micropolis-activity paraches$ 

display に繋げない??? なんとなく X11 関係?嫌な感じだな〜と思いつつ、アプリケーションフォルダの X11 を起動してから再トライしたら…起動できた!

f:id:paraches:20080115211322p:image

でも、SimCity を遊んだことがないので遊び方がわからない…。なんとなくあちこちいぢってみたりしたけど、これで本当にちゃんと最後まで遊べるのかは不明。付け焼き刃で make が通るようにしただけだから。

あと、起動したときにターミナルに何か出てる。音、鳴らないってこと??? っていうか、鳴ってないんだけど…

iMac:~/myTest/micropolis-activity paraches$ ./Micropolis 
Starting Micropolis in /Users/paraches/myTest/micropolis-activity ... 
Welcome to X11 Multi Player Micropolis version 4.0 by Will Wright, Don Hopkins.
Copyright (C) 2002 by Electronic Arts, Maxis. All rights reserved.
Adding a player on :0 ...
Darn, X display ":0" doesn't support the shared memory extension.
PlaySound Rumble
PlaySound Rumble
X connection to :0.0 broken (explicit kill or server shutdown).
iMac:~/myTest/micropolis-activity paraches$ 

[][]いつの間にか簡単に Micropolis が起動できるように! 00:22 いつの間にか簡単に Micropolis が起動できるように!を含むブックマーク いつの間にか簡単に Micropolis が起動できるように!のブックマークコメント

こんな感じで簡単になってた!

変更する部分は無いし、音も鳴るし、

Darn, X display ":0" doesn't support the shared memory extension.

なんて言われてたのが

Cool, I found the shared memory extension!

なんて言ってくれるぞ!