Skip to content

Instantly share code, notes, and snippets.

@Hamayama
Last active December 21, 2019 12:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Hamayama/19d7e779cec0480af0cf to your computer and use it in GitHub Desktop.
Save Hamayama/19d7e779cec0480af0cf to your computer and use it in GitHub Desktop.
Gauche の Windows 上でのコンパイル手順 メモ (古い)

Gauche の Windows 上でのコンパイル手順 メモ (古い)

  • 自分がコンパイルしたとき(2015年5月~2019年12月)の参考用のメモです。
    (情報が古くなっている可能性があります)
    Windows 8.1 (64bit) で作業しました。

  • 以下の記述は、MinGW (32bit) の開発環境でのコンパイル手順となっています。
    今では、より新しい MSYS2/MinGW-w64 (64bit/32bit) の開発環境でもコンパイル可能になっています。
    MSYS2/MinGW-w64 (64bit/32bit) の開発環境を使う場合には、以下のページの方を参照ください。
    https://gist.github.com/Hamayama/6666e5d2c8d5167d22f7
    (2016-1-14)


  • <<<現在 MinGW (32bit) の開発環境では、そのままでは、コンパイルできないようです(2016-8-7)(2016-12-19)(2018-2-18)>>>

    調査メモ
      (1)./DIST gen の find コマンドでエラー停止 ( *~ が見つかりません )
         → Windows にも find コマンドがあり、そちらを起動していた。。。
            以下のようにPATH設定を前に付けて実行することで回避できる。
              PATH=/usr/bin:$PATH ./DIST gen
      (2)pkg-config のインストールが必要
         → MinGW Installation Manager には存在しない。
            ソースからインストールするのは、循環参照があり難しいらしい。
            バイナリをダウンロードするのがよさそうだが、以下のページはリンク切れ。
            http://www.gtk.org/download/win32.php
            以下のページにインストール方法があるもよう。
            https://stackoverflow.com/questions/1710922/how-to-install-pkg-config-in-windows#22363820
      (3)configure の PKG_CHECK_MODULES で syntax error が出る
         → pkg.m4 を取得して aclocal --print で表示されるフォルダにコピーする必要がある。
            pkg.m4 の取得については、以下のページが参考になりそう。
            http://blog.k-tai-douga.com/article/52368303.html
            https://pkg-config.freedesktop.org/releases/
      (4)tlsのテストに失敗する(2016-12-19)
         → MinGW 付属の openssl が v1.0.0 と古く、TLS v1.1 に未対応のため。
         → テスト時にバージョンをチェックして、テストをスキップするようになった。
      (5)GC の configure で syntax-error が出る(2018-2-18)
         → 対策 : gc/configure.ac で「comment out the following 3 lines」と
            書かれている行の次の行から3行分を「#」でコメントアウトする。
            (変更後は DIST からやり直しが必要。。。)
      (6)axTLS の crypto_misc.c のコンパイルで、NTE_BAD_KEYSET が未定義というエラーが出る(2018-2-18)
         → 対策 : ext/tls/axTLS/crypto/crypto_misc.c で「#include "gauche.h"」という行の
            次の行に「#include <winerror.h>」という行を挿入する。
    

  1. Gaucheのインストール
    事前に Gauche がインストールされている必要があります。
    以下のページに Windows用バイナリインストーラ があるので、インストールを実施ください。
    http://practical-scheme.net/gauche/download-j.html
    (すでにインストール済みであれば本手順は不要です)

    <<<コンパイルに使う Gauche のバージョンについて(2015-7-3)(2016-12-19)>>>
    開発最新版の Gauche をコンパイルするには、動作する Gauche が必要になります。
    このコンパイルに使用する Gauche は、基本的に最新リリース版であることが想定されている
    とのことです。
    このため、最新リリース版 (現時点では v0.9.9) の Gauche のフォルダを丸ごととっておいて、
    コンパイル時だけは、環境変数PATHを書き換えてそちらを指すようにするのが 安全なようです。

  2. MinGW (32bit) のインストール
    事前に MinGW (32bit) がインストールされている必要があります。
    以下のページを参考に、インストールを実施ください。
    https://gist.github.com/Hamayama/362f2eb14ae26d971ca4
    (すでにインストール済みであれば本手順は不要です)

  3. Gaucheのソースのダウンロード
    GaucheのGitHubのページ
    https://github.com/shirok/Gauche
    から、Download Zip ボタン等で開発最新版のソースをダウンロードします。
    そして適当な作業用フォルダ( c:\work 等)に展開します。
    (注意) 作業用フォルダのパスには、空白を入れないようにしてください。

  4. Gaucheのファイルの修正

    • SRFI-144 (Flonums) のテストでエラーが出るため、
      ext/srfi/srfi-144.scm の内容を以下のように修正します。
      --- srfi-144_orig.scm	2019-12-16 18:46:04.000000000 +0900
      +++ srfi-144.scm	2019-12-21 21:41:43.257751300 +0900
      @@ -282,10 +282,24 @@
       
       (define (flquotient x y) (fltruncate (/. x y)))
       (define (flremainder x y) (-. x (*. y (flquotient x y))))
      -(define-cproc flremquo (x::<real> y::<real>) ::(<real> <int>)
      -  (let* ([quo::int]
      -         [rem::double (remquo x y (& quo))])
      -    (result rem quo)))
      +
      +(inline-stub
      + ;; On MinGW 32bit (except MinGW-w64), remquo is broken.
      + (.if (and (defined GAUCHE_WINDOWS)
      +           (defined __MINGW32__)
      +           (not (defined __MINGW64_VERSION_MAJOR)))
      +      (define-cproc %c-remainder (x::<real> y::<real>) ::<real>
      +        remainder)
      +      (define-cproc %c-remquo (x::<real> y::<real>) ::(<real> <int>)
      +        (let* ([quo::int]
      +               [rem::double (remquo x y (& quo))])
      +          (result rem quo)))))
      +(define flremquo
      +  (or (global-variable-ref (current-module) '%c-remquo #f)
      +      (lambda (x y)
      +        (let* ([rem (%c-remainder x y)]
      +               [quo (remainder (truncate->exact (/. (- x rem) y)) 8)])
      +          (values rem quo)))))
       
       (define-inline (flgamma x) (gamma x))
       (define (flloggamma x)
      
      (上記は diff -u コマンドによる差分データです)

  5. Gaucheのコンパイル
    コマンドプロンプトを開いて以下を実行します。
    ( c:\work にソースを展開した場合)

    bash
    cd /c/work/Gauche
    PATH=/usr/bin:$PATH ./DIST gen
    src/mingw-dist.sh
    

  6. テストの実行
    コマンドプロンプトを開いて以下を実行します。
    ( c:\work にソースを展開した場合)

    bash
    cd /c/work/Gauche
    make check
    

    結果は、
    Total: 21637 tests, 21637 passed, 0 failed, 0 aborted.
    のように表示されます。
    結果をファイルにも残したい場合は、上記の3行目を、

    make check 2>&1 | tee test_result.txt
    

    のように変更します。
    ( c:\work\Gauche に test_result.txt というファイルが作られます)

  7. 生成したファイルのコピー
    生成した
    c:\work\Gauche-mingw-dist\Gauche-unknown
    の中身を、すべて、
    c:\Program Files\Gauche
    (もしくは c:\Program Files (x86)\Gauche )
    に上書きコピーします。
    (念のため上書き前のフォルダのバックアップを取ってから作業してください)

  8. バージョンの確認
    コマンドプロンプトを開いて以下を実行し、バージョンを確認します。

    gosh -V  
    

(2015-5-8)(2015-5-24)(2015-7-3)(2015-10-10)(2015-11-16)
(2015-11-17)(2015-12-9)(2015-12-18)(2015-12-23)(2015-12-24)
(2016-1-14)(2016-4-17)(2016-7-13)(2016-8-7)(2016-9-7)
(2016-12-19)(2018-2-18)(2018-7-8)(2019-12-20)(2019-12-21)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment