calc (C-style arbitrary precision calculator)をCygwin上でコンパイル

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 ネイティブなバイナリは ツール関係の小部屋 (がっちゃんの小部屋)で公開されています。