移植 - 1. 基本
1.1 Darwin はどこから来たのか
Darwin は Unix ライクなオペレーティングシステムとして, NeXTStep / OpenStep から派生してきました. これはまた, 4.4BSD Lite から分岐してきたとも言われています. BSD の遺産もあり,実際 Darwin は近年 FreeBSD と NetBSD のコードによって近代化されてきました.
Darwin のカーネルは,Mach 3.0 ,BSD,オブジェクト指向ドライバレイヤ IOKit などの商用機能などの混合です. Mac は元々マイクロカーネルとして設計されていましたが,この上にある BSD カーネルはモノリシックであり,両者は今では相互に依存し,一つのカーネルとして見ることができます.
Darwin にあるユーザー空間のツールやライブラリはほとんど BSD 由来のもので,Linux のような GNU ツールではありません. Apple は他の BSD のように厳密ではなく,有益な妥協もしています. たとえば, Apple は BSD make と GNU make の両方を付けて, GNU make をデフォルトとしています.
1.2 コンパイラとツール
			短い説明: コンパイラは gcc の派生物ですが, cc としてインストールされます.
			Makefile にパッチを当てる必要があるでしょう.
			ほとんどのパッケージは共有ライブラリ をビルドしません.
			マクロに関係するエラーが出た時は,-no-cpp-precomp オプションを使用してください.
			
			長い説明: Mac OS X Developer Tools にあるコンパイラツールチェーンは不思議な生き物です.
			コンパイラは gcc 2.95.2 スイートをもとに, Objective C 言語やいくつかの Darwin 特有なことをサポートする変更がなされています.
			プリプロセサー  (cpp) は二つのバージョンがあります.
			ひとつは通常の(gcc 2.95.2 からの) プリコンパイラで,もう一つは Apple による,コンパイル済みヘッダをサポートする特別なプリコンパイラです.
			こちらの方が高速で,デフォルトになっています.
			しかし,コードによっては Apple のプリコンパイラではコンパイルできません.
			この場合,-no-cpp-precomp オプションを使い,通常のプリコンパイラでコンパイルします.
			(注記: 以前は -traditional-cpp オプションを勧めていました.
			このオプションの意味が GCC 3 で少し変わったため,これを使うパッケージのほとんどを破壊してしまいました.
			-no-cpp-precomp は現在の Developer Tools と 将来の GCC 3 ベースのコンパイラの双方に要求通りのことをしてくれます.)
			
アッセンブラは gas 1.38 ベースだと言いますが,リンカは GNU ツールではありません. これは 共有ライブラリ をビルドする際に問題となります. GNU libtool とこれが生成する configure スクリプトは Apple のリンカの扱い方を知らないためです.
1.3 ホスト種別
短い説明: configure が 'Can't determine host type' と言って異常終了した場合,config.guess と config.sub を /usr/share/libtool (OS バージョン 10.2 以前では /usr/libexec) から現在のディレクトリにコピーしてください.
長い説明: GNU の世界では,システムの種類を特定するために基準形式を採用しています.
これには3つのパートがあります: CPU 種別,メーカー,オペレーティングシステム.
4つ目のパートがつくこともあります.
全て小文字で表記され,ダッシュでつながれます.
例: i586-pc-linux-gnu, hppa1.1-hp-hpux10.20, sparc-sun-solaris2.6.
Mac OS X 10.0 のホスト種別は powerpc-apple-darwin1.3 です.
autoconf を使うパッケージは多くの場合,コンパイル環境のシステム種別を知りたがります. (注記: クロスコンパイルと移植のサポートのため,3つの種別 - ホスト種別,ビルド種別,ターゲット種別があります. 通常は全て同一です.) ホスト種別は configure スクリプトに渡すことも,自動推測してもらうこともできます.
			configure スクリプトは二つの付属スクリプトでホスト種別を決定します.
			config.guess がホスト種別の推測を試み,config.sub で検証・正規化をします.
			両スクリプトは別々にメンテナンスされていますが,全てのパッケージに含まれます.
			最近までこのスクリプトは Darwin も Mac OS X も知りませんでした.
			もし Darwin を認識しないパッケージがあった場合, configu.guess と config.sub を置き換える必要があります.
			功にも, Apple が動作するバージョンのものを /usr/share/libtool (10.2 以前の OS では /usr/libexec) に置いていますので,そこからコピーしてください.
			
1.4 ライブラリ
			短い説明: -lm を削除しても問題ありませんが,する必要もありません.
			
			長い説明: Mac OS X は libc, libm, libcurses, libpthread などのライブラリを分割して持っていません.
			代わりに,これらは全てシステムライブラリ libSystem の一部となっています.
			(以前のバージョンではこれは System のフレームワークでした.)
			しかし, Apple は適切にシンボリックリンクを /usr/lib に置いていますので,-lm でリンクすれば動作します.
			唯一の例外は -lutil です.
			他のシステムでは,libutil は疑似ターミナルや,ログイン監査などの関数を含んでいます.
			これらの関数は libSystem にはなく, libutil.dylib へのシンボリックリンクもありません.
			
1.5 他の情報源
ポーティングに関する他の情報源としては,MetaPkg Wiki があります.
Apple Technical Note TN2071: "Porting Command Line Unix Tools to Mac OS X" も読むとよいでしょう.
次: 2. 共有コード