[Gauche-devel-jp] Windows での gauche-config の出力

Back to archive index

室園真一郎 shinm****@gmail*****
2010年 5月 7日 (金) 21:09:14 JST


お疲れ様です。
この件に絡んでなのですが、Windows で gauche-package を利用しての
DLL 作成可能になるような形に修正してみました。

どれも場当たり的な対処ですが、パッチの内容は最後になります。
また、内容は 0.9 からの差分になります。

宜しくお願いします。

* lib/gauche/package/compile.scm
util.scm の方で cmd でコンパイルコマンドを受け取るようにした影響でシン
グルクォーテーション括りが何も解釈されずそのままファイル名になって見つ
からなくなってしまうので括らないようにしました。

* lib/gauche/package/util.scm
- sh→cmd にしたのは、sh で gcc を実行すると落ちてしうので変更しました。
- 後 cmdline には gauche-config --sysincdir で渡された結果も含んでいる
  のですが Windows パス区切りになってて sh だと認識できません。gcc 自
  体は別に cmd でも動作するのでこちらに変えてます。
- ただ、何故か cmd への引数渡しだと cmdline が評価されないまま渡された
  のでバッククォートして cmdline だけ評価させるようにしてます。
- 後、Windows に /dev/null はないので相当する nul に変えてます。

* src/gauche-package.in
Windows では home-directory が #f を返す為一時的にです。

* src/genconfig.in
gauche-config の定義を gauche-config.exe を利用する形に書き換えてしま
いました。変な話ですけども。


----
Shinichiro Murozono <shinm****@gmail*****>

↓patch ここから
diff -cr Gauche-0.9_orig/lib/gauche/package/compile.scm
Gauche-0.9_patched/lib/gauche/package/compile.scm
*** Gauche-0.9_orig/lib/gauche/package/compile.scm	Sun Apr 26 13:15:15 2009
--- Gauche-0.9_patched/lib/gauche/package/compile.scm	Thu May  6 01:53:01 2010
***************
*** 91,97 ****
                        (or cppflags "") (or cflags "")))))))

  (define (do-compile cc cfile ofile cppflags cflags)
!   (run #`",cc -c ,cppflags ,(INCDIR) ,cflags ,CFLAGS -o ',ofile' ',cfile'"))

  (define (gauche-package-link sofile ofiles :key (ldflags #f)
                                                  (libs #f)
--- 91,101 ----
                        (or cppflags "") (or cflags "")))))))

  (define (do-compile cc cfile ofile cppflags cflags)
!   (cond-expand
!    [gauche.os.windows
!     (run #`",cc -c ,cppflags ,(INCDIR) ,cflags ,CFLAGS -o ,ofile ,cfile")]
!    [else
!     (run #`",cc -c ,cppflags ,(INCDIR) ,cflags ,CFLAGS -o ',ofile'
',cfile'")]))

  (define (gauche-package-link sofile ofiles :key (ldflags #f)
                                                  (libs #f)
***************
*** 108,114 ****
                   [in-place-dir gauche-builddir])
      (unless (and (file-exists? sofile)
                   (every (cut file-mtime>? sofile <>) ofiles))
!       (let1 all-ofiles (string-join (map (lambda (f) #`"',f'") ofiles) " ")
          (run #`",(or ld CC) ,(or ldflags \"\") ,(LIBDIR) ,LDFLAGS
,sofile ,all-ofiles ,LIBS ,(or libs \"\")")))))

  (define (gauche-package-compile-and-link module-name files . args)
--- 112,119 ----
                   [in-place-dir gauche-builddir])
      (unless (and (file-exists? sofile)
                   (every (cut file-mtime>? sofile <>) ofiles))
!       (let1 all-ofiles (string-join (cond-expand [gauche.os.windows ofiles]
!                                                  [else (map (lambda
(f) #`"',f'") ofiles)]) " ")
          (run #`",(or ld CC) ,(or ldflags \"\") ,(LIBDIR) ,LDFLAGS
,sofile ,all-ofiles ,LIBS ,(or libs \"\")")))))

  (define (gauche-package-compile-and-link module-name files . args)
diff -cr Gauche-0.9_orig/lib/gauche/package/util.scm
Gauche-0.9_patched/lib/gauche/package/util.scm
*** Gauche-0.9_orig/lib/gauche/package/util.scm	Mon Oct 26 07:28:20 2009
--- Gauche-0.9_patched/lib/gauche/package/util.scm	Thu May  6 01:54:23 2010
***************
*** 49,56 ****
    (when (or (dry-run) (verbose-run))
      (print cmdline))
    (unless (dry-run)
!     (let1 p (run-process "/bin/sh" "-c" cmdline
!                          :input (if stdin-string :pipe "/dev/null")
                           :wait #f)
        (when stdin-string
          (let1 pi (process-input p)
--- 49,57 ----
    (when (or (dry-run) (verbose-run))
      (print cmdline))
    (unless (dry-run)
!     (let1 p (run-process (cond-expand [gauche.os.windows `(cmd /c ,cmdline)]
!                                       [else "/bin/sh" "-c" cmdline])
!                          :input (if stdin-string :pipe "nul")
                           :wait #f)
        (when stdin-string
          (let1 pi (process-input p)
diff -cr Gauche-0.9_orig/src/gauche-package.in
Gauche-0.9_patched/src/gauche-package.in
*** Gauche-0.9_orig/src/gauche-package.in	Sat May  2 19:10:33 2009
--- Gauche-0.9_patched/src/gauche-package.in	Thu May  6 01:47:09 2010
***************
*** 1,7 ****
  ;;;
  ;;; gauche-package - Gauche package builder/manager
  ;;;
! ;;;   Copyright (c) 2004-2009 Shiro Kawai, All rights reserved.
  ;;;
  ;;;   Redistribution and use in source and binary forms, with or without
  ;;;   modification, are permitted provided that the following conditions
--- 1,7 ----
  ;;;
  ;;; gauche-package - Gauche package builder/manager
  ;;;
! ;;;   Copyright (c) 2004-2010  Shiro Kawai  <shiro****@acm*****>
  ;;;
  ;;;   Redistribution and use in source and binary forms, with or without
  ;;;   modification, are permitted provided that the following conditions
***************
*** 76,82 ****
  (define *config* '())

  (define (read-config)
!   (let ((config-file (build-path (home-directory) ".gauche-package")))
      (when (file-is-readable? config-file)
        (set! *config* (with-input-from-file config-file read)))
      (dolist (p *config*)
--- 76,85 ----
  (define *config* '())

  (define (read-config)
!   (let ((config-file (build-path (cond-expand
!                                   [gauche.os.windows ""]
!                                   [else (home-directory)])
!                                  ".gauche-package")))
      (when (file-is-readable? config-file)
        (set! *config* (with-input-from-file config-file read)))
      (dolist (p *config*)
diff -cr Gauche-0.9_orig/src/genconfig.in Gauche-0.9_patched/src/genconfig.in
*** Gauche-0.9_orig/src/genconfig.in	Mon Apr  6 18:37:05 2009
--- Gauche-0.9_patched/src/genconfig.in	Thu May  6 02:48:02 2010
***************
*** 367,374 ****
  (select-module gauche.config)

  (define (gauche-config param)
!   (cond ((assoc param *configurations*) => cadr)
!         (else (error "unknown configuration parameter name" param))))

  (define *configurations*
    (quote
--- 367,388 ----
  (select-module gauche.config)

  (define (gauche-config param)
!   (cond-expand
!    ;; on windows, can't expand valid prefix directory.
!    [gauche.os.windows
!     (define (apply-prefix str)
!       (cond [(string-scan str "@")
!              (let* ((process (run-process '(gauche-config --prefix)
:output :pipe))
!                     (prefix (read-line (process-output process)))
!                     (process-wait process)
!                     (plis (string-split str #\@)))
!                #\`",(car plis),|prefix|,(cadr plis)")]
!             [else str]))
!     (cond ((assoc param *configurations*) => (lambda (result)
(apply-prefix (cadr result))))
!           (else (error "unknown configuration parameter name" param)))]
!    [else
!     (cond ((assoc param *configurations*) => cadr)
!           (else (error "unknown configuration parameter name" param)))]))

  (define *configurations*
    (quote




Gauche-devel-jp メーリングリストの案内
Back to archive index