2007-07-23

pthread

うやら、libpthread.a というライブラリがない為、Tcl の Thread パッケージが正しくコンパイルされていない可能性に気が付きました。Linux 上で MinGW のクロスコンパイラを使ってコンパイルしたログをチェックしていたら、Thread パッケージのコンパイルで次のようなメッセージが出ていました。

...
checking for Tcl public headers... /home/bitwalk/mingw/src/
tcl8.5a6/generic
checking for pthread_mutex_init in -lpthread... no
checking for __pthread_mutex_init in -lpthread... no
checking for pthread_mutex_init in -lpthreads... no
checking for pthread_mutex_init in -lc... no
checking for pthread_mutex_init in -lc_r... no
configure: WARNING: Do not know how to find pthread lib on
your system - thread support disabled
checking for building with threads... no
configure: WARNING:
Building thread without threads enabled, but building against Tcl
that IS thread-enabled. It is recommended to use --enable-threads.
checking how to build libraries... shared
...

Pthreads-w32 が流用できるかどうか、確認しようと考えています。ちなみに、このパッケージの配布ライセンスは LGPL です。

POSIX Threads (pthreads) for Win32

現状のバイナリがウィンドウズ上でどのように動作するかどうかチェックしなければなりませんが、平行して上記パッケージをコンパイルする RPM の作成に取り掛かる予定です。

2007-07-22

クロスコンパイル

近は Cygwin の gcc に -mno-cygwin オプションを付けて Tcl/Tk のソースをコンパイルしてきましたが、ダウンロードするリソースを一箇所に集約したいので、Linux 上で Windows のバイナリをクロスコンパイルするやりかたに移行しようと考えています。

と言うわけで、久しく触れていなかった MinGW の クロスコンパイラ版を整備しました。これらの RPM パッケージの公開については、需要があれば対応したいと思います(こういう需要はあるのでしょか?)。ちなみに Linux は Fedora 7 を使っています。

参考までに、現在の MinGW クロスコンパイル環境は以下の通りです。

mingw-runtime-3.12-1
mingw-gcc-core-3.4.5-15
mingw-binutils-2.17.50-12
mingw-w32api-3.9-1

この場を借りて、bitWalk で以前公開していた MinGW クロスコンパイラの RPM をメンテナンスし続けていただいた Hans Leidekker 氏に感謝いたします。と言っても日本語では通じないですね。

Hans Leidekker 氏の MinGW クロスコンパイラのサイトを以下に示しました。

MinGW RPM packages

Fedora 7 用のパッケージも公開されていましたが、リビルドするには若干の修正が必要でした。

なお、Tcl/Tk の Windows 版のコンパイルでは一部 MS-DOS コマンドを使用しているので、Linux 上では wine を利用しています。幸いなことに Fedora 7 では wine のパッケージが供給されているので、それを使っています。

現在、クロスコンパイルが成功しているのは、以下の基本パッケージです。

Tcl/Tk8.5a6
thread2.6.5
(tcllib-1.9) コンパイルは不要

インストーラのコンパイルは Inno Setup Compiler を使用していますので、これを wine で動かして Windows 版 Tcl/Tk のインストーラパッケージを Linux 上でコンパイルできるようにした後、次の Windows 版 Tcl/Tk を公開します。