\input texinfo @c -*-texinfo-*-
@c %**start of header
@ifnottex
@documentlanguage ja_JP
@end ifnottex
@setfilename yacasl2_install
@documentencoding UTF-8
@settitle YACASL2のインストール
@firstparagraphindent insert
@paragraphindent 1
@ifhtml
@exampleindent 0
@end ifhtml
@c %**end of header
@copying
Copyright @copyright{} 2010-2026 j8takagi
@end copying
@titlepage
@title YACASL2のインストール
@author j8takagi
@insertcopying
@end titlepage
@node Top, Require
@ifhtml
@top YACASL2のインストール
@end ifhtml
@menu
* Require:: 要件
* install:: インストール
@end menu
@contents
@node Require, install, Top, Top
@chapter 要件
YACASL2は、LinuxやMac OS Xなど、UNIX系のOS上で動作します。現在動作を確認しているのは、Arch LinuxとUbuntu Linux、Mac OS Xです。
インストール時に、@command{tar} @command{gcc} @command{make}が必要です。Linuxでは多くの場合、標準でインストールされています。Mac OS Xの場合、Xcodeの「Command Line Tools」に含まれます。
@node install, , Require, Top
@chapter インストールの手順
@menu
* Download:: YACASL2ファイルのダウンロード
* Verify:: YACASL2ファイルの検証
* Expand:: YACASL2ファイルの展開
* Build:: @file{casl2} @file{comet2} @file{dumpword}のビルド
* Simple Test:: @file{casl2}の実行テスト
* Detail Test:: 詳細なテスト
* Install:: インストール
* Environment:: 環境変数の設定
@end menu
@node Download, Verify, install, install
@section YACASL2ファイルのダウンロード
@uref{http://www.j8takagi.net/yacasl2/, YACASL2のサイト}から、@file{tar.gz}または@file{tar.xz}ファイルと、対応する検証用ファイルをダウンロードします。@uref{http://github.com/j8takagi/YACASL2/downloads/, githubのダウンロードページ}から@file{tar.gz}などのファイルをダウンロードすることもできます。
@node Verify, Expand, Download, install
@section YACASL2ファイルの検証
ダウンロードが完了したら、圧縮ファイルが改竄されていないか検証します。検証には、GnuPG分離署名か、MD5ハッシュ値を使います。
@subsection GnuPG分離署名での検証
GnuPGの@command{gpg}で圧縮ファイルを検証します。この検証を行うには、GnuPGがインストールされ、自分用の秘密鍵が作成されている必要があります。
また、あらかじめ@file{tar.gz}または@file{tar.xz}ファイルと、対応する検証用ファイル@file{tar.gz.asc}または@file{tar.xz.asc}ファイルを同じディレクトリーに保存し、そのディレクトリーに移動しておきます。
次の手順では@command{gpg --verify}による検証を2回実行させています。1回目では検証に失敗する一方で、必要な鍵などの情報を得ています。その鍵を@command{gpg --recv-keys}で取得し、@command{gpg --lsign-key}でローカル署名した後、再度@command{gpg --verify}による検証を行い、成功させています。
@example
$ @kbd{ls yacasl2.tar.gz*}
yacasl2.tar.gz yacasl2.tar.gz.asc
$ @kbd{gpg --verify yacasl2.tar.xz.asc}
gpg: assuming signed data in 'yacasl2.tar.gz'
gpg: Signature made Tue 02 Jun 2026 01:14:17 AM JST
gpg: using EDDSA key 77EC282A2F7317EBFF7BFD067F593ED86D88E1D5
gpg: Can't check signature: No public key
$ @kbd{gpg --recv-keys 77EC282A2F7317EBFF7BFD067F593ED86D88E1D5}
gpg: key 7F593ED86D88E1D5: public key "j8takagi <j8takagi@@nifty.com>" imported
gpg: marginals needed: 3 completes needed: 1 trust model: pgp
gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u
gpg: next trustdb check due at 2029-06-01
gpg: Total number processed: 1
gpg: imported: 1
$ @kbd{gpg --lsign-key 77EC282A2F7317EBFF7BFD067F593ED86D88E1D5}
pub ed25519/7F593ED86D88E1D5
created: 2026-04-23 expires: 2031-04-30 usage: SC
trust: unknown validity: unknown
sub cv25519/B3433115DBD37726
created: 2026-04-23 expires: never usage: E
[ unknown] (1). j8takagi <j8takagi@@nifty.com>
pub ed25519/7F593ED86D88E1D5
created: 2026-04-23 expires: 2031-04-30 usage: SC
trust: unknown validity: unknown
Primary key fingerprint: 77EC 282A 2F73 17EB FF7B FD06 7F59 3ED8 6D88 E1D5
j8takagi <j8takagi@@nifty.com>
This key is due to expire on 2031-04-30.
Are you sure that you want to sign this key with your
key "j8takagi <j8takagi@@nifty.com>" (4223493EBCB683A9)
The signature will be marked as non-exportable.
Really sign? (y/N) @kbd{y}
$ @kbd{gpg --verify yacasl2.tar.gz.asc}
gpg: assuming signed data in 'yacasl2.tar.gz'
gpg: Signature made Tue 02 Jun 2026 01:14:17 AM JST
gpg: using EDDSA key 77EC282A2F7317EBFF7BFD067F593ED86D88E1D5
gpg: checking the trustdb
gpg: marginals needed: 3 completes needed: 1 trust model: pgp
gpg: depth: 0 valid: 1 signed: 1 trust: 0-, 0q, 0n, 0m, 0f, 1u
gpg: depth: 1 valid: 1 signed: 0 trust: 1-, 0q, 0n, 0m, 0f, 0u
gpg: next trustdb check due at 2029-06-01
gpg: Good signature from "j8takagi <j8takagi@@nifty.com>" [full]
gpg: Signature notation: manu=2,2.5+1.12,0,3
@end example
@subsection MD5ハッシュ値での検証
@command{openssl}で圧縮ファイルから生成したMD5ハッシュ値が、ダウンロードした@file{yacasl2.tar.gz.md5sum}ファイルの内容と同じかどうか@command{diff}で検証します。
@example
$ @kbd{openssl md5 yacasl2.tar.gz | diff -s yacasl2.tar.gz.md5sum -}
Files yacasl2.tar.gz.md5sum and - are identical
@end example
@node Expand, Build, Verify, install
@section YACASL2ファイルの展開
YACASL2ファイルをダウンロードしたら、@command{tar}コマンドで展開します。
@example
$ @kbd{tar xvzf yacasl2.tar.gz}
@end example
@node Build, Simple Test, Expand, install
@section ビルド
展開したら、@command{make}コマンドを実行してビルドします。
YACASL2のコマンド実行ファイルである@command{casl2} @command{comet2} @command{dumpword} @command{casl2rev} @command{comet2monitor}が生成されます。
@example
$ @kbd{cd yacasl2}
$ @kbd{make}
make -C src
make[1]: Entering directory ‘/home/username/yacasl2/src’
gcc -c -g -Wall -I ../include casl2.c
gcc -c -g -Wall -I ../include word.c
gcc -c -g -Wall -I ../include hash.c
gcc -c -g -Wall -I ../include cerr.c
gcc -c -g -Wall -I ../include struct.c
gcc -c -g -Wall -I ../include cmd.c
gcc -c -g -Wall -I ../include assemble.c
gcc -c -g -Wall -I ../include token.c
gcc -c -g -Wall -I ../include label.c
gcc -c -g -Wall -I ../include macro.c
gcc -c -g -Wall -I ../include exec.c
gcc -c -g -Wall -I ../include dump.c
gcc -g -Wall -I ../include -o ../casl2 casl2.o word.o hash.o cerr.o st
ruct.o cmd.o assemble.o token.o label.o macro.o exec.o dump.o
gcc -c -g -Wall -I ../include comet2.c
gcc -g -Wall -I ../include -o ../comet2 comet2.o word.o hash.o cerr.o
struct.o cmd.o exec.o dump.o
gcc -c -g -Wall -I ../include dumpword.c
gcc -g -Wall -I ../include -o ../dumpword dumpword.o word.o cerr.o
make[1]: Leaving directory ‘/home/username/yacasl2/src’
@end example
@node Simple Test, Detail Test, Build, install
@section @file{casl2}の実行テスト
ビルドしたら、次のコマンドが正常に実行できるかを確認します。
正常に実行された場合は、「Hello, World!」と表示されます。
@example
$ @kbd{./casl2 as/hello.casl}
Hello, World!
@end example
@node Detail Test, Install, Simple Test, install
@section 詳細なテスト
@command{make check}コマンドを実行すると、正常にビルドできているかどうかを詳細にテストできます。
テストには、しばらく時間がかかります。
@example
$ @kbd{make check}
195 / 195 tests passed. Details in /home/username/yacasl2/test/integra
tion/casl2/Test.log
All tests are succeeded.
149 / 149 tests passed. Details in /home/username/yacasl2/test/integra
tion/comet2/Test.log
All tests are succeeded.
4 / 4 tests passed. Details in /home/username/yacasl2/test/integration
/dumpword/Test.log
All tests are succeeded.
@end example
@node Install, Environment, Detail Test, install
@section インストール
YACASL2のコマンド実行ファイルはビルド後、@command{make install}コマンドでインストールできます。インストール先は初期設定では、@file{~/bin}ディレクトリーです。
@example
$ @kbd{make install}
@end example
インストール先を変更するには、@file{prefix}などのオプションを指定します。
例えば@file{/usr/local}ディレクトリーにインストールするには、次のようにコマンドを実行します。
@example
$ @kbd{sudo make install prefix=/usr/local}
@end example
オプションの詳細は次のとおりです。
@multitable @columnfractions .20 .50 .30
@headitem オプション @tab 説明 @tab 初期設定
@item @var{prefix} @tab インストール時のルートファイル @tab @file{~}
@item @var{bindir} @tab 実行ファイルのインストール先 @tab @file{$prefix/bin}
@item @var{infodir} @tab infoファイルのインストール先 @tab @file{$prefix/share/info}
@end multitable
@node Environment, , Install, install
@section 環境変数の設定
環境変数@code{PATH}や@code{INFOPATH}を設定することで、YACASL2が使いやすくなります。
@subsection @code{PATH}の設定
@code{PATH}にYACASL2の実行ファイルのインストール先が含まれている場合は、ディレクトリーの指定を省略して@command{casl2}などの実行ファイル名を指定できます。@code{PATH}は、次のコマンドで確認できます。
@example
$ @kbd{echo $PATH}
@end example
YACASL2のインストール先の初期設定である@file{~/bin}ディレクトリーは、OSインストール時に@code{PATH}に含まれている場合もあります。含まれていない場合は、次のコマンドで@code{PATH}に追加できます。
@example
$ @kbd{PATH=$HOME/bin:$PATH; export PATH}
@end example
@file{~/.profile}や@file{~/.bashrc}などの初期化ファイルに@code{PATH}への追加を設定しておけば、YACASL2のコマンド実行時に常にディレクトリーの指定を省略できます。
次は、@code{PATH}に@code{~/bin}が二重に追加されることを防ぐ書き方です。
@example
case ":$@{PATH@}:" in
*":$@{HOME@}/bin:"*) ;;
*) export PATH="$@{HOME@}/bin:$@{PATH@}" ;;
esac
@end example
@subsection @code{INFOPATH}の設定
環境変数@code{INFOPATH}とInfoが適切に設定されていれば、次のコマンドでYACASL2のInfoを表示できます。
@example
$ @kbd{info yacasl2}
@end example
@code{INFOPATH}にYACASL2のInfoファイルをインストールしたディレクトリーの追加は、次のコマンドでできます。なお、YACASL2のInfoファイルインストール先の初期設定は、@file{~/share/info}です。
@example
$ @kbd{INFOPATH=$HOME/share/info:$INFOPATH; export INFOPATH}
@end example
@file{~/.profile}や@file{~/.bashrc}などの初期化ファイルに@code{INFOPATH}への追加を設定しておけば、常にYACASL2のInfoを表示できます。
次は、@code{INFOPATH}に@code{~/share/info}が二重に追加されることを防ぐ書き方です。
@example
case ":$@{INFOPATH@}:" in
*":$@{HOME@}/share/info:"*) ;;
*) export INFOPATH="$@{HOME@}/share/info:$@{INFOPATH@}" ;;
esac
@end example
@bye