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 として説明します。

ツールをインストールする

  1. ActivePerlMinGWGHC のインストーラをダウンロードして実行し,インストールを行います。コントロールパネル → システム → 詳細設定 → 環境変数に移動し,環境変数 Path に C:\Perl\bin;C:\MinGW\bin;C:\ghc\ghc-6.4.1\bin;%Path% と設定します。
  2. nmake15.exe をダウンロードして実行すると NMAKE.EXE が作成されます。これをパスの通っている場所(C:\Perl\bin 等)にコピーします。
  3. ExtUtils::FakeConfig をダウンロードして展開し,コマンドプロンプトで以下のように入力してインストールします。これにより C:\Perl\lib\CORE に libperl58.a が作成されます。
    C:\ExtUtils-FakeConfig-0.06>perl Makefile.PL
    C:\ExtUtils-FakeConfig-0.06>nmake install
  4. YAML も ExtUtils::FakeConfig と同じ方法でインストールします。

Parrot をビルドする

  1. Parrot をダウンロードして展開します。
  2. C:\Parrot\config\gen\makefiles\root.in の 755 行を以下のように変更します。
    shared :(省略)-lparrot $(ICU_SHARED) $(C_LIBS) $(SRC_DIR)/install_config$(O)
  3. 同様に root.in の 795,812,827,841 行のブロックにも $(SRC_DIR)/install_config$(O) を付け加えます。
  4. コマンドプロンプトから以下のように入力してビルドします。
    C:\Parrot>perl -MConfig_m Configure.pl --prefix=C:\Parrot --without-icu --optimize --debugging=0
    C:\Parrot>mingw32-make

Pugs をビルドする下準備をする

Pugs をそのままビルドしようとするとエラーが発生します。エラーを回避するために,ヘッダファイルとビルドスクリプトを変更します。

  1. Perl6::Pugs をダウンロードし,展開します。ここではディレクトリ名を Pugs として説明します。
  2. 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
  3. 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);
    }
    */
  4. 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`));
  5. C:\Pugs の Makefile.PL の 167 行を以下のように変更します。これにより libperl58.a がリンクされるようになります。
    $ghc_flags .= ' -DPUGS_HAVE_PERL5 -L$(PERL_INC) -lperl58 ';

Pugs をビルドする

  1. C:\Pugs に移動し,コマンドプロンプトで以下のように入力します。これにより,Perl5 と Parrot がリンクされる設定になります。
    C:\Pugs>set PUGS_EMBED="perl5 parrot"
    C:\Pugs>set PARROT_PATH=C:\Parrot
  2. Makefile.PL を実行します。MinGW を使用するため,-MConfig_m オプションを付けます。
    C:\Pugs>perl -MConfig_m Makefile.PL
  3. C:\Pugs に Makefile と config.yml が作成されます。
  4. config.yml を編集し,以下の 2 つのコメントをはずします。
    #ghc_heap_size: 348m   → ghc_heap_size: 348m
    #install_dir: C:\Perl6 → install_dir: C:\Perl6
  5. nmake を実行すると Pugs がビルドされます。
    C:\Pugs>nmake
    C:\Pugs>nmake test

連絡先

大和 利之 <toshiyuki.yamato@gmail.com>