Emscriptenでpath_pngのビルド

fab_src/coreのpath_png.cをemccでビルドする.
必要なファイルはfab.c, fab.h, path_png.c
libpngとgiflibが必要なので,まずそれらをビルドする.

1. libpngのビルド

zlibに依存しているのでzlibをビルドする.

wget http://zlib.net/zlib-1.2.8.tar.gz
tar -xzvf zlib-1.2.8.tar.gz
cd zlib-1.2.8
emconfigure ./configure --prefix=`pwd`
emmake make
emmake make install

次にlibpngをビルドする.

wget http://downloads.sourceforge.net/project/libpng/libpng16/1.6.15/libpng-1.6.15.tar.gz
tar -xzvf libpng-1.6.15.tar.gz
cd libpng-1.6.15

さっきビルドしたzlibの場所を知らせる必要があるので
環境変数をexportする.
以下は一例

ZLIBLIB=/Users/shohei/Codes/Emscripten/fab_src/core/temp/zlib-1.2.8/lib export ZLIBLIB
ZLIBINC=/Users/shohei/Codes/Emscripten/fab_src/core/temp/zlib-1.2.8/include export ZLIBINC
CPPFLAGS="-I$ZLIBINC" export CPPFLAGS
LDFLAGS="-L$ZLIBLIB" export LDFLAGS
LD_LIBRARY_PATH="$ZLIBLIB:$LD_LIBRARY_PATH" export LD_LIBRARY_PATH

あとここでつまづいたけど,
libpngのconfigureでは
zlibが入ってるかどうかを確かめるCコード(zlibVersion()関数)が実行される.
自分の環境ではこれが走らなかったので. configureを書き換えた.
configureの12615行目あたりの"no"を"yes"に変える

...
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
  ac_cv_lib_z_zlibVersion=yes
else
-  ac_cv_lib_z_zlibVersion=no
+  ac_cv_lib_z_zlibVersion=yes
fi

ビルドする.

emconfigure ./configure --prefix=`pwd`
emmake make
emmake make install

終わったら環境変数はunsetしておく.

unset ZLIBLIB
unset ZLIBINC
unset CPPFLAGS
unset LDFLAGS
unset LD_LIBRARY_PATH

2. giflibのビルド

同様に行う.

wget http://downloads.sourceforge.net/project/giflib/giflib-5.1.0.tar.bz2
tar -xzvf /giflib-5.1.0.tar.bz2
cd giflib-5.1.0
emconfigure ./configure --prefix=`pwd`
emmake make
emmake make install

3. png_pathのビルド

zlibフォルダ/libのlibz.a, libpngフォルダ/lib/libpng.aとgiflibフォルダ/lib/libgif.aを作業フォルダに移す.
以下でビルド.

#静的ライブラリ生成(ここではhomebrewのlibpngフォルダ類を指定していけた)
emcc -I/usr/local/include -L/usr/local/lib -c fab.c
ar rsv libfabcore.a fab.o
#メインファイルのコンパイル
emcc -I/usr/local/include -L/usr/local/lib -c png_path.c
#リンク
emcc -o png_path.js png_path.o libfabcore.a libpng.a libgif.a libz.a --embed-file fabisp.png
#embed-fileであらかじめ読み込むファイルは指定しないといけない

実行

$ node png_path.js fabisp.png fab_mod_fabisp.path 1.1 0.25 1 0.5 0.5
node png_path.js fabisp.png "fab_mod_fabisp.path" 1.1 0.25 1 0.5 0.5
read fabisp.png
   bit depth: 1
   x pixels: 986, y pixels: 573
   x pixels/m: 19686, y pixels/m: 19686
   dx: 50.086356 mm, dy: 29.106980 mm
png_path: intensity 0.500000
   threshold
   find edges
   find distances
   985
   offset:
      distance 0.125000, 432582 exterior points remain
write fab_mod_fabisp.path
   degrees of freedom: 2
   units: mm mm
   segments: 32, points: 590
   nx: 986, ny: 573
   dx: 50.086356, dy: 29.106980
   xmin: 0.000000, ymin: 0.000000

フロントエンドでの実行は次回に回す.ファイルの出力用にラッパーを書く必要がある.
こっち→http://d.hatena.ne.jp/seinzumtode/20141202/1417510340