about summary refs log tree commit homepage
path: root/GNUmakefile
diff options
context:
space:
mode:
Diffstat (limited to 'GNUmakefile')
-rw-r--r--GNUmakefile90
1 files changed, 90 insertions, 0 deletions
diff --git a/GNUmakefile b/GNUmakefile
new file mode 100644
index 0000000..f0f8cdf
--- /dev/null
+++ b/GNUmakefile
@@ -0,0 +1,90 @@
+# Copyright (C) 2013, Eric Wong <normalperson@yhbt.net> and all contributors
+# License: GPLv3 or later (https://www.gnu.org/licenses/gpl-3.0.txt)
+all::
+pkg = yahns
+RUBY = ruby
+GIT-VERSION-FILE: .FORCE-GIT-VERSION-FILE
+        @./GIT-VERSION-GEN
+-include GIT-VERSION-FILE
+lib := lib
+
+all:: test
+test_units := $(wildcard test/test_*.rb)
+test: $(test_units)
+$(test_units):
+        $(RUBY) -w -I $(lib) $@ -v
+
+test-mt: export N = $(shell nproc 2>/dev/null || echo 4)
+test-mt:
+        $(RUBY) -w -I $(lib) $(addprefix -r./,$(test_units)) -eexit --
+
+check-warnings:
+        @(for i in $$(git ls-files '*.rb'| grep -v '^setup\.rb$$'); \
+          do $(RUBY) -d -W2 -c $$i; done) | grep -v '^Syntax OK$$' || :
+
+check: test
+coverage: export COVERAGE=1
+coverage:
+        > coverage.dump
+        $(MAKE) check
+        $(RUBY) ./test/covshow.rb
+
+coverage-mt: export COVERAGE=1
+coverage-mt:
+        > coverage.dump
+        $(MAKE) test-mt
+        $(RUBY) ./test/covshow.rb
+
+pkggem := pkg/$(pkg)-$(VERSION).gem
+pkgtgz := pkg/$(pkg)-$(VERSION).tar.gz
+
+fix-perms:
+        git ls-tree -r HEAD | awk '/^100644 / {print $$NF}' | xargs chmod 644
+        git ls-tree -r HEAD | awk '/^100755 / {print $$NF}' | xargs chmod 755
+
+gem: $(pkggem)
+
+install-gem: $(pkggem)
+        gem install $(CURDIR)/$<
+
+$(pkggem): .gem-manifest
+        VERSION=$(VERSION) gem build $(pkg).gemspec
+        mkdir -p pkg
+        mv $(@F) $@
+
+pkg_extra := GIT-VERSION-FILE lib/yahns/version.rb NEWS
+NEWS:
+        rake -s $@
+
+gem-man:
+        $(MAKE) -C Documentation/ gem-man
+tgz-man:
+        $(MAKE) -C Documentation/ install-man mandir=$(CURDIR)/man
+.PHONY: tgz-man gem-man
+
+.gem-manifest: .manifest
+        # (ls man/*.?; cat .manifest) | LC_ALL=C sort > $@+
+        LC_ALL=C sort < .manifest > $@+
+        cmp $@+ $@ || mv $@+ $@; rm -f $@+
+.tgz-manifest: .manifest
+        LC_ALL=C sort < .manifest > $@+
+        cmp $@+ $@ || mv $@+ $@; rm -f $@+
+.manifest: NEWS fix-perms
+        rm -rf man
+        (git ls-files; \
+         for i in $(pkg_extra); do echo $$i; done) | \
+         LC_ALL=C sort > $@+
+        cmp $@+ $@ || mv $@+ $@; rm -f $@+
+$(pkgtgz): distdir = pkg/$(pkg)-$(VERSION)
+$(pkgtgz): .tgz-manifest
+        @test -n "$(distdir)"
+        $(RM) -r $(distdir)
+        mkdir -p $(distdir)
+        tar cf - $$(cat .tgz-manifest) | (cd $(distdir) && tar xf -)
+        cd pkg && tar cf - $(pkg)-$(VERSION) | gzip -9 > $(@F)+
+        mv $@+ $@
+
+package: $(pkgtgz) $(pkggem)
+
+.PHONY: all .FORCE-GIT-VERSION-FILE test $(test_units) NEWS
+.PHONY: check-warnings fix-perms