shelarcy(2004/07/29 05:41:39 PDT): とりあえずまずは Gauche:MeCab の mecab の部分を win に置き換えてスタート。MinGW と cygwin 版で使うことを想定。
;;; ;;; win.scm - WinAPI binding ;;; ;;; Copyright (c) 2004 shelarcy, All rights reserved. ;;; ;;; Redistribution and use in source and binary forms, with or without ;;; modification, are permitted provided that the following conditions ;;; are met: ;;; ;;; 1. Redistributions of source code must retain the above copyright ;;; notice, this list of conditions and the following disclaimer. ;;; ;;; 2. Redistributions in binary form must reproduce the above copyright ;;; notice, this list of conditions and the following disclaimer in the ;;; documentation and/or other materials provided with the distribution. ;;; ;;; 3. Neither the name of the authors nor the names of its contributors ;;; may be used to endorse or promote products derived from this ;;; software without specific prior written permission. ;;; ;;; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ;;; "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ;;; LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ;;; A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ;;; OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ;;; SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED ;;; TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ;;; PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ;;; LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING ;;; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ;;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ;;; ;;; $Id: mecab.stub,v 1.1.1.1 2004/07/10 13:00:46 fuyuki Exp $ ;;; " #include <gauche/extend.h> #include <windows.h> " ;; NB: this should be taken care of by genstub. (define-type <dword> "DWORD" "DWORD" "SCM_EXACTP" "Scm_GetUInteger" "Scm_MakeIntegerFromUI") (define-type <handle> "HANDLE" "HANDLE" "SCM_EXACTP" "Scm_GetInteger" "Scm_MakeInteger") (define-type <hbrush> "HBRUSH" "HBRUSH" "SCM_EXACTP" "Scm_GetInteger" "Scm_MakeInteger") (define-type <hcursor> "HCURSOR" "HCURSOR" "SCM_EXACTP" "Scm_GetInteger" "Scm_MakeInteger") (define-type <hdc> "HDC" "HDC" "SCM_EXACTP" "Scm_GetInteger" "Scm_MakeInteger") (define-type <hicon> "HICON" "HICON" "SCM_EXACTP" "Scm_GetInteger" "Scm_MakeInteger") (define-type <hinstance> "HINSTANCE" "HINSTANCE" "SCM_EXACTP" "Scm_GetInteger" "Scm_MakeInteger") (define-type <hmenu> "HMENU" "HMENU" "SCM_EXACTP" "Scm_GetInteger" "Scm_MakeInteger") (define-type <hwnd> "HWND" "HWND" "SCM_EXACTP" "Scm_GetInteger" "Scm_MakeInteger") (define-type <lparam> "LPARAM" "LPARAM" "SCM_EXACTP" "Scm_GetInteger" "Scm_MakeInteger") (define-type <lpctstr> "LPCTSTR" "LPCTSTR" "SCM_EXACTP" "Scm_GetInteger" "Scm_MakeInteger") (define-type <lprect> "LPRECT" "LPRECT" "SCM_EXACTP" "Scm_GetInteger" "Scm_MakeInteger") (define-type <lptstr> "LPTSTR" "LPTSTR" "SCM_EXACTP" "Scm_GetInteger" "Scm_MakeInteger") (define-type <lpvoid> "LPVOID" "LPVOID" "SCM_EXACTP" "Scm_GetInteger" "Scm_MakeInteger") (define-type <lresult> "LRESULT" "LRESULT" "SCM_EXACTP" "Scm_GetInteger" "Scm_MakeInteger") (define-type <msg> "MSG" "MSG" "SCM_EXACTP" "Scm_GetInteger" "Scm_MakeInteger") (define-type <timerproc> "TIMERPROC" "TIMERPROC" "SCM_PROCEDUREP" "SCM_PROCEDURE") (define-type <u_int> "UINT" "UINT" "SCM_EXACTP" "Scm_GetUInteger" "Scm_MakeIntegerFromUI") (define-type <wparam> "WPARAM" "WPARAM" "SCM_EXACTP" "Scm_GetInteger" "Scm_MakeInteger") (define-type <wndproc> "WNDPROC" "WNDPROC" "SCM_PROCEDUREP" "SCM_PROCEDURE") ;; (define-enum WNDCLASS) ;;============================================================= ;; Miscellaneous ;; (define-cproc win-create-window (lpClassName::<lpctstr> lpWindowName::<lpctstr> dwStyle::<dword> x::<int> Y::<int> nWidth::<int> nHeight::<int> hWndParent::<hwnd> hMenu::<hmenu> hInstance::<handle> lpParam::<lpvoid>) (return <hwnd> "CreateWindow")) (define-cproc win-destroy-window (hWnd::<hwnd>) (return <boolean> "DestroyWindow")) (define-cproc win-draw-text (hdc::<hdc> lpString::<lpctstr> nCount::<int> lpRect::<lprect> uFormat::<uint>) (return <int> "DrawText")) (define-cproc win-kill-timer (hWnd::<hwnd> uIDEvent::<u_int>) (return <boolean> "KillTimer")) (define-cproc win-message-box (hWnd::<hwnd> lpText::<lpctstr> lpCaption::<lpctstr> uType::<u_int>) (return <int> "MessageBox")) (define-cproc win-print (lpOut::<lptstr> lpFmt::<lpctstr>) (return <int> "wsprintf")) (define-cproc win-set-timer (hWnd::<hwnd> nIDEvent::<u_int> uElapse::<u_int> lpTimerFunc::<timerproc>) (return <u_int> "SetTimer")) (define-cproc win-show-window (hMenu::<hmenu> nCmdShow::<int>) (return <boolean> "ShowWindow")) ;; Local variables: ;; mode: scheme ;; end:
$ make check /usr/local/bin/gosh -I. test.scm > test.log Testing win ... make: *** [check] Error 139
コアダンプ (Error 139) ですか。簡単には直りそうにない感じ。というか、関数か define-enum がある時点でコアダンプを起こします。
$ make /usr/local/bin/gosh genstub win.stub gcc -g -O2 -I/usr/local/lib/gauche/0.8.1/include -c win.c -o win.o win.c: In function `win_win_create_window': win.c:38: error: syntax error before "LPCTSTR" win.c:41: error: syntax error before "LPCTSTR" win.c:44: error: syntax error before "DWORD" win.c:59: error: syntax error before "HWND" win.c:62: error: syntax error before "HMENU" win.c:65: error: syntax error before "HANDLE" win.c:68: error: syntax error before "LPVOID" win.c: In function `win_win_show_window': win.c:86: error: syntax error before "HMENU" win.c:91: warning: passing arg 1 of `ShowWindow' from incompatible pointer type win.c: In function `Scm_Init_win': win.c:103: error: syntax error before "WNDCLASS" win.c:103: error: syntax error before ')' token make: *** [win.o] Error 1 rm win.c
どこが間違っているんだろうか? win.c が残らないだけにどうなってるのか分からない。もう少し調べて見ますが……
$ ./autogen.sh $ ./configure $ make $ make check
gauche.m4 が usr/local/share/gauche/{Version} のところにも `aclocal --print-ac-dir` のパスにもなくて、 usr/local/share/aclocal から移動しなければならなかったのですが、これってうちの環境だけでしょうか?
/cygdrive/c/mingw/bin が cygwin の etc/profile の PATH の最初にある状態でやってみると、make 時に gauche 関係のヘッダファイルが見つからない。PATH の設定を変えればどうにかなるんだろうけど、それでいいのかな?