2013-05-09 20:27:12 +01:00
|
|
|
### C source files to be built and distributed.
|
2012-11-27 16:02:59 -06:00
|
|
|
|
2013-05-08 02:30:08 +01:00
|
|
|
JQ_INCS = jq_parser.h builtin.h bytecode.h compile.h execute.h \
|
|
|
|
forkable_stack.h frame_layout.h jv.h jv_alloc.h jv_aux.h jv_dtoa.h \
|
|
|
|
jv_parse.h jv_unicode.h locfile.h opcode.h opcode_list.h parser.y \
|
2013-05-09 11:31:17 +01:00
|
|
|
jv_utf8_tables.h lexer.l
|
2012-11-27 16:02:59 -06:00
|
|
|
|
2013-05-08 02:30:08 +01:00
|
|
|
JQ_SRC = opcode.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_alloc.c \
|
2013-05-09 11:31:17 +01:00
|
|
|
jq_test.c ${JQ_INCS}
|
2013-05-08 02:30:08 +01:00
|
|
|
|
|
|
|
|
|
|
|
### C build options
|
2012-11-27 16:02:59 -06:00
|
|
|
|
2013-05-08 02:30:08 +01:00
|
|
|
AM_CFLAGS = -Wextra -Wall -Wno-missing-field-initializers \
|
|
|
|
-Wno-unused-parameter -Wno-unused-function
|
|
|
|
|
|
|
|
|
|
|
|
### 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
|
2013-05-08 19:57:05 +01:00
|
|
|
BUILT_SOURCES = lexer.h lexer.c parser.h parser.c
|
2013-05-08 02:30:08 +01:00
|
|
|
lexer.c: lexer.l
|
2013-05-09 01:50:20 +01:00
|
|
|
flex -o lexer.c --header-file=lexer.h $<
|
2013-05-08 02:30:08 +01:00
|
|
|
lexer.h: lexer.c
|
2012-11-27 16:02:59 -06:00
|
|
|
|
2012-11-28 01:08:23 -06:00
|
|
|
# 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
|
|
|
|
|
2013-02-03 14:49:03 -06:00
|
|
|
|
2013-05-08 02:30:08 +01:00
|
|
|
### Building the jq binary
|
2013-02-03 14:49:03 -06:00
|
|
|
|
2013-05-24 23:34:34 +01:00
|
|
|
version.h:
|
|
|
|
@ { $(srcdir)/scripts/version || echo '$(VERSION)'; } | sed 's/.*/#define JQ_VERSION "&"/'> $@
|
|
|
|
|
|
|
|
main.c: config.h version.h
|
2012-11-27 16:02:59 -06:00
|
|
|
|
2013-05-08 02:30:08 +01:00
|
|
|
bin_PROGRAMS = jq
|
|
|
|
jq_SOURCES = ${JQ_SRC} main.c
|
2012-11-27 16:02:59 -06:00
|
|
|
|
|
|
|
|
2013-05-09 11:31:17 +01:00
|
|
|
### Tests (make check)
|
2013-02-04 07:01:18 -06:00
|
|
|
|
2013-05-08 02:30:08 +01:00
|
|
|
TESTS = tests/all.test
|
2013-05-09 13:40:00 +01:00
|
|
|
TEST_LOG_COMPILER = ${srcdir}/tests/run
|
2013-02-04 07:01:18 -06:00
|
|
|
|
2012-11-28 01:08:23 -06:00
|
|
|
|
2013-05-09 11:31:17 +01:00
|
|
|
### Building the manpage
|
|
|
|
|
2013-05-09 20:27:12 +01:00
|
|
|
# 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.
|
|
|
|
|
2013-05-09 11:31:17 +01:00
|
|
|
man_MANS = jq.1
|
2013-05-09 15:22:38 +01:00
|
|
|
.PHONY: real_docs
|
|
|
|
if ENABLE_DOCS
|
2013-05-09 13:40:00 +01:00
|
|
|
jq.1: $(srcdir)/docs/content/3.manual/manual.yml
|
2013-05-09 20:27:12 +01:00
|
|
|
( cd ${abs_srcdir}/docs; '$(BUNDLER)' exec rake manpage ) > $@ || { rm -f $@; false; }
|
|
|
|
jq.1.default: $(srcdir)/docs/default_manpage.md
|
|
|
|
( cd ${abs_srcdir}/docs; '$(BUNDLER)' exec rake manpage_default ) > $@ || { rm -f $@; false; }
|
|
|
|
real_docs: jq.1
|
2013-05-09 20:43:26 +01:00
|
|
|
if cmp jq.1 $(srcdir)/jq.1.default > /dev/null; then\
|
|
|
|
rm -f jq.1; $(MAKE) $(AM_MAKEFLAGS) jq.1;\
|
|
|
|
fi
|
2013-05-09 15:22:38 +01:00
|
|
|
else
|
2013-05-09 20:27:12 +01:00
|
|
|
jq.1: $(srcdir)/jq.1.default
|
2013-05-09 15:22:38 +01:00
|
|
|
cp $^ $@
|
|
|
|
real_docs:
|
2013-05-09 20:27:12 +01:00
|
|
|
@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
|
2013-05-09 15:22:38 +01:00
|
|
|
false
|
|
|
|
endif
|
2013-05-09 11:31:17 +01:00
|
|
|
|
|
|
|
|
2013-05-08 02:30:08 +01:00
|
|
|
### Packaging
|
2012-11-28 01:08:23 -06:00
|
|
|
|
2013-05-08 19:57:29 +01:00
|
|
|
docs/site.yml: configure.ac
|
2013-05-19 10:48:25 +01:00
|
|
|
sed 's/^jq_version: .*/jq_version: "$(VERSION)"/' $@ > $@.new
|
2013-05-08 19:57:29 +01:00
|
|
|
mv $@.new $@
|
|
|
|
|
2013-05-09 01:50:20 +01:00
|
|
|
install-binaries: $(BUILT_SOURCES)
|
|
|
|
$(MAKE) $(AM_MAKEFLAGS) install-exec
|
|
|
|
|
2013-05-09 15:22:38 +01:00
|
|
|
# Ensure "make dist" fails when we can't build the real manpage
|
|
|
|
dist-hook: real_docs
|
2013-05-09 01:50:20 +01:00
|
|
|
|
2013-05-09 20:53:51 +01:00
|
|
|
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
|
|
|
|
|
2013-05-08 02:30:08 +01:00
|
|
|
# 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.
|
2013-05-09 11:31:17 +01:00
|
|
|
EXTRA_DIST = config.h.in $(BUILT_SOURCES) $(man_MANS) $(TESTS) \
|
2013-05-09 20:53:51 +01:00
|
|
|
$(TEST_LOG_COMPILER) gen_utf8_tables.py jq.spec \
|
2013-05-24 23:34:34 +01:00
|
|
|
$(DOC_FILES) scripts/version
|
2012-11-27 16:02:59 -06:00
|
|
|
|
2013-05-08 02:30:08 +01:00
|
|
|
# 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}
|
2013-05-08 18:55:10 +01:00
|
|
|
dist_doc_DATA = README.md COPYING AUTHORS README
|
2012-11-28 01:08:23 -06:00
|
|
|
|
2012-11-27 16:02:59 -06:00
|
|
|
RELEASE ?= 1
|
2013-05-08 02:30:08 +01:00
|
|
|
rpm: jq
|
2012-11-27 16:02:59 -06:00
|
|
|
@echo "Packaging jq as an RPM ..."
|
2012-12-03 17:27:40 -06:00
|
|
|
mkdir -p rpm/SOURCES rpm/BUILD rpm/BUILDROOT rpm/RPMS rpm/SPECS
|
|
|
|
cp jq-$$(cat VERSION).tar.gz rpm/SOURCES/
|
2013-05-08 02:30:08 +01:00
|
|
|
rpmbuild -tb --define "_topdir ${PWD}/rpm" --define "_prefix /usr" --define "myver $$(cat VERSION)" --define "myrel ${RELEASE}" rpm/SOURCES/jq-$$(cat VERSION).tar.gz
|
2012-12-04 16:29:01 -06:00
|
|
|
find rpm/RPMS/ -name "*.rpm" -exec mv {} ./ \;
|
2012-12-03 17:27:40 -06:00
|
|
|
rm -rf rpm
|
2012-11-28 01:08:23 -06:00
|
|
|
|
|
|
|
dist-clean-local:
|
2013-02-03 14:49:03 -06:00
|
|
|
rm -f ${BUILT_SOURCES}
|
2013-02-04 13:35:42 -06:00
|
|
|
|
|
|
|
# Not sure why this doesn't get cleaned up automatically, guess
|
|
|
|
# automake used to man pages which are hand coded?
|
2013-05-23 19:20:19 +01:00
|
|
|
if ENABLE_DOCS
|
|
|
|
# 'make clean' doesn't delete the manpage if it can't be rebuilt
|
2013-02-04 13:35:42 -06:00
|
|
|
clean-local:
|
|
|
|
rm -f jq.1
|
2013-05-23 19:20:19 +01:00
|
|
|
endif
|