#contents
RIGHT:
&size(10){''更新履歴''};
&size(10){double height対応の項目は不要になったので削除しました 2019/07/28};
&size(10){ビルド方法を整理しました 2019/07/28};
&size(10){svnサーバー変更 2016/11/20};
&size(10){OpenTTDについて追記 2016/03/26};
&size(10){120.0向けにビルド方法を変更 2014/06/19};
&size(10){svnサーバー変更 2014/04/24};
&size(10){サーバー用の設定を追加 2011/08/20};
&size(10){初版。MinGWの項のみ 2010/04/30};
// &size(10){初版。MinGWの項のみ 2010/04/30};
*ソースコードのビルド方法 [#vb45419e]
#div(start,noteblue)
詳しい方がおられましたら、どんどん補足、修正をお願いします。
WSLでのコンパイル方法わかる方いらっしゃいましたら追記をお願いします.
#div(end)
**ソースコードを入手する [#qa9cfeff]
リリース版のソースは[[SourceForge:http://sourceforge.net/projects/simutrans/files/simutrans/]]にある。
//開発中のソースのSVNでの入手方法はhttp://simutrans-germany.com/wiki/wiki/tiki-index.php?page=en_CompilingSimutrans 参照。
//http://en.wiki.simutrans.com/index.php/Source_Code 参照。
開発中のソースは個人のSVNサーバーで管理されているので、そこから入手可能。
|svnサーバー|svn://tron.homeunix.org/simutrans|
|svnサーバー|svn://servers.simutrans.org/simutrans|
|ユーザー名|anon|
|パスワード|(空白)|

開発トランクはGitHubでもミラーされている。http://github.com/aburch/simutransからも入手可能。
**MinGWでのGDI版のビルド方法(Windows) [#l48c033c]
http://japanese.simutrans.com/bbs/test/read.cgi/tokusetu/1270203794/46さんの解説を使用しました。感謝。
**MSYS2でのGDI版のビルド方法(Windows) [#l48c033c]

+MinGWとMSYSをインストール。
+http://sourceforge.net/project/showfiles.php?group_id=2435 からbzip2-1.0.5-2-mingw32-dev.tar.gzとlibz-1.2.3-1-mingw32-dev.tar.gzをダウンロードする。
+ダウンロードしたファイルをTGZ形式を解凍できるツールで解凍して、中のincludeとlibをMinGWのインストール先(デフォルトではC:\MinGW")に上書きコピーする。
+http://libunicows.sourceforge.net/ からlibunicows-1.1.1-mingw32.zipをダウンロードして、 libunicows.aをMinGWのインストール先のlib内にコピー。
+ソース内のconfig.templateをコピーしてconfig.defaultを作成する。
+MSYS2を https://www.msys2.org/ からインストール。
+MSYS2のパッケージを更新する.''32bit版''のMSYS2で以下のコードを実行すればよい.
 yes | pacman -Syu
最後に以下のようなメッセージが表示されるので,MSYS2の画面の閉じるボタンを押して一度MSYS2を終了し,もう一度MSYS2の32bit版を起動する.
 警告: terminate MSYS2 without returning to shell and check for updates again
 警告: for example close your terminal window instead of calling exit
+MSYS2内で,以下のコードを実行.ライブラリのインストールを行う.
 pacman -S git make mingw-w64-i686-toolchain mingw-w64-i686-zlib mingw-w64-i686-bzip2 mingw-w64-i686-libpng
+config.templateをコピーし,「config.default」に名前を変更する.
+config.defaultを適当なテキストエディタで開く(改行がLFなのでメモ帳は不可)。
+以下の行の先頭の#を削除。
 BACKEND = gdi
 COLOUR_DEPTH = 16
 OSTYPE = mingw
 OPTIMISE = 1
+FLAGS = -DSTEPS16 を FLAGS = -DSTEPS16 -static-libgcc に変更。
#div(start,noteyellow,margin:0)
フラグ-DSTEPS16はすでに使用されていないため、開発トランクではこの行はありません。
FLAGS = -static-libgcc 行を新規にを付け加えてください
#div(end)
+スタートメニューから「MinGW」→「MSYS」→「MSYS」でMSYSのコンソールを開く。
 STATIC = 1
 MULTI_THREAD = 1
+ソースのあるディレクトリに移動する。c:\src\simutrans-src-102-2-2にソースがある場合は cd /c/src/simutrans-src-102-2-2 と入力してEnter。
+make CC="gcc" LDFLAGS="-static" と入力してEnter。
+make -j4 と入力してEnter。「4」はお使いのPCの論理コア数に置き換える.(並列コンパイル数の設定)
+うまくいけばsim.exeができる。
***コマンドプロンプトを開かない方法 [#y33bb358]
 50 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2010/04/29(木) 22:14:13 ID:kaTXIpwM
 >>46
 この方法でコンパイルした実行ファイルを実行すると
 コマンドプロンプトも一緒に開いちゃうんだけど、これってどこいじれば消せる?
 ソース?それともconfig.default?
 
 51 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2010/04/30(金) 01:36:06 ID:xZ3djKPE
 >>50
 LDFLAGSに-mwindows付ければ消えるよ
***コマンドプロンプトを開く/開かない [#y33bb358]
config.defaultの
 WIN32_CONSOLE = 1
が,コマンドプロンプトを開くかどうかのフラグです.1にすればSimutransはコマンドプロンプトを開いて起動します.
***SDL版のビルド [#s4fd7286]
-SDL、SDL_mixerの ライブラリが必要→どこから入手?
下記から入手可能
http://www.libsdl.org/download-1.2.php(SDLライブラリ)
http://www.libsdl.org/projects/SDL_mixer/(SDL_mixerライブラリ)
***サーバー専用にする [#cfbb260d]

config.defaultで、「BACKEND = posix」、「COLOUR_DEPTH = 0」に設定します。
起動時には、pakセット、言語などをコマンドラインから指定する必要があります。&br;(例)「-objects pak -lang ja」

***nettoolのビルド [#na670a81]
Makefileで「 -lwsock32」が不足しているようです。STD_LIBSに追加したら成功しました。
***makeobjのビルド [#wa3b14bd]
-makeobjディレクトリにある
-pngライブラリが必要→どこから入手?
//こちらから入手可能
//http://sourceforge.net/projects/libpng/
-リリース版では、simutransのビルドと競合するので、/utils/log.dと/utils/log.oとを削除しておく。(開発トランクでは競合しないように修正されているので必要なし)
-makeobjディレクトリに移動し,makeすればよい.

開発トランクのmakeobjソースコードは仕様が確定していないため、これで作成したpakは将来使用できなくなる可能性があります&imgfolder(16/exclamation.png);
**MSVC++ Expressでのビルド方法(Windows) [#a9f8b600]
+まずソースコードを入手しますが、SourceForgeからダウンロードしたものだとVC++用プロジェクトファイルが付いてこないので、SVNかGitHubからダウンロードします。&br;リビジョンが合っていればsourceforgeからダウンロードしたものにsvnやgitからダウンロードしたプロジェクトファイルを組み合わせても大丈夫です。必要なファイルはSimutrans.sln,Simutrans.vcproj,rivision.jse,simres.rcです。&br;VS10用のプロジェクトファイルはバグがあるので注意、VS10使用時でも通常版を読み込みましょう。最近のリビジョンでは削除されました。
+[[英語フォーラム:652]]からlibbz2.zipとbzlib.hがダウンロードできるので、適当なフォルダに保存します。libbz2.zipは展開しておきます。
+[[OpenTTD用のライブラリ:http://binaries.openttd.org/extra/openttd-useful/]]をダウンロードし、こちらも適当な場所に展開します。
**MSVC++ Express/Community Editionでのビルド方法(Windows) [#a9f8b600]
#div(start,noteblue)
わかる方,更新お願いします.
#div(end)
+まずソースコードを入手しますが、SourceForgeからダウンロードした安定板のソースコードだとVC++用プロジェクトファイルが付いてこないので、SVNかGitHubからダウンロードします。&br;リビジョンが合っていればsourceforgeからダウンロードしたものにsvnやgitからダウンロードしたプロジェクトファイルを組み合わせても大丈夫です。必要なファイルはSimutrans.sln,Simutrans.vcxproj,rivision.jse,simres.rcです。
//&br;VS10用のプロジェクトファイルはバグがあるので注意、VS10使用時でも通常版を読み込みましょう。最近のリビジョンでは削除されました。
+libbz2.libとbzlib.hを用意します。
--(MSVC++2013まで)[[英語フォーラム:16608]]からlibbz2.libとbzlib.h(bzlib.msvc.7zというファイルに圧縮されています)がダウンロードできるので、適当なフォルダに保存します。
--(MSVC++2015以降)[[bzip2のWebサイト:http://www.bzip.org/downloads.html]]からbzip2のソースコードをダウンロード・展開します。ダウンロードしたbzip2のソースをMSVC++でビルドすることにより、libbz2.libが生成されます。bzlib.hは、bzip2のソースに添付されているものを使用します。
---上述英語フォーラム:16608からダウンロードできるlibbz2.libだと、Simutransのビルドの時点で「外部シンボル "__imp____iob_func" は未解決です。」というエラーが発生し、ビルドが失敗します。[[VC++2015以降でstdin、stdout、stderrの定義が変わっている:http://stackoverflow.com/questions/30412951/unresolved-external-symbol-imp-fprintf-and-imp-iob-func-sdl2]]のが原因と思われます。
//フォーラムに貼られていたファイルがリンク切れになってたので最新のものに更新
+[[OpenTTD用のライブラリ:http://binaries.openttd.org/extra/openttd-useful/]]をダウンロードします。ダウンロードするファイルは、最新バージョンのディレクトリを選び、その中の末尾が"-win.zip"のファイルです。sourceやsumではありません。こちらも適当な場所に展開します。
//(追記)私の環境では6.0では上手くいかず、少し古めのもの(4.0)で試してみたら成功しました。
//↑ZLIB_WINAPIをプリプロセッサの定義に追加することでうまくいくようですので、コメントアウトしておきます。
+[[pthreadsのライブラリ:http://sourceware.org/pthreads-win32/]]をftpからダウンロードします。dll-latestの下のinclude,lib,dll内のファイルをすべて保存します。
+ソースフォルダ内のソリューションファイル(Simutrans.sln)かプロジェクトファイル(Simutrans.vcproj)を開きます。
+ソースフォルダ内のソリューションファイル(Simutrans.sln)かプロジェクトファイル(Simutrans.vcxproj)を開きます。
+ソリューションエクスプローラからプロジェクトのプロパティを開き、構成プロパティのVC++ディレクトリを選択します。
+インクルードディレクトリに保存しておいたhファイルの入ったディレクトリを追加します。OpenTTD用ライブラリの物は"展開したフォルダ\shared\include"にあります。
+ライブラリディレクトリに保存しておいたlibファイル,aファイル,dllファイルの入ったディレクトリを指定します。OpenTTD用ライブラリの物は"展開したフォルダ\win32\library"にあります。
+構成プロパティのC/C++→プリプロセッサを選択し、プリプロセッサの定義にZLIB_WINAPIを追記します。
+(120.1.1以降)プロジェクトのプロパティを開き、リンカー→入力の中の追加の依存ファイルを選択しimm32.libを追記します。
+(120.1.1以降)マニフェストツール→入出力で埋め込みマニフェストをいいえにします。
+プロジェクトをビルドします。上手くいけばソースフォルダ内のDebugフォルダにSimutrans.exeが出来ています。&br;Debug版だとデバッグ用の表示が追加されているので、Release版に変更してビルドすると無くなります。Debug版とは別にもう一度構成プロパティの変更が必要なので注意。

-revision.hが存在しないと言われてビルドが失敗する場合があります。これは本家のSVNを用いてソースコードをダウンロードしなかった場合(SourceforgeやTurtoiseSVN)に起こるエラーです。revision.hを自分で作るか、プリプロセッサでリビジョンを定義してやる必要があります。
~プリプロセッサに定義する場合は、プロジェクトの構成プロパティでC/C++→プリプロセッサを開きます。プリプロセッサの定義の末尾に、「REVISION=(リビジョン番号)」を付けたして下さい。
~revision.hを自作する場合は、次のように書いてrevision.hとして保存してください。もちろん保存後はプロジェクトにヘッダファイルとして追加する必要があります。
 #ifndef _revision_h
 #define _revision_h
 
 #define REVISION (リビジョン番号)
 
 #endif

なお、MSVC++を用いてビルドした場合、動作にpthreadのVisual C++用の動的リンクライブラリ(dll)が必要になります。本体を動作させるフォルダに、Simutransのデフォルトで付いてくるpthreadGC2.dllの代わりに、準備でダウンロードしたpthreadVC2.dllを置いてやります。

参考リンク:
-[[英語フォーラム:652]] How to compile Simutrans (&Makeobj) on Windows with MSVC
-[[英語フォーラム:16608]] How to compile Simutrans with MSVC

**macOSでのビルド方法(SDL2版) [#t54ef7b6]
+homebrew( https://brew.sh/index_ja )をインストールする.
+ターミナルで以下のコマンドを実行する.(ライブラリのインストール)
 brew install sdl2 libpng miniupnpc freetype
+config.templateをコピーし,「config.default」に名前を変更する.
+config.defaultを適当なテキストエディタで開く。
+以下の行の先頭の#を削除。
 BACKEND = sdl2
 COLOUR_DEPTH = 16
 OSTYPE = mac
 OPTIMISE = 1
 AV_FOUNDATION = 1
 MULTI_THREAD = 1
+ターミナルで,ソースコードがあるディレクトリに移動する.例えば,ダウンロード/simutran-src-120-4にソースコードがあるなら,cd ~/Downloads/simutrans-src-120-4 と入力する.(~/ はユーザーのホームディレクトリの意味)
+make -j4 と入力してEnter。「4」はお使いのPCの論理コア数に置き換える.(並列コンパイル数の設定)
+うまくいけば実行ファイル「sim」ができる。

**Linuxでのビルド方法(SDL2版) [#z427d63f]
※Ubuntuでのビルドを想定しています.
+以下のコマンドを実行する.(ライブラリのインストール)
 sudo apt install make gcc gdb git zlib1g-dev libbz2-dev libpng-dev libsdl2-dev libminiupnpc-dev libfreetype6
+config.templateをコピーし,「config.default」に名前を変更する.
+config.defaultを適当なテキストエディタで開く。
+以下の行の先頭の#を削除。
 BACKEND = sdl2
 COLOUR_DEPTH = 16
 OSTYPE = linux
 OPTIMISE = 1
 MULTI_THREAD = 1
+ターミナルで,ソースコードがあるディレクトリに移動する.(cdコマンドを用いる)
+make -j4 と入力してEnter。「4」はお使いのPCの論理コア数に置き換える.(並列コンパイル数の設定)
+うまくいけば実行ファイル「sim」ができる。

*パッチの当て方 [#da6325af]
simutrans本体の改変版は、実行ファイル形式で配布することも多いですが、ソースコードの差分を記述したパッチという形式で配布される場合が多々あります(拡張子は.patchか.diff)。小規模な変更の場合はパッチファイルのみ配布されることが多いです。
パッチファイルはあくまでもソースコードの差分を記述したファイルなので、ソースコードにパッチを当ててからビルドし実行ファイルを作ることでパッチの機能が付与されたsimutrans本体が出来上がります。

パッチファイルを当てる方法は大きく分けて2種類あり、1つはコマンドライン上からpatchというコマンドを実行する方法です。
Windowsのコマンドプロンプトにはpatchコマンドが付いてこないので、MinGWやCygwinを用いるかWindows移植版のpatch.exeをダウンロードしpathを通します。
基本的にはsimutransのソースコードが入っているディレクトリで「patch -p0 <パッチファイル名」と行えば大丈夫です。詳しい使い方は[[MANを参照:http://linuxjm.sourceforge.jp/html/GNU_patch/man1/patch.1.html]]。

もう1つはGUIの付いたアプリケーションを使って当てる方法です。筆者は[[TurtoiseSVN:http://tortoisesvn.net/]]というアプリケーションを用いています。(SVNからソースコードを入手したりするのにも便利)
インストール方法は省略。simutransのソースコードの入ったフォルダを右クリックし、「パッチを適用」を選択しパッチファイルを開くとパッチ処理が行われます。

*double height対応pak128の導入方法 [#q27a40e2]

nightly版のsimutransではdouble height(従来の1/2の高さのタイル)が導入されました。
ビルド済みのdouble height対応pak128は、2013/8/19現在調べた限り存在しないので、ソースから作る必要があります。
なお、「対応している」と言っても一部の地面パーツなどに限られるので、例えば1/2スロープに鉄道を敷いても従来のスロープ軌道が表示されるので、あくまでも一応動くよ、という程度です。軌道類はここのWikiを参考に自分でアドオンとして用意する必要があります。

また、double heightに対応するsimutrans本体(nightlyビルド版など)を用意する必要があります。

**必要なツール [#gba9f4ec]

- svn
- python 3.x
- お好きなテキストエディタ

**手順 [#fcd6d33c]

ここではコマンドプロンプトでの作業を例にしていますが、もちろんTortoiseSVNやexplorerで操作してもかまいません。

+ http://sourceforge.net/projects/simutrans/ のリポジトリをチェックアウト(チェックアウト先ディレクトリをsimutrans-codeとする)
  svn checkout svn://svn.code.sf.net/p/simutrans/code/ simutrans-code
+ http://forum.simutrans.com/index.php?topic=12021.0 からdouble heightに対応したmakeobjをダウンロードしてパスの通っているところに置く(普段使ってるmakeobjと別の名前にしておくと使いわけやすいのでオススメ。ここではmakeobj-dhとする)
+ simutrans-code\pak128.newlandscapeに移動する
  cd simutrans-code\pak128.newlandscape
+ _pakmak.tab の cmd makeobj QUIET と書かれているところをテキストエディタで cmd makeobj-dh QUIET に変更
+ pakmak.pyを実行する
  python pakmak.py
+ 実行が終わったらsimutrans\pak128にできあがってるので、これをnightly simutransのディレクトリにコピー。
コピーの際にpak128.newlandscapeみたいにフォルダ名を変更しておくと従来のpak128と区別しやすくなるので後々便利です。
pak128用のアドオンはdouble heightに関係あるものを除いて、対応するアドオンフォルダを作れば全てそのまま使えます。
double heightが関係してくるアドオンは、画像とdatを修正しないと見た目がおかしくなります(が、おそらく動作はするでしょう)。