Calc – C-style arbitrary precision calculator をCygwin上でビルドするメモです。
Calc – C-style arbitrary precision calculator は大雑把に言うと高性能な電卓ソフトです。任意の桁で計算できて、素数の計算に向いているようです。
ぼくは電卓代わりに使っています。履歴から編集できて、三角関数や対数など関数が充実しているので重宝します。
残念ながらCygwinではパッケージ化されていないようですので、ビルドしてみました。
今回ビルドしたバージョンは2.12.6.5です。
目次
ファイルの修正
一つのファイルを修正しないとコンパイルが通りません。
lib_calc.cを次のように修正しました。
--- bb/lib_calc.c 2018-02-18 15:37:09.584138700 +0900 +++ aa/lib_calc.c 2018-02-17 20:18:53.030484700 +0900 @@ -86,8 +86,8 @@ #if !defined(_WIN32) # if !defined(USE_SGTTY) && !defined (USE_TERMIOS) && !defined(USE_TERMIO) --=*#*=- A Windoz free system without termio, termios or sgtty!!! -=*#*=- --=*#*=- We do not know how to compile for such a host, sorry!!!! -=*#*=- +/* -=*#*=- A Windoz free system without termio, termios or sgtty!!! -=*#*=- */ +/* -=*#*=- We do not know how to compile for such a host, sorry!!!! -=*#*=- */ # endif #endif /* Windoz */
ビルド
次のコマンドでビルドできました(Makefileの修正は必要ありませんでした):
make target=Cygwin
ちなみにdllの依存関係を調べた結果は下記の通りです:
cygcheck.exe ./calc.exe H:\home\hoge\tmp\calc-2.12.6.5\calc.exe C:\cygwin64\bin\cygwin1.dll C:\WINDOWS\system32\KERNEL32.dll C:\WINDOWS\system32\ntdll.dll C:\WINDOWS\system32\KERNELBASE.dll
Cygwin非依存のビルドは失敗
Cygwin非依存のビルドを試しましたが、うまくいっていません。解決法を教えて頂けると助かります。
gccを次のようにしました:
LCC= i686-w64-mingw32-gcc.exe
endian.hが無いとか他のヘッダーファイルが無いとか言われています。
rm -f custom/.all cd custom; make -f Makefile ALLOW_CUSTOM="-DCUSTOM" AR=ar AWK=awk BINDIR="/usr/bin" BLD_TYPE="calc-static-only" CALC_INCDIR="/usr/include/calc" CALC_SHAREDIR="/usr/share/calc" CAT=cat CC=" i686-w64-mingw32-gcc.exe " CCERR="" CCMISC="" CCOPT="-O3 -g3" CCWARN="-Wall" CC_SHARE="-fPIC" CFLAGS="-DCALC_SRC -DCUSTOM -Wall -O3 -g3 -I.." CHMOD=chmod CMP=cmp CO=co COMMON_ADD="" COMMON_CFLAGS="-DCALC_SRC -DCUSTOM -Wall -I.." COMMON_LDFLAGS=" " CP=cp CUSTOMCALDIR="/usr/share/calc/custom" CUSTOMHELPDIR="/usr/share/calc/custhelp" CUSTOMINCDIR="/usr/include/calc/custom" DEBUG="-O3 -g3" DEFAULT_LIB_INSTALL_PATH="/cygdrive/h/home/myname/tmp/calc-2.12.6.5:/lib:/usr/lib:/usr/lib:/usr/local/lib" FMT=fmt GREP=egrep HELPDIR="/usr/share/calc/help" ICFLAGS="-DCALC_SRC -DCUSTOM -Wall -I.." ILDFLAGS=" " INCDIR="/usr/include" LANG=C LCC="i686-w64-mingw32-gcc.exe" LDCONFIG=ldconfig LDFLAGS=" " LD_SHARE=""-Wl,-rpath,/cygdrive/h/home/myname/tmp/calc-2.12.6.5:/lib:/usr/lib:/usr/lib:/usr/local/lib" "-Wl,-rpath-link,/cygdrive/h/home/myname/tmp/calc-2.12.6.5:/lib:/usr/lib:/usr/lib:/usr/local/lib"" LIBCUSTCALC_SHLIB="-shared "-Wl,-soname,libcustcalc.so.2.12.6.5"" LIBDIR="/usr/lib" LN=ln MAKE=make MAKEDEPEND=makedepend MAKE_FILE=Makefile MKDIR=mkdir MV=mv PURIFY="" Q="@" RANLIB="ranlib" RM=rm RMDIR=rmdir SCRIPTDIR="/usr/bin/cscript" SED=sed SORT=sort T= TOP_MAKE_FILE=Makefile TOUCH=touch TRUE=true VERSION=2.12.6.5 target=Cygwin all make[1]: Entering directory '/cygdrive/h/home/myname/tmp/calc-2.12.6.5/custom' i686-w64-mingw32-gcc.exe -DCALC_SRC -DCUSTOM -Wall -O3 -g3 -I.. -c -o custtbl.o custtbl.c In file included from ../zmath.h:40:0, from ../qmath.h:32, from ../cmath.h:32, from ../value.h:33, from custtbl.c:30: ../endian_calc.h:11:20: fatal error: endian.h: No such file or directory #include^ compilation terminated. make[1]: *** [ : custtbl.o] Error 1 make[1]: Leaving directory '/cygdrive/h/home/myname/tmp/calc-2.12.6.5/custom' make: *** [Makefile:3789: custom/.all] エラー 2
おまけ
名前がcalcなので、Windowsの電卓と名前が同じで紛らわしいです。適切に名前を変えるのが良さそうです。
Debian GNU/Linux ではapcalcという名前でパッケージ化されています。
なお、Windows ネイティブなバイナリは ツール関係の小部屋 (がっちゃんの小部屋)で公開されています。