Makefile for D-ISAM dynamic library in Xcode

This makefile differs from a static build in the following ways:

The library filename extension is .dylib

-fPIC is added to compiler flags.

-dynamiclib is added to linker flags.

INSTALL_NAME is set to the full destination path and name of the library, as finally installed.

Without setting install_name it would be necessary to link the library directly into the install folder, or to use the install_name_tool to set this value later. The Xcode linker refers to this value when setting the library load path in your applications.

Please see Building D-ISAM in Xcode from the command line for more details.

# ------------------------------------------------------------------------
# DISAM                                                           MAKEFILE 
# ------------------------------------------------------------------------
#
# this version is designed to operate from your disam root folder,
# and does NOT require moving everything into a common folder
#
# ------------------------------------------------------------------------

INSTALL_NAME = /Library/Disam72/libdisam72.dylib

ISLIBNAME = disam72
ISLIBWHAT = shared
ISEXTWHAT = dylib
ISCFWHAT = -fPIC
ISLFWHAT =
ISCFOFFB = -D_FILE_OFFSET_BITS=64
ISLFOFFB =
ISBINLIBS =
ISCFLAGS =
ISLFLAGS =

# ------------------------------------------------------------------------

ISINCLUDE = -Ihead -Ibase -Idecs -Iutil -Itest -Iexport

NAME = $(ISLIBNAME)
WHAT = $(ISLIBWHAT)
TYPE = $(ISEXTWHAT)

WHERE= target/$(NAME)_$(WHAT)

ISAM = $(WHERE)/lib/lib$(NAME)

LIBS = -l$(NAME) $(ISBINLIBS)

CFLG = $(ISCFWHAT) $(ISCFOFFB) $(ISCFLAGS) $(CFLAGS)
LFLG = $(ISLFWHAT) $(ISLFOFFB) $(ISLFLAGS) $(LDFLAGS)

BASE =	base/isaccess.o \
	base/isapface.o \
	base/isremote.o \
	base/isadmin.o \
	base/isaudit.o \
	base/isbuild.o \
	base/ischeck.o \
	base/isclustr.o \
	base/iscomp.o \
	base/iscustom.o \
	base/isdatio.o \
	base/isdelete.o \
	base/isentry.o \
	base/iserase.o \
	base/isfree.o \
	base/isglobal.o \
	base/isgrow.o \
	base/ishead.o \
	base/isidxdel.o \
	base/isidxio.o \
	base/isindex.o \
	base/isinfo.o \
	base/iskey.o \
	base/islast.o \
	base/islocate.o \
	base/islock.o \
	base/ismemory.o \
	base/ismif.o \
	base/isnode.o \
	base/isopen.o \
	base/ispath.o \
	base/isprune.o \
	base/isread.o \
	base/isrepair.o \
	base/issquash.o \
       	base/isbytes.o \
	base/isdebug.o \
	base/issystem.o \
	base/isnetsys.o \
	base/isschema.o \
	base/istrans.o \
	base/istree.o \
	base/isunique.o \
	base/isupdate.o \
	base/isvarlen.o \
	base/iswrite.o

WRAP =	wrap/stdbuild.o \
	wrap/stdcheck.o \
	wrap/stdextra.o \
	wrap/stdinfo.o \
	wrap/stdlast.o \
	wrap/stdlock.o \
	wrap/stdmif.o \
	wrap/stdread.o \
	wrap/stdtrans.o \
	wrap/stdwrap.o \
	wrap/stdwrite.o

DECS = 	decs/dec_roun.o \
	decs/decadd.o \
	decs/deccmp.o \
	decs/decconv.o \
	decs/deccvasc.o \
	decs/decdiv.o \
	decs/dececvt.o \
	decs/decefcvt.o \
	decs/decextra.o \
	decs/decfcvt.o \
	decs/decmul.o \
	decs/decsub.o \
	decs/dectoasc.o

CO = $(CC) $(ISINCLUDE) $(CFLG)
CL = $(CC) $(LFLG) -L$(WHERE)/lib
AR = ar 
# RANLIB = $(AR) ts
RANLIB = ranlib

.c.o:
	$(CO) -c $*.c -o $*.o

$(ISAM).a:	$(BASE) $(WRAP) $(DECS)
	$(AR) r $(ISAM).$(TYPE) $(BASE) $(WRAP) $(DECS)
	$(RANLIB) $(ISAM).$(TYPE)

$(ISAM).dylib:	$(BASE) $(WRAP) $(DECS)
	$(CO) -dynamiclib $(BASE) $(WRAP) $(DECS) -o $(ISAM).$(TYPE) -install_name $(INSTALL_NAME)

lib:	$(ISAM).$(TYPE)

test_A:	test/bench.o test/auto.o test/mult.o test/user.o test/lock.o test/dups.o
	$(CL) test/auto.o test/bench.o $(LIBS) -o $(WHERE)/bin/auto_test
	$(CL) test/mult.o test/bench.o $(LIBS) -o $(WHERE)/bin/mult_test
	$(CL) test/user.o test/bench.o $(LIBS) -o $(WHERE)/bin/user_test
	$(CL) test/lock.o test/bench.o $(LIBS) -o $(WHERE)/bin/lock_test
	$(CL) test/dups.o test/bench.o $(LIBS) -o $(WHERE)/bin/dups_test

test_B:	test/mifs.o test/bash.o test/life.o
	$(CL) test/mifs.o              $(LIBS) -o $(WHERE)/bin/mifs_test
	$(CL) test/bash.o              $(LIBS) -o $(WHERE)/bin/bash_test
	$(CL) test/life.o              $(LIBS) -o $(WHERE)/bin/life_test

test:	test_A test_B

util_base: util/utility.o util/dcheck.o util/dstats.o util/dpack.o util/dbugscan.o
	$(CL) util/dcheck.o	util/utility.o	$(LIBS) -o $(WHERE)/bin/dcheck
	$(CL) util/dstats.o	util/utility.o	$(LIBS) -o $(WHERE)/bin/dstats
	$(CL) util/dpack.o	util/utility.o	$(LIBS) -o $(WHERE)/bin/dpack
	$(CL) util/dbugscan.o	                $(LIBS) -o $(WHERE)/bin/dbugscan

util_core: util/dsplit.o util/dlist.o util/dschema.o
	$(CL) util/dsplit.o	util/utility.o	$(LIBS) -o $(WHERE)/bin/dsplit
	$(CL) util/dlist.o	util/utility.o	$(LIBS) -o $(WHERE)/bin/dlist
	$(CL) util/dschema.o	util/utility.o	$(LIBS) -o $(WHERE)/bin/dschema

remote: util/disamnet.o util/dswabnet.o
	$(CL) util/disamnet.o	$(LIBS) -o $(WHERE)/bin/disamnet
	$(CL) util/dswabnet.o	$(LIBS) -o $(WHERE)/bin/dswabnet

util:	util_base util_core

export:	export/isreport.o export/isfield.o export/isload.o export/dreport.o
	$(CL) export/isreport.o export/isfield.o export/isload.o \
	      export/dreport.o $(LIBS) -o $(WHERE)/bin/dreport

check:  test
	$(WHERE)/bin/dstats
	$(WHERE)/bin/dcheck
	$(WHERE)/bin/mifs_test
	$(WHERE)/bin/bash_test
	$(WHERE)/bin/dcheck bashfile
	$(WHERE)/bin/auto_test
	$(WHERE)/bin/dcheck autofile
	rm -f autofile.dat autofile.idx
	rm -f bashfile.idx bashfile.dat

parts: lib util test check export

squeaky:
	rm -rf target/*

clean:	
	rm -rf base/*.o wrap/*.o decs/*.o test/*.o util/*.o export/*.o server/*.o

new:
	rm -rf $(WHERE)
	mkdir -p $(WHERE)/lib $(WHERE)/bin
	cp head/isconfig.h $(WHERE)

all: squeaky clean new lib util test remote

Leave a Reply