選択できるのは25トピックまでです。
			トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
		
		
		
		
		
			
		
			
				
					
					
						
							250 行
						
					
					
						
							7.2 KiB
						
					
					
				
			
		
		
	
	
							250 行
						
					
					
						
							7.2 KiB
						
					
					
				# Variables:
 | 
						|
prefix = /usr/local
 | 
						|
exec_prefix = $(prefix)
 | 
						|
bindir = $(exec_prefix)/bin
 | 
						|
libdir = $(exec_prefix)/lib
 | 
						|
includedir = $(prefix)/include
 | 
						|
pkgconfigdir = $(libdir)/pkgconfig
 | 
						|
 | 
						|
CFLAGS = -Wall -Wextra
 | 
						|
LDFLAGS_GCSECTIONS = -Wl,--gc-sections
 | 
						|
LDFLAGS += $(if $(gc_sections-pass),$(LDFLAGS_GCSECTIONS))
 | 
						|
LDLIBS = -lm
 | 
						|
 | 
						|
GIT_ARCHIVE = git archive --prefix="$(PACKAGE)/" -9
 | 
						|
INSTALL = install
 | 
						|
INSTALL_DATA = $(INSTALL) -m 644
 | 
						|
INSTALL_PROGRAM = $(INSTALL) -m 755
 | 
						|
QMAKE = qmake
 | 
						|
MKDIR = mkdir -p
 | 
						|
RMDIR = rmdir
 | 
						|
SED = sed
 | 
						|
 | 
						|
# Our sources
 | 
						|
TINYCBOR_HEADERS = src/cbor.h src/cborjson.h src/tinycbor-version.h
 | 
						|
TINYCBOR_FREESTANDING_SOURCES = \
 | 
						|
	src/cborerrorstrings.c \
 | 
						|
	src/cborencoder.c \
 | 
						|
	src/cborencoder_close_container_checked.c \
 | 
						|
	src/cborencoder_float.c \
 | 
						|
	src/cborparser.c \
 | 
						|
	src/cborparser_float.c \
 | 
						|
	src/cborpretty.c \
 | 
						|
#
 | 
						|
CBORDUMP_SOURCES = tools/cbordump/cbordump.c
 | 
						|
 | 
						|
BUILD_SHARED = $(shell file -L /bin/sh 2>/dev/null | grep -q ELF && echo 1)
 | 
						|
BUILD_STATIC = 1
 | 
						|
 | 
						|
ifneq ($(BUILD_STATIC),1)
 | 
						|
ifneq ($(BUILD_SHARED),1)
 | 
						|
  $(error error: BUILD_STATIC and BUILD_SHARED can not be both disabled)
 | 
						|
endif
 | 
						|
endif
 | 
						|
 | 
						|
INSTALL_TARGETS += $(bindir)/cbordump
 | 
						|
ifeq ($(BUILD_SHARED),1)
 | 
						|
BINLIBRARY=lib/libtinycbor.so
 | 
						|
INSTALL_TARGETS += $(libdir)/libtinycbor.so.$(VERSION)
 | 
						|
endif
 | 
						|
ifeq ($(BUILD_STATIC),1)
 | 
						|
BINLIBRARY=lib/libtinycbor.a
 | 
						|
INSTALL_TARGETS += $(libdir)/libtinycbor.a
 | 
						|
endif
 | 
						|
INSTALL_TARGETS += $(pkgconfigdir)/tinycbor.pc
 | 
						|
INSTALL_TARGETS += $(TINYCBOR_HEADERS:src/%=$(includedir)/tinycbor/%)
 | 
						|
 | 
						|
# setup VPATH
 | 
						|
MAKEFILE := $(lastword $(MAKEFILE_LIST))
 | 
						|
SRCDIR := $(dir $(MAKEFILE))
 | 
						|
VPATH = $(SRCDIR):$(SRCDIR)/src
 | 
						|
 | 
						|
# Our version
 | 
						|
GIT_DIR := $(strip $(shell git -C $(SRCDIR). rev-parse --git-dir 2> /dev/null))
 | 
						|
VERSION = $(shell cat $(SRCDIR)VERSION)
 | 
						|
SOVERSION = $(shell cut -f1-2 -d. $(SRCDIR)VERSION)
 | 
						|
PACKAGE = tinycbor-$(VERSION)
 | 
						|
 | 
						|
# Check that QMAKE is Qt 5
 | 
						|
ifeq ($(origin QMAKE),file)
 | 
						|
  check_qmake = $(strip $(shell $(1) -query QT_VERSION 2>/dev/null | cut -b1))
 | 
						|
  ifneq ($(call check_qmake,$(QMAKE)),5)
 | 
						|
    QMAKE := qmake -qt5
 | 
						|
    ifneq ($(call check_qmake,$(QMAKE)),5)
 | 
						|
      QMAKE := qmake-qt5
 | 
						|
      ifneq ($(call check_qmake,$(QMAKE)),5)
 | 
						|
        QMAKE := @echo >&2 $(MAKEFILE): Cannot find a Qt 5 qmake; false
 | 
						|
      endif
 | 
						|
    endif
 | 
						|
  endif
 | 
						|
endif
 | 
						|
 | 
						|
-include .config
 | 
						|
 | 
						|
ifeq ($(wildcard .config),)
 | 
						|
    $(info .config file not yet created)
 | 
						|
endif
 | 
						|
 | 
						|
ifeq ($(freestanding-pass),1)
 | 
						|
TINYCBOR_SOURCES = $(TINYCBOR_FREESTANDING_SOURCES)
 | 
						|
else
 | 
						|
TINYCBOR_SOURCES = \
 | 
						|
	$(TINYCBOR_FREESTANDING_SOURCES) \
 | 
						|
	src/cborparser_dup_string.c \
 | 
						|
	src/cborpretty_stdio.c \
 | 
						|
	src/cbortojson.c \
 | 
						|
	src/cborvalidation.c \
 | 
						|
#
 | 
						|
# if open_memstream is unavailable on the system, try to implement our own
 | 
						|
# version using funopen or fopencookie
 | 
						|
ifeq ($(open_memstream-pass),)
 | 
						|
  ifeq ($(funopen-pass)$(fopencookie-pass),)
 | 
						|
    CFLAGS += -DWITHOUT_OPEN_MEMSTREAM
 | 
						|
    ifeq ($(wildcard .config),.config)
 | 
						|
        $(warning warning: funopen and fopencookie unavailable, open_memstream can not be implemented and conversion to JSON will not work properly!)
 | 
						|
    endif
 | 
						|
  else
 | 
						|
    TINYCBOR_SOURCES += src/open_memstream.c
 | 
						|
  endif
 | 
						|
endif
 | 
						|
endif
 | 
						|
 | 
						|
# json2cbor depends on an external library (cjson)
 | 
						|
ifneq ($(cjson-pass)$(system-cjson-pass),)
 | 
						|
  JSON2CBOR_SOURCES = tools/json2cbor/json2cbor.c
 | 
						|
  INSTALL_TARGETS += $(bindir)/json2cbor
 | 
						|
  ifeq ($(system-cjson-pass),1)
 | 
						|
    LDFLAGS_CJSON = -lcjson
 | 
						|
  else
 | 
						|
    JSON2CBOR_SOURCES += src/cjson/cJSON.c
 | 
						|
    json2cbor_CCFLAGS = -I$(SRCDIR)src/cjson
 | 
						|
  endif
 | 
						|
endif
 | 
						|
 | 
						|
# Rules
 | 
						|
all: .config \
 | 
						|
	$(if $(subst 0,,$(BUILD_STATIC)),lib/libtinycbor.a) \
 | 
						|
	$(if $(subst 0,,$(BUILD_SHARED)),lib/libtinycbor.so) \
 | 
						|
	$(if $(freestanding-pass),,bin/cbordump) \
 | 
						|
	tinycbor.pc
 | 
						|
all: $(if $(JSON2CBOR_SOURCES),bin/json2cbor)
 | 
						|
check: tests/Makefile | $(BINLIBRARY)
 | 
						|
	$(MAKE) -C tests check
 | 
						|
silentcheck: | $(BINLIBRARY)
 | 
						|
	TESTARGS=-silent $(MAKE) -f $(MAKEFILE) -s check
 | 
						|
configure: .config
 | 
						|
.config: Makefile.configure
 | 
						|
	$(MAKE) -f $(SRCDIR)Makefile.configure OUT='>&9' configure 9> $@
 | 
						|
 | 
						|
lib/libtinycbor-freestanding.a: $(TINYCBOR_FREESTANDING_SOURCES:.c=.o)
 | 
						|
	@$(MKDIR) -p lib
 | 
						|
	$(AR) cqs $@ $^
 | 
						|
 | 
						|
lib/libtinycbor.a: $(TINYCBOR_SOURCES:.c=.o)
 | 
						|
	@$(MKDIR) -p lib
 | 
						|
	$(AR) cqs $@ $^
 | 
						|
 | 
						|
lib/libtinycbor.so: $(TINYCBOR_SOURCES:.c=.pic.o)
 | 
						|
	@$(MKDIR) -p lib
 | 
						|
	$(CC) -shared -Wl,-soname,libtinycbor.so.$(SOVERSION) -o lib/libtinycbor.so.$(VERSION) $(LDFLAGS) $^ $(LDLIBS)
 | 
						|
	cd lib ; ln -sf libtinycbor.so.$(VERSION) libtinycbor.so ; ln -sf libtinycbor.so.$(VERSION) libtinycbor.so.$(SOVERSION)
 | 
						|
 | 
						|
bin/cbordump: $(CBORDUMP_SOURCES:.c=.o) $(BINLIBRARY)
 | 
						|
	@$(MKDIR) -p bin
 | 
						|
	$(CC) -o $@ $(LDFLAGS) $^ $(LDLIBS)
 | 
						|
 | 
						|
bin/json2cbor: $(JSON2CBOR_SOURCES:.c=.o) $(BINLIBRARY)
 | 
						|
	@$(MKDIR) -p bin
 | 
						|
	$(CC) -o $@ $(LDFLAGS) $^ $(LDFLAGS_CJSON) $(LDLIBS)
 | 
						|
 | 
						|
tinycbor.pc: tinycbor.pc.in
 | 
						|
	$(SED) > $@ < $< \
 | 
						|
		-e 's,@prefix@,$(prefix),' \
 | 
						|
		-e 's,@exec_prefix@,$(exec_prefix),' \
 | 
						|
		-e 's,@libdir@,$(libdir),' \
 | 
						|
		-e 's,@includedir@,$(includedir),' \
 | 
						|
		-e 's,@version@,$(VERSION),'
 | 
						|
 | 
						|
tests/Makefile: tests/tests.pro
 | 
						|
	$(QMAKE) $(QMAKEFLAGS) -o $@ $<
 | 
						|
 | 
						|
$(PACKAGE).tar.gz: | .git
 | 
						|
	GIT_DIR=$(SRCDIR).git $(GIT_ARCHIVE) --format=tar.gz -o "$(PACKAGE).tar.gz" HEAD
 | 
						|
$(PACKAGE).zip: | .git
 | 
						|
	GIT_DIR=$(SRCDIR).git $(GIT_ARCHIVE) --format=zip -o "$(PACKAGE).zip" HEAD
 | 
						|
 | 
						|
$(DESTDIR)$(libdir)/%: lib/%
 | 
						|
	$(INSTALL) -d $(@D)
 | 
						|
	$(INSTALL_DATA) $< $@
 | 
						|
$(DESTDIR)$(bindir)/%: bin/%
 | 
						|
	$(INSTALL) -d $(@D)
 | 
						|
	$(INSTALL_PROGRAM) $< $@
 | 
						|
$(DESTDIR)$(pkgconfigdir)/%: %
 | 
						|
	$(INSTALL) -d $(@D)
 | 
						|
	$(INSTALL_DATA) $< $@
 | 
						|
$(DESTDIR)$(includedir)/tinycbor/%: src/%
 | 
						|
	$(INSTALL) -d $(@D)
 | 
						|
	$(INSTALL_DATA) $< $@
 | 
						|
 | 
						|
install-strip:
 | 
						|
	$(MAKE) -f $(MAKEFILE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' install
 | 
						|
 | 
						|
install: $(INSTALL_TARGETS:%=$(DESTDIR)%)
 | 
						|
ifeq ($(BUILD_SHARED),1)
 | 
						|
	ln -sf libtinycbor.so.$(VERSION) $(DESTDIR)$(libdir)/libtinycbor.so
 | 
						|
	ln -sf libtinycbor.so.$(VERSION) $(DESTDIR)$(libdir)/libtinycbor.so.$(SOVERSION)
 | 
						|
endif
 | 
						|
 | 
						|
uninstall:
 | 
						|
	$(RM) $(INSTALL_TARGETS:%=$(DESTDIR)%)
 | 
						|
	$(RM) $(DESTDIR)$(libdir)/libtinycbor.so
 | 
						|
	$(RM) $(DESTDIR)$(libdir)/libtinycbor.so.$(SOVERSION)
 | 
						|
 | 
						|
mostlyclean:
 | 
						|
	$(RM) $(TINYCBOR_SOURCES:.c=.o)
 | 
						|
	$(RM) $(TINYCBOR_SOURCES:.c=.pic.o)
 | 
						|
	$(RM) $(CBORDUMP_SOURCES:.c=.o)
 | 
						|
 | 
						|
clean: mostlyclean
 | 
						|
	$(RM) bin/cbordump
 | 
						|
	$(RM) bin/json2cbor
 | 
						|
	$(RM) lib/libtinycbor.a
 | 
						|
	$(RM) lib/libtinycbor-freestanding.a
 | 
						|
	$(RM) tinycbor.pc
 | 
						|
	$(RM) lib/libtinycbor.so*
 | 
						|
	test -e tests/Makefile && $(MAKE) -C tests clean || :
 | 
						|
 | 
						|
distclean: clean
 | 
						|
	test -e tests/Makefile && $(MAKE) -C tests distclean || :
 | 
						|
 | 
						|
docs:
 | 
						|
	cd $(SRCDIR)src && VERSION=$(VERSION) doxygen $(SRCDIR)/../Doxyfile
 | 
						|
 | 
						|
dist: $(PACKAGE).tar.gz $(PACKAGE).zip
 | 
						|
distcheck: .git
 | 
						|
	-$(RM) -r $${TMPDIR-/tmp}/tinycbor-distcheck
 | 
						|
	GIT_DIR=$(SRCDIR).git git archive --prefix=tinycbor-distcheck/ --format=tar HEAD | tar -xf - -C $${TMPDIR-/tmp}
 | 
						|
	cd $${TMPDIR-/tmp}/tinycbor-distcheck && $(MAKE) silentcheck
 | 
						|
	$(RM) -r $${TMPDIR-/tmp}/tinycbor-distcheck
 | 
						|
 | 
						|
tag: distcheck
 | 
						|
	@cd $(SRCDIR). && perl scripts/maketag.pl
 | 
						|
 | 
						|
.PHONY: all check silentcheck configure install uninstall
 | 
						|
.PHONY: mostlyclean clean distclean
 | 
						|
.PHONY: docs dist distcheck release
 | 
						|
.SECONDARY:
 | 
						|
 | 
						|
cflags := $(CPPFLAGS) -I$(SRCDIR)src
 | 
						|
cflags += -std=gnu99 $(CFLAGS) \
 | 
						|
	-Werror=incompatible-pointer-types \
 | 
						|
	-Werror=implicit-function-declaration \
 | 
						|
	-Werror=int-conversion
 | 
						|
%.o: %.c
 | 
						|
	@test -d $(@D) || $(MKDIR) $(@D)
 | 
						|
	$(CC) $(cflags) $($(basename $(notdir $@))_CCFLAGS) -c -o $@ $<
 | 
						|
%.pic.o: %.c
 | 
						|
	@test -d $(@D) || $(MKDIR) $(@D)
 | 
						|
	$(CC) $(cflags) -fPIC $($(basename $(notdir $@))_CCFLAGS) -c -o $@ $<
 | 
						|
 | 
						|
-include src/*.d
 | 
						|
 |