Perl5 モジュールが使える Pugs をビルドするには
Pugs(Perl6
User's Golfing System)は Perl6 の正式インタープリタです。このページでは
Pugs 実行ファイルのビルド方法を説明します。Perl6
コードを実行するだけでなく,Perl5 のモジュールも使えるようにします。
最終更新日
2005 年 12 月 15 日更新
必要なツールを入手する
注意
以下の説明では ActivePerl のインストール先を C:\Perl,MinGW のインストール先を
C:\MinGW,GHC のインストール先を C:\ghc,Parrot を展開したディレクトリを C:\Parrot,Perl6::Pugs
を展開したディレクトリを C:\Pugs として説明します。
ツールをインストールする
- ActivePerl,MinGW,GHC
のインストーラをダウンロードして実行し,インストールを行います。コントロールパネル →
システム → 詳細設定 → 環境変数に移動し,環境変数 Path
に C:\Perl\bin;C:\MinGW\bin;C:\ghc\ghc-6.4.1\bin;%Path%
と設定します。
- nmake15.exe
をダウンロードして実行すると NMAKE.EXE が作成されます。これをパスの通っている場所(C:\Perl\bin 等)にコピーします。
- ExtUtils::FakeConfig
をダウンロードして展開し,コマンドプロンプトで以下のように入力してインストールします。これにより
C:\Perl\lib\CORE に libperl58.a が作成されます。
C:\ExtUtils-FakeConfig-0.06>perl Makefile.PL
C:\ExtUtils-FakeConfig-0.06>nmake install
- YAML
も ExtUtils::FakeConfig と同じ方法でインストールします。
Parrot をビルドする
- Parrot
をダウンロードして展開します。
- C:\Parrot\config\gen\makefiles\root.in の 755 行を以下のように変更します。
shared :(省略)-lparrot $(ICU_SHARED) $(C_LIBS) $(SRC_DIR)/install_config$(O)
- 同様に root.in の 795,812,827,841 行のブロックにも
$(SRC_DIR)/install_config$(O) を付け加えます。
- コマンドプロンプトから以下のように入力してビルドします。
C:\Parrot>perl -MConfig_m Configure.pl --prefix=C:\Parrot --without-icu --optimize --debugging=0
C:\Parrot>mingw32-make
Pugs をビルドする下準備をする
Pugs
をそのままビルドしようとするとエラーが発生します。エラーを回避するために,ヘッダファイルとビルドスクリプトを変更します。
- Perl6::Pugs
をダウンロードし,展開します。ここではディレクトリ名を Pugs として説明します。
- C:\ghc\ghc-6.4.1\include\mingw\stdint.h
の 60 行付近を以下のように変更します。これにより,intptr_t と uintptr_t の再定義によるエラーを回避できます。
#ifndef _INTPTR_T_DEFINED
typedef int intptr_t;
#define _INTPTR_T_DEFINED
#endif
#ifndef _UINTPTR_T_DEFINED
typedef unsigned int uintptr_t;
#define _UINTPTR_T_DEFINED
#endif
- C:\ghc\ghc-6.4.1\include\HsBase.h の 509 行付近の
__hscore_d_name 関数をコメントアウトします。HsAddr という型はコメントに
DEPRECATED(廃止された)と書かれており,この関数はどこからも使用されないため,削除しても害はありません。
/*
INLINE HsAddr
__hscore_d_name( struct dirent* d )
{
return (HsAddr)(d->d_name);
}
*/
- C:\Pugs\inc\Module\Install\Pugs.pm の 170
行を以下のように変更します。修正前のスクリプトでは -libpath というオプションを通過してしまい,GHC でエラーが発生します。
$ghc_flags .= join(' ', grep { !m{^-libpath} and (m{^/} or m{^-[DILl]} or m{^-Wl,-R}) }
split (' ', `$^X -MExtUtils::Embed -e ccopts,ldopts`));
- C:\Pugs の Makefile.PL の 167 行を以下のように変更します。これにより
libperl58.a がリンクされるようになります。
$ghc_flags .= ' -DPUGS_HAVE_PERL5 -L$(PERL_INC) -lperl58 ';
Pugs をビルドする
- C:\Pugs に移動し,コマンドプロンプトで以下のように入力します。これにより,Perl5 と Parrot
がリンクされる設定になります。
C:\Pugs>set PUGS_EMBED="perl5 parrot"
C:\Pugs>set PARROT_PATH=C:\Parrot
- Makefile.PL を実行します。MinGW を使用するため,-MConfig_m オプションを付けます。
C:\Pugs>perl -MConfig_m Makefile.PL
- C:\Pugs に Makefile と config.yml が作成されます。
- config.yml を編集し,以下の 2 つのコメントをはずします。
#ghc_heap_size: 348m → ghc_heap_size: 348m
#install_dir: C:\Perl6 → install_dir: C:\Perl6
- nmake を実行すると Pugs がビルドされます。
C:\Pugs>nmake
C:\Pugs>nmake test
連絡先
大和 利之 <toshiyuki.yamato@gmail.com>