a4df85aa9e 2011-01-15 stephan: #!/usr/bin/make -f 2b6f9b149f 2011-01-17 stephan: ######################################################################## 2b6f9b149f 2011-01-17 stephan: # Main makefile for libcson. 2b6f9b149f 2011-01-17 stephan: # 2b6f9b149f 2011-01-17 stephan: # Important targets for users not hacking this source tree: 2b6f9b149f 2011-01-17 stephan: # 2b6f9b149f 2011-01-17 stephan: # all: do everything 2b6f9b149f 2011-01-17 stephan: # amal: build the amalgamation build 2b6f9b149f 2011-01-17 stephan: # run: run tests (it's not called 'test' because we have a binary with 2b6f9b149f 2011-01-17 stephan: # that name) 2b6f9b149f 2011-01-17 stephan: ######################################################################## a4df85aa9e 2011-01-15 stephan: include config.make # see that file for certain configuration options. a4df85aa9e 2011-01-15 stephan: a4df85aa9e 2011-01-15 stephan: libcson.LIB.OBJECTS := \ a4df85aa9e 2011-01-15 stephan: cson.o \ a4df85aa9e 2011-01-15 stephan: parser/JSON_parser.o a4df85aa9e 2011-01-15 stephan: a4df85aa9e 2011-01-15 stephan: libcson.LIB.OBJECTS := $(patsubst %,$(SRC_DIR)/%,$(libcson.LIB.OBJECTS)) a4df85aa9e 2011-01-15 stephan: cson.o: cson_list.h a4df85aa9e 2011-01-15 stephan: cson_list.h: a4df85aa9e 2011-01-15 stephan: a4df85aa9e 2011-01-15 stephan: libcson.DLL.OBJECTS := $(libcson.LIB.OBJECTS) a4df85aa9e 2011-01-15 stephan: libcson.DLL: $(libcson.LIB.OBJECTS) a4df85aa9e 2011-01-15 stephan: $(eval $(call ShakeNMake.CALL.RULES.LIBS,libcson)) a4df85aa9e 2011-01-15 stephan: $(eval $(call ShakeNMake.CALL.RULES.DLLS,libcson)) a4df85aa9e 2011-01-15 stephan: 2b6f9b149f 2011-01-17 stephan: test.BIN.OBJECTS := test.o a4df85aa9e 2011-01-15 stephan: $(eval $(call ShakeNMake.EVAL.RULES.BIN,test)) a4df85aa9e 2011-01-15 stephan: test.o: CFLAGS+=-std=c99 2ce0666163 2011-01-16 stephan: test.o: cson.c cson_list.h # test.c imports these files directly d1fe669e3e 2011-01-15 stephan: d1fe669e3e 2011-01-15 stephan: json-parser.BIN.OBJECTS := json-parser.o $(libcson.LIB.OBJECTS) d1fe669e3e 2011-01-15 stephan: #json-parser.BIN.LDFLAGS += -L. -lcson d1fe669e3e 2011-01-15 stephan: json-parser.o: CFLAGS+=-std=c99 d1fe669e3e 2011-01-15 stephan: $(eval $(call ShakeNMake.EVAL.RULES.BIN,json-parser)) d1fe669e3e 2011-01-15 stephan: a4df85aa9e 2011-01-15 stephan: a4df85aa9e 2011-01-15 stephan: $(test.BIN): $(libcson.LIB) d1fe669e3e 2011-01-15 stephan: $(json-parser.BIN): $(libcson.DLL) d1fe669e3e 2011-01-15 stephan: all: $(test.BIN) $(json-parser.BIN) d1fe669e3e 2011-01-15 stephan: 2b6f9b149f 2011-01-17 stephan: ######################################################################## 2b6f9b149f 2011-01-17 stephan: # Process cson_list.h in the same way cson.c does internally. We need 2b6f9b149f 2011-01-17 stephan: # this for building $(AMAL_C). baf44f31ab 2011-01-17 stephan: LISTS_H := cson_lists.h baf44f31ab 2011-01-17 stephan: $(LISTS_H): cson_list.h Makefile baf44f31ab 2011-01-17 stephan: @echo "Creating $@..." f292024894 2011-01-17 stephan: @echo "/* Auto-generated from cson_list.h. Edit at your own risk! */" > $@ baf44f31ab 2011-01-17 stephan: @gcc -E -DLIST_T=cson_value_list -DVALUE_T=cson_value\ \* cson_list.h -DVALUE_T_IS_PTR=1 < cson_list.h >> $@ baf44f31ab 2011-01-17 stephan: @gcc -E -DLIST_T=cson_kvp_list -DVALUE_T=cson_kvp\ \* cson_list.h -DVALUE_T_IS_PTR=1 < cson_list.h >> $@ baf44f31ab 2011-01-17 stephan: @sed -e '/^#/d' < $@ > $@.foo && mv $@.foo $@ baf44f31ab 2011-01-17 stephan: test.o: $(LISTS_H) # b/c test.c #includes cson.c directly baf44f31ab 2011-01-17 stephan: cson.o: $(LISTS_H) baf44f31ab 2011-01-17 stephan: CLEAN_FILES += $(LISTS_H) baf44f31ab 2011-01-17 stephan: baf44f31ab 2011-01-17 stephan: ######################################################################## baf44f31ab 2011-01-17 stephan: # Amalgamation build: stuff all required public headers into a single baf44f31ab 2011-01-17 stephan: # megaheader and all required sources (and private headers) into a baf44f31ab 2011-01-17 stephan: # single C file. This requires a good deal of hackery due to how baf44f31ab 2011-01-17 stephan: # cson.c uses cson_list.h to create list implementation code. baf44f31ab 2011-01-17 stephan: AMAL_C := cson_amalgamation.c baf44f31ab 2011-01-17 stephan: AMAL_H := cson_amalgamation.h baf44f31ab 2011-01-17 stephan: AMAL_C_SRC := \ baf44f31ab 2011-01-17 stephan: parser/JSON_parser.h \ baf44f31ab 2011-01-17 stephan: parser/JSON_parser.c \ baf44f31ab 2011-01-17 stephan: cson.c baf44f31ab 2011-01-17 stephan: AMAL_H_SRC := \ baf44f31ab 2011-01-17 stephan: include/wh/cson/cson.h baf44f31ab 2011-01-17 stephan: baf44f31ab 2011-01-17 stephan: $(AMAL_H): $(AMAL_H_SRC) Makefile baf44f31ab 2011-01-17 stephan: @echo "Creating $@..." baf44f31ab 2011-01-17 stephan: @for i in $(AMAL_H_SRC); do \ baf44f31ab 2011-01-17 stephan: cat $$i; \ baf44f31ab 2011-01-17 stephan: done > $@ 54251b81b7 2011-01-16 stephan: baf44f31ab 2011-01-17 stephan: $(AMAL_C): $(LISTS_H) $(AMAL_C_SRC) $(AMAL_H) baf44f31ab 2011-01-17 stephan: @echo "Creating $@..." baf44f31ab 2011-01-17 stephan: @for i in $(AMAL_C_SRC); do \ baf44f31ab 2011-01-17 stephan: cat $$i; \ baf44f31ab 2011-01-17 stephan: done > $@ baf44f31ab 2011-01-17 stephan: @sed \ baf44f31ab 2011-01-17 stephan: -e 's/.*include.*cson\.h[">]/#include "cson_amalgamation.h"/' \ baf44f31ab 2011-01-17 stephan: -e '/JSON_parser\.[ch]/d' \ baf44f31ab 2011-01-17 stephan: -e '/cson_lists\.h/r cson_lists.h' -e 'x;$$G' -e '/cson_lists\.h/d' \ baf44f31ab 2011-01-17 stephan: < $@ > $@.foo baf44f31ab 2011-01-17 stephan: @mv $@.foo $@ baf44f31ab 2011-01-17 stephan: @echo "Amalgamation built:"; \ baf44f31ab 2011-01-17 stephan: ls -la $(AMAL_C) $(AMAL_H); \ baf44f31ab 2011-01-17 stephan: echo "To compile it try:"; \ 437bfb9ffa 2011-01-17 stephan: echo -e '\tgcc -std=c89 -c -pedantic -Wall -Werror -fPIC $(AMAL_C)'; \ baf44f31ab 2011-01-17 stephan: echo "Or, with tcc:"; \ 437bfb9ffa 2011-01-17 stephan: echo -e '\ttcc -Wall -Werror -c $(AMAL_C)' b4dde6ec58 2011-01-17 stephan: amal-c: $(AMAL_C) 437bfb9ffa 2011-01-17 stephan: @echo "Trying to compile $(AMAL_C)..." 10842feccf 2011-01-26 stephan: gcc -std=c89 -c -ansi -pedantic -Wall -Werror -fPIC $(AMAL_C) 437bfb9ffa 2011-01-17 stephan: @tcc=$$(which tcc); [ x = "x$$tcc" ] && exit 0; \ 437bfb9ffa 2011-01-17 stephan: set -x; $$tcc -Wall -Werror -c $(AMAL_C) baf44f31ab 2011-01-17 stephan: amal: $(AMAL_C) baf44f31ab 2011-01-17 stephan: CLEAN_FILES += $(AMAL_C) $(AMAL_H) 54251b81b7 2011-01-16 stephan: 54251b81b7 2011-01-16 stephan: ######################################################################## 54251b81b7 2011-01-16 stephan: # create emacs tags... 54251b81b7 2011-01-16 stephan: bin_etags := $(shell which etags) 54251b81b7 2011-01-16 stephan: ifneq (,$(bin_etags)) 54251b81b7 2011-01-16 stephan: tagfile := TAGS 54251b81b7 2011-01-16 stephan: FORCE: 54251b81b7 2011-01-16 stephan: .PHONY: FORCE tags 54251b81b7 2011-01-16 stephan: $(tagfile): FORCE 54251b81b7 2011-01-16 stephan: find . -name '*.[ch]' -print | $(bin_etags) -f $@ - 54251b81b7 2011-01-16 stephan: tags: $(tagfile) 54251b81b7 2011-01-16 stephan: CLEAN_FILES += $(tagfile) b4dde6ec58 2011-01-17 stephan: #cson.o: $(tagfile) 54251b81b7 2011-01-16 stephan: endif 54251b81b7 2011-01-16 stephan: # ^^^ bin_etags 2b6f9b149f 2011-01-17 stephan: 2b6f9b149f 2011-01-17 stephan: ######################################################################## 2b6f9b149f 2011-01-17 stephan: # run sanity tests... 2b6f9b149f 2011-01-17 stephan: run: $(json-parser.BIN) 2b6f9b149f 2011-01-17 stephan: @echo "Running MUST-PASS tests..." 437bfb9ffa 2011-01-17 stephan: @echo -e "\t./$(test.BIN)"; \ 437bfb9ffa 2011-01-17 stephan: ./$(test.BIN) 1>/dev/null 2>&1 \ 437bfb9ffa 2011-01-17 stephan: || { x=$$?; echo "Basic test app failed with code [$$x]."; exit $$x; } 437bfb9ffa 2011-01-17 stephan: @for i in json/pass-*.json checker/test/pass*.json; do \ 2b6f9b149f 2011-01-17 stephan: echo -e "\t$$i"; \ 2b6f9b149f 2011-01-17 stephan: ./$(json-parser.BIN) -f $$i 1>/dev/null || exit; \ 2b6f9b149f 2011-01-17 stephan: done 2b6f9b149f 2011-01-17 stephan: @echo "Running MUST-FAIL tests..." 437bfb9ffa 2011-01-17 stephan: @for i in json/fail-*.json checker/test/fail*.json; do \ 2b6f9b149f 2011-01-17 stephan: echo -e "\t$$i"; \ 2b6f9b149f 2011-01-17 stephan: ./$(json-parser.BIN) -f $$i 1>/dev/null 2>&1 && exit; \ 2b6f9b149f 2011-01-17 stephan: done; \ 2b6f9b149f 2011-01-17 stephan: true 2b6f9b149f 2011-01-17 stephan: 2b6f9b149f 2011-01-17 stephan: $(filter-out cson_amalgamation.o,$(wildcard *.o)): Makefile config.make common.make