BOMing (0.1) | 2012-04-04 00:51 |
Miranda IM Lang_jp (12.7.1.1) | 2012-07-01 19:57 |
本ページでは本家svn木から入手したソースファイルを手元でコンパイルする方法をまとめます。 なお、コンパイルには無償で入手できるVisual C++ Express版を用います。
※MirandaにはMinGW用のMakefileも入っていますが、このMakefileが作成後メンテナンスされていないこと、 及びMinGWのWin32APIに問題があり、MinGWでコンパイルした場合の実行結果に問題がでる恐れがあることを理由に推奨されていません。
http://forums.miranda-im.org/showthread.php?23614-Building-Miranda-with-MinGW
本家サイトのsubversionで公開されているソースを取得し手元でコンパイルしようとしても、 まずエラーが発生してコンパイル完了までたどり着けません。
これには以下の原因があります。
Mirandaのpluginの一つはコンパイルに最新版のVisual C++ 2010ではなく2008を使うことを前提としています。 VC++ 2010環境でコンパイルすると、2008のライブラリが存在しないためリンカがエラーを吐きます。 この問題の対策は、VC++ 2010に加えて2008もインストールすることです。
Mirandaをコンパイルするために必要なプログラムの一覧を以下に示します。
ダウンロードページ→ http://www.microsoft.com/japan/msdn/vstudio/express/
ダウンロードページ→ http://www.microsoft.com/japan/msdn/vstudio/2008/product/express/
Windows7, .NET FrameWork 4用→ http://www.microsoft.com/download/en/details.aspx?id=8279
Windows7, .NET FrameWork 3.5SP1用→ http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=3138
※ファイル名が同じなので注意のこと。なお、.NET Frameworkは事前にWindwos Updateで最新版に更新しておきます。
また、それぞれをインストールするたびにWindows Updateを実行してパッチをあてるようにします。
Mirandaをコンパイルすると、ヘッダファイルwinres.hとafxres.hが存在しないというエラーになります。 この解決法は以下の通りです。
* winres.h
ソース木の\miranda\include\mingw にファイルwinres.hがあるので、これを以下のパスにコピーします。
* afxres.h
以下の内容:
#ifndef _AFXRES_ #define _AFXRES_ #include <windows.h> #define IDC_STATIC -1 #endif // _AFXRES_のファイルafxres.hを以下のパスに作成します。
Mirandaのソースコードは数千のファイルから構成されていますが、そのうちの約350個のファイルの文字コードは ASCIIではなくiso8859-1(Latin-1)です。しかも多くはコメントではなく文字列リテラルに使用されています。
コンパイラがgccであるならば、よほどのことがない限りコンパイルに文字コードが問題を引き起こす、ということはありませんが、 Visual C++ではそうはいきません。現実問題、現時点で以下の様なエラーを引き起こしてくれます。
5> viewmodes.cpp 5>SRC\viewmodes.cpp : warning C4819: ファイルは、現在のコード ページ (932) で表示できない 文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。 10> yahoo_httplib.c 5>SRC\viewmodes.cpp(87): error C2001: 定数が 2 行目に続いています。 5>SRC\viewmodes.cpp(88): error C2143: 構文エラー : ')' が 'return' の前にありません。
Visual C++ ではファイルにASCIIコードにない文字を発見した場合には、以下の様に処理するようです。
つまり、ファイルがiso8859-1で書かれているにもかかわらずcp932として扱おうとし、結果文字化けが発生してエラーとなるのです。
iso8859-1をcp932に変換することはできないので、Visual C++で扱えかつiso8859-1から変換可能な文字コードであるBOM付きUTF-8に ファイルを変換することにします(実際のところBOM付きであるならばUTF-16でもUTF-32でもいいのですが、 UTF-8であるならばメモ帳でも開けます。
この変換は、例えばUnix環境であるならば、findコマンドとuconv( http://site.icu-project.org/ )あたりを使用すれば簡単に実現できます。 ですがWindows環境では少々厄介です。 それに、iso8859-1で書かれているのは一部のファイルであり、ASCIIで書かれたファイルもあります。それらはわざわざUTF-8に変換したくは ないものです。
そこで、指定したパス以下のC/C++ソースコードに関して、必要な場合に指定した文字コードからBOM付きUTF-8に変換するユーティリティを作成しています。
変換対象のフォルダとしてsubversionで取得したMirandaのソース木のフォルダ(例えばstable)、文字コードとしてiso8859-1を指定し、 変換実行すれば処理されます。再度svn updateする場合は、その前に逆変換しておくとよいでしょう。
実際のコンパイル手順は以下の通りです。
http://miranda.googlecode.com/svn/branches/stable/を指定して実行するとよいでしょう。
以上でMirandaを手元でコンパイルすることが可能になります。
[ページ情報]
更新日時: 2012-06-13 21:55:24, 更新者: taguchi-ch
[ライセンス]
FreeBSD Documentation License
[権限]
表示:無制限, 編集:メンバー, 削除/設定:メンバー