HOME = /cs/musser/public.html/gsd
GC_DIR = $(HOME)/gc6.6
#BOOST_ROOT = $(HOME)/boost_1_33_1
BOOST_ROOT = /software/boost-1.32.0-0/pkg
SWIG_DIR = $(HOME)/swig-1.3.29
# MLC = ocamlc
# MLC_OUT = cmo
# ML_LIB = cma
# MLC_FLAGS = -g
MLC = ocamlopt
MLC_OUT = cmx
ML_LIB = cmxa
MLC_FLAGS =
LEX = ocamllex
YACC = ocamlyacc
LEXSOURCES = lexer.mll
YACCSOURCES = parser.mly
MLHEADERS = parser.mli
LSOURCES = $(LEXSOURCES:.mll=.ml)
YSOURCES = $(YACCSOURCES:.mly=.ml)
MLSOURCES = list_set.ml support.ml \
union_find.ml \
prim.ml \
cpp_ast.ml \
g_ast.ml \
$(YSOURCES) $(LSOURCES) g2str.ml \
parser_misc.ml \
lower_fun.ml \
cpp2str.ml \
congruence_closure.ml \
type_check.ml \
g.ml
#lower_poly.ml \
# lower_lambda.ml fwd_decl.ml topo_sort.ml lower_misc.ml g.ml
MLOBJECTS = $(MLSOURCES:.ml=.$(MLC_OUT))
MLHDROBJ = $(MLHEADERS:.mli=.cmi)
STL_TESTS = \
test/advance0.g \
test/distance0.g \
test/for_each.g \
test/find.g \
test/find_if.g \
test/adjacent_find.g \
test/count.g \
test/find_subsequence.g \
test/find_last_subsequence.g \
test/find_last_subsequence1.g \
test/find_n_consecutive.g \
test/mismatch.g \
test/copy.g \
test/swap_ranges.g \
test/reverse.g \
test/rotate.g \
test/inplace_merge.g \
\
test/slist0.g \
test/vector0.g\
test/vector1.g
TESTS = test/add.g \
test/mult.g \
test/ops.g \
test/var.g \
test/var1.g \
test/var2.g \
test/var3.g \
test/var4.g \
test/pass_by_value.g \
test/destructor.g \
\
test/destructor1.g \
test/class0.g \
test/poly_class2.g \
test/poly_fun.g \
test/poly_fun2.g \
test/poly_fun3.g \
test/poly_fun4.g \
test/lambda.g \
test/struct0.g \
test/struct1.g \
test/struct2.g \
\
test/struct.g \
test/fun.g \
test/fun2.g \
test/funptr.g \
test/hi_fun.g \
test/hi_fun2.g \
test/poly_hi_fun.g \
test/poly_hi_fun2.g \
test/poly_hi_fun3.g \
test/poly_hi_fun4.g \
test/poly_hi_fun5.g \
test/poly_hi_fun6.g \
\
test/poly_copy.g \
test/factorial.g \
test/even_odd.g \
test/cast.g \
test/string0.g \
test/string1.g \
test/hello_world.g \
test/string_cvt.g \
test/init_rvalue.g \
test/overload0.g \
test/overload1.g \
\
test/overload2.g \
test/apply_global.g \
test/many_constr.g \
test/union0.g \
test/union1.g \
test/union2.g \
test/union3.g \
test/union4.g \
test/if-expr.g \
test/operator0.g \
\
test/operator1.g \
test/array0.g \
test/array1.g \
test/array2.g \
test/poly_struct.g \
test/poly_struct2.g \
test/poly_struct3.g \
test/poly_struct4.g \
test/poly_struct5.g \
test/poly_struct6.g \
test/poly_fun_struct.g \
\
test/linked_list.g \
test/linked_list2.g \
test/poly_union0.g \
test/model0.g \
test/model1.g \
test/concept0.g \
test/concept0b.g \
test/isalpha.g \
test/atoi.g \
test/str.g \
\
test/refinement0.g \
test/destructor2.g \
test/refinement1.g \
test/refinement2.g \
test/same-type.g \
test/assoc_type0.g \
test/assoc_type1.g \
test/accumulate.g \
test/poly_constr.g \
test/poly_ptr_fun.g \
\
test/model2.g \
test/poly_class.g \
test/model3.g \
test/model4.g \
test/model7.g \
test/assign0.g \
test/assign1.g \
test/assign2.g \
test/assign3.g \
test/assign4.g \
test/delete0.g \
\
test/delete1.g \
test/placement_new.g \
test/default_concept_op0.g \
test/apples.g \
test/implicit_inst1.g \
test/implicit_inst2.g \
test/first_class_poly1.g \
test/concept_add.g \
test/power.g \
\
${STL_TESTS}\
NON_COMPILING_TESTS = \
test/placement_new0.g \
test/placement_new2.g \
EXTRA_TESTS = \
test/explicit_inst.g \
test/implicit_inst3.g \
test/model5.g \
test/model6.g \
test/stable_sort_error.g\ # suppose to fail
BGL = bgl/property_map_concepts.g \
bgl/graph_concepts.g \
bgl/queue_concepts.g \
bgl/simple_adjacency_list.g \
bgl/adjacency_list_advanced.g \
bgl/adjacency_list_advanced.g \
bgl/queue.g \
bgl/breadth_first_search.g \
bgl/dijkstra.g \
bgl/vector_as_graph.g \
BGL_TESTS = \
bgl/adjacency_list_test.g \
bgl/queue_test.g \
bgl/breadth_first_search_test.g \
bgl/dijkstra_test.g \
STL = stl/basic_concepts.g \
stl/iterator_concepts.g \
stl/pair.g \
stl/basic_models.g \
stl/iterator_functions.g \
stl/basic_algo_impl.g \
stl/basic_algorithms.g \
stl/iterator_models.g \
stl/reverse_iterator.g \
stl/sequence_queries.g \
stl/sequence_mutation.g \
stl/sorting.g \
stl/slist.g \
stl/list.g \
stl/numeric.g \
stl/vector.g \
FUTURE_TESTS =
SHOULD_FAIL = test/assoc_type2.g test/return_copy.g
.SUFFIXES: .ml .mll .mly .mli .cmo .cmx .cmi .g .c .cpp .o .exe .prof .ok
TESTS_CPP = $(TESTS:.g=.cpp)
TESTS_OBJ = $(TESTS_CPP:.cpp=.o)
TESTS_EXE = $(TESTS_OBJ:.o=.exe)
TESTS_OK = $(TESTS_EXE:.exe=.ok)
STL_TESTS_CPP = $(STL_TESTS:.g=.cpp)
STL_TESTS_OBJ = $(STL_TESTS_CPP:.cpp=.o)
STL_TESTS_EXE = $(STL_TESTS_OBJ:.o=.exe)
STL_TESTS_OK = $(STL_TESTS_EXE:.exe=.ok)
STL_CPP = $(STL:.g=.cpp)
STL_OBJ = $(STL_CPP:.cpp=.o)
BGL_CPP = $(BGL:.g=.cpp)
BGL_OBJ = $(BGL_CPP:.cpp=.o)
CC = gcc3
CXX = g++3
CFLAGS = -I$(GC_DIR)/include -g -DDEBUG -DGC_DEBUG
CPPFLAGS = -I./ -I$(BOOST_ROOT) -I$(GC_DIR)/include -g
# -DDEBUG -DGC_DEBUG
SRC_PROF = $(MLSOURCES:.ml=.prof)
G_INCLUDES = -I ./stl -I ./bgl
.g.cpp:
m4 -s $*.g > $*.tmp
./g ${G_INCLUDES} --swig $(SWIG_DIR) $*.tmp
# vim -e -s -u $(HOME)/.vimrc '+normal 1G=G' '+w!' '+q' $*.cpp
.ml.$(MLC_OUT):
$(MLC) $(MLC_FLAGS) -c $<
.mli.cmi:
$(MLC) -c $<
.mll.ml:
$(LEX) $<
.mly.ml:
$(YACC) -v $<
.mly.mli:
$(YACC) -v $<
#.c.o:
# $(CC) $(CFLAGS) -c $< -o $*.o
.cpp.o:
$(CXX) $(CPPFLAGS) -c $< -o $*.o
%.exe: %.o libgslib.a libgc.a
$(CXX) -L. $< -o $@ -lgslib -lgc
.exe.ok:
if ( $*.exe ); then touch $*.ok; else touch $*.bad; false; fi
.ml.prof:
ocamlprof $< > $*.prof
default: g g_stdlib.o stl tests
OCAMLLIB = `$(MLC) -where`
test_union_find: test_union_find.ml
$(MLC) $(MLC_FLAGS) -g -o test_union_find $(OCAMLLIB)/unix.$(ML_LIB) $(MLOBJECTS)
g: $(MLOBJECTS)
$(MLC) $(MLC_FLAGS) -o g $(OCAMLLIB)/unix.$(ML_LIB) $(OCAMLLIB)/str.$(ML_LIB) $(MLOBJECTS)
lexer.cmx: lexer.ml
parser.cmi: parser.mli
parser.$(MLC_OUT): support.$(MLC_OUT) parser.cmi parser.ml
prof: $(SRC_PROF)
libgc.a: $(GC_DIR)/gc.a
cp $< $@
ranlib $@
libgslib.a: g_stdlib.o $(STL_OBJ)
ar -r $@ $^
ranlib $@
parse_tests: $(TESTS_CPP)
#$(STL_OBJ)
tests: g g_stdlib.o g_stdio.o $(TESTS_OK)
stltests: g g_stdlib.o g_stdio.o $(STL_TESTS_OK)
stl: g $(STL_OBJ)
bgl: g $(BGL_OBJ)
rmtests:
rm -rf $(TESTS_CPP) $(TESTS_OBJ) $(TESTS_EXE)
clean:
rm -rf g *.o *.cmo *.cmx *.mli d *.cmi parser.ml lexer.ml *~ *.output tmp.i tmp_wrap.g
stlclean:
rm -rf $(STL_CPP) $(STL_OBJ) stl/*.tmp stl/*.fwd stl/*.cpp
bglclean:
rm -rf $(BGL_CPP) $(BGL_OBJ) bgl/*.tmp bgl/*.fwd bgl/*.o bgl/*.cpp bgl/*.exe
testclean:
rm -rf $(TESTS_CPP) $(TESTS_OBJ) $(TESTS_EXE) $(TESTS_OK) test/*.tmp test/*.bad test/*.fwd
stltestclean:
rm -rf $(STL_TESTS_CPP) $(STL_TESTS_OBJ) $(STL_TESTS_EXE) $(STL_TESTS_OK) test/*.tmp test/*.bad test/*.fwd
squeaky: clean stlclean bglclean testclean
bgl/queue_test.exe: bgl/queue_test.o bgl/queue.o g_stdlib.o
$(CXX) g_stdlib.o $(STL_OBJ) $(GC_DIR)/gc.a bgl/queue.o bgl/queue_test.o $< -o $*.exe
bgl/adjacency_list_test.exe: bgl/adjacency_list_test.o g_stdlib.o $(STL_OBJ) $(BGL_OBJ)
$(CXX) g_stdlib.o $(STL_OBJ) $(BGL_OBJ) $(GC_DIR)/gc.a bgl/adjacency_list_test.o -o $*.exe
bgl/breadth_first_search_test.exe: bgl/breadth_first_search_test.o $(STL_OBJ) $(BGL_OBJ) g_stdlib.o
$(CXX) g_stdlib.o $(STL_OBJ) $(BGL_OBJ) $(GC_DIR)/gc.a bgl/breadth_first_search_test.o -o $*.exe