
	spComponent - Multi-platform GUI toolkit

			Last modified: <2024-06-11 17:17:17 hideki>


はじめに
--------

spComponent は，C言語で書かれたマルチプラットフォームGUIツールキットです．
もともとは，音声信号処理用のライブラリとして開発されましたが，それ以外の
用途に使用することもできます．このライブラリを使えば，ソースコードの
変更なしに，WindowsやmacOS，UNIX，iOS，Androidなどで動作するプログラムを
作成することができます．そのため，これらの環境でプログラムを作る必要が
ある人には大変便利だと思います．また，それぞれの環境に応じたGUI用の
APIを直接使うよりは，簡単にプログラミングできるようになっています．


特徴
----

我々は，Cによる信号処理用のライブラリを開発し，それを用いて研究やデモ
の作成を行っていたのですが，そのライブラリにはGUI用の関数は用意されて
いないので，GUIを作成するには，MotifやTcl/Tkなどを使っていました．しかし，
Motifは比較的低レベルなツールキットであるため，デモを開発するには
かなりの労力が必要でしたし，Tcl/Tkは，リアルタイム動作するようなデモに
は速度が不足していましたし，いくつかの制限がありました．また，他にも
GUIのツールキットは多数存在するのですが，評判が良いものは大抵C++による
ものでした．というのも，音声信号処理の世界では，まだまだC++が使える人
は少数派だったからです．このような理由から，私は，Motifに対する高レベルな
ライブラリの開発を始めました．このライブラリはとりあえず完成し，これを
用いることで，デモの開発時間はかなり短くなりました．しかし，このライブ
ラリは，Motifの上に存在していたため，Motifがなければ動作しませんでした
し，必要に応じてMotifの関数を用いなければいけませんでした．そのころ，
PCの世界ではWindows95がすでに爆発的に普及していたため，Windows上でも
プログラムが動作することが望ましいという状況にありました．そこで，これら
の要求をみたすような高レベルなライブラリの開発を新たにMotifの上で始め
ました．並行して，Windows上でも動作するように移植を行いました．現在は，
macOSやiOS，Androidにまで移植を行っています．このようないきさつで
開発されたライブラリですから，次のような特徴があります．

 * 簡単にGUIを作ることができる
 * Cで書かれている
   + C以外を知らない人でも使える
   + 動作が比較的高速
   + 資産の有効活用ができる
 * マルチプラットフォーム対応（Windows，Mac，UNIX，iOS，Android）
   + 64ビットアプリケーション作成にもほぼ完全対応
 * それぞれの環境におけるインターフェイスガイドラインに準拠

ただし，簡単にプログラムを書けることや，様々な環境で動くことを意識して
ますので，機能的に多少の制約はあります．また，使用するためには基礎となる
ツールキットが必要です（Windows版ではWindows API，Mac版ではCarbonかCocoa，
UNIX版ではMotifかGTK+）．

また，現在のバージョンは別パッケージのspComponentExを用いることでOpenGLを
動作させることが可能になっています．マルチプラットフォームでGUIを使いつつ，
OpenGLを動かしたい人にもお勧めできます．


使用するライブラリ
------------------

別配布の基本ライブラリ spBase を使用する必要があります．
Unix版では，Motifか，GTK+が必要です．GTK+のバージョンは，2.0系と3.0系
をサポートしています（1.0系のコードも残してはあります）．
MotifクローンのLessTif（バージョン0.88で確認）を使用しても一応動作はします．
また，Motifを使用する場合，XPMライブラリも必要になります．

なお，バージョン0.6.7から，WindowsではHTML Helpを使用するようになったため，
htmlhelp.libが必要になります．以前は，Microsoftのサイトからダウンロードする
必要がありましたが，最近はVisual Studioに含まれています．


インストール
------------

Windows版では，ライブラリのビルド済みバイナリファイルが提供されています．
適当なフォルダにヘッダファイル群（`sp'フォルダ）とライブラリファイル
（`lib'フォルダ）をコピーしてビルドの設定を行って下さい．
64ビット版のバイナリは`lib/x64'フォルダ内にあります．
Android版に関しては，Android版の配布パッケージに含まれる
README_ANDROID_SJIS.txtを見て下さい．

UNIXバージョンをコンパイルする場合は（LinuxやmacOS，Cygwinを含みます），
まずspComponentのディレクトリに移動し，spBase の`include'ディレクトリと
`lib'ディレクトリにシンボリックリンクを張ります（例えば
/usr/local/includeと/usr/local/lib）．

 % cd spComponent-X.X.X
 % ln -s /usr/local/include
 % ln -s /usr/local/lib

もし，コンパイル環境の設定が，spBaseの設定ファイルに記述されている場合
は，spComponentのソースディレクトリに移動し，

 % cd spComponent
 % make

を実行するだけでライブラリをコンパイルすることができます．このライブラ
リを，システムにインストールする場合は（例えば/usr/localなど），ルート
でログインして以下のように実行してください．

 # make SPDESTROOT=/usr/local install
 # make SPDESTROOT=/usr/local install.hdr

spBaseのあるディレクトリにシンボリックリンクを張りたくない人は，make 
のオプションに，TOP=/usr/local （/usr/local は，spBaseのトップディレク
トリを表します）を付け加えることでもインストールすることができます．

 % cd spComponent-X.X.X
 % cd spComponent
 % make TOP=/usr/local
 % su
 # make TOP=/usr/local SPDESTROOT=/usr/local install
 # make TOP=/usr/local SPDESTROOT=/usr/local install.hdr

なお，Linux上では，GTKバージョンが強制的に選択されるため，Motifバージ
ョンをコンパイルするためには，USE_MOTIF=y というオプションをmakeのオプ
ションに加えて下さい．
UNIX環境において，MotifとGTK+の両方がインストールされている場合は，
USE_GTK=yという記述を加えればGTK+がリンクされます．
GTK+のバージョンを2もしくは3にする場合は，USE_GTK=y
の代わりに，それぞれUSE_GTK2=yもしくはUSE_GTK3=yを追加します．

環境の判定ができずに（unknownと表示される）コンパイルに失敗する場合は，
例えばLinuxであれば，

 % export HOSTTYPE=i486

などとした後にmakeするとうまくいくことが多いようです．

exampleに含まれるプログラムをコンパイルする場合も上記の手順と同様に，
exampleのディレクトリに移動し，makeを実行します．

 % cd example
 % make

また，GTK2/GTK3の環境において，コンパイルするには，makeコマンドに
USE_GTK2=y オプション（GTK3の場合はUSE_GTK3=y）を指定して下さい．

 % make USE_GTK2=y

また，最近はX11のインストール先が/usrになっていることもありますので，その場合
には，下記のように X11TOP=/usr を指定して下さい．さらに，以下は，Xmu.aなどが
見つからない場合のエラーに対処するためにMOTIF_STATIC=nを指定しています．

 % make USE_MOTIF=y MOTIF_STATIC=n X11TOP=/usr 


動作確認
--------

現在の所，Windows Vista/7-10，macOS 10.6-10.14，Linux（Redhat, CentOS,
Ubuntu等）などでのコンパイル及び動作が確認されています．UNIXであれば，
Makefileなどを少し変更するだけで動作するようになると思います．64ビットアプリケーションの
作成にもほぼ完全対応していますので，64ビットアプリケーションの作成が可能な環境
（Windows, macOS Cocoa，Linux，iOSなど）では通常の64ビットアプリケーション作成手順に
従って64ビットアプリケーションを作成可能です．

GTKバージョン・Motifバージョンを用いてコンパイルしたバイナリを，Cygwinや
vmwareなどの仮想環境で動作させた場合，以下のように環境変数XLIB_SKIP_ARGB_VISUALSを
1にする必要があるかもしれません．

 % export XLIB_SKIP_ARGB_VISUALS=1

また，Windows版は，0.6.20-3からソリューションファイル等をVisual Studio 2013に
移行しました．これがそのまま開けない古いバージョンでサンプルをビルドする場合は，
*-vs2008.sln というファイル名のソリューションファイルを使用して下さい．
また，ビルド済みライブラリはツールセットごとにディレクトリを分けていくつか
用意してあります．例えば，32ビット版の場合は，lib\<ツールセットID>\*.lib
がライブラリファイルとなります（lib\*.libはVisual Studio 2008でビルドしたもの）．
example\example.sln に含まれるサンプルプロジェクトはこれらを適切にリンクする
ようになっていますのでご参照下さい．ただし，すべてのツールセットは用意して
いませんので，必要に応じて lib ディレクトリの下の <ツールセットID> ディレクトリの
名前を自分の環境に合わせて変えて下さい．

Cocoa版・iOS版は，それぞれ，example/cocoa，example/iosにサンプルファイルに対する
Xcodeのプロジェクトファイルが用意されています．基本的には <example名>.xcodeproj
の名前になっています．Cocoa版では，<example名>64ub.xcodeproj という名前の，
arm64（M1チップ）とx86_64（Intel 64ビット）のユニバーサルバイナリを作成する
プロジェクトが用意されています．iOS版では，<example名>bc.xcodeproj という名前の，
ビットコードに対応したバイナリを作成するプロジェクトが用意されています．


バグ
----

BUGS_SJIS.txt を見て下さい．


今後の予定
----------

TODO_SJIS.txt を見てください．


オフィシャルサイト
------------------

オフィシャルサイトは，
  https://www-ie.meijo-u.ac.jp/labs/rj001/spLibs/index-j.html
です．


ライセンス
----------

LICENSE.txt を見て下さい．Windows版，Motif版，GTK+版，Mac OS（Carbon）版は
オープンソースで，いわゆるX11ライセンスになっています．ほとんど制限はありません．
商用に利用することもできます．なお，macOS Cocoa版，iOS版，Android版は，
現在の所，オープンソースにはしておらず，ライセンスも未定です．未定では
ありますが，教育・研究用には無償で使用できるライセンスにする予定です．


坂野秀樹（Banno Hideki）
