mirror of
https://github.com/stedolan/jq.git
synced 2024-05-11 05:55:39 +00:00
75662a4b05
This was being done 5 different way in 5 places: - indent 3 spaces, then tabs to column 73 - indent 2 spaces, then tabs to column 73 - indent 2 spaces, then a single tab - indent with spaces up to equal sign, then tabs to column 73 - indent 1 tab, then tabs to column 73 I standardized on 8 spaces, then spaces to column 73. The 8 spaces lines up with common browsers' indentation of the rest of the makefile, which is indented by single tabs. The spaces to column 73 make sure the trailing backslashes line up regardless of the tabstop setting.
199 lines
6.5 KiB
Makefile
199 lines
6.5 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
|
|
|
|
### 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
|