19750e409Sopenharmony_ciCJSON_OBJ = cJSON.o
29750e409Sopenharmony_ciUTILS_OBJ = cJSON_Utils.o
39750e409Sopenharmony_ciCJSON_LIBNAME = libcjson
49750e409Sopenharmony_ciUTILS_LIBNAME = libcjson_utils
59750e409Sopenharmony_ciCJSON_TEST = cJSON_test
69750e409Sopenharmony_ci
79750e409Sopenharmony_ciCJSON_TEST_SRC = cJSON.c test.c
89750e409Sopenharmony_ci
99750e409Sopenharmony_ciLDLIBS = -lm
109750e409Sopenharmony_ci
119750e409Sopenharmony_ciLIBVERSION = 1.7.17
129750e409Sopenharmony_ciCJSON_SOVERSION = 1
139750e409Sopenharmony_ciUTILS_SOVERSION = 1
149750e409Sopenharmony_ci
159750e409Sopenharmony_ciCJSON_SO_LDFLAG=-Wl,-soname=$(CJSON_LIBNAME).so.$(CJSON_SOVERSION)
169750e409Sopenharmony_ciUTILS_SO_LDFLAG=-Wl,-soname=$(UTILS_LIBNAME).so.$(UTILS_SOVERSION)
179750e409Sopenharmony_ci
189750e409Sopenharmony_ciPREFIX ?= /usr/local
199750e409Sopenharmony_ciINCLUDE_PATH ?= include/cjson
209750e409Sopenharmony_ciLIBRARY_PATH ?= lib
219750e409Sopenharmony_ci
229750e409Sopenharmony_ciINSTALL_INCLUDE_PATH = $(DESTDIR)$(PREFIX)/$(INCLUDE_PATH)
239750e409Sopenharmony_ciINSTALL_LIBRARY_PATH = $(DESTDIR)$(PREFIX)/$(LIBRARY_PATH)
249750e409Sopenharmony_ci
259750e409Sopenharmony_ciINSTALL ?= cp -a
269750e409Sopenharmony_ci
279750e409Sopenharmony_ciCC = gcc -std=c89
289750e409Sopenharmony_ci
299750e409Sopenharmony_ci# validate gcc version for use fstack-protector-strong
309750e409Sopenharmony_ciMIN_GCC_VERSION = "4.9"
319750e409Sopenharmony_ciGCC_VERSION := "`$(CC) -dumpversion`"
329750e409Sopenharmony_ciIS_GCC_ABOVE_MIN_VERSION := $(shell expr "$(GCC_VERSION)" ">=" "$(MIN_GCC_VERSION)")
339750e409Sopenharmony_ciifeq "$(IS_GCC_ABOVE_MIN_VERSION)" "1"
349750e409Sopenharmony_ci    CFLAGS += -fstack-protector-strong
359750e409Sopenharmony_cielse
369750e409Sopenharmony_ci    CFLAGS += -fstack-protector
379750e409Sopenharmony_ciendif
389750e409Sopenharmony_ci
399750e409Sopenharmony_ciPIC_FLAGS = -fPIC
409750e409Sopenharmony_ciR_CFLAGS = $(PIC_FLAGS) -pedantic -Wall -Werror -Wstrict-prototypes -Wwrite-strings -Wshadow -Winit-self -Wcast-align -Wformat=2 -Wmissing-prototypes -Wstrict-overflow=2 -Wcast-qual -Wc++-compat -Wundef -Wswitch-default -Wconversion $(CFLAGS)
419750e409Sopenharmony_ci
429750e409Sopenharmony_ciuname := $(shell sh -c 'uname -s 2>/dev/null || echo false')
439750e409Sopenharmony_ci
449750e409Sopenharmony_ci#library file extensions
459750e409Sopenharmony_ciSHARED = so
469750e409Sopenharmony_ciSTATIC = a
479750e409Sopenharmony_ci
489750e409Sopenharmony_ci## create dynamic (shared) library on Darwin (base OS for MacOSX and IOS)
499750e409Sopenharmony_ciifeq (Darwin, $(uname))
509750e409Sopenharmony_ci	SHARED = dylib
519750e409Sopenharmony_ci	CJSON_SO_LDFLAG = ""
529750e409Sopenharmony_ci	UTILS_SO_LDFLAG = ""
539750e409Sopenharmony_ciendif
549750e409Sopenharmony_ci
559750e409Sopenharmony_ci#cJSON library names
569750e409Sopenharmony_ciCJSON_SHARED = $(CJSON_LIBNAME).$(SHARED)
579750e409Sopenharmony_ciCJSON_SHARED_VERSION = $(CJSON_LIBNAME).$(SHARED).$(LIBVERSION)
589750e409Sopenharmony_ciCJSON_SHARED_SO = $(CJSON_LIBNAME).$(SHARED).$(CJSON_SOVERSION)
599750e409Sopenharmony_ciCJSON_STATIC = $(CJSON_LIBNAME).$(STATIC)
609750e409Sopenharmony_ci
619750e409Sopenharmony_ci#cJSON_Utils library names
629750e409Sopenharmony_ciUTILS_SHARED = $(UTILS_LIBNAME).$(SHARED)
639750e409Sopenharmony_ciUTILS_SHARED_VERSION = $(UTILS_LIBNAME).$(SHARED).$(LIBVERSION)
649750e409Sopenharmony_ciUTILS_SHARED_SO = $(UTILS_LIBNAME).$(SHARED).$(UTILS_SOVERSION)
659750e409Sopenharmony_ciUTILS_STATIC = $(UTILS_LIBNAME).$(STATIC)
669750e409Sopenharmony_ci
679750e409Sopenharmony_ciSHARED_CMD = $(CC) -shared -o
689750e409Sopenharmony_ci
699750e409Sopenharmony_ci.PHONY: all shared static tests clean install
709750e409Sopenharmony_ci
719750e409Sopenharmony_ciall: shared static tests
729750e409Sopenharmony_ci
739750e409Sopenharmony_cishared: $(CJSON_SHARED) $(UTILS_SHARED)
749750e409Sopenharmony_ci
759750e409Sopenharmony_cistatic: $(CJSON_STATIC) $(UTILS_STATIC)
769750e409Sopenharmony_ci
779750e409Sopenharmony_citests: $(CJSON_TEST)
789750e409Sopenharmony_ci
799750e409Sopenharmony_citest: tests
809750e409Sopenharmony_ci	./$(CJSON_TEST)
819750e409Sopenharmony_ci
829750e409Sopenharmony_ci.c.o:
839750e409Sopenharmony_ci	$(CC) -c $(R_CFLAGS) $<
849750e409Sopenharmony_ci
859750e409Sopenharmony_ci#tests
869750e409Sopenharmony_ci#cJSON
879750e409Sopenharmony_ci$(CJSON_TEST): $(CJSON_TEST_SRC) cJSON.h
889750e409Sopenharmony_ci	$(CC) $(R_CFLAGS) $(CJSON_TEST_SRC)  -o $@ $(LDLIBS) -I.
899750e409Sopenharmony_ci
909750e409Sopenharmony_ci#static libraries
919750e409Sopenharmony_ci#cJSON
929750e409Sopenharmony_ci$(CJSON_STATIC): $(CJSON_OBJ)
939750e409Sopenharmony_ci	$(AR) rcs $@ $<
949750e409Sopenharmony_ci#cJSON_Utils
959750e409Sopenharmony_ci$(UTILS_STATIC): $(UTILS_OBJ)
969750e409Sopenharmony_ci	$(AR) rcs $@ $<
979750e409Sopenharmony_ci
989750e409Sopenharmony_ci#shared libraries .so.1.0.0
999750e409Sopenharmony_ci#cJSON
1009750e409Sopenharmony_ci$(CJSON_SHARED_VERSION): $(CJSON_OBJ)
1019750e409Sopenharmony_ci	$(CC) -shared -o $@ $< $(CJSON_SO_LDFLAG) $(LDFLAGS)
1029750e409Sopenharmony_ci#cJSON_Utils
1039750e409Sopenharmony_ci$(UTILS_SHARED_VERSION): $(UTILS_OBJ)
1049750e409Sopenharmony_ci	$(CC) -shared -o $@ $< $(CJSON_OBJ) $(UTILS_SO_LDFLAG) $(LDFLAGS)
1059750e409Sopenharmony_ci
1069750e409Sopenharmony_ci#objects
1079750e409Sopenharmony_ci#cJSON
1089750e409Sopenharmony_ci$(CJSON_OBJ): cJSON.c cJSON.h
1099750e409Sopenharmony_ci#cJSON_Utils
1109750e409Sopenharmony_ci$(UTILS_OBJ): cJSON_Utils.c cJSON_Utils.h cJSON.h
1119750e409Sopenharmony_ci
1129750e409Sopenharmony_ci
1139750e409Sopenharmony_ci#links .so -> .so.1 -> .so.1.0.0
1149750e409Sopenharmony_ci#cJSON
1159750e409Sopenharmony_ci$(CJSON_SHARED_SO): $(CJSON_SHARED_VERSION)
1169750e409Sopenharmony_ci	ln -s $(CJSON_SHARED_VERSION) $(CJSON_SHARED_SO)
1179750e409Sopenharmony_ci$(CJSON_SHARED): $(CJSON_SHARED_SO)
1189750e409Sopenharmony_ci	ln -s $(CJSON_SHARED_SO) $(CJSON_SHARED)
1199750e409Sopenharmony_ci#cJSON_Utils
1209750e409Sopenharmony_ci$(UTILS_SHARED_SO): $(UTILS_SHARED_VERSION)
1219750e409Sopenharmony_ci	ln -s $(UTILS_SHARED_VERSION) $(UTILS_SHARED_SO)
1229750e409Sopenharmony_ci$(UTILS_SHARED): $(UTILS_SHARED_SO)
1239750e409Sopenharmony_ci	ln -s $(UTILS_SHARED_SO) $(UTILS_SHARED)
1249750e409Sopenharmony_ci
1259750e409Sopenharmony_ci#install
1269750e409Sopenharmony_ci#cJSON
1279750e409Sopenharmony_ciinstall-cjson:
1289750e409Sopenharmony_ci	mkdir -p $(INSTALL_LIBRARY_PATH) $(INSTALL_INCLUDE_PATH)
1299750e409Sopenharmony_ci	$(INSTALL) cJSON.h $(INSTALL_INCLUDE_PATH)
1309750e409Sopenharmony_ci	$(INSTALL) $(CJSON_SHARED) $(CJSON_SHARED_SO) $(CJSON_SHARED_VERSION) $(INSTALL_LIBRARY_PATH)
1319750e409Sopenharmony_ci#cJSON_Utils
1329750e409Sopenharmony_ciinstall-utils: install-cjson
1339750e409Sopenharmony_ci	$(INSTALL) cJSON_Utils.h $(INSTALL_INCLUDE_PATH)
1349750e409Sopenharmony_ci	$(INSTALL) $(UTILS_SHARED) $(UTILS_SHARED_SO) $(UTILS_SHARED_VERSION) $(INSTALL_LIBRARY_PATH)
1359750e409Sopenharmony_ci
1369750e409Sopenharmony_ciinstall: install-cjson install-utils
1379750e409Sopenharmony_ci
1389750e409Sopenharmony_ci#uninstall
1399750e409Sopenharmony_ci#cJSON
1409750e409Sopenharmony_ciuninstall-cjson: uninstall-utils
1419750e409Sopenharmony_ci	$(RM) $(INSTALL_LIBRARY_PATH)/$(CJSON_SHARED)
1429750e409Sopenharmony_ci	$(RM) $(INSTALL_LIBRARY_PATH)/$(CJSON_SHARED_VERSION)
1439750e409Sopenharmony_ci	$(RM) $(INSTALL_LIBRARY_PATH)/$(CJSON_SHARED_SO)
1449750e409Sopenharmony_ci	$(RM) $(INSTALL_INCLUDE_PATH)/cJSON.h
1459750e409Sopenharmony_ci	
1469750e409Sopenharmony_ci#cJSON_Utils
1479750e409Sopenharmony_ciuninstall-utils:
1489750e409Sopenharmony_ci	$(RM) $(INSTALL_LIBRARY_PATH)/$(UTILS_SHARED)
1499750e409Sopenharmony_ci	$(RM) $(INSTALL_LIBRARY_PATH)/$(UTILS_SHARED_VERSION)
1509750e409Sopenharmony_ci	$(RM) $(INSTALL_LIBRARY_PATH)/$(UTILS_SHARED_SO)
1519750e409Sopenharmony_ci	$(RM) $(INSTALL_INCLUDE_PATH)/cJSON_Utils.h
1529750e409Sopenharmony_ci
1539750e409Sopenharmony_ciremove-dir:
1549750e409Sopenharmony_ci	$(if $(wildcard $(INSTALL_LIBRARY_PATH)/*.*),,rmdir $(INSTALL_LIBRARY_PATH))
1559750e409Sopenharmony_ci	$(if $(wildcard $(INSTALL_INCLUDE_PATH)/*.*),,rmdir $(INSTALL_INCLUDE_PATH))
1569750e409Sopenharmony_ci
1579750e409Sopenharmony_ciuninstall: uninstall-utils uninstall-cjson remove-dir
1589750e409Sopenharmony_ci
1599750e409Sopenharmony_ciclean:
1609750e409Sopenharmony_ci	$(RM) $(CJSON_OBJ) $(UTILS_OBJ) #delete object files
1619750e409Sopenharmony_ci	$(RM) $(CJSON_SHARED) $(CJSON_SHARED_VERSION) $(CJSON_SHARED_SO) $(CJSON_STATIC) #delete cJSON
1629750e409Sopenharmony_ci	$(RM) $(UTILS_SHARED) $(UTILS_SHARED_VERSION) $(UTILS_SHARED_SO) $(UTILS_STATIC) #delete cJSON_Utils
1639750e409Sopenharmony_ci	$(RM) $(CJSON_TEST)  #delete test
164