diff --git a/progtest/.gitignore b/progtest/.gitignore
index b3878006..146e7e9c 100644
--- a/progtest/.gitignore
+++ b/progtest/.gitignore
@@ -1,6 +1,19 @@
-/node_modules
+# generated by autotools
+/aclocal.m4
+/autom4te.cache
+/build-aux
+/configure
+/Makefile.in
+
+# generated by configure
+bin/runner
+/config.*
+/Makefile
# output
/tame-progtest.js
index.js
+# npm
+/node_modules
+
diff --git a/progtest/Makefile b/progtest/Makefile.am
similarity index 96%
rename from progtest/Makefile
rename to progtest/Makefile.am
index 2d50e916..4276795f 100644
--- a/progtest/Makefile
+++ b/progtest/Makefile.am
@@ -35,7 +35,7 @@ modindex: $(nsindex)
test: check
check:
PATH="$(PATH):$(CURDIR)/node_modules/mocha/bin" \
- mocha --harmony_destructuring --recursive test/
+ mocha @NODE_DESTRUCTURE@ --recursive test/
browserify: tame-progtest.js
tame-progtest.js: check modindex
diff --git a/progtest/autogen.sh b/progtest/autogen.sh
new file mode 100755
index 00000000..d9c18b79
--- /dev/null
+++ b/progtest/autogen.sh
@@ -0,0 +1,27 @@
+#!/bin/bash
+# Autoreconf runner
+#
+# Copyright (C) 2018 R-T Specialty, LLC.
+#
+# This file is part of TAME.
+#
+# This program 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.
+#
+# This program 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 this program. If not, see .
+##
+
+which autoreconf &>/dev/null || {
+ echo "\`autoreconf' not found in PATH"
+ exit 1
+}
+
+exec autoreconf -fvi
diff --git a/progtest/bin/runner.in b/progtest/bin/runner.in
new file mode 100644
index 00000000..2b7593c1
--- /dev/null
+++ b/progtest/bin/runner.in
@@ -0,0 +1,37 @@
+#!/bin/bash
+# Start runner using Node.js executable determined at configure-time
+#
+# Copyright (C) 2018 R-T Specialty, LLC.
+#
+# This file is part of TAME.
+#
+# This program 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.
+#
+# This program 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 this program. If not, see .
+#
+# In addition to the configure-time NODE_FLAGS, the NODE_FLAGS environment
+# variable can be used to add additional arguments to this script.
+# WARNING: NODE_FLAGS arguments provided via environment varialbes are _not_
+# escaped, so be mindful of word expansion!
+#
+# @AUTOGENERATED@
+##
+
+declare -r mypath=$( dirname $( readlink -f "$0" ) )
+
+declare -r program="${1?Missing program JS path}"
+shift
+
+# this kluge just concatenates all test files together until we have
+# multi-file support (consequently, no args will read from stdin, which is
+# convenient)
+"@NODE@" @NODE_FLAGS@ $NODE_FLAGS "$mypath/runner.js" "$program" <( cat "$@" )
diff --git a/progtest/bin/runner.js b/progtest/bin/runner.js
index 88959922..c6c5debf 100644
--- a/progtest/bin/runner.js
+++ b/progtest/bin/runner.js
@@ -21,7 +21,7 @@
"use strict";
-const program = require( process.argv[ 2 ] );
+const program = require( process.cwd() + '/' + process.argv[ 2 ] );
const filename = process.argv[ 3 ];
const fs = require( 'fs' );
diff --git a/progtest/configure.ac b/progtest/configure.ac
new file mode 100644
index 00000000..ea5863d2
--- /dev/null
+++ b/progtest/configure.ac
@@ -0,0 +1,49 @@
+## For use my automake and autoconf
+#
+# Copyright (C) 2018 R-T Specialty, LLC.
+#
+# This file is part of TAME.
+#
+# This program 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.
+#
+# This program 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 this program. If not, see .
+##
+
+AC_INIT([tame-progtest], [0.0.0])
+AC_CONFIG_AUX_DIR([build-aux])
+AM_INIT_AUTOMAKE([foreign])
+
+AC_ARG_VAR([NODE], [The Node.js interpreter])
+AC_ARG_VAR([NODE_FLAGS], [Arguments to Node.js for test runner (bin/runner)])
+AC_CHECK_PROGS(NODE, [node nodejs])
+
+test -n "$NODE" || AC_MSG_ERROR([missing Node.js])
+
+# only needed for older versions of Node
+AC_MSG_CHECKING([$NODE --harmony_destructuring])
+AS_IF(["$NODE" --harmony_destructuring >/dev/null 2>/dev/null],
+ [AC_MSG_RESULT(available)
+ AC_SUBST([NODE_DESTRUCTURE], [--harmony_destructuring])],
+ [AC_MSG_RESULT(no)])
+
+NODE_FLAGS="$NODE_FLAGS $NODE_DESTRUCTURE"
+
+AC_SUBST([AUTOGENERATED],
+ ["THIS FILE IS AUTOGENERATED! DO NOT MODIFY! See *.in."])
+
+AC_CONFIG_FILES([Makefile])
+AC_CONFIG_FILES([bin/runner],
+ [chmod +x bin/runner])
+
+AC_OUTPUT
+
+AC_MSG_NOTICE([You may now invoke \`make' to build.])