build: Implement make dist rule.
[goals.git] / Goalfile.in
index d28b931..4a613c4 100644 (file)
@@ -59,13 +59,9 @@ let MENHIR = "@MENHIR@"
 let OCAMLDEP = "@OCAMLDEP@"
 let OCAMLFIND = "@OCAMLFIND@"
 let OCAMLLEX = "@OCAMLLEX@"
-# XXX
-let CFLAGS = [ "-g", "-O2", "-I%OCAMLLIB", "-I." ]
-#let CFLAGS = "@CFLAGS@ -I%OCAMLLIB -I."
-let OCAMLFLAGS = [ "-g", "-safe-string", "-warn-error", "CDEFLMPSUVYZX+52-3" ]
-let OCAMLPACKAGES = [ "-package", "str,unix,threads", "-I", "src", "-thread" ]
-#let OCAMLFLAGS = "@OCAMLFLAGS@"
-#let OCAMLPACKAGES = "@OCAMLPACKAGES@"
+let CFLAGS = join (split ("@CFLAGS@"), ["-I%OCAMLLIB", "-I."])
+let OCAMLFLAGS = split ("@OCAMLFLAGS@")
+let OCAMLPACKAGES = join (split ("@OCAMLPACKAGES@"), ["-I", "src"])
 
 let objects = [
     # These must be in dependency order.
@@ -151,15 +147,103 @@ goal test (name) = @{
     t=`basename %name`
     cd tests
     if ../run ./$t > $t.log 2>&1; then
-        start_green
-        echo -n "PASS: "
-        end_colour
-        echo $t
+        print_green "PASS:" $t
     else
-        start_red
-        echo -n "FAIL: "
-        end_colour
-        echo $t
+        print_red "FAIL:" $t
         exit 1
     fi
 }
+
+#----------------------------------------------------------------------
+# Install.
+
+# DESTDIR can be overridden on the command line to install into
+# a subdirectory.
+let DESTDIR = ""
+
+let stdlibfiles = [wildcard ("stdlib/*.gl"), wildcard ("stdlib/*.sh")]
+
+goal install = {
+    # exec_prefix die die die
+    bindir="@prefix@/bin"
+    datadir="@prefix@/share"
+    mkdir -p %DESTDIR/"$bindir"
+    mkdir -p %DESTDIR/"$datadir/goals"
+    install src/goals %DESTDIR/"$bindir" -m 0755
+    install %stdlibfiles %DESTDIR/"$datadir"/goals -m 644
+}
+
+#----------------------------------------------------------------------
+# Distribution.
+
+let sources = [
+    "src/ast.ml",
+    "src/ast.mli",
+    "src/cmdline.ml",
+    "src/cmdline.mli",
+    "src/config.ml.in",
+    "src/config.mli",
+    "src/deps.ml",
+    "src/deps.mli",
+    "src/eval.ml",
+    "src/eval.mli",
+    "src/jobs.ml",
+    "src/jobs.mli",
+    "src/lexer.mli",
+    "src/lexer.mll",
+    "src/main.ml",
+    "src/parse.ml",
+    "src/parse.mli",
+    "src/parser.mly",
+    "src/run.ml",
+    "src/run.mli",
+    "src/utils-c.c",
+    "src/utils.ml",
+    "src/utils.mli",
+]
+
+let distfiles = [
+    ".gitignore",
+    "COPYING",
+    "Goalfile.in",
+    "Makefile.in",
+    "README",
+    "TODO",
+    "autogen.sh",
+    "config.h.in",
+    "configure",
+    "configure.ac",
+    wildcard ("docs/*.pod"),
+    "install-sh",
+    "m4/ocaml.m4",
+    "run.in",
+    sources,
+    "stamp-h.in",
+    wildcard ("stdlib/*.gl"),
+    wildcard ("stdlib/*.sh"),
+    wildcard ("tests/*.data"),
+    wildcard ("tests/*.data[0-9]"),
+    wildcard ("tests/*.expected"),
+    wildcard ("tests/*.gl"),
+    wildcard ("tests/*.sh"),
+    wildcard ("tests/10-function-wildcard.d/*"),
+]
+
+let tarfile = "@PACKAGE_NAME@-@PACKAGE_VERSION@.tar.gz"
+
+goal dist = {
+    d="@PACKAGE_NAME@-@PACKAGE_VERSION@"
+    o=%tarfile
+    rm -rf "$d"
+    rm -f "$o" "$o-t"
+
+    mkdir "$d"
+    for f in %distfiles; do
+        subdir="$(dirname "$f")"
+        mkdir -p "$d/$subdir"
+        cp -a "$f" "$d/$subdir"
+    done
+    tar zcf "$o-t" "$d"
+    mv "$o-t" "$o"
+    rm -rf "$d"
+}