main.c requires version.h, but there is no logic marking this dependency in the Makefile. This commit adds the dependency to the Makefile template.
179 lines
5.7 KiB
Makefile
179 lines
5.7 KiB
Makefile
|
|
### C source files to be built and distributed.
|
|
|
|
LIBJQ_INCS = jq_parser.h builtin.h bytecode.h compile.h exec_stack.h \
|
|
libm.h jv_alloc.h jv_dtoa.h jv_unicode.h locfile.h \
|
|
opcode_list.h parser.y jv_utf8_tables.h lexer.l util.h linker.h
|
|
|
|
LIBJQ_SRC = locfile.c bytecode.c compile.c execute.c builtin.c jv.c \
|
|
jv_parse.c jv_print.c jv_dtoa.c jv_unicode.c jv_aux.c jv_file.c \
|
|
jv_alloc.c jq_test.c util.c linker.c ${LIBJQ_INCS}
|
|
|
|
### C build options
|
|
|
|
AM_CFLAGS = -Wextra -Wall -Wno-missing-field-initializers \
|
|
-Wno-unused-parameter -Wno-unused-function
|
|
|
|
ACLOCAL_AMFLAGS = -I config/m4
|
|
|
|
### Generating the lexer and parser
|
|
|
|
# While there is some autoconf macro support for lex/flex, it doesn't support
|
|
# header file creation so we'll use good old make
|
|
if MAINTAINER_MODE
|
|
BUILT_SOURCES = lexer.h lexer.c parser.h parser.c version.h
|
|
lexer.c: lexer.l
|
|
$(AM_V_LEX) flex -o lexer.c --header-file=lexer.h $<
|
|
lexer.h: lexer.c
|
|
else
|
|
BUILT_SOURCES =
|
|
.y.c:
|
|
$(AM_V_YACC) echo "NOT building parser.c!"
|
|
.l.c:
|
|
$(AM_V_LEX) echo "NOT building lexer.c!"
|
|
endif
|
|
|
|
# Tell YACC (bison) autoconf macros that you want a header file created.
|
|
# If the --warnings=all fails, you probably have an old version of bison
|
|
# OSX ships an old bison, so update with homebrew or macports
|
|
AM_YFLAGS = --warnings=all -d
|
|
|
|
### libjq
|
|
|
|
lib_LTLIBRARIES = libjq.la
|
|
libjq_la_SOURCES = ${LIBJQ_SRC}
|
|
libjq_la_LIBADD = -lm
|
|
libjq_la_LDFLAGS = -export-symbols-regex '^j[qv]_' -version-info 1:4:0
|
|
|
|
include_HEADERS = jv.h jq.h
|
|
|
|
### Error injection for testing
|
|
|
|
if ENABLE_ERROR_INJECTION
|
|
lib_LTLIBRARIES += libinject_errors.la
|
|
libinject_errors_la_SOURCES = inject_errors.c
|
|
libinject_errors_la_LIBADD = -ldl
|
|
libinject_errors_la_LDFLAGS = -module
|
|
endif
|
|
|
|
### Building the jq binary
|
|
|
|
# Remake the version.h header file if, and only if, the git ID has changed
|
|
.PHONY: .FORCE
|
|
.FORCE:
|
|
generate_ver = ver="`{ $(srcdir)/scripts/version || echo '$(VERSION)' ; } | sed 's/.*/\#define JQ_VERSION \"&\"/'`"
|
|
.remake-version-h: .FORCE
|
|
@ $(generate_ver); test "x`cat version.h 2>/dev/null`" = "x$$ver" || touch .remake-version-h
|
|
version.h: .remake-version-h
|
|
$(AM_V_GEN) $(generate_ver); echo "$$ver" > $@
|
|
main.c: version.h
|
|
|
|
bin_PROGRAMS = jq
|
|
jq_SOURCES = main.c version.h
|
|
jq_LDFLAGS = -static-libtool-libs
|
|
jq_LDADD = libjq.la -lm
|
|
|
|
if ENABLE_ALL_STATIC
|
|
jq_LDFLAGS += -all-static
|
|
endif
|
|
|
|
### Tests (make check)
|
|
|
|
TESTS = tests/all.test
|
|
TEST_LOG_COMPILER = ${srcdir}/tests/run
|
|
|
|
|
|
### Building the manpage
|
|
|
|
# If ENABLE_DOCS is not set, just copy jq.1.default to jq.1
|
|
# The real_docs target succeeds (possibly after building jq.1) only if ENABLE_DOCS is set
|
|
# Thus, making "dist" depend on "real_docs" ensures that we never build a tarball with
|
|
# a stub manpage.
|
|
|
|
man_MANS = jq.1
|
|
.PHONY: real_docs
|
|
if ENABLE_DOCS
|
|
jq.1: $(srcdir)/docs/content/3.manual/manual.yml
|
|
$(AM_V_GEN) ( cd ${abs_srcdir}/docs; '$(BUNDLER)' exec rake manpage ) > $@ || { rm -f $@; false; }
|
|
jq.1.prebuilt: jq.1
|
|
$(AM_V_GEN) cp $^ $@ || { rm -f $@; false; }
|
|
jq.1.default: $(srcdir)/docs/default_manpage.md
|
|
$(AM_V_GEN) ( cd ${abs_srcdir}/docs; '$(BUNDLER)' exec rake manpage_default ) > $@ || { rm -f $@; false; }
|
|
real_docs: jq.1 jq.1.prebuilt
|
|
@if cmp jq.1 $(srcdir)/jq.1.default > /dev/null; then\
|
|
rm -f jq.1; $(MAKE) $(AM_MAKEFLAGS) jq.1;\
|
|
fi
|
|
else
|
|
jq.1: $(srcdir)/jq.1.prebuilt
|
|
$(AM_V_GEN) cp $^ $@
|
|
real_docs:
|
|
@echo "Ruby dependencies not found, cannot build manpage." > /dev/stderr
|
|
@echo "Follow the instructions in docs/README.md to install them" > /dev/stderr
|
|
@echo "and then rerun ./configure" > /dev/stderr
|
|
@echo "A pre-built, possibly out-of-date manpage used." > /dev/stderr
|
|
false
|
|
endif
|
|
|
|
|
|
### Packaging
|
|
|
|
docs/site.yml: configure.ac
|
|
sed 's/^jq_version: .*/jq_version: "$(VERSION)"/' $@ > $@.new
|
|
mv $@.new $@
|
|
|
|
install-binaries: $(BUILT_SOURCES)
|
|
$(MAKE) $(AM_MAKEFLAGS) install-exec
|
|
|
|
# Ensure "make dist" fails when we can't build the real manpage
|
|
dist-hook: real_docs
|
|
|
|
DOC_FILES = docs/content docs/public docs/templates docs/site.yml \
|
|
docs/Gemfile docs/Gemfile.lock docs/Rakefile docs/README.md \
|
|
docs/default_manpage.md jq.1.default
|
|
|
|
# setup is only used by distribution developers, not package developers.
|
|
# Still, as a matter of allowing patching, its not a bad idea to distribute
|
|
# the developer setup script in the tarball.
|
|
EXTRA_DIST = $(man_MANS) $(TESTS) $(TEST_LOG_COMPILER) jq.spec \
|
|
$(DOC_FILES) scripts/version parser.h parser.c lexer.h \
|
|
lexer.c tests/onig.supp tests/torture/input0.json \
|
|
tests/modules/.jq tests/modules/a.jq tests/modules/b/b.jq \
|
|
tests/modules/c/c.jq tests/modules/c/d.jq \
|
|
tests/modules/lib/jq/e/e.jq tests/modules/lib/jq/f.jq \
|
|
tests/modules/streaming.jq tests/modules/data.json \
|
|
tests/modules/syntaxerror/syntaxerror.jq \
|
|
tests/modules/test_bind_order.jq \
|
|
tests/modules/test_bind_order0.jq \
|
|
tests/modules/test_bind_order1.jq \
|
|
tests/modules/test_bind_order2.jq
|
|
|
|
|
|
# README.md is expected in Github projects, good stuff in it, so we'll
|
|
# distribute it and install it with the package in the doc directory.
|
|
docdir = ${datadir}/doc/${PACKAGE}
|
|
dist_doc_DATA = README.md COPYING AUTHORS README
|
|
|
|
RELEASE ?= 1
|
|
rpm: dist jq.spec
|
|
@echo "Packaging jq as an RPM ..."
|
|
mkdir -p rpm/SOURCES rpm/BUILD rpm/BUILDROOT rpm/RPMS rpm/SPECS
|
|
cp jq-$(VERSION).tar.gz rpm/SOURCES/
|
|
rpmbuild -tb --define "_topdir ${PWD}/rpm" --define "_prefix /usr" --define "myver $(VERSION)" --define "myrel ${RELEASE}" rpm/SOURCES/jq-$(VERSION).tar.gz
|
|
find rpm/RPMS/ -name "*.rpm" -exec mv {} ./ \;
|
|
rm -rf rpm
|
|
|
|
dist-clean-local:
|
|
rm -f ${BUILT_SOURCES}
|
|
|
|
# Not sure why this doesn't get cleaned up automatically, guess
|
|
# automake used to man pages which are hand coded?
|
|
# 'make clean' doesn't delete the manpage if it can't be rebuilt
|
|
.PHONY: clean-local-docs
|
|
clean-local-docs:
|
|
if ENABLE_DOCS
|
|
rm -f jq.1
|
|
endif
|
|
|
|
clean-local: clean-local-docs
|
|
rm -f version.h .remake-version-h
|