文書の過去の版を表示しています。
目次
GNUstep ソースからのインストール on Fedora 43
目標
Fedora 43 に Clang/Objective-C 2/GNUstep のGUIアプリケーションの開発環境を構築する。
前もって必要なもの
以下をあらかじめパッケージマネージャーでインストールしておきます。
- clang
- lld
- libobjc2
※libobjc2 はソースからインストールしたほうが良いかもしれません。
GNUstepのソースコードの入手
GNUstep: Download から GNUstep Core にある以下のソースを入手します。
- GNUstep Make
- GNUstep Base
- GNUstep GUI
- GNUstep Backend
上から順にビルドしてインストールしていく必要があります。
GitHubのリポジトリを使う場合、以下のようにします。
$ git clone https://github.com/gnustep/tools-make.git $ git clone https://github.com/gnustep/libs-base.git $ git clone https://github.com/gnustep/libs-gui.git $ git clone https://github.com/gnustep/libs-back.git
1. GNUstep Make (tools-make)
詳しい説明は INSTALL に書かれています。
GNUstep Make は GNUstep を利用するプロジェクトをビルドするための基本的なビルドツールで、ほぼ必須です。 他のライブラリ (Base、GUI、Backend) をビルドするために必要なので、まず最初にインストールする必要があります。 GCC を使うならただ configure と make を実行すればよいだけですが、Clang を利用するためには調整が必要です。 そして最もつまづきやすいポイントでもあります。
configureは以下のオプションを指定して実行します。
$ ./configure \ --enable-native-objc-exceptions \ --enable-objc-arc \ --with-runtime-abi=gnustep-2.1 \ --with-library-combo=ng-gnu-gnu \ CC="clang" CXX="clang++" CPP="clang -E" LDFLAGS="-fuse-ld=lld"
--with-runtime-abi=gnustep-x.y の x.y は libobjc2 のバージョンに合わせます。
素直に上記のコマンドを実行すると、たぶんエラーになります。
エラーになったら config.log を確認します。
※エラーにならなかったらmakeに進んでください。
おそらく、clang のオプション -V と -qversion をテストしているところで失敗してるのがわかります。
このオプションをサポートするclangのバージョンは存在しません。
configureスクリプトの該当箇所を探して修正します。
-V と -qversion を、clangがサポートする適切なオプション -v や --version に書き換えます。
あるいは削除してしまいます。
libobjc (2ではない) が存在していると、たぶんエラーになります。 この場合 libobjc をアンインストールすることで通すことができます。 残念ながら、この回避策を取るとGCCでObjective-Cを利用できなくなってしまいます。 どのみち GNUstep を GCC と Clang 両方で使えるようにするのは難しいので、どちらかを諦めざるを得ないです。
configure が通ったら make でインストールします。
$ make # たぶん何も処理は行われないので省略可 $ sudo make install
prefixを指定しなければ /usr/local 以下にインストールされます。
アンインストールは make uninstall でできます。
~make install~ が通ったら、以下のコマンドで GNUstep Make を有効にします。
$ source /usr/local/share/GNUstep/Makefiles/GNUstep.sh
gnustep-config を実行して、正しく GNUstep Make の環境がセットアップされていることを確認しておきます。
$ gnustep-config --objc-libs -fuse-ld=lld -pthread -fexceptions -rdynamic -fobjc-runtime=gnustep-2.1 -fblocks -L/home/username/GNUstep/Library/Libraries -L/usr/local/lib -lpthread -lobjc -lm
大まかにこのような出力にならなければどこかで失敗しています。
以降の作業は GNUstep Make が有効になっている前提で進めます。
2. GNUstep Base (libs-base)
詳しい説明は INSTALL に書かれています。
依存するライブラリは dnf でインストールできます。
$ sudo dnf install libffi-devel libicu-devel gnutls-devel libxml2-devel libxslt-devel libxslt-devel avahi-devel zlib-ng-compat-devel openssl-devel libcurl-devel libdispatch-devel
configureとmake を実行します。
$ ./configure $ make $ sudo make install
/usr/local/include や /usr/local/lib 以下にヘッダーとライブラリが配置されていることを確認しておきます。
この時点で一度コンソール版の Hello World を書いて動作するか確認しておくのが良いでしょう。
3. GNUstep GUI (libs-gui)
詳しい説明は INSTALL に書かれています。
依存するライブラリは dnf でインストールできます。
$ sudo dnf install libtiff-devel libjepg-devel libpng-devel giflib-devel aspell-devel cups-devel audiofile-devel portaudio-devel
configure と make を実行します。
$ ./configure $ make $ sudo make install
/usr/local/include や /usr/local/lib 以下にヘッダーとライブラリが配置されていることを確認しておきます。
4. GNUstep Backend (libs-back)
詳しい説明は INSTALL に書かれています。
configure と make を実行します。
$ ./configure $ make -j4 $ sudo make install
GNUstep 本体のインストールはこれで完了ですが、まだやらないといけなことがあります。
フォントの問題の対応
この段階で Objective-C 2 でプログラムのコードを書いてビルドするところまではできます。 しかし、まだ実行環境としては不完全です。
フォント周りで致命的な問題があって、このままではGUIアプリケーションが動作しません。 具体的には、デフォルトのシステムフォント Helvetica が GNUstep に同梱されていないためです。 Helvetica はプロプライエタリなフォントであるため扱いにくいです。 代わりに別のフォントを使用するように設定する必要があります。 残念ながら、その手順はあまり分かりやすいものではありません。 1)
以下の手順でフォントの設定を変更します。
- 既存の TTF/OTF などのフォントから nfont を生成する
- .nfont フォルダを適切な場所に配置する
- その nfont を使用するように設定する
GNUstep は TTF/OTF のフォントを直接使うことはできないので nfonts という形式にまとめないといけないけません。 これは mknfonts というツールで自動化できます。 デフォルトで使用するフォントの設定は defaults というコマンドで行います。
次の一連のコマンドは、これらを実際に行う一例です。
$ git clone https://salsa.debian.org/gnustep-team/mknfonts.git $ cd mknfonts $ make # GNUstep Make が有効になっている前提 $ cd obj $ ./mknfonts /usr/share/fonts/liberation-sans-fonts/* # liberation-sans-fonts でなくても好みのものを選べば良い $ mv 'Liberation Sans.nfont' LiberationSans.nfont # 空白が入っていると扱いづらいので、リネームしておく $ mkdir $HOME/GNUstep/Fonts # もし存在していなければ作成しておく $ sudo cp -R ./LiberationSans.nfont $HOME/GNUstep/Fonts # システム全体で共有するならば /usr/local/lib/GNUstep/Fonts に配置する $ defaults write NSGlobalDomain NSFont "LiberationSans" # フォント名は .nfont フォルダにある FontInfo.plist の PostScriptName に合わせる
これで、ひとまずGUIアプリケーションも実行できるようになります。
確認のためのテストプログラム
単純なパネルを表示するプログラムを書いて、実行できることを確認しておきます。
main.m:
#import <Foundation/Foundation.h>
#import <AppKit/AppKit.h>
int main (void) {
@autoreleasepool {
[NSApplication sharedApplication];
NSRunAlertPanel (@"Does work fine?", @"Hello, world!", nil, nil, nil);
}
return 0;
}
GNUmakefile:
include $(GNUSTEP_MAKEFILES)/common.make
APP_NAME = PanelExample
PanelExample_HEADERS =
PanelExample_OBJC_FILES = main.m
PanelExample_RESOURCE_FILES =
include $(GNUSTEP_MAKEFILES)/application.make
ビルドと実行:
$ make $ openapp ./PanelExample
実行結果:
実行中に数行程度の煩わしいログが流れるかもしれません。 今の段階では無視しておくことにします。

