### 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 ### Running tests under Valgrind if ENABLE_VALGRIND NO_VALGRIND = else NO_VALGRIND = 1 endif ### Code coverage with gcov if ENABLE_GCOV AM_CFLAGS += --coverage --no-inline endif ### 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/mantest tests/jqtest tests/onigtest tests/shtest TESTS_ENVIRONMENT = NO_VALGRIND=$(NO_VALGRIND) ### 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/setup tests/jq.test tests/onig.test \ 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 \ jq.1.prebuilt # 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 clean-local-docs: if ENABLE_DOCS rm -f jq.1 endif clean-local-gcov: rm -f *.gcno *.gcda *.gcov clean-local: clean-local-docs clean-local-gcov rm -f version.h .remake-version-h .PHONY: clean-local-docs clean-local-gcov