Skip to content

Commit ec7bebe

Browse files
committed
add configure and Makefile
recast unsigned char * to silence strlen() compiler warning
1 parent 79f2062 commit ec7bebe

File tree

3 files changed

+751
-1
lines changed

3 files changed

+751
-1
lines changed

Makefile

Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
# Makefile for use with GNU make
2+
3+
THIS_MAKEFILE_DIR:=$(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
4+
THIS_DIR:=$(shell basename "${THIS_MAKEFILE_DIR}")
5+
THIS_MAKEFILE:=$(lastword $(MAKEFILE_LIST))
6+
7+
.POSIX:
8+
.SUFFIXES:
9+
.SUFFIXES: .o .c .a
10+
11+
CONFIGFILE ?= config.mk
12+
$(info Using config file ${CONFIGFILE})
13+
include ${CONFIGFILE}
14+
15+
CC ?= cc
16+
AWK ?= awk
17+
AR ?= ar
18+
RANLIB ?= ranlib
19+
SED ?= sed
20+
21+
WIN=
22+
DEBUG=0
23+
ifeq ($(WIN),)
24+
WIN=0
25+
ifneq ($(findstring w64,$(CC)),) # e.g. mingw64
26+
WIN=1
27+
endif
28+
endif
29+
30+
CFLAGS+=${CFLAG_O} ${CFLAGS_OPT}
31+
CFLAGS+=${CFLAGS_AUTO}
32+
CFLAGS+=-I.
33+
34+
ifeq ($(VERBOSE),1)
35+
CFLAGS+= ${CFLAGS_VECTORIZE_OPTIMIZED} ${CFLAGS_VECTORIZE_MISSED} ${CFLAGS_VECTORIZE_ALL}
36+
endif
37+
38+
VERSION= $(shell (git describe --always --dirty --tags 2>/dev/null || echo "v0.0.0-jsonwriter") | sed 's/^v//')
39+
40+
ifneq ($(findstring emcc,$(CC)),) # emcc
41+
NO_THREADING=1
42+
endif
43+
44+
ifeq ($(NO_THREADING),1)
45+
CFLAGS+= -DNO_THREADING
46+
endif
47+
48+
ifeq ($(DEBUG),0)
49+
CFLAGS+= -DNDEBUG -O3 ${CFLAGS_LTO}
50+
else
51+
CFLAGS += ${CFLAGS_DEBUG}
52+
endif
53+
54+
ifeq ($(DEBUG),1)
55+
DBG_SUBDIR+=dbg
56+
else
57+
DBG_SUBDIR+=rel
58+
endif
59+
60+
ifeq ($(WIN),0)
61+
BUILD_SUBDIR=$(shell uname)/${DBG_SUBDIR}
62+
WHICH=which
63+
EXE=
64+
CFLAGS+= -fPIC
65+
else
66+
BUILD_SUBDIR=win/${DBG_SUBDIR}
67+
WHICH=where
68+
EXE=.exe
69+
CFLAGS+= -fpie
70+
CFLAGS+= -D__USE_MINGW_ANSI_STDIO -D_ISOC99_SOURCE -Wl,--strip-all
71+
endif
72+
73+
CFLAGS+= -std=gnu11 -Wno-gnu-statement-expression -Wshadow -Wall -Wextra -Wno-missing-braces -pedantic -D_GNU_SOURCE
74+
75+
CFLAGS+= ${JSONWRITER_OPTIONAL_CFLAGS}
76+
77+
CCBN=$(shell basename ${CC})
78+
THIS_LIB_BASE=$(shell cd .. && pwd)
79+
INCLUDE_DIR=${THIS_LIB_BASE}/include
80+
BUILD_DIR=${THIS_LIB_BASE}/build/${BUILD_SUBDIR}/${CCBN}
81+
82+
NO_UTF8_CHECK=1
83+
84+
LIB_SUFFIX?=
85+
JSONWRITER_OBJ=${BUILD_DIR}/objs/jsonwriter.o
86+
LIBJSONWRITER_A=libjsonwriter${LIB_SUFFIX}.a
87+
LIBJSONWRITER=${BUILD_DIR}/lib/${LIBJSONWRITER_A}
88+
LIBJSONWRITER_INSTALL=${LIBDIR}/${LIBJSONWRITER_A}
89+
90+
JSONWRITER_OBJ_OPTS=
91+
ifeq ($(NO_UTF8_CHECK),1)
92+
JSONWRITER_OBJ_OPTS+= -DNO_UTF8_CHECK
93+
endif
94+
95+
help:
96+
@echo "Make options:"
97+
@echo " `basename ${MAKE}` build|install|uninstall|clean"
98+
@echo
99+
@echo "Optional make variables:"
100+
@echo " [CONFIGFILE=config.mk] [NO_UTF8_CHECK=1] [VERBOSE=1] [LIBDIR=${LIBDIR}] [INCLUDEDIR=${INCLUDEDIR}] [LIB_SUFFIX=]"
101+
@echo
102+
103+
build: ${LIBJSONWRITER}
104+
105+
${LIBJSONWRITER}: ${JSONWRITER_OBJ}
106+
@mkdir -p `dirname "$@"`
107+
@rm -f $@
108+
$(AR) rcv $@ $?
109+
$(RANLIB) $@
110+
$(AR) -t $@ # check it is there
111+
@echo Built $@
112+
113+
install: ${LIBJSONWRITER_INSTALL}
114+
@mkdir -p $(INCLUDEDIR)
115+
@cp -pR *.h $(INCLUDEDIR)
116+
@echo "include files copied to $(INCLUDEDIR)"
117+
118+
${LIBJSONWRITER_INSTALL}: ${LIBJSONWRITER}
119+
@mkdir -p `dirname "$@"`
120+
@cp -p ${LIBJSONWRITER} "$@"
121+
@echo "libjsonwriter installed to $@"
122+
123+
uninstall:
124+
@rm -rf ${INCLUDEDIR}/jsonwriter*
125+
rm -f ${LIBDIR}/libjsonwriter*
126+
127+
clean:
128+
rm -rf ${BUILD_DIR}/objs ${LIBJSONWRITER}
129+
130+
.PHONY: build install uninstall clean ${LIBJSONWRITER_INSTALL}
131+
132+
${BUILD_DIR}/objs/jsonwriter.o: jsonwriter.c jsonwriter.h
133+
@mkdir -p `dirname "$@"`
134+
${CC} ${CFLAGS} -DJSONWRITER_VERSION=\"${VERSION}\" -I${INCLUDE_DIR} ${JSONWRITER_OBJ_OPTS} -o $@ -c $<

0 commit comments

Comments
 (0)