mes/build-aux/GNUmakefile.in

351 lines
7.8 KiB
Makefile
Raw Normal View History

# GNU Mes --- Maxwell Equations of Software
# Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
#
# This file is part of GNU Mes.
#
# GNU Mes 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.
#
# GNU Mes 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 GNU Mes. If not, see <http://www.gnu.org/licenses/>.
SHELL=@BASH@
srcdest=@srcdest@
srcdir=@srcdir@
abs_top_srcdir=@abs_top_srcdir@
abs_top_builddir=@abs_top_builddir@
GUILE_FLAGS:=--no-auto-compile -L . -L module -C . -C module
cleaning-p:=$(filter clean%, $(MAKECMDGOALS))$(filter %clean, $(MAKECMDGOALS))
ifndef cleaning-p
include .config.make
.config.make:
${srcdir}/configure --prefix=$(prefix)
endif
PHONY_TARGETS:=\
src/mes\
TAGS\
all-go\
all\
build\
check\
clean-go\
clean\
default\
dist\
distclean\
doc\
dvi\
gcc\
generate-ChangeLog\
help\
html\
info\
install-dvi\
install-html\
install-pdf\
install-ps\
install-strip\
install\
installcheck\
installdirs\
maintainer-clean\
man\
mes-gcc\
mes-tcc\
mes\
mostlyclean\
pdf\
ps\
sign\
uninstall\
web\
#
.PHONY: $(PHONY_TARGETS)
default: all
all: build doc
build:
./build.sh
gcc:
${srcdest}build-aux/build-cc.sh
mes-gcc:
${srcdest}build-aux/build-cc32.sh
mes-tcc:
ifdef TCC
CC32=$(TCC) ${srcdest}build-aux/build-cc32.sh
else
$(warning skipping mes-tcc: no tcc)
endif
mes:
${srcdest}build-aux/build-mes.sh
clean:
git clean -dfx\
-e GNUmakefile\
-e build.sh\
-e check.sh\
-e install.sh\
-e pre-inst-env\
-e uninstall.sh\
#
# Mes does not cache anything on the file system; therefore clean
distclean:
git clean -dfX
mostlyclean: clean
maintainer-clean:
git clean -dfx
TAGS:
etags ${srcdest}lib/*.c ${srcdest}lib/*/*.c ${srcdest}src/*.c ${srcdest}include/*.h ${srcdest}include/sys/*.h
all-go:
${srcdest}build-aux/build-guile.sh
clean-go:
rm -f $(shell find . -name '*.go')
check:
./check.sh
# Mes does not feature post-install checks yet, so we're great!
installcheck:
true
install: src/mes
./install.sh
uninstall:
./uninstall.sh
seed: all-go mes-gcc mes-tcc
ifdef TCC
cd $(TINYCC_SEED) && MES_PREFIX=$(PWD) ./refresh.sh
endif
cd $(MES_SEED) && git reset --hard HEAD
MES=$(GUILE) GUILE=$(GUILE) SEED=1 ${srcdest}build-aux/build-mes.sh
cd $(MES_SEED) && MES_PREFIX=$(PWD) ./refresh.sh
MES=$(GUILE) GUILE=$(GUILE) SEED=1 ${srcdest}build-aux/build-mes.sh
cp lib/x86-mes/elf32-header.hex2\
lib/x86-mes/x86.M1\
lib/x86-mes/libc+tcc.S\
lib/x86-mes/libc.S\
lib/x86-mes/crt1.S\
lib/x86-mes/libgetopt.S\
$(MESCC_TOOLS_SEED)/libs
cd $(MESCC_TOOLS_SEED) && MES_PREFIX=$(PWD) ./bootstrap.sh
doc/version.texi: doc/mes.texi GNUmakefile
@mkdir -p $(@D)
(set `LANG= date -r $< +'%d %B %Y'`;\
echo "@set UPDATED $$1 $$2 $$3"; \
echo "@set UPDATED-MONTH $$2 $$3"; \
echo "@set EDITION $(VERSION)"; \
echo "@set VERSION $(VERSION)") > $@
doc: doc/version.texi
ifdef MAKEINFO
doc: info
else
$(warning skipping info: no makeinfo)
endif
ifdef HELP2MAN
doc: man
else
$(warning skipping man: no help2man)
endif
info: doc/mes.info
doc/mes.info: ${srcdest}doc/mes.texi doc/version.texi ${srcdest}doc/images/gcc-mesboot-graph.dot GNUmakefile
$(MAKEINFO) -o $@ -I doc -I doc $<
doc/images/%.eps: ${srcdest}doc/images/%.dot
ifdef DOT
$(DOT) -T eps $< > $@
else
touch $@
endif
doc/images/%.pdf: ${srcdest}doc/images/%.dot
ifdef DOT
$(DOT) -T pdf $< > $@
else
touch $@
endif
doc/images/%.png: ${srcdest}doc/images/%.dot
ifdef DOT
$(DOT) -T png $< > $@
else
touch $@
$(warning info: graphvis missing: no images)
endif
man: doc/mes.1 doc/mescc.1
src/mes: build
doc/mes.1: src/mes
MES_ARENA=10000000 ./pre-inst-env $(HELP2MAN) $(<F) > $@
doc/mescc.1: src/mes scripts/mescc
MES_ARENA=10000000 ./pre-inst-env $(HELP2MAN) $(<F) > $@
html: doc/html/index.html
doc/html/index.html: ${srcdest}doc/mes.texi doc/version.texi doc/images/gcc-mesboot-graph.png
$(MAKEINFO) --html -o $(@D) -I ${srcdest}doc -I doc $<
dvi: doc/mes.dvi
doc/mes.dvi: ${srcdest}doc/mes.texi
$(MAKEINFO) --dvi -I ${srcdest}doc -I doc -o doc/mes.dvi $<
pdf: doc/mes.pdf
doc/mes.pdf: ${srcdest}doc/mes.texi
$(MAKEINFO) --pdf -I ${srcdest}doc -I doc -o doc/mes.pdf $<
ps: doc/mes.ps
doc/mes.ps: ${srcdest}doc/mes.texi
$(MAKEINFO) --ps -I ${srcdest}doc -I doc -o doc/mes.ps $<
WEB_IMAGES:=\
doc/images/gcc-mesboot-graph.eps\
doc/images/gcc-mesboot-graph.pdf\
doc/images/gcc-mesboot-graph.png
web: info $(WEB_IMAGES)
GENDOCS_TEMPLATE_DIR=doc build-aux/gendocs.sh -I doc -s doc/mes.texi -o doc/web/manual --email bug-mes@gnu.org mes "GNU Mes manual"
### dist
COMMIT=$(shell test -d ${srcdest}.git && (cd ${srcdir} && git describe --dirty 2>/dev/null) || cat ${srcdest}.tarball-version)
TARBALL_VERSION=$(COMMIT:v%=%)
TARBALL_DIR:=$(PACKAGE)-$(TARBALL_VERSION)
TARBALL:=$(TARBALL_DIR).tar.gz
.tarball-version:
echo $(COMMIT) > $@
GIT_ARCHIVE_HEAD:=git archive HEAD --
GIT_LS_FILES:=git ls-files
ifeq ($(wildcard .git),)
GIT_ARCHIVE_HEAD:=tar -cf-
GIT_LS_FILES:=find
endif
dist: $(TARBALL)
sign: $(TARBALL)
gpg --detach-sign $<
tree-clean-p:
test ! -d .git || git diff --exit-code > /dev/null
test ! -d .git || git diff --cached --exit-code > /dev/null
@echo commit:$(COMMIT)
generate-ChangeLog:
2018-07-26 17:17:12 +00:00
$(PERL) ${srcdest}build-aux/gitlog-to-changelog --srcdir=${srcdir} > $@
cat ChangeLog >> generate-ChangeLog
mv generate-ChangeLog ChangeLog
$(TARBALL): .tarball-version | generate-ChangeLog
($(GIT_LS_FILES)\
--exclude=$(TARBALL_DIR);\
echo $^ | tr ' ' '\n')\
| GZIP=-n tar --sort=name --mtime=@0 --owner=0 --group=0 --numeric-owner\
--transform=s,^,$(TARBALL_DIR)/,S -T- -czf $@
git checkout ChangeLog
ifdef GUIX
update-hash: $(TARBALL)
$(GUIX) download file://$(PWD)/$<
sed -i -e 's,(base32 #!mes!# "[^"]*"),(base32 #!mes!# "$(shell $(GUIX) hash $<)"),' guix/git/mes.scm
else
$(warning update-hash: no guix)
endif
release: update-hash
./pre-inst-env $(GUIX) build mes@$(VERSION) --with-source=$(TARBALL)
installdirs: mkinstalldirs
mkdir -p\
$(DESTDIR)$(bindir)\
$(DESTDIR)$(datadir)\
$(DESTDIR)$(libdir)\
$(DESTDIR)$(infodir)\
$(DESTDIR)$(mandir)
install-dvi: dvi
mkdir -p $(DESTDIR)${docdir}
cp doc/mes.dvi $(DESTDIR)${docdir}
install-html: html
mkdir -p $(DESTDIR)${docdir}
tar -cf- -C doc html | tar -xf- -C $(DESTDIR)${docdir}
install-pdf: pdf
mkdir -p $(DESTDIR)${docdir}
cp doc/mes.pdf $(DESTDIR)${docdir}
install-ps: ps
mkdir -p $(DESTDIR)${docdir}
cp doc/mes.ps $(DESTDIR)${docdir}
# We do not strip binaries, binutils' strip corrupts M1+hex2-generated ELFs
install-strip: install
define HELP_TOP
Usage: make [OPTION]... [TARGET]...
Main and non-standard targets:
all update everything
all-go update .go files
gcc update src/mes.gcc-out
dist update $(TARBALL)
doc update documentation
mes-gcc update src/mes.mes-gcc-out
mes-tcc update src/mes.mes-tcc-out
mes update src/mes
check run unit tests
clean run git clean -dfx
clean-go clean .go files
info update info documentation
install install in $(prefix)
install-info install info docs in $(prefix)/share/info
release dist and tag
seed update mes-seed in $(MES_SEED)
uninstall uninstall from $(prefix)
endef
export HELP_TOP
help:
@echo "$$HELP_TOP"
include ${srcdest}build-aux/export.make