※こちらの記事には若干誤りがあるため新しい記事を参照してください。
OS X で libgsm の共有ライブラリを作成する。GSM もソースは http://www.quut.com/gsm/ から入手する。
まず Makefile の修正。
- CC や CFLAGS の固定を解除する。
$(INSTALL_ROOT)/inc
を$(INSTALL_ROOT)/include
に変更する。- インストール先を埋め込む。
- RMFLAGS に "-f" を追加する。
- マニュアルをインストールしない。
などなど。重要なのは1番と2番であとは make 時のエラーを気にするかしないかの好みの問題。下のパッチでは INSTALL_ROOT
を /usr/local
に設定済み。
m4 -D_CC="$CC" -D_CFLAGS="$CFLAGS" -D_PREFIX=/usr/local \ <<\@EOS | patch -Np0 --- Makefile.orig +++ Makefile @@ -43,8 +43,8 @@ # CC = /usr/lang/acc # CCFLAGS = -c -O -CC = gcc -ansi -pedantic -CCFLAGS = -c -O2 -DNeedFunctionPrototypes=1 +CC = _CC -ansi -pedantic +CCFLAGS = -c _CFLAGS -DNeedFunctionPrototypes=1 LD = $(CC) @@ -71,7 +71,7 @@ # Leave INSTALL_ROOT empty (or just don't execute "make install") to # not install gsm and toast outside of this directory. -INSTALL_ROOT = +INSTALL_ROOT = _PREFIX # Where do you want to install the gsm library, header file, and manpages? # @@ -80,7 +80,7 @@ GSM_INSTALL_ROOT = $(INSTALL_ROOT) GSM_INSTALL_LIB = $(GSM_INSTALL_ROOT)/lib -GSM_INSTALL_INC = $(GSM_INSTALL_ROOT)/inc +GSM_INSTALL_INC = $(GSM_INSTALL_ROOT)/include GSM_INSTALL_MAN = $(GSM_INSTALL_ROOT)/man/man3 @@ -100,7 +100,7 @@ BASENAME = basename AR = ar ARFLAGS = cr -RMFLAGS = +RMFLAGS = -f FIND = find COMPRESS = compress COMPRESSFLAGS = @@ -258,18 +258,12 @@ GSM_INSTALL_TARGETS = \ $(GSM_INSTALL_LIB)/libgsm.a \ - $(GSM_INSTALL_INC)/gsm.h \ - $(GSM_INSTALL_MAN)/gsm.3 \ - $(GSM_INSTALL_MAN)/gsm_explode.3 \ - $(GSM_INSTALL_MAN)/gsm_option.3 \ - $(GSM_INSTALL_MAN)/gsm_print.3 + $(GSM_INSTALL_INC)/gsm.h TOAST_INSTALL_TARGETS = \ $(TOAST_INSTALL_BIN)/toast \ $(TOAST_INSTALL_BIN)/tcat \ - $(TOAST_INSTALL_BIN)/untoast \ - $(TOAST_INSTALL_MAN)/toast.1 - + $(TOAST_INSTALL_BIN)/untoast # Default rules @@ -351,25 +345,25 @@ fi $(TOAST_INSTALL_BIN)/toast: $(TOAST) - -rm $@ + -rm $(RMFLAGS) $@ cp $(TOAST) $@ chmod 755 $@ $(TOAST_INSTALL_BIN)/untoast: $(TOAST_INSTALL_BIN)/toast - -rm $@ + -rm $(RMFLAGS) $@ ln $? $@ $(TOAST_INSTALL_BIN)/tcat: $(TOAST_INSTALL_BIN)/toast - -rm $@ + -rm $(RMFLAGS) $@ ln $? $@ $(TOAST_INSTALL_MAN)/toast.1: $(MAN)/toast.1 - -rm $@ + -rm $(RMFLAGS) $@ cp $? $@ chmod 444 $@ $(GSM_INSTALL_MAN)/gsm.3: $(MAN)/gsm.3 - -rm $@ + -rm $(RMFLAGS) $@ cp $? $@ chmod 444 $@ @@ -389,12 +383,12 @@ chmod 444 $@ $(GSM_INSTALL_INC)/gsm.h: $(INC)/gsm.h - -rm $@ + -rm $(RMFLAGS) $@ cp $? $@ chmod 444 $@ $(GSM_INSTALL_LIB)/libgsm.a: $(LIBGSM) - -rm $@ + -rm $(RMFLAGS) $@ cp $? $@ chmod 444 $@ @EOS
Makefile を修正したら make install まで済ませる。
libtool で共有ライブラリを作成する。
/usr/bin/libtool -dynamic -v -o /usr/local/lib/libgsm.1.dylib -install_name /usr/local/lib/libgsm.1.dylib -compatibility_version 1.0.13 -current_version 1.0.13 -lc lib/libgsm.a cd /usr/local/lib ln -fs libgsm1.dylib libgsm.dylib
/usr/bin/libtool
と /usr/bin/glibtool
は別物で、前者は Apple、後者の方は GNU のものでオプションが異なる。
# Apple $ /usr/bin/libtool -V Apple Computer, Inc. version cctools-795 # GNU $ /usr/bin/glibtool --version ltmain.sh (GNU libtool) 2.2.4 Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 Copyright (C) 2008 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.