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