summaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--Makefile144
1 files changed, 125 insertions, 19 deletions
diff --git a/Makefile b/Makefile
index 7e4b5ec..8d9bdba 100644
--- a/Makefile
+++ b/Makefile
@@ -1,9 +1,8 @@
.POSIX:
DATE = 1970-01-01
VERSION = 0.1.0
-NAME = datomic
+NAME = dtmc
NAME_UC = $(NAME)
-LANGUAGES = en
## Installation prefix. Defaults to "/usr".
PREFIX = /usr
BINDIR = $(PREFIX)/bin
@@ -14,16 +13,19 @@ SRCDIR = $(PREFIX)/src/$(NAME)
SHAREDIR = $(PREFIX)/share
LOCALEDIR = $(SHAREDIR)/locale
MANDIR = $(SHAREDIR)/man
-JAVADIR = $(SHAREDIR)/java/$(NAME)
+JAVADIR = $(SHAREDIR)/java
EXEC = ./
## Where to store the installation. Empty by default.
DESTDIR =
LDLIBS =
+PROVERSION = datomic-pro-1.0.7469
+JAVA = java -client
+CLASSPATH = $(JARPATH)/clojure.jar
.SUFFIXES:
-.SUFFIXES: .in
+.SUFFIXES: .in .jar .jar-check .dir .d
.in:
sed \
@@ -32,20 +34,53 @@ LDLIBS =
< $< > $@
if [ -x $< ]; then chmod +x $@; fi
+.jar.dir:
+ mkdir -p $@ && cd $@ && jar -xf ../$(<F) && touch .
+
all:
include deps.mk
+etc-files = \
+ etc/init.sql \
+ etc/logback.xml \
+ etc/transactor.properties.tmpl \
+
+bins = \
+ bin/transactor \
+ bin/$(NAME) \
+
sources = \
- $(sources.sh) \
+
+inits = \
+ src/$(NAME)__init.class \
+ tests/unit__init.class \
+ tests/integration__init.class \
derived-assets = \
+ src/$(PROVERSION)/dir.sentinel \
+ lib/dir.sentinel \
+ lib/extracted.sentinel \
+ $(inits) \
+ $(NAME).jar \
+ $(NAME).dir \
+ unit.jar \
+ integration.jar \
bin/transactor \
+ bin/$(NAME) \
+ peer.d \
+ transactor.d \
+ peer.jar \
+ transactor.jar \
side-assets = \
+ src/$(PROVERSION)/ \
+ lib/ \
+ src/*.class \
+ tests/*.class \
@@ -54,11 +89,77 @@ side-assets = \
all: $(derived-assets)
+$(inits) src/$(PROVERSION)/dir.sentinel: Makefile deps.mk
+$(NAME).dir: $(NAME).jar
+
+
+src/$(PROVERSION)/dir.sentinel: src/$(PROVERSION).zip
+ cd src && unzip -o $(PROVERSION).zip
+ touch $@
+
+lib/dir.sentinel: src/$(PROVERSION)/dir.sentinel
+ mkdir -p $(@D)
+ cp src/$(PROVERSION)/lib/console/*.jar $(@D)
+ cp src/$(PROVERSION)/lib/*.jar $(@D)
+ cp src/$(PROVERSION)/*.jar $(@D)
+ touch $@
+
+lib/extracted.sentinel: lib/dir.sentinel
+ +$(MAKE) `find lib/*.jar | sed s:\.jar$$:.dir:`
+ rm -f lib/transactor.dir
+ cd lib/ && ln -s datomic-transactor-pro*.dir transactor.dir
+ touch $@
+
+src/$(NAME)__init.class: src/$(NAME).clj lib/dir.sentinel
+ $(JAVA) --class-path src:lib/*:$(CLASSPATH) clojure.main -e \
+ '(binding [*compile-path* "src"] \
+ (compile (quote $(NAME))))'
+ touch $@
+
+tests/unit__init.class: tests/unit.clj $(NAME).jar
+ CP='tests:lib/*:$(NAME).jar:$(CLASSPATH)'; \
+ $(JAVA) --class-path "$$CP" clojure.main -e \
+ '(binding [*compile-path* "tests"] \
+ (compile (quote unit)))'
+ touch $@
-check-unit:
+tests/integration__init.class: tests/integration.clj $(NAME).jar
+ CP='tests:lib/*:$(NAME).jar:$(CLASSPATH)'; \
+ $(JAVA) --class-path "$$CP" clojure.main -e \
+ '(binding [*compile-path* "tests"] \
+ (compile (quote integration)))'
+ touch $@
+$(NAME).jar: src/$(NAME)__init.class
+ cd src && jar -cvf ../$@ *.class
-check-integration:
+unit.jar: tests/unit__init.class
+integration.jar: tests/integration__init.class
+unit.jar integration.jar:
+ cd tests && jar -cvf ../$@ $**.class
+
+peer.d transactor.d: etc/logback.xml $(NAME).dir lib/extracted.sentinel \
+ include.txt
+ rsync -a --delete lib/$**.dir/ `sed -e '/^#/d' -e /^$$/d include.txt` $@
+ touch $@
+
+peer.jar: peer.d
+transactor.jar: transactor.d
+peer.jar transactor.jar:
+ cd $*.d && jar -cf ../$@ .
+
+
+
+unit.jar-check: unit.jar
+integration.jar-check: integration.jar
+unit.jar-check integration.jar-check: transactor.jar
+ $(JAVA) --class-path $*.jar:transactor.jar:$(CLASSPATH) $*
+
+
+check-unit: unit.jar-check
+
+
+check-integration: integration.jar-check
## Run all tests. Each test suite is isolated, so that a parallel
@@ -78,25 +179,30 @@ clean:
## ensures that all installable artifacts are crafted beforehand.
install: all
mkdir -p \
- '$(DESTDIR)$(BINDIR)' \
- '$(DESTDIR)$(SYSCONFDIR)' \
- '$(DESTDIR)$(JAVADIR)' \
-
- cp bin/transactor '$(DESTDIR)$(BINDIR)'
- cp etc/init.sql etc/logback.xml etc/transactor.properties.tmpl \
- '$(DESTDIR)$(SYSCONFDIR)'
- cp share/java/datomic/*.jar \
- '$(DESTDIR)$(JAVADIR)'
+ '$(DESTDIR)$(BINDIR)' \
+ '$(DESTDIR)$(SYSCONFDIR)' \
+ '$(DESTDIR)$(SRCDIR)' \
+ '$(DESTDIR)$(JAVADIR)' \
+ cp $(bins) '$(DESTDIR)$(BINDIR)'
+ cp $(etc-files) '$(DESTDIR)$(SYSCONFDIR)'
+ cp src/$(NAME).clj '$(DESTDIR)$(SRCDIR)'
+ cp $(NAME).jar '$(DESTDIR)$(JAVADIR)'
+ cp transactor.jar '$(DESTDIR)$(JAVADIR)'
+ cp -P peer.jar '$(DESTDIR)$(JAVADIR)'
## Uninstalls from $(DESTDIR)$(PREFIX). This is a perfect mirror
## of the "install" target, and removes *all* that was installed.
## A dedicated test asserts that this is always true.
uninstall:
rm -rf \
- '$(DESTDIR)$(BINDIR)'/transactor \
- '$(DESTDIR)$(SYSCONFDIR)' \
- '$(DESTDIR)$(JAVADIR)' \
+ '$(DESTDIR)$(BINDIR)'/transactor \
+ '$(DESTDIR)$(BINDIR)'/$(NAME) \
+ '$(DESTDIR)$(SYSCONFDIR)' \
+ '$(DESTDIR)$(JAVADIR)'/$(NAME).jar \
+ '$(DESTDIR)$(JAVADIR)'/transactor.jar \
+ '$(DESTDIR)$(JAVADIR)'/peer.jar \
+ '$(DESTDIR)$(SRCDIR)' \