トップ «前の日記(2002-08-17) 最新 次の日記(2002-08-19)» 月表示 編集

日々の流転


2002-08-18 [長年日記]

λ. 風邪

明日もう一度診察を受けに行きますが、多分もう大丈夫です。

お二人とも心配してくださって、どうもありがとうございました。m(_ _)m

λ. ブロークンアロー

を見た。

λ. コンパイル猿

cygwinでgtk2関係のライブラリのビルドに挑戦。Ruby-GNOME2の実験環境を作るのが目的の一つ。

それにしてもcygwinはやっぱ遅い。クロスコンパイル環境つくろっかなー

λ. glib-2.0.6

gimp共同掲示板でのsけいしさんの情報を元にlibtoolを置き換える。以下の他のライブラリのコンパイルでも同様にする。

それから、以下のように言われてしまうので、「-luser32 -lwsock32 -lkernel32」が付かないよう細工してコンパイルした。-luser32と-lkernel32については自信ないけど、-lwsock32だけは確実に不用なので報告しておこう(#91696)。

*** Warning: This library needs some functionality provided by -luser32.
*** I have the capability to make that library automatically link in when
*** you link to this library.  But I can only do this if you have a
*** shared version of the library, which you do not appear to have.

*** Warning: This library needs some functionality provided by -lwsock32.
*** I have the capability to make that library automatically link in when
*** you link to this library.  But I can only do this if you have a
*** shared version of the library, which you do not appear to have.

*** Warning: This library needs some functionality provided by -lkernel32.
*** I have the capability to make that library automatically link in when
*** you link to this library.  But I can only do this if you have a
*** shared version of the library, which you do not appear to have.
*** The inter-library dependencies that have been dropped here will be
*** automatically added whenever a program is linked with this library
*** or is declared to -dlopen it.

*** Since this library must not contain undefined symbols,
*** because either the platform does not support them or
*** it was explicitly requested with -no-undefined,
*** libtool will only create a static version of it.

こうして作ったglib用に、Ruby/GLibをコンパイルしようとしてtypoに気が付いた。後でこっそり直しとこ。

λ. atk-1..3

何故かimpgenが/usr/libを見に行くので、DLLを/usr/binからコピーして安易に対処。

λ. freetype-2.1.0

普通にビルドしたらDLLにならなかった。まあ、とりあえず作っているだけで、今回はgimpまでビルドするつもりではないので、気にしないことに。(gimpにはpangoft2が必要なんで)

λ. pango-1.0,4

どうせなので、pangowin32, pangox. pangoxft, pangoft2 全部作った。pangoのモジュールにはサフィックスが付くので、共存について特に考える必要はないはず。

fribidiとXftについて考えるのが面倒だったので、mini-fribidiとmini-xftを使う。

pango/pango-utils.cにミスを発見したので修正。この修正をしないとG_WIN32_DLLMAIN_FOR_DLL_NAMEのところでエラーになる。ひょっとして、CygwinでPangoをビルドしてるのって僕が初めて? (#91785)

--- pango/pango-utils.c.orig	2002-02-10 14:53:40.000000000 +0900
+++ pango/pango-utils.c	2002-08-18 10:57:36.000000000 +0900
@@ -38,7 +38,7 @@
 #  define getc_unlocked(f) getc(f)
 #endif /* !HAVE_FLOCKFILE */
 
-#ifdef G_OS_WIN32
+#ifdef G_PLATFORM_WIN32
 
 #include <sys/types.h>
 

pangowin32で、glibの時と同様のエラーでスタティックライブラリにされてしまう。こっちは実際に使われているライブラリなので、とりあえず「-Wl,-lgdi32」に置き換えて、リンカに直接渡すようにしたらうまく行ったようだ。 libtool良くわからん。

pangoxとpangoxftも、何故かスタティックライブラリにされてしまう。

が、とりあえず、pangowin32(とpangoft2)はうまく作れてるのだから、これを使ってGDK_WINDOWING_WIN32なgtk+をビルドすることに進もうかな。

λ. gtk+-2.0.6

最終的にはwin32用とx11用を両方作りたい。

/usr/lib/gtk-2.0/include/gdkconfig.h が衝突するのでここだけディレクトリを変更して、.pcファイルもそれに合わせて変更する必要があるかも。と思ったが、そもそも /usr/lib/gtk-2.0/2.0.6/modules以下のモジュールって共有できるんだろうか? とりあえず、今日はwin32版さえ出来れば良いので気にしない事にする。

gdk-pixbufのpixopsで、アセンブラで書かれた関係のシンボルがundefinedだと言われてしまう。オブジェクトファイルを見てみると、「_」が先頭についていないシンボルが代わりに定義されていた。.Sファイルを見ると「#ifndef __MINGW32__」で定義するシンボルを変えているようなので、試しに「#if !defined(__MINGW32__) && !defined(__CYGWIN__)」を使うように書き換えたら、うまく行ったようだ。#91597

以下のように言われる。 giochannel.hでG_OS_WIN32の時しかG_WIN32_MSG_HANDLEが定義されないのが原因。仕方ないので、G_PLATFORM_WIN32のときもG_WIN32_MSG_HANDLEだけ定義するように変更してみる。(追記: この修正は誤りなので注意)

../../../gtk+-2.0.6/gdk/win32/gdkevents-win32.c: In function `_gdk_events_init':
../../../gtk+-2.0.6/gdk/win32/gdkevents-win32.c:320: `G_WIN32_MSG_HANDLE' undeclared (first use in this function)

gdkwindow-win32.cで_MAX_PATHが宣言されてないと言われてしまう(#91681)。 仕方ないので、gdkwindow-win32.cの先頭辺りに、以下のように書いて対処。

#if defined(MAX_PATH) && !defined(_MAX_PATH)
#define _MAX_PATH MAX_PATH
#endif

リンク時に「.libs/libgdk-win32-2.0.lax/libgdk-win32.al/gdk-win32res.lo: file not recognized: File format not recognized」といわれてしまった。このファイルの中身を見ると、オブジェクトファイルではなく、以下のようなテキストだった。

# gdk-win32res.lo
# Generated by lt-compile-resource, compatible with libtool
pic_object=.libs/gdk-win32res.o
non_pic_object=none

試しにgdk/win32/rcでmakeすると、以下のように言われてしまった。 windresがVPATHに対応してない?
gtk.icoをこのディレクトリにコピーしたら、ビルドできた。

../../../../gtk+-2.0.6/build/win32/lt-compile-resource gdk.rc gdk-win32res.lo
Using zero as build number
windres: can't open icon file `gtk.ico': No such file or directory

次に引っかかったのはgtk/gtkfilesel.c。 unistd.hとwinsock.hのgethostnameの宣言が衝突する。 Cygwinの場合はwinsock.hをincludeしないことにする。 #91654

--- gtk+-2.0.6/gtk/gtkfilesel.c.orig	2002-06-16 13:02:28.000000000 +0900
+++ gtk+-2.0.6/gtk/gtkfilesel.c	2002-08-19 12:58:08.000000000 +0900
@@ -51,7 +51,7 @@
 #include <windows.h>
 #undef STRICT
 #endif /* G_OS_WIN32 || G_WITH_CYGWIN */
-#ifdef HAVE_WINSOCK_H
+#if defined(HAVE_WINSOCK_H) && !defined(G_WITH_CYGWIN)
 #include <winsock.h>		/* For gethostname */
 #endif
 

ところで、同じファイルのtranslate_win32_path()には以下のような説明があるけど、 「//x/somepath/file.jpg」という形式のパスは古くて もう使われていないんじゃなかったっけ?
後でcygwin_conv_to_posix_path()辺りを使うように書き換えよう。(#91843)

/*
 * Take the path currently in the file selection
 * entry field and translate as necessary from
 * a WIN32 style to CYGWIN32 style path.  For
 * instance translate:
 * x:\somepath\file.jpg
 * to:
 * //x/somepath/file.jpg
 *
 * Replace the path in the selection text field.
 * Return a boolean value concerning whether a
 * translation had to be made.
 */

とりあえず、gtkfilesel.cは他にも後で手を入れる必要がありそう。