はじめに

事情があって複数のプラットフォーム間で動作するアプリケーションを作成する機会に恵まれ、はじめてautoconfを使ってみました。Web上ではautoconfに関する解説・サンプルなど数多くありますがその多くがHelloWorld的解説で、外部ライブラリを扱ったサンプルが少く苦労したため、自分自身がまだ勉強中ながら、あえてコンテンツを作成してみました。できる限り調べて作成したつもりではありますが間違い・勘違いも多いかと思います。お気づきの点はご連絡頂ければ幸いです。

autoconfとは

移植性の高いソフトウェアを開発するには対応するシステムに対する深い知識が必要になりますが、開発者自身が、インストールされる可能性のあるすべてのシステム固有の問題を考慮しながら開発するのは極めて困難です。autoconfをはじめとする一連のツール群はそういった固有の問題を回避するための雛形を作成し、スムーズにより移植性の高いプログラムの開発をサポートするツール群です。

例えば、フリーソフトウェアをソースコードからインストールしたことのある方なら誰しも

tar zxvf xxxxx.-1.0.0.tar.gz -C ./temp/source
cd temp/source/xxxxx.-1.0.0
./configure
make
make install

という、一連の作業を実施した経験があるかと思います。configureにはシステム固有の問題や環境を調査し、アプリケーションを適切に構築するためのスクリプトが記述されています。一度でもこのconfigureスクリプトの中身を見たことがある人であればその複雑さに驚くと思います。autoconfをはじめとする一連のツール群はconfigureスクリプト作成作業を軽減し開発者を多いに助ける驚くべきツール群です。

サンプル構成

本コンテンツで取り上げるサンプルアプリケーション構成は以下のようになります。機能としてはサンプルですので特に難しいものはありません。読み込んだCSVファイルの情報にデータベースから読み込んだ情報をマージして再びCSV形式で出力するというありふれたアプリケーションです。

データーベースとしてMySQLを想定するため、mysqlclientライブラリを必要とします。また、入力用CSVファイルをハンドリングするためのlibcsvライブラリを使用します。libcsvはアプリケーションに静的リンクするものとして、パッケージに同梱されるものとしています。

以下、mysqlbase.cppはmysqlライブラリをラップした簡易クラスでtblsamp.cppはmysqlbaseクラスを継承したテーブルクラスです。main.cppがアプリケーション本体となります。ソース毎の説明はサンプルアプリケーションのソースプログラムについてに載せましたのでこちらをご覧ください。

sample
  - main.cpp
  - mysqlbase.cpp
  - mysqlbase.h
  - tblsamp.cpp
  - tblsamp.h
  - libcsv/
    - ccsv.cpp
    - ccsv.h
  - test/
  	- test_setup.sh
  	- test.csv

サンプル実行環境は次のとおりです。FedoraCoreで作成したプログラムをMacOSXに移植するのが目標です。

プラットフォーム
MacOSX(v10.4.10 intel) / FedoraCore5
MySQL バージョン
MacOSX MySQL v5.0.45 / FedoraCore5 MySQL v5.0.18