1262973SbaptCC ?= gcc
2262973SbaptDESTDIR ?= /usr/local
3262973SbaptLD ?= gcc
4262973SbaptC_COMMON_FLAGS ?= -fPIC -Wall -W -Wno-unused-parameter -Wno-pointer-sign -I./include -I./uthash -I./src
5262973SbaptMAJOR_VERSION = 0
6262973SbaptMINOR_VERSION = 2
7263648SbaptPATCH_VERSION = 9
8262973SbaptVERSION = "$(MAJOR_VERSION).$(MINOR_VERSION).$(PATCH_VERSION)"
9262973SbaptSONAME = libucl.dll
10262973SbaptOBJDIR ?= .obj
11262973SbaptTESTDIR ?= tests
12262973SbaptSRCDIR ?= src
13262973SbaptINCLUDEDIR ?= include
14262973SbaptMKDIR ?= mkdir
15262973SbaptINSTALL ?= install
16262973SbaptRM ?= rm
17262973SbaptRMDIR ?= rmdir
18262973Sbaptifeq (Windows_NT, $(OS))
19262973SbaptLN ?= ln
20262973Sbaptelse
21262973SbaptLN ?= rem ln
22262973Sbaptendif
23262973SbaptLD_SHARED_FLAGS ?= -Wl,-soname,$(SONAME) -shared -lm
24262973SbaptLD_UCL_FLAGS ?= -L$(OBJDIR) -Wl,-rpath,$(OBJDIR) -lucl
25262973SbaptLD_ADD ?= -lrt
26262973SbaptCOPT_FLAGS ?= -O2
27263648SbaptHDEPS = $(SRCDIR)/ucl_hash.h \
28263648Sbapt		$(SRCDIR)/ucl_chartable.h \
29263648Sbapt		$(SRCDIR)/ucl_internal.h \
30263648Sbapt		$(INCLUDEDIR)/ucl.h \
31307790Sbapt		$(SRCDIR)/mum.h
32263648SbaptOBJECTS = $(OBJDIR)/ucl_hash.o \
33263648Sbapt		$(OBJDIR)/ucl_util.o \
34263648Sbapt		$(OBJDIR)/ucl_parser.o \
35263648Sbapt		$(OBJDIR)/ucl_emitter.o \
36275223Sbapt		$(OBJDIR)/ucl_emitter_utils.o \
37307790Sbapt		$(OBJDIR)/ucl_schema.o
38262973Sbapt
39262973Sbaptall: $(OBJDIR) $(OBJDIR)/$(SONAME)
40262973Sbapt
41262973Sbapt$(OBJDIR)/$(SONAME): $(OBJECTS)
42262973Sbapt	$(CC) -o $(OBJDIR)/$(SONAME) $(OBJECTS) $(LD_SHARED_FLAGS) $(LDFLAGS) $(SSL_LIBS) $(FETCH_LIBS)
43262973Sbapt
44262973Sbapt$(OBJDIR):
45262973Sbapt	@$(MKDIR) -p $(OBJDIR)
46262973Sbapt
47262973Sbapt# Compile rules
48262973Sbapt$(OBJDIR)/ucl_util.o: $(SRCDIR)/ucl_util.c $(HDEPS)
49262973Sbapt	$(CC) -o $(OBJDIR)/ucl_util.o $(CPPFLAGS) $(COPT_FLAGS) $(CFLAGS) $(C_COMMON_FLAGS) $(SSL_CFLAGS) $(FETCH_FLAGS) -c $(SRCDIR)/ucl_util.c
50262973Sbapt$(OBJDIR)/ucl_parser.o: $(SRCDIR)/ucl_parser.c $(HDEPS)
51262973Sbapt	$(CC) -o $(OBJDIR)/ucl_parser.o $(CPPFLAGS) $(COPT_FLAGS) $(CFLAGS) $(C_COMMON_FLAGS) $(SSL_CFLAGS) $(FETCH_FLAGS) -c $(SRCDIR)/ucl_parser.c
52262973Sbapt$(OBJDIR)/ucl_emitter.o: $(SRCDIR)/ucl_emitter.c $(HDEPS)
53262973Sbapt	$(CC) -o $(OBJDIR)/ucl_emitter.o $(CPPFLAGS) $(COPT_FLAGS) $(CFLAGS) $(C_COMMON_FLAGS) $(SSL_CFLAGS) $(FETCH_FLAGS) -c $(SRCDIR)/ucl_emitter.c
54275223Sbapt$(OBJDIR)/ucl_emitter_utils.o: $(SRCDIR)/ucl_emitter_utils.c $(HDEPS)
55275223Sbapt	$(CC) -o $(OBJDIR)/ucl_emitter_utils.o $(CPPFLAGS) $(COPT_FLAGS) $(CFLAGS) $(C_COMMON_FLAGS) $(SSL_CFLAGS) $(FETCH_FLAGS) -c $(SRCDIR)/ucl_emitter_utils.c
56262973Sbapt$(OBJDIR)/ucl_hash.o: $(SRCDIR)/ucl_hash.c $(HDEPS)
57262973Sbapt	$(CC) -o $(OBJDIR)/ucl_hash.o $(CPPFLAGS) $(COPT_FLAGS) $(CFLAGS) $(C_COMMON_FLAGS) $(SSL_CFLAGS) $(FETCH_FLAGS) -c $(SRCDIR)/ucl_hash.c
58263648Sbapt$(OBJDIR)/ucl_schema.o: $(SRCDIR)/ucl_schema.c $(HDEPS)
59263648Sbapt	$(CC) -o $(OBJDIR)/ucl_schema.o $(CPPFLAGS) $(COPT_FLAGS) $(CFLAGS) $(C_COMMON_FLAGS) $(SSL_CFLAGS) $(FETCH_FLAGS) -c $(SRCDIR)/ucl_schema.c
60262973Sbapt$(OBJDIR)/xxhash.o: $(SRCDIR)/xxhash.c $(HDEPS)
61262973Sbapt	$(CC) -o $(OBJDIR)/xxhash.o $(CPPFLAGS) $(COPT_FLAGS) $(CFLAGS) $(C_COMMON_FLAGS) $(SSL_CFLAGS) $(FETCH_FLAGS) -c $(SRCDIR)/xxhash.c
62262973Sbapt
63262973Sbaptclean:
64262973Sbapt	$(RM) $(OBJDIR)/*.o $(OBJDIR)/$(SONAME) $(OBJDIR)/$(SONAME) $(OBJDIR)/chargen $(OBJDIR)/test_basic $(OBJDIR)/test_speed $(OBJDIR)/objdump $(OBJDIR)/test_generate
65262973Sbapt	$(RMDIR) $(OBJDIR)
66275223Sbapt
67262973Sbapt# Utils
68262973Sbapt
69262973Sbaptchargen: utils/chargen.c $(OBJDIR)/$(SONAME)
70262973Sbapt	$(CC) -o $(OBJDIR)/chargen $(CPPFLAGS) $(COPT_FLAGS) $(CFLAGS) $(C_COMMON_FLAGS) $(SSL_CFLAGS) $(FETCH_FLAGS) $(LDFLAGS) utils/chargen.c
71262973Sbaptobjdump: utils/objdump.c $(OBJDIR)/$(SONAME)
72262973Sbapt	$(CC) -o $(OBJDIR)/objdump $(CPPFLAGS) $(COPT_FLAGS) $(CFLAGS) $(C_COMMON_FLAGS) $(SSL_CFLAGS) $(FETCH_FLAGS) $(LDFLAGS) utils/objdump.c $(LD_UCL_FLAGS)
73262973Sbapt
74262973Sbapt# Tests
75262973Sbapt
76262973Sbapttest: $(OBJDIR) $(OBJDIR)/$(SONAME) $(OBJDIR)/test_basic $(OBJDIR)/test_speed $(OBJDIR)/test_generate
77262973Sbapt
78262973Sbaptrun-test: test
79262973Sbapt	TEST_DIR=$(TESTDIR) $(TESTDIR)/run_tests.sh $(OBJDIR)/test_basic $(OBJDIR)/test_speed $(OBJDIR)/test_generate
80275223Sbapt
81262973Sbapt$(OBJDIR)/test_basic: $(TESTDIR)/test_basic.c $(OBJDIR)/$(SONAME)
82262973Sbapt	$(CC) -o $(OBJDIR)/test_basic $(CPPFLAGS) $(COPT_FLAGS) $(CFLAGS) $(C_COMMON_FLAGS) $(SSL_CFLAGS) $(FETCH_FLAGS) $(LDFLAGS) $(TESTDIR)/test_basic.c $(LD_UCL_FLAGS)
83262973Sbapt$(OBJDIR)/test_speed: $(TESTDIR)/test_speed.c $(OBJDIR)/$(SONAME)
84262973Sbapt	$(CC) -o $(OBJDIR)/test_speed $(CPPFLAGS) $(COPT_FLAGS) $(CFLAGS) $(C_COMMON_FLAGS) $(SSL_CFLAGS) $(FETCH_FLAGS) $(LDFLAGS) $(TESTDIR)/test_speed.c $(LD_UCL_FLAGS) $(LD_ADD)
85262973Sbapt$(OBJDIR)/test_generate: $(TESTDIR)/test_generate.c $(OBJDIR)/$(SONAME)
86262973Sbapt	$(CC) -o $(OBJDIR)/test_generate $(CPPFLAGS) $(COPT_FLAGS) $(CFLAGS) $(C_COMMON_FLAGS) $(SSL_CFLAGS) $(FETCH_FLAGS) $(LDFLAGS) $(TESTDIR)/test_generate.c $(LD_UCL_FLAGS) $(LD_ADD)
87262973Sbapt
88262973Sbaptinstall: $(OBJDIR)/$(SONAME)
89262973Sbapt	$(INSTALL) -m0755 $(SONAME) $(DESTDIR)/lib/$(SONAME)
90262973Sbapt	$(INSTALL) -m0644 include/ucl.h $(DESTDIR)/include/ucl.h
91262973Sbapt
92262973Sbapt.PHONY: clean $(OBJDIR)
93