Skip to content

Instantly share code, notes, and snippets.

@postwait
Created February 20, 2015 22:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save postwait/d40e712e9575ff93ba5f to your computer and use it in GitHub Desktop.
Save postwait/d40e712e9575ff93ba5f to your computer and use it in GitHub Desktop.
.SUFFIXES: .lo
include Makefile.version
CC=gcc
LD=gcc
LN_S=ln -s
COPT=-O5
TAR=tar
PREFIX=/usr/local
INCLUDEDIR=$(PREFIX)/include
LIBDIR=$(PREFIX)/lib
BINDIR=$(PREFIX)/bin
SBINDIR=$(PREFIX)/sbin
INSTALL=install
SHLD=$(LD)
LIBEXT=so
SHCFLAGS=-fPIC
OS=$(shell uname)
Q=
ifeq ($(V),)
Q=@
endif
VENDOR_CFLAGS=
VENDOR_LDFLAGS=
EXTRA_CFLAGS=$(VENDOR_CFLAGS) -g -I./api -D_REENTRANT -D_BSD_SOURCE -D_XOPEN_SOURCE=600 -std=gnu99 -pedantic -Wall
#EXTRA_CFLAGS+=-DDEBUG
HEADERS=yajl_common.h yajl_gen.h yajl_parse.h yajl_tree.h yajl_version.h
YAJL_SOURCE=yajl.c yajl_alloc.c yajl_buf.c yajl_encode.c yajl_gen.c yajl_lex.c yajl_parser.c yajl_tree.c yajl_version.c
YAJL_OBJ=$(YAJL_SOURCE:%.c=%.o)
YAJL_OBJ_LO=$(YAJL_OBJ:%.o=%.lo)
ifeq ($(OS),SunOS)
LIBLIBS+=
EXTRA_CFLAGS+=-D__EXTENSIONS__ -DHAVE_UINTXX_T -DSIZEOF_LONG_LONG_INT=8 -D_REENTRANT -DHAVE_GETHOSTBYNAME_R
EXTRA_SHLDFLAGS=
else
ifeq ($(OS),Darwin)
COPT=-O3
EXTRA_CFLAGS+=-D_DARWIN_C_SOURCE -DHAVE_U_INTXX_T -DHAVE_INTXX_T -DHAVE_U_INT64_T -DHAVE_INT64_T \
-Wno-dollar-in-identifier-extension -Wno-gnu-statement-expression -Wno-deprecated-declarations
#EXTRA_CFLAGS+=-Weverything
else
ifeq ($(OS),Linux)
LIBLIBS+=
endif
endif
endif
all: libyajl.$(LIBEXT)
include Makefile.depend
SHLDFLAGS=$(VENDOR_LDFLAGS) -shared -L$(LIBDIR)
ifeq ($(OS),Darwin)
SHLDFLAGS+=-current_version $(YAJL_MAJOR).$(YAJL_MINOR).$(YAJL_MICRO) -install_name $(LIBDIR)/libyajl.$(YAJL_MAJOR).dylib
SOLONG=libyajl.$(YAJL_MAJOR).$(YAJL_MINOR).$(YAJL_MICRO).dylib
SOSHORT=libyajl.$(YAJL_MAJOR).dylib
LIBNAME=libyajl.dylib
else
SHLDFLAGS+=-R$(LIBDIR)
SHLDFLAGS+=-Wl,-soname,libyajl.so.$(YAJL_MAJOR)
SOLONG=libyajl.so.$(YAJL_MAJOR).$(YAJL_MINOR).$(YAJL_MICRO)
SOSHORT=libyajl.so.$(YAJL_MAJOR)
LIBNAME=libyajl.so
endif
CFLAGS+=$(EXTRA_CFLAGS)
SHCFLAGS+=$(EXTRA_CFLAGS)
LDFLAGS+=$(VENDOR_LDFLAGS)
api/yajl:
(cd api && ln -s -f . yajl)
$(YAJL_OBJ_LO): api/yajl
api/yajl_version.h: api/yajl_version.h.cmake
sed -e 's/$${YAJL_MAJOR}/$(YAJL_MAJOR)/g;' \
-e 's/$${YAJL_MINOR}/$(YAJL_MINOR)/g;' \
-e 's/$${YAJL_MICRO}/$(YAJL_MICRO)/g;' < \
$< > $@
libyajl.$(LIBEXT): $(YAJL_OBJ_LO)
@echo " - creating $@"
$(Q)$(SHLD) $(EXTRA_SHLDFLAGS) $(SHLDFLAGS) -o $@ $(YAJL_OBJ_LO) $(LIBLIBS)
.c.lo: $<
@echo " - compiling $<"
$(Q)$(CC) $(CPPFLAGS) $(SHCFLAGS) -o $@ -c $<
Makefile.depend:
@echo " - make depend"
$(Q)$(CC) $(CPPFLAGS) $(CFLAGS) -MM *.c > Makefile.depend
install:
$(INSTALL) -d $(DESTDIR)/$(INCLUDEDIR)/yajl
for i in $(HEADERS) ; do \
$(INSTALL) -m 0444 api/$$i $(DESTDIR)/$(INCLUDEDIR)/yajl/$$i.h ; \
done
$(INSTALL) -d $(DESTDIR)/$(LIBDIR)
$(INSTALL) -m 555 libyajl.$(LIBEXT) $(DESTDIR)/$(LIBDIR)/$(SOLONG)
$(LN_S) -s -f $(SOLONG) $(DESTDIR)/$(LIBDIR)/$(SOSHORT)
$(LN_S) -s -f $(SOLONG) $(DESTDIR)/$(LIBDIR)/$(LIBNAME)
clean:
rm -f *.lo *.$(LIBEXT)
yajl_version.c: api/yajl_version.h
Makefile.version: ../CMakeLists.txt
tr '()' ' ' < $< | awk '/YAJL_/{print $$2"="$$3;}' > $@
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment