# GNU Mes --- Maxwell Equations of Software # Copyright © 2018 Jan (janneke) Nieuwenhuizen # # 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 . 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:=\ 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: doc doc: build build: ./build.sh src/mes: build 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 x86_64-mes: ${srcdest}build-aux/build-x86_64-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 check-mescc: ./pre-inst-env build-aux/check-mescc.sh # Mes does not feature post-install checks yet, so we're great! installcheck: true install: ./install.sh uninstall: ./uninstall.sh seed: all-go gcc mes-gcc mes-tcc 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 ifdef TCC cd $(TINYCC_SEED) && MES_PREFIX=$(PWD) ./refresh.sh endif doc/version.texi: ${srcdest}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 # disable builtin-rules %.o: %.s %.s: %.S %.o: %.S %.o: %.c %: %.S %: %.o %: %.c doc/mes.1: src/mes | build MES_ARENA=10000000 ./pre-inst-env $(HELP2MAN) $( $@ doc/mescc.1: scripts/mescc src/mes | build MES_ARENA=10000000 ./pre-inst-env $(HELP2MAN) $( $@ 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 ${srcdest}doc/mes.texi -o doc/web/manual --email bug-mes@gnu.org mes "GNU Mes manual" ### dist COMMIT=$(shell test -e ${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: $(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 tag: git tag -s v$(VERSION) -m "GNU Mes $(VERSION)." # Release process # 0. doc: Release update, Release commit, make seed, test guix bootstrap # 1. make tag # 2. make dist # 3. make release guix-build: ./pre-inst-env $(GUIX) build mes@$(VERSION) --with-source=$(TARBALL) release: update-hash | gen-announce guix-build GPG_KEY_ID:=1A858392E331EAFDB8C27FFBF3C1A0D9C1D65273 gen-announce: ../gnulib/build-aux/announce-gen\ --release-type=beta\ --package-name=mes\ --previous-version='0.17 '\ --current-version=$(VERSION)\ --gpg-key-id=$(GPG_KEY_ID)\ --url-directory=https://ftp.gnu.org/gnu/mes\ --news=NEWS\ > doc/announce/ANNOUNCE-$(VERSION)- 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