Windows版Firefoxのビルドメモ・libpngを差し替える
Windows XP + Visual Studio 2005でFirefoxをビルドするメモ。
Firefox 2.0.0.1のソースに含まれてるlibpngを差し替える改造をする。
改造するポイントは2点。
- libpngのバージョンを現時点の最新版(1.2.16)にする。
- MMXのコードを使って速度を上げる。
以下手順
ソースファイルを用意
libpngのサイトから、libpngのソースファイルをダウンロードする。
ソースを展開して、次のファイルをFirefoxのlibpngのソースの場所(mozilla\modules\libimg\png)に上書きコピーする。
png.c pngmem.c pngrio.c pngset.c pngwio.c pngwutil.c pngerror.c pngpread.c pngrtran.c pngtrans.c pngwrite.c pngget.c pngread.c pngrutil.c pngvcrd.c pngwtran.c png.h pngconf.h
ファイルを編集
そのままではコンパイル出来ないので少し修正する。
★pngpread.c
png_progressive_combine_row関数の、「if(png_ptr == NULL) return;」とある行(1556行目辺り)の位置を、直後の「#endif」の下に下げる。
これをしないと、コンパイラの仕様でエラーになる。
1553:png_progressive_combine_row (png_structp png_ptr, 1554: png_bytep old_row, png_bytep new_row) 1555:{ 1556:#ifdef PNG_USE_LOCAL_ARRAYS 1557: const int FARDATA png_pass_dsp_mask[7] = 1558: {0xff, 0x0f, 0xff, 0x33, 0xff, 0x55, 0xff}; 1559:#endif 1560: if(png_ptr == NULL) return; /* この位置まで下げる */ 1561: if (new_row != NULL) /* new_row must == png_ptr->row_buf here. */ 1562: png_combine_row(png_ptr, old_row, png_pass_dsp_mask[png_ptr->pass]); 1563:}
★pngconf.h
「#define PNG_1_2_X」の行の下辺りに、「#include "mozpngconf.h"」と書いておく。
ビルド
あとは普通にビルドする。
エラーが出たら、どこかが抜けているので見直すべし。