root/doc/install.texi

/* [<][>][^][v][top][bottom][index][help] */
\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

/* [<][>][^][v][top][bottom][index][help] */