gash/Makefile.am

422 lines
17 KiB
Makefile

# Gash --- Guile As SHell
# Copyright © 2017, 2018, 2019 Timothy Sample <samplet@ngyro.com>
# Copyright © 2018, 2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
#
# This file is part of Gash.
#
# Gash is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or (at
# your option) any later version.
#
# Gash is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Gash. If not, see <http://www.gnu.org/licenses/>.
include $(top_srcdir)/build-aux/guile.am
EXTRA_DIST += \
.dir-locals.el \
COPYING.CC0 \
bootstrap \
build-aux/git-version-gen \
build-aux/gitlab-ci.yml \
build-aux/gitlog-to-changelog \
guix.scm
# Modules and scripts
#####################
SOURCES = \
gash/built-ins/break.scm \
gash/built-ins/cd.scm \
gash/built-ins/colon.scm \
gash/built-ins/command.scm \
gash/built-ins/continue.scm \
gash/built-ins/dot.scm \
gash/built-ins/echo.scm \
gash/built-ins/eval.scm \
gash/built-ins/exec.scm \
gash/built-ins/exit.scm \
gash/built-ins/export.scm \
gash/built-ins/false.scm \
gash/built-ins/pwd.scm \
gash/built-ins/read.scm \
gash/built-ins/readonly.scm \
gash/built-ins/return.scm \
gash/built-ins/set.scm \
gash/built-ins/shift.scm \
gash/built-ins/trap.scm \
gash/built-ins/true.scm \
gash/built-ins/type.scm \
gash/built-ins/umask.scm \
gash/built-ins/unset.scm \
gash/built-ins/utils.scm \
gash/built-ins.scm \
gash/compat/hash-table.scm \
gash/compat/textual-ports.scm \
gash/compat.scm \
gash/config.scm \
gash/environment.scm \
gash/eval.scm \
gash/gash.scm \
gash/lexer.scm \
gash/parser.scm \
gash/pattern.scm \
gash/readline.scm \
gash/repl.scm \
gash/shell.scm \
gash/word.scm
bin_SCRIPTS = \
scripts/gash
do_subst = sed \
-e 's,[@]GUILE[@],$(GUILE),g' \
-e 's,[@]MODDIR[@],$(moddir),g' \
-e 's,[@]GODIR[@],$(ccachedir),g'
scripts/gash: scripts/gash.in Makefile
mkdir -p scripts
$(do_subst) < $(srcdir)/scripts/gash.in > scripts/gash
chmod a+x scripts/gash
EXTRA_DIST += scripts/gash.in
# Documentation
###############
info_TEXINFOS = doc/gash.texi
gash_TEXINFOS = doc/fdl-1.3.texi
EXTRA_DIST += \
$(gash_TEXINFOS) \
doc/syntax.txt
# Tests
#######
TEST_EXTENSIONS = .scm .sh
SCM_LOG_COMPILER = $(top_builddir)/pre-inst-env $(GUILE)
AM_SCM_LOG_FLAGS = --no-auto-compile
SH_LOG_COMPILER = $(top_builddir)/pre-inst-env $(top_srcdir)/test.sh
.PHONY: check-spec
check-spec:
$(MAKE) $(AM_MAKEFLAGS) -L -C tests/spec check
.PHONY: check-bootstrap
check-bootstrap:
guix build -f tests/bootstrap/bash-without-bash.scm
.PHONY: check-gash
check-gash:
SHELL=gash $(top_builddir)/pre-inst-env $(top_builddir)/check.sh
UNIT_TESTS = \
tests/unit/lexer.scm \
tests/unit/parser.scm \
tests/unit/pattern.scm \
tests/unit/shell.scm \
tests/unit/word.scm
FULL_TESTS = \
tests/00-exit.sh \
tests/00-exit-0.sh \
tests/00-exit-1.sh \
tests/00-exit-2.sh \
tests/00-exit-error.sh \
tests/00-exit-var.sh \
tests/01-script-newline.sh \
tests/01-script-semi.sh \
tests/01-script-backslash.sh \
tests/01-script-backslash-space.sh \
tests/01-script-backslash-twice.sh \
tests/01-script-arg-0.sh \
tests/01-script-arg-length.sh \
tests/01-script-arg-list.sh \
tests/01-script-shift.sh \
tests/03-echo.sh \
tests/03-echo-doublequotes.sh \
tests/03-echo-nesting.sh \
tests/03-echo-escaped-doublequotes.sh \
tests/03-echo-quoted-doublequotes.sh \
tests/03-echo-brace.sh \
tests/04-echo-var.sh \
tests/04-echo-equal.sh \
tests/04-echo-word-at.sh \
tests/04-echo-word-at-word.sh \
tests/05-assignment.sh \
tests/05-assignment-backtick.sh \
tests/05-assignment-echo.sh \
tests/05-assignment-empty.sh \
tests/05-assignment-singlequote.sh \
tests/05-assignment-double-quote.sh \
tests/05-assignment-variable-word.sh \
tests/05-assignment-word-variable.sh \
tests/05-assignment-doublequoted-doublequotes.sh \
tests/06-compound-word.sh \
tests/06-command-compound-word.sh \
tests/07-variable-or.sh \
tests/07-variable-not-or.sh \
tests/07-variable-or-slash.sh \
tests/07-variable-or-variable.sh \
tests/07-variable-or-doublequote.sh \
tests/07-variable-or-empty.sh \
tests/08-variable-and.sh \
tests/08-variable-not-and.sh \
tests/10-if.sh \
tests/10-if-false.sh \
tests/10-if-word-variable.sh \
tests/10-if-line.sh \
tests/10-if-multiple.sh \
tests/10-if-else.sh \
tests/10-else-multiple.sh \
tests/10-if-elif.sh \
tests/10-if-redirect.sh \
tests/10-if-test.sh \
tests/10-if-test-false.sh \
tests/10-if-bracket.sh \
tests/10-if-bracket-false.sh \
tests/11-for.sh \
tests/11-for-split-sequence.sh \
tests/11-for-done-subshell.sh \
tests/20-semi.sh \
tests/20-or.sh \
tests/20-and.sh \
tests/20-pipe-exit-0.sh \
tests/20-pipe-exit-1.sh \
tests/20-pipe-sed.sh \
tests/20-pipe-sed-cat.sh \
tests/20-exec.sh \
tests/30-substitution.sh \
tests/30-substitution-word.sh \
tests/30-substitution-backtick.sh \
tests/30-substitution-assignment.sh \
tests/30-for-substitution.sh \
tests/30-substitution-assignment.sh \
tests/30-substitution-assignment-at.sh \
tests/30-substitution-redirect.sh \
tests/40-eval.sh \
tests/40-eval-echo-variable.sh \
tests/40-assignment-eval-echo.sh \
tests/41-dot.sh \
tests/42-sh.sh \
tests/42-sh-export.sh \
tests/42-export-new.sh \
tests/42-sh-export-new.sh \
tests/43-trap-subshell.sh \
tests/50-iohere.sh \
tests/50-iohere-builtin.sh \
tests/50-redirect.sh \
tests/50-redirect-in.sh \
tests/50-redirect-append.sh \
tests/50-redirect-pipe.sh \
tests/50-redirect-sed.sh \
tests/50-redirect-space.sh \
tests/50-redirect-in-out.sh \
tests/50-redirect-clobber.sh \
tests/60-function.sh \
tests/60-function-at.sh \
tests/60-subst.sh \
tests/70-hash.sh \
tests/70-hash-hash.sh \
tests/70-percent.sh \
tests/70-percent-percent.sh \
tests/70-percent-space.sh \
tests/70-slash.sh \
tests/70-slash-string.sh \
tests/70-slash-string-slash.sh \
tests/100-cd.sh \
tests/100-cd-foo.sh \
tests/100-test.sh \
tests/100-test-false.sh \
tests/100-test-file.sh \
tests/100-bracket-file.sh
TESTS = $(UNIT_TESTS) $(FULL_TESTS)
XFAIL_TESTS = \
tests/70-hash.sh \
tests/70-hash-hash.sh \
tests/70-percent.sh \
tests/70-percent-percent.sh \
tests/70-percent-space.sh \
tests/70-slash.sh \
tests/70-slash-string.sh \
tests/70-slash-string-slash.sh
# These tests will not be run. Put tests here
# that pass or fail based on environmental
# factors.
BROKEN_TESTS = \
tests/50-redirect-merge.sh
TEST_DATA_FILES = \
tests/00-exit-1.exit \
tests/00-exit-2.exit \
tests/00-exit-error.exit \
tests/00-exit-var.exit \
tests/01-script-arg-length.stdout \
tests/01-script-arg-list.stdout \
tests/01-script-backslash-twice.exit \
tests/01-script-backslash.exit \
tests/01-script-newline.exit \
tests/01-script-semi.exit \
tests/01-script-shift.stdout \
tests/03-echo-brace.stdout \
tests/03-echo-doublequotes.stdout \
tests/03-echo-escaped-doublequotes.stdout \
tests/03-echo-nesting.stdout \
tests/03-echo-quoted-doublequotes.stdout \
tests/04-echo-equal.stdout \
tests/04-echo-word-at-word.stdout \
tests/04-echo-word-at.stdout \
tests/05-assignment-backtick.stdout \
tests/05-assignment-doublequoted-doublequotes.stdout \
tests/05-assignment-echo.stdout \
tests/05-assignment-empty.stdout \
tests/05-assignment-variable-word.stdout \
tests/05-assignment-word-variable.stdout \
tests/06-command-compound-word.stdout \
tests/06-compound-word.stdout \
tests/07-variable-not-or.stdout \
tests/07-variable-or-doublequote.stdout \
tests/07-variable-or-empty.stdout \
tests/07-variable-or-variable.stdout \
tests/07-variable-or.stdout \
tests/08-variable-and.stdout \
tests/08-variable-not-and.stdout \
tests/10-else.multiple.stdout \
tests/10-if-multiple.stdout \
tests/11-for-done-subshell.stdout \
tests/11-for-split-sequence.stdout \
tests/11-for.stdout \
tests/20-and.exit \
tests/20-pipe-exit-1.exit \
tests/20-pipe-sed-cat.stdout \
tests/20-pipe-sed.stdout \
tests/20-semi.exit \
tests/30-for-substitution.stdout \
tests/30-substitution-assignment-at.stdout \
tests/30-substitution-assignment.stdout \
tests/30-substitution-backtick.stdout \
tests/30-substitution-redirect.stdout \
tests/30-substitution-word.stdout \
tests/30-substitution.stdout \
tests/40-assignment-eval-echo.stdout \
tests/40-eval-echo-variable.stdout \
tests/40-eval.stdout \
tests/41-dot.stdout \
tests/42-export-new.stdout \
tests/42-sh-export-new.stdout \
tests/42-sh-export.stdout \
tests/42-sh.stdout \
tests/43-trap-subshell.stdout \
tests/50-iohere.stdout \
tests/50-redirect-append.stdout \
tests/50-redirect-clobber.stdout \
tests/50-redirect-in-out.stdout \
tests/50-redirect-merge.stdout \
tests/50-redirect-pipe.stdout \
tests/50-redirect-sed.stdout \
tests/50-redirect-space.stdout \
tests/50-redirect.stdout \
tests/60-function-at.stdout \
tests/60-function.stdout \
tests/70-hash-hash.stdout \
tests/70-hash.stdout \
tests/70-percent-percent.stdout \
tests/70-percent-space.stdout \
tests/70-percent.stdout \
tests/70-slash-string.stdout \
tests/70-slash.stdout \
tests/100-cd-foo.exit \
tests/100-cd.stdout \
tests/data/star/2 \
tests/data/star/3 \
tests/data/star/0 \
tests/data/star/1 \
tests/data/foo \
tests/data/diff.scm \
tests/data/script.sh
.PHONY: test-list
test-list: ; @echo $(TESTS)
EXTRA_DIST += \
$(TESTS) \
$(BROKEN_TESTS) \
$(TEST_DATA_FILES) \
test.sh \
tests/unit/automake.scm \
tests/spec/check-spec \
tests/spec/Makefile.am \
tests/spec/Makefile.in \
tests/spec/oil.scm \
tests/bootstrap/bash-without-bash.scm
# Coverage
##########
if HAVE_GENHTML
lcov.info: all
$(top_builddir)/pre-inst-env $(top_builddir)/tools/coverage
coverage: lcov.info
$(GENHTML) -o $(top_builddir)/coverage lcov.info
endif # HAVE_GENHTML
# Distribution
##############
dist-hook: gen-ChangeLog
echo $(VERSION) > $(distdir)/.tarball-version
git ls-tree -r --name-only HEAD > $(distdir)/.tarball-manifest
.PHONY: gen-ChangeLog
gen-ChangeLog:
$(top_srcdir)/build-aux/gitlog-to-changelog \
> $(distdir)/ChangeLog-t
rm -f $(distdir)/ChangeLog
mv $(distdir)/ChangeLog-t $(distdir)/ChangeLog
distcheck-hook:
set -e; \
manifest=$(distdir)/.tarball-manifest; \
test -f "$$manifest"; \
for x in `cat "$$manifest"`; \
do \
if ! test -f $(distdir)/"$$x" \
&& ! test "$$x" = .gitignore; \
then \
echo "Missing: $$x"; \
exit 1; \
fi; \
done
# Cleaning
##########
CLEANFILES += \
$(bin_SCRIPTS) \
$(FULL_TESTS:tests/%.sh=tests/%.log) \
$(FULL_TESTS:tests/%.sh=tests/%.trs) \
$(FULL_TESTS:tests/%.sh=tests/%.1) \
$(FULL_TESTS:tests/%.sh=tests/%.2) \
$(UNIT_TESTS:tests/%.scm=tests/%.log) \
$(UNIT_TESTS:tests/%.scm=tests/%.trs)
clean-local:
$(MAKE) $(AM_MAKEFLAGS) -L -C tests/spec clean
distclean-local:
$(MAKE) $(AM_MAKEFLAGS) -L -C tests/spec distclean