GNU Autotools
GNU logo
作者 コミュニティ
開発元 フリーソフトウェア財団
最新版
複数
プログラミング
言語
m4, C
対応OS クロスプラットフォーム
プラットフォーム GNU ほか
内包元 GNUオペレーティングシステム
対応言語 English
ライセンス GNU General Public License version 2
公式サイト www.gnu.org/software/software.html
テンプレートを表示

GNU Autotools、またはGNU Build Systemとは、主にUnix系オペレーティングシステム (OS) においてソフトウェアパッケージ開発を行うための、ツール及びフレームワークの一種である。このツールを使用することにより、多種多様なUNIX互換環境にパッケージを対応させることが容易になる。 Autotoolsは主に Autoconf/Automake/Libtool の3つから成り立っている[1]。他の関連するツールには GNU makeGNU gettextpkg-configGNUコンパイラコレクションなどがある。

AutotoolsはGNUツールチェーンの一部であり、多くの自由ソフトウェアオープンソースパッケージで広く使用されている。そのコンポーネントツールは自由ソフトウェアであり、GNU General Public License の下でライセンスされているが、特別なライセンス例外によりプロプライエタリソフトウェアでの使用が許可されている[2][3]

動機

編集

ソフトウェアプログラムを移植可能にするのは難しい場合がある。コンパイラはシステムによって異なり、一部のシステムでは特定のライブラリ関数が欠落していることがある。コンパイラファイル(Cヘッダなど)の名前が異なる場合もある。共有ライブラリは、さまざまな方法でコンパイルおよびインストールされることがある。プラットフォームの違いを処理する1つの方法は、条件付きでコンパイルされたコード(つまり#ifdef経由)を記述することだが、ビルド環境が多種多様であるため、この方法はすぐに管理不能になる。Autotoolsは、この問題をより管理しやすい方法で解決するように設計されている。

パッケージ利用者側から視たAutotools

編集
Autotools(autoconf と automake)による作業の流れ

Autotoolsを用いて作成されたパッケージは容易に導入が可能である。典型的な場合、インストールまでの全工程が自動化されており、ソースコードを展開した後、以下のコマンドを入力するだけで全てが完了する。

$ ./configure && make && make install

多くのUNIX用オープンソースソフトウェアで、この方式が採用されている。

configure

編集

configurationスクリプト(configure)はビルド環境の構築を一括でおこなうシェルスクリプトである[4]

プログラムのビルドは複数のツールを連携させておこなわれるが、その際、ビルド設定(例: 拡張命令フラグ)を外部から取り込み全てのツール間にそれを一貫して適用しなければならない。これを手動でおこなうことは時間の浪費でありバグの温床である。このビルド環境構築を一括して自動でおこなうスクリプトが、慣例的にconfigureと名付けられるconfigurationスクリプトである[4]。パッケージの利用者はconfigureを実行するだけでビルド環境が構築できる。

configure及び付属のスクリプト・Makefileなどは標準的なUNIXコマンドだけを使用しており、パッケージの利用者は、パッケージそのものの構築・運用に必要なソフトウェアを除いて、Autotoolsの為に特別なソフトウェアを導入する必要はない(Windows系OSではUNIXコマンドが標準で含まれていない為、別途Services for UNIXCygwinなどのUNIX互換環境のインストールが必要である)。

また、自動的な環境検査が好ましくなかったり特別な設定が必要な場合、環境変数またはコマンド引数でconfigureの動作を調整できる。代表的なオプションを以下に説明する。

--prefix=dir
インストール先を変更する。--prefix=/opt/hugaとすると、実行ファイルは/opt/huga/bin、ライブラリは/opt/huga/libというように変更される。bin、libなどを個別に変更することも出来る。デフォルトは/usr/localである。OSベンダーなどが提供するバイナリパッケージでは、--prefix=/usrや--prefix=/opt/hugaなどの設定で構築されている場合が多い。root権限のないユーザや試しに利用したい場合は、--prefix=$HOME/hugaなどとすれば、他のユーザに影響を与えることを防止できる。
--with-hoge
別のパッケージhogeを利用することを指定する。--with-hoge=dirでhogeのインストール先を指定できる場合もある。--with-hoge=no又は--without-hogeとすると逆に使用しないことを指定する。
環境変数 CC
環境変数CCを設定すると、その値がCコンパイラのコマンド名として使用される。設定しない場合はccまたは適切なOS標準のコンパイラに設定されるが、明示的に設定することで標準と異なるコンパイラを使用できる。

これ以外にも多くのオプションがあり、少ないパッケージでも10以上、多いパッケージでは数十から100以上の設定項目がある。利用者の設定に矛盾があったり、環境の機能に不足があれば診断情報を出力する。また、クロスコンパイル対応や、構築用の作業ディレクトリをソースコードと異なるディレクトリに設定する機能がある。

autoconf

編集

Autoconf (autoconf) はconfigurationスクリプトを自動生成するツールである[5]

ビルド環境の自動構築をおこなうconfigurationスクリプト (configure) はそれ自体が時に数千行に渡る巨大なスクリプトになる。これを手動で記述し維持することは時間の浪費でありバグの温床である。このconfigure生成を自動でおこなうツールがAutoconfである[5]

Autoconfはconfigure.acを入力とし、configureを出力とする[6]。ユーザーがこのconfigureを実行することでビルド環境が構築される。

機能

編集

m4言語のマクロとシェルスクリプトの断片で記述された入力ファイルconfigure.ac(古いバージョンではconfigure.in)を、autoconfがm4を用いて置換しconfigureを得る。 最終出力configureはBourne Shell用のシェルスクリプトで、数百行から数千行の長さがある。

以下に、簡単なconfigure.acの例を示す。

AC_INIT(hello, 1.9, address) # 必須設定
AC_CONFIG_SRCDIR([hello.c])
# このパッケージではhogeを使用可能である configureに--with-hogeが追加される。
#(実際には、この後に利用者が--with-hoge=yesとした場合の動作定義を記述する必要がある)
AC_ARG_WITH(hoge, [Use hoge]) 

AC_PROG_CC                    # Cコンパイラの設定 configureが環境変数CCを使用する
AC_OUTPUT([Makefile])         # Makefile.inを雛形にしてMakefileを生成

出力のconfigureは非常に長いので掲載しない。この場合、一般的なオプションはサポートされる。利用者の要求に応じてhogeを利用するがどうかを決定する。また、Cコンパイラを探し実行方法を確認し、その結果得られたコマンド名・必要オプションなどをMakefileに出力する。

automake

編集

GNU Automakeautomake)はMakefile.inファイルを自動生成するツールである[7]

automakeはプログラムとソースコードの関係などが記述されたMakefile.amファイルを入力とし、Makefile.inを出力する。

実行例

編集

HelloWorldプログラムで例を示す

#Makefile.am
#実行バイナリファイルの名前はhello
bin_PROGRAMS = hello
#helloのソースコードはhello.c,hello.h
hello_SOURCES = hello.c hello.h

出力のMakefile.inは非常に長いので掲載しないが、期待した内容が得られる。 すなわち、configureを実行することでMakefileが生成される。このMakefileを用いてmakeコマンドを使用すると、hello.cをCコンパイラでコンパイルし、次いで標準ライブラリとリンクし、helloの実行ファイルが得られる。make installでは、helloはあるべき場所(ほとんどの場合は/usr/local/bin)にインストールされることになる。

脚注

編集
  1. ^ Learning the GNU development tools”. Autotoolset.sourceforge.net. 2016年4月1日閲覧。
  2. ^ Savannah Git Hosting - autoconf.git/blob - COPYING.EXCEPTION”. Git.savannah.gnu.org. 2011年7月21日時点のオリジナルよりアーカイブ。2016年4月1日閲覧。
  3. ^ libtool.git - GNU Libtool”. Git.savannah.gnu.org (2005年1月8日). 2016年4月1日閲覧。
  4. ^ a b "The configuration scripts that Autoconf produces are by convention called configure. When run, configure creates several files, replacing configuration parameters in them with appropriate values." 3 Making configure Scripts - Autoconf - gnu.org. 2022-06-11閲覧.
  5. ^ a b "Autoconf is an extensible package of M4 macros that produce shell scripts to automatically configure software source code packages." Autoconf - gnu.org.
  6. ^ "To create a configure script with Autoconf, you need to write an Autoconf input file configure.ac" 3 Making configure Scripts - Autoconf - gnu.org.
  7. ^ "GNU Automake is a tool for automatically generating Makefile.in files" Automake - gnu.org. 2022-06-11閲覧.

関連項目

編集

参考文献

編集

『GNU Autoconf/Automake/Libtool』 Gary V. Vaughan, Ben Elliston, Tom Tromey, Ian Lance Taylor著 でびあんぐる監訳 ISBN 4-274-06411-5

外部リンク

編集

📚 Artikel Terkait di Wikipedia

シバン (Unix)

facility into the system gives the following benefits. 1) It makes shell scripts more like real executable files, because they can be the subject of

Single UNIX Specification

この標準でのユーザのコマンドラインインターフェイスとスクリプトインターフェイスはPOSIXシェルであり、KornShell の初期バージョンをベースにした拡張版 Bourne Shell である。他のユーザレベルのプログラムやサービス、ユーティリティとしては、awk、echo、ed、viなどが含ま

スクリプトエディタ

在しているマウスなどで右クリックすると、コンテクストメニューが表示される。このコンテクストメニューには、特定ディレクトリ (/Library/Scripts) 以下のフォルダ階層構造がそのまま反映され、選択したスクリプトを実行できるようになっている。 スクリプトエディタ上で選択中のテキストに対して

Cron

また、以下は、export_dump.shを毎週土曜日23時45分に実行するジョブである。 45 23 * * 6 /home/oracle/scripts/export_dump.sh 一部のシステムでは、*/nを指定して、n日・時間・分ごとにジョブを実行することができる。また、コンマを使って複

アダム・キューバート

announced was that they will be working on the Detective Comics series, with scripts written by Grant Morrison.” ^ Brady, Matt (2007年4月15日). “More Action Comics

Pythonを使っている製品あるいはソフトウェアの一覧

Trac - Webベースのソフトウェアプロジェクト管理ツール(バグトラッキング・Wiki・バージョン管理フロントエンド) Python Shell - Google Chrome で動作するPythonシェル Flat Space - ブラウザ上でプロジェクト管理ができるSNS Bridge

Mimikatz

(2024). “The Pulse of Fileless Cryptojacking Attacks: Malicious PowerShell Scripts” (英語). 2024 IEEE SoutheastCon (IEEE). doi:10.1109/SoutheastCon52093

コードインジェクション

2013年12月20日時点のオリジナルよりアーカイブ。2025年7月16日閲覧。 ^ Douglas W. Jones, CS:3620 Notes, Lecture 4—Shell Scripts. Archived 2024-09-24 at the Wayback Machine., Spring 2018. [脚注の使い方]