#
# Copyright 2004 Peter Mills. All rights reserved.
#
# The make file for building a set of templated libraries of various
# algorithmic constructs. Chief amongst these are: binary search
# routines, heapsort routines, a class for working with dates and times,
# a Runge-Kutta integrator and a linked list class.
#
#####################################################################
########### The user must modify the following macros ##############
########### to suit his or her system.... ##############
#####################################################################
# optimization level:
OPT=-g
# C++ compiler:
CPP = g++
BASE_PATH = /home/petey
#BASE_PATH = /mnt/sda1/home2/pete
#BASE_PATH = /home/pmills
LIB_PATH = $(BASE_PATH)/lib
INCLUDE_PATH = $(BASE_PATH)/include
BIN_PATH = $(BASE_PATH)/bin
# C++ compiler options:
CFLAGS = $(OPT) -Wno-deprecated -I$(INCLUDE_PATH)
# GSL library:
GSL_INCLUDE = /usr/include
# readline library:
READLINE_LIB=$(BASE_PATH)/lib
# lex & yacc:
LEX = flex -I
YY = bison
LIBLEX=fl
# man path:
MANPATH=$(BASE_PATH)/man
#MANPATH=/usr/local/man
#----------------------------------------------------------------#
########### The following macros are for libsparse: ##############
#----------------------------------------------------------------#
# Fortran compiler (for libsparse):
F77 = gfortran
#F77 = g77
FORTRAN_RUNTIME=gfortran
#FORTRAN_RUNTIME=g2c
# ARPACK library (for libsparse):
ARPATH = /usr/local/lib
#ARPATH = $(LIB_PATH)
LIBARPACK=arpack
# extension for executables (for libsparse):
#EXE_EXT=.exe
FFLAGS = -I$(INCLUDE_PATH) $(OPT) #-fno-underscoring
# leading and trailing underscores:
FLEADING_UNDERSCORES =
FTRAILING_UNDERSCORES=_
#####################################################################
################ End modifiable macros. #######################
#####################################################################
VPATH = datasets/ sparse/
all: libpetey$(OPT).a libdataset$(OPT).a libsparse$(OPT).a ignore_code date_calc
petey: libpetey$(OPT).a
libdataset$(OPT).a: install_petey
make -C datasets LIB_DIR=$(LIB_PATH) INCLUDE_DIR=$(INCLUDE_PATH) \
OPT_VER=$(OPT) CC=$(CPP) CFLAGS="$(CFLAGS)"
libsparse$(OPT).a: install_petey
make -C sparse LIB_PATH=$(LIB_PATH) INCLUDE_PATH=$(INCLUDE_PATH) \
BIN_PATH=$(BIN_PATH) MANPATH=$(MANPATH) \
OPT_VER=$(OPT) EXE_EXT=$(EXE_EXT) OPT_VER=$(OPT) CC=$(CPP) \
LEX=$(LEX) YY=$(YY) LIBLEX=$(LIBLEX) \
CFLAGS="$(CFLAGS) -DFLEADING_UNDERSCORES=$(FLEADING_UNDERSCORES) -DFTRAILING_UNDERSCORES=$(FTRAILING_UNDERSCORES)" \
ARPATH=$(ARPATH) LIBARPACK=$(LIBARPACK) \
F77=$(F77) FFLAGS="$(FFLAGS)" FORTRAN_RUNTIME=$(FORTRAN_RUNTIME)
allopt:
make OPT=-g all
make OPT=-pg all
make OPT=-O2 all
clean:
rm -f libpetey*.a
rm -f libpetey*.so
rm -f *.o
rm -f ignore_code$(OPT)$(EXE_EXT)
rm -f date_calc.tab.*
rm -f date_calc$(OPT)$(EXE_EXT)
rm -f lex.yy.c
make -C sparse OPT=$(OPT) clean_all
make -C datasets OPT_VER=$(OPT) clean
make -C datasets clean
make -C datasets OPT_VER=-g clean
make -C datasets OPT_VER=-pg clean
make -C datasets OPT_VER=-O2 clean
install_petey: libpetey$(OPT).a ignore_code date_calc
install libpetey$(OPT).a $(LIB_PATH)
install peteys_tmpl_lib.h $(INCLUDE_PATH)
install time_class.h $(INCLUDE_PATH)
install string_petey.h $(INCLUDE_PATH)
install linked.h $(INCLUDE_PATH)
install tree_tmp.h $(INCLUDE_PATH)
install bit_array.h $(INCLUDE_PATH)
install tree_lg.h $(INCLUDE_PATH)
install tree_lgi.h $(INCLUDE_PATH)
install kextreme.h $(INCLUDE_PATH)
install quicksort.h $(INCLUDE_PATH)
install supernewton.h $(INCLUDE_PATH)
install randomize.h $(INCLUDE_PATH)
install parse_command_opts.h $(INCLUDE_PATH)
install error_codes.h $(INCLUDE_PATH)
install read_ascii_all.h $(INCLUDE_PATH)
install petey_pointer.h $(INCLUDE_PATH)
install vector_s.h $(INCLUDE_PATH)
install symbol_table.h $(INCLUDE_PATH)
install full_util.h $(INCLUDE_PATH)
install linked.cc $(INCLUDE_PATH)
install ignore_code $(BIN_PATH)
install date_calc $(BIN_PATH)
install date_calc.1 $(MANPATH)/man1
install: install_petey
make install -C datasets LIB_DIR=$(LIB_PATH) INCLUDE_DIR=$(INCLUDE_PATH) \
OPT_VER=$(OPT)
make install -C sparse LIB_PATH=$(LIB_PATH) INCLUDE_PATH=$(INCLUDE_PATH) \
BIN_PATH=$(BIN_PATH) MANPATH=$(MANPATH) \
OPT_VER=$(OPT) EXE_EXT=$(EXE_EXT)
cp ignore_code $(BIN_PATH)
install_allopt: libpetey-g.a libpetey-O2.a libpetey-pg.a
make install_petey OPT=-g
make install_petey OPT=-pg
make install_petey OPT=-O2
make install -C datasets LIB_DIR=$(LIB_PATH) INCLUDE_DIR=$(INCLUDE_PATH) OPT_VER=-g
make install -C sparse LIB_PATH=$(LIB_PATH) INCLUDE_PATH=$(INCLUDE_PATH) \
BIN_PATH=$(BIN_PATH) MANPATH=$(MANPATH) \
EXE_EXT=$(EXE_EXT) OPT_VER=-g
make install -C datasets LIB_DIR=$(LIB_PATH) INCLUDE_DIR=$(INCLUDE_PATH) OPT_VER=-O2
make install -C sparse LIB_PATH=$(LIB_PATH) INCLUDE_PATH=$(INCLUDE_PATH) \
BIN_PATH=$(BIN_PATH) MANPATH=$(MANPATH) \
EXE_EXT=$(EXE_EXT) OPT_VER=-O2
make install -C datasets LIB_DIR=$(LIB_PATH) INCLUDE_DIR=$(INCLUDE_PATH) OPT_VER=-pg
make install -C sparse LIB_PATH=$(LIB_PATH) INCLUDE_PATH=$(INCLUDE_PATH) \
BIN_PATH=$(BIN_PATH) MANPATH=$(MANPATH) \
EXE_EXT=$(EXE_EXT) OPT_VER=-pg
# build the static library:
libpetey$(OPT).a: peteys_tmpl_lib$(OPT).o \
tree_tmp$(OPT).o \
time_class$(OPT).o \
string_petey$(OPT).o \
linked$(OPT).o \
bit_array$(OPT).o \
supernewton$(OPT).o \
kextreme$(OPT).o \
tree_lg$(OPT).o \
tree_lgi$(OPT).o \
quicksort$(OPT).o \
parse_command_opts$(OPT).o \
randomize$(OPT).o \
read_ascii_all$(OPT).o \
symbol_table$(OPT).o \
full_util$(OPT).o
ar -rs libpetey$(OPT).a \
symbol_table$(OPT).o \
peteys_tmpl_lib$(OPT).o \
tree_tmp$(OPT).o \
time_class$(OPT).o \
read_ascii_all$(OPT).o \
linked$(OPT).o \
bit_array$(OPT).o \
supernewton$(OPT).o \
kextreme$(OPT).o \
quicksort$(OPT).o \
tree_lg$(OPT).o \
tree_lgi$(OPT).o \
parse_command_opts$(OPT).o \
randomize$(OPT).o \
string_petey$(OPT).o \
full_util$(OPT).o
# object file for the templated routines:
peteys_tmpl_lib$(OPT).o: peteys_tmpl_lib.cc bin_search.cc heapsort_tmpl.cc \
rk_dumb_tmpl.cc rk_dumb_ts.cc treesort.cpp vector_s.cc
$(CPP) $(CFLAGS) -c peteys_tmpl_lib.cc -o $@
# compile a templated linked list class:
linked$(OPT).o: linked.cc linked.h time_class.h string_petey.h
$(CPP) $(CFLAGS) -c linked.cc -o $@
# compile the time class:
time_class$(OPT).o: time_class.cc time_class.h
$(CPP) $(CFLAGS) -c time_class.cc -o $@
# compile the string class (not well tested--use with caution...)
string_petey$(OPT).o: string_petey.cc string_petey.h
$(CPP) $(CFLAGS) -c string_petey.cc -o $@
# compile the tree class (not well tested--use with caution...)
tree_tmp$(OPT).o: tree_tmp.cpp tree_tmp.h time_class.h string_petey.h
$(CPP) $(CFLAGS) -c tree_tmp.cpp -o $@
# compile bit array class:
bit_array$(OPT).o: bit_array.cc bit_array.h
$(CPP) $(CFLAGS) -c bit_array.cc -o $@
# compile the supernewton root-finding algorithm:
supernewton$(OPT).o: supernewton.cc
# this one requires the GSL library:
$(CPP) $(CFLAGS) -I$(GSL_INCLUDE) -c supernewton.cc -o supernewton$(OPT).o
# compile the k-extreme search algorithm:
kextreme$(OPT).o: kextreme.cc kextreme.h tree_lg.h tree_lgi.h
$(CPP) $(CFLAGS) -c kextreme.cc -o $@
# compile the k-extreme search algorithm:
quicksort$(OPT).o: quicksort.cc quicksort.h
$(CPP) $(CFLAGS) -c quicksort.cc -o $@
tree_lgi$(OPT).o: tree_lgi.cc tree_lgi.h string_operators.h
$(CPP) $(CFLAGS) -c tree_lgi.cc -o $@
tree_lg$(OPT).o: tree_lg.cc tree_lg.h string_operators.h
$(CPP) $(CFLAGS) -c tree_lg.cc -o $@
parse_command_opts$(OPT).o: parse_command_opts.cc parse_command_opts.h error_codes.h
$(CPP) $(CFLAGS) -c parse_command_opts.cc -o $@
randomize$(OPT).o: randomize.cc randomize.h
$(CPP) $(CFLAGS) -I$(GSL_INCLUDE) -c randomize.cc -o $@
read_ascii_all$(OPT).o: read_ascii_all.cc read_ascii_all.h
$(CPP) $(CFLAGS) -I$(GSL_INCLUDE) -c read_ascii_all.cc -o $@
symbol_table$(OPT).o: symbol_table.cc symbol_table.h
$(CPP) $(CFLAGS) -c symbol_table.cc -o $@
full_util$(OPT).o: full_util.cc full_util.h
$(CPP) $(CFLAGS) -c full_util.cc -o $@
test_parse_opts: test_parse_opts.cc parse_command_opts$(OPT).o
$(CPP) $(CFLAGS) -o test_parse_opts test_parse_opts.cc parse_command_opts$(OPT).o
ignore_code: ignore_code.cc
$(CPP) $(CFLAGS) -o ignore_code ignore_code.cc
time_calc: time_calc.cc
$(CPP) $(CFLAGS) -o time_calc time_calc.cc libpetey$(OPT).a
date_calc: date_calc.tab.c lex.yy$(OPT).o
$(CPP) $(CFLAGS) -o $@ date_calc.tab.c lex.yy$(OPT).o libpetey$(OPT).a -L$(READLINE_LIB) -l$(LIBLEX) -lreadline #-lncurses
lex.yy$(OPT).o: lex.yy.c date_calc.tab.h
$(CPP) $(CFLAGS) -c lex.yy.c -o $@
lex.yy.c: date_parse2.l time_class.h date_calc.tab.h
$(LEX) date_parse2.l
date_calc.tab.c date_calc.tab.h: date_calc.y time_class.h
$(YY) -v -d date_calc.y