Travis: detect special self-host-test branch.
authorJoel Martin <github@martintribe.org>
Tue, 28 May 2019 04:21:57 +0000 (23:21 -0500)
committerJoel Martin <github@martintribe.org>
Thu, 30 May 2019 02:15:00 +0000 (21:15 -0500)
- If the branch name is "self-host-test" then do self-hosted test.
- Fix pass through of *_MODE values during self-hosting.
- Add capability to skip of build/test/perf during self-host.
- Skip self-host for basic, io, logo, make.
- Reformat travis.yml list for better alignment

.travis.yml
.travis_build.sh
.travis_test.sh
Makefile
mal/run

dissimilarity index 88%
index 42f571c..c807496 100644 (file)
-sudo: required
-
-# matrix layout based on:
-# https://github.com/libressl-portable/portable/blob/9e090286b55def5ca2c0cc375c65023a70d8796e/.travis.yml
-
-matrix:
-  include:
-    - {env: IMPL=ada,       services: [docker]}
-    - {env: IMPL=ada.2,     services: [docker]}
-    - {env: IMPL=awk,       services: [docker]}
-    - {env: IMPL=bash,      services: [docker]}
-    - {env: IMPL=basic basic_MODE=cbm,    services: [docker]}
-    - {env: IMPL=basic basic_MODE=qbasic, services: [docker]}
-    - {env: IMPL=bbc-basic, services: [docker]}
-    - {env: IMPL=c,         services: [docker]}
-    - {env: IMPL=cpp,       services: [docker]}
-    - {env: IMPL=coffee,    services: [docker]}
-    - {env: IMPL=cs,        services: [docker]}
-    - {env: IMPL=chuck,     services: [docker]}
-    - {env: IMPL=clojure clojure_MODE=clj,  services: [docker]}
-    - {env: IMPL=clojure clojure_MODE=cljs, services: [docker]}
-    - {env: IMPL=common-lisp, services: [docker]}
-    - {env: IMPL=crystal,   services: [docker]}
-    - {env: IMPL=d d_MODE=gdc,  services: [docker]}
-    - {env: IMPL=d d_MODE=ldc2, services: [docker]}
-    - {env: IMPL=d d_MODE=dmd,  services: [docker]}
-    - {env: IMPL=dart,      services: [docker]}
-    - {env: IMPL=elisp,     services: [docker]}
-    - {env: IMPL=elixir,    services: [docker]}
-    - {env: IMPL=elm,       services: [docker]}
-    - {env: IMPL=erlang,    services: [docker]} # perf runs out of memory
-    - {env: IMPL=es6,       services: [docker]}
-    - {env: IMPL=factor,    services: [docker]}
-    - {env: IMPL=fantom,    services: [docker]}
-    - {env: IMPL=forth,     services: [docker]}
-    - {env: IMPL=fsharp,    services: [docker]}
-    - {env: IMPL=go,        services: [docker]}
-    - {env: IMPL=groovy,    services: [docker]}
-    - {env: IMPL=gnu-smalltalk, services: [docker]}
-    - {env: IMPL=guile,     services: [docker]}
-    - {env: IMPL=haskell,   services: [docker]}
-    - {env: IMPL=haxe haxe_MODE=neko,   services: [docker]}
-    - {env: IMPL=haxe haxe_MODE=python, services: [docker]}
-    - {env: IMPL=haxe haxe_MODE=cpp,    services: [docker]}
-    - {env: IMPL=haxe haxe_MODE=js,     services: [docker]}
-    - {env: IMPL=hy,        services: [docker]}
-    - {env: IMPL=io,        services: [docker]}
-    - {env: IMPL=java,      services: [docker]}
-    - {env: IMPL=js,        services: [docker]}
-    - {env: IMPL=julia,     services: [docker]}
-    - {env: IMPL=kotlin,    services: [docker]}
-    - {env: IMPL=livescript, services: [docker]}
-    - {env: IMPL=logo,      services: [docker]}
-    - {env: IMPL=lua,       services: [docker]}
-    - {env: IMPL=make,      services: [docker]}
-    - {env: IMPL=mal BUILD_IMPL=js, services: [docker]}
-    - {env: IMPL=matlab, services: [docker]} # Uses Octave
-    - {env: IMPL=miniMAL,   services: [docker]}
-    - {env: IMPL=nasm,      services: [docker]}
-    - {env: IMPL=nim,       services: [docker]}
-    - {env: IMPL=objpascal, services: [docker]}
-    - {env: IMPL=objc NO_DOCKER=1, os: osx, osx_image: xcode7}
-    - {env: IMPL=objc,      services: [docker]}
-    - {env: IMPL=ocaml,     services: [docker]}
-    - {env: IMPL=perl,      services: [docker]}
-    - {env: IMPL=perl6,     services: [docker]}
-    - {env: IMPL=php,       services: [docker]}
-    - {env: IMPL=picolisp,  services: [docker]}
-    - {env: IMPL=plpgsql,   services: [docker]}
-#    - {env: IMPL=plsql,     services: [docker]}
-    - {env: IMPL=ps,        services: [docker]}
-    - {env: IMPL=powershell, services: [docker]}
-    - {env: IMPL=python python_MODE=python2, services: [docker]}
-    - {env: IMPL=python python_MODE=python3, services: [docker]}
-    - {env: IMPL=r,         services: [docker]}
-    - {env: IMPL=racket,    services: [docker]}
-    - {env: IMPL=rexx,      services: [docker]}
-    - {env: IMPL=rpython,   services: [docker]}
-    - {env: IMPL=ruby,      services: [docker]}
-    - {env: IMPL=rust,      services: [docker]}
-    - {env: IMPL=scala,     services: [docker]}
-    - {env: IMPL=scheme scheme_MODE=chibi,       services: [docker]}
-    - {env: IMPL=scheme scheme_MODE=kawa,        services: [docker]}
-    - {env: IMPL=scheme scheme_MODE=gauche,      services: [docker]}
-    - {env: IMPL=scheme scheme_MODE=chicken,     services: [docker]}
-    - {env: IMPL=scheme scheme_MODE=sagittarius, services: [docker]}
-    - {env: IMPL=scheme scheme_MODE=cyclone,     services: [docker]}
-#    - {env: IMPL=scheme scheme_MODE=foment,      services: [docker]}
-    - {env: IMPL=skew,      services: [docker]}
-    - {env: IMPL=swift NO_DOCKER=1, os: osx, osx_image: xcode7.3}
-    - {env: IMPL=swift3,    services: [docker]}
-    - {env: IMPL=swift3 NO_DOCKER=1, os: osx, osx_image: xcode8}
-    - {env: IMPL=swift4,    services: [docker]}
-    - {env: IMPL=swift4 NO_DOCKER=1, os: osx, osx_image: xcode10}
-    - {env: IMPL=tcl,       services: [docker]}
-    - {env: IMPL=ts,        services: [docker]}
-    - {env: IMPL=vala,      services: [docker]}
-    - {env: IMPL=vb,        services: [docker]}
-    - {env: IMPL=vhdl,      services: [docker]}
-    - {env: IMPL=vimscript, services: [docker]}
-    - {env: IMPL=wasm wasm_MODE=wasmtime,  services: [docker]}
-    - {env: IMPL=wasm wasm_MODE=wax,       services: [docker]}
-    - {env: IMPL=wasm wasm_MODE=node,      services: [docker]}
-    - {env: IMPL=wasm wasm_MODE=wace_libc, services: [docker]}
-    - {env: IMPL=wasm wasm_MODE=warpy,     services: [docker]}
-    - {env: IMPL=yorick,    services: [docker]}
-
-script:
-  # Build
-  - ./.travis_build.sh
-
-  # Regular tests
-  - ./.travis_test.sh test ${IMPL}
-  - cat test.err || true
-
-  # NOTE: use self-host-test branch
-  # Self-hosted tests
-  #- ./.travis_test.sh test mal ${IMPL}
-  #- cat test.err || true; rm -f test.err
-
-  # Performance tests
-  - if [ -z "${NO_PERF}" ]; then ./.travis_test.sh perf ${IMPL}; fi
-  - cat perf.err || true
+sudo: required
+
+# matrix layout based on:
+# https://github.com/libressl-portable/portable/blob/9e090286b55def5ca2c0cc375c65023a70d8796e/.travis.yml
+
+matrix:
+  include:
+    - {env: IMPL=ada,                         services: [docker]}
+    - {env: IMPL=ada.2,                       services: [docker]}
+    - {env: IMPL=awk,                         services: [docker]}
+    - {env: IMPL=bash NO_SELF_HOST_PERF=1,    services: [docker]} # perf timeout
+    - {env: IMPL=basic basic_MODE=cbm NO_SELF_HOST=1,    services: [docker]} # step4 OOM
+    - {env: IMPL=basic basic_MODE=qbasic NO_SELF_HOST=1, services: [docker]} # step4 OOM
+    - {env: IMPL=bbc-basic,                   services: [docker]}
+    - {env: IMPL=c,                           services: [docker]}
+    - {env: IMPL=cpp,                         services: [docker]}
+    - {env: IMPL=coffee,                      services: [docker]}
+    - {env: IMPL=cs,                          services: [docker]}
+    - {env: IMPL=chuck NO_SELF_HOST_PERF=1,   services: [docker]} # perf OOM
+    - {env: IMPL=clojure clojure_MODE=clj,    services: [docker]}
+    - {env: IMPL=clojure clojure_MODE=cljs,   services: [docker]}
+    - {env: IMPL=common-lisp,                 services: [docker]}
+    - {env: IMPL=crystal,                     services: [docker]}
+    - {env: IMPL=d d_MODE=gdc,                services: [docker]}
+    - {env: IMPL=d d_MODE=ldc2,               services: [docker]}
+    - {env: IMPL=d d_MODE=dmd,                services: [docker]}
+    - {env: IMPL=dart,                        services: [docker]}
+    - {env: IMPL=elisp,                       services: [docker]}
+    - {env: IMPL=elixir,                      services: [docker]}
+    - {env: IMPL=elm,                         services: [docker]}
+    - {env: IMPL=erlang NO_SELF_HOST=1,       services: [docker]} # step8 OOM
+    - {env: IMPL=es6,                         services: [docker]}
+    - {env: IMPL=factor,                      services: [docker]}
+    - {env: IMPL=fantom,                      services: [docker]}
+    - {env: IMPL=forth,                       services: [docker]}
+    - {env: IMPL=fsharp,                      services: [docker]}
+    - {env: IMPL=go,                          services: [docker]}
+    - {env: IMPL=groovy,                      services: [docker]}
+    - {env: IMPL=gnu-smalltalk,               services: [docker]}
+    - {env: IMPL=guile,                       services: [docker]}
+    - {env: IMPL=haskell,                     services: [docker]}
+    - {env: IMPL=haxe haxe_MODE=neko,         services: [docker]}
+    - {env: IMPL=haxe haxe_MODE=python,       services: [docker]}
+    - {env: IMPL=haxe haxe_MODE=cpp,          services: [docker]}
+    - {env: IMPL=haxe haxe_MODE=js,           services: [docker]}
+    - {env: IMPL=hy,                          services: [docker]}
+    - {env: IMPL=io NO_SELF_HOST_PERF=1,      services: [docker]} # perf OOM
+    - {env: IMPL=java,                        services: [docker]}
+    - {env: IMPL=js,                          services: [docker]}
+    - {env: IMPL=julia,                       services: [docker]}
+    - {env: IMPL=kotlin,                      services: [docker]}
+    - {env: IMPL=livescript,                  services: [docker]}
+    - {env: IMPL=logo NO_SELF_HOST=1,         services: [docker]} # step4 timeout
+    - {env: IMPL=lua,                         services: [docker]}
+    - {env: IMPL=make NO_SELF_HOST=1,         services: [docker]} # step4 timeout
+    - {env: IMPL=mal BUILD_IMPL=js NO_SELF_HOST=1, services: [docker]}
+    - {env: IMPL=matlab NO_SELF_HOST_PERF=1,  services: [docker]} # Octave, perf timeout
+    - {env: IMPL=miniMAL NO_SELF_HOST_PERF=1, services: [docker]} # perf timeout
+    - {env: IMPL=nasm NO_SELF_HOST_PERF=1,    services: [docker]} # perf OOM
+    - {env: IMPL=nim,                         services: [docker]}
+    - {env: IMPL=objpascal,                   services: [docker]}
+    - {env: IMPL=objc NO_DOCKER=1, os: osx, osx_image: xcode7}
+    - {env: IMPL=objc,                        services: [docker]}
+    - {env: IMPL=ocaml,                       services: [docker]}
+    - {env: IMPL=perl,                        services: [docker]}
+    - {env: IMPL=perl6,                       services: [docker]}
+    - {env: IMPL=php,                         services: [docker]}
+    - {env: IMPL=picolisp,                    services: [docker]}
+    - {env: IMPL=plpgsql NO_SELF_HOST=1,      services: [docker]} # step3 timeout
+#    - {env: IMPL=plsql,                       services: [docker]}
+    - {env: IMPL=ps,                          services: [docker]}
+    - {env: IMPL=powershell NO_SELF_HOST_PERF=1, services: [docker]} # perf timeout
+    - {env: IMPL=python python_MODE=python2,  services: [docker]}
+    - {env: IMPL=python python_MODE=python3,  services: [docker]}
+    - {env: IMPL=r,                           services: [docker]}
+    - {env: IMPL=racket,                      services: [docker]}
+    - {env: IMPL=rexx,                        services: [docker]}
+    - {env: IMPL=rpython,                     services: [docker]}
+    - {env: IMPL=ruby,                        services: [docker]}
+    - {env: IMPL=rust,                        services: [docker]}
+    - {env: IMPL=scala,                       services: [docker]}
+    - {env: IMPL=scheme scheme_MODE=chibi,    services: [docker]}
+    - {env: IMPL=scheme scheme_MODE=kawa,     services: [docker]}
+    - {env: IMPL=scheme scheme_MODE=gauche,   services: [docker]}
+    - {env: IMPL=scheme scheme_MODE=chicken,  services: [docker]}
+    - {env: IMPL=scheme scheme_MODE=sagittarius, services: [docker]}
+    - {env: IMPL=scheme scheme_MODE=cyclone,  services: [docker]}
+#    - {env: IMPL=scheme scheme_MODE=foment,   services: [docker]}
+    - {env: IMPL=skew,                        services: [docker]}
+    - {env: IMPL=swift NO_DOCKER=1, os: osx, osx_image: xcode7.3}
+    - {env: IMPL=swift3,                      services: [docker]}
+    - {env: IMPL=swift3 NO_DOCKER=1, os: osx, osx_image: xcode8}
+    - {env: IMPL=swift4,                      services: [docker]}
+    - {env: IMPL=swift4 NO_DOCKER=1, os: osx, osx_image: xcode10}
+    - {env: IMPL=tcl,                         services: [docker]}
+    - {env: IMPL=ts,                          services: [docker]}
+    - {env: IMPL=vala,                        services: [docker]}
+    - {env: IMPL=vb,                          services: [docker]}
+    - {env: IMPL=vhdl NO_SELF_HOST_PERF=1,    services: [docker]} # perf timeout
+    - {env: IMPL=vimscript,                   services: [docker]}
+    - {env: IMPL=wasm wasm_MODE=wasmtime,     services: [docker]}
+    - {env: IMPL=wasm wasm_MODE=wax,          services: [docker]}
+    - {env: IMPL=wasm wasm_MODE=node,         services: [docker]}
+    - {env: IMPL=wasm wasm_MODE=wace_libc,    services: [docker]}
+    - {env: IMPL=wasm wasm_MODE=warpy,        services: [docker]}
+    - {env: IMPL=yorick,                      services: [docker]}
+
+script:
+  # Build
+  - ./.travis_build.sh
+
+  # Normal tests
+  - ./.travis_test.sh test ${IMPL}
+  - cat test.err || true
+
+  # Performance tests
+  - ./.travis_test.sh perf ${IMPL}
+  - cat perf.err || true
index d47a293..2375254 100755 (executable)
@@ -7,16 +7,23 @@ BUILD_IMPL=${BUILD_IMPL:-${IMPL}}
 mode_var=${IMPL}_MODE
 mode_val=${!mode_var}
 
+# Special tags/branches
+case "${TRAVIS_BRANCH}" in
+self-host-test)
+    if [ "${NO_SELF_HOST}" ]; then
+        echo "Skipping ${MAL_IMPL} self-host build"
+        exit 0
+    fi
+    ;;
+esac
+
+
 # If NO_DOCKER is blank then launch use a docker image, otherwise
 # use the Travis image/tools directly.
 if [ -z "${NO_DOCKER}" ]; then
-    impl=$(echo "${IMPL}" | tr '[:upper:]' '[:lower:]')
     img_impl=$(echo "${BUILD_IMPL}" | tr '[:upper:]' '[:lower:]')
 
-    docker pull kanaka/mal-test-${impl}
-    if [ "${impl}" != "${img_impl}" ]; then
-        docker pull kanaka/mal-test-${img_impl}
-    fi
+    docker pull kanaka/mal-test-${img_impl}
     if [ "${BUILD_IMPL}" = "rpython" ]; then
         # rpython often fails on step9 in compute_vars_longevity
         # so build step9, then continue wit the full build
index cafb005..308f711 100755 (executable)
@@ -4,28 +4,46 @@ set -ex
 
 ACTION=${1}
 IMPL=${2}
-MAL_IMPL=${3:-js}
 
-mode_var=${IMPL}_MODE
+# Special tags/branches
+case "${TRAVIS_BRANCH}" in
+self-host-test)
+    MAL_IMPL=${IMPL}
+    IMPL=mal
+    ;;
+esac
+
+mode_var=${MAL_IMPL:-${IMPL}}_MODE
 mode_val=${!mode_var}
 
 echo "ACTION: ${ACTION}"
 echo "IMPL: ${IMPL}"
 echo "MAL_IMPL: ${MAL_IMPL}"
 
+if [ "${MAL_IMPL}" ]; then
+    if [ "${NO_SELF_HOST}" ]; then
+        echo "Skipping ${MAL_IMPL} self-host"
+        exit 0
+    fi
+    if [ "${ACTION}" = "perf" -a "${NO_SELF_HOST_PERF}" ]; then
+        echo "Skipping perf test for ${MAL_IMPL} self-host"
+        exit 0
+    fi
+fi
+
 # If NO_DOCKER is blank then launch use a docker image, otherwise use
 # the Travis image/tools directly.
 if [ "${NO_DOCKER}" ]; then
     MAKE="make"
 else
-    impl=$(echo "${IMPL}" | tr '[:upper:]' '[:lower:]')
-    img_impl=$(echo "${3:-${IMPL}}" | tr '[:upper:]' '[:lower:]')
-
+    img_impl=$(echo "${MAL_IMPL:-${IMPL}}" | tr '[:upper:]' '[:lower:]')
+    # We could just use make DOCKERIZE=1 instead but that does add
+    # non-trivial startup overhead for each step.
     MAKE="docker run -it -u $(id -u) -v `pwd`:/mal kanaka/mal-test-${img_impl} make"
 fi
 
 ${MAKE} TEST_OPTS="--debug-file ../${ACTION}.err" \
-    MAL_IMPL=${MAL_IMPL} \
+    ${MAL_IMPL:+MAL_IMPL=${MAL_IMPL}} \
      ${mode_val:+${mode_var}=${mode_val}} \
     ${ACTION}^${IMPL}
 
index 57036f7..9a5d905 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -291,35 +291,37 @@ actual_impl = $(if $(filter mal,$(1)),$(MAL_IMPL),$(1))
 # Returns nothing if DOCKERIZE is not set, otherwise returns the
 # docker prefix necessary to run make within the docker environment
 # for this impl
-get_build_command = $(strip $(if $(strip $(DOCKERIZE)),\
-    docker run \
-    -it --rm -u $(shell id -u) \
-    -v $(dir $(abspath $(lastword $(MAKEFILE_LIST)))):/mal \
-    -w /mal/$(1) \
-    $(if $(strip $($(1)_MODE)),-e $(1)_MODE=$($(1)_MODE),) \
-    $(if $(filter factor,$(1)),-e FACTOR_ROOTS=$(FACTOR_ROOTS),) \
-    $(call impl_to_image,$(1)) \
-    $(MAKE) $(if $(strip $($(1)_MODE)),$(1)_MODE=$($(1)_MODE),) \
-    ,\
-    $(MAKE) $(if $(strip $($(1)_MODE)),$(1)_MODE=$($(1)_MODE),)))
+get_build_command = $(strip $(foreach mode,$(1)_MODE, \
+    $(if $(strip $(DOCKERIZE)),\
+      docker run \
+      -it --rm -u $(shell id -u) \
+      -v $(dir $(abspath $(lastword $(MAKEFILE_LIST)))):/mal \
+      -w /mal/$(1) \
+      $(if $(strip $($(mode))),-e $(mode)=$($(mode)),) \
+      $(if $(filter factor,$(1)),-e FACTOR_ROOTS=$(FACTOR_ROOTS),) \
+      $(call impl_to_image,$(1)) \
+      $(MAKE) $(if $(strip $($(mode))),$(mode)=$($(mode)),) \
+      ,\
+      $(MAKE) $(if $(strip $($(mode))),$(mode)=$($(mode)),) -C $(impl))))
 
 # Takes impl and step args. Optional env vars and dockerize args
 # Returns a command prefix (docker command and environment variables)
 # necessary to launch the given impl and step
-get_run_prefix = $(strip $(if $(strip $(DOCKERIZE) $(4)),\
-    docker run -e STEP=$($2) -e MAL_IMPL=$(MAL_IMPL) \
-    -it --rm -u $(shell id -u) \
-    -v $(dir $(abspath $(lastword $(MAKEFILE_LIST)))):/mal \
-    -w /mal/$(call actual_impl,$(1)) \
-    $(if $(strip $($(1)_MODE)),-e $(1)_MODE=$($(1)_MODE),) \
-    $(if $(filter factor,$(1)),-e FACTOR_ROOTS=$(FACTOR_ROOTS),) \
-    $(foreach env,$(3),-e $(env)) \
-    $(call impl_to_image,$(call actual_impl,$(1))) \
-    ,\
-    env STEP=$($2) MAL_IMPL=$(MAL_IMPL) \
-    $(if $(strip $($(1)_MODE)),$(1)_MODE=$($(1)_MODE),) \
-    $(if $(filter factor,$(1)),FACTOR_ROOTS=$(FACTOR_ROOTS),) \
-    $(3)))
+get_run_prefix = $(strip $(foreach mode,$(call actual_impl,$(1))_MODE, \
+    $(if $(strip $(DOCKERIZE) $(4)),\
+      docker run -e STEP=$($2) -e MAL_IMPL=$(MAL_IMPL) \
+      -it --rm -u $(shell id -u) \
+      -v $(dir $(abspath $(lastword $(MAKEFILE_LIST)))):/mal \
+      -w /mal/$(call actual_impl,$(1)) \
+      $(if $(strip $($(mode))),-e $(mode)=$($(mode)),) \
+      $(if $(filter factor,$(1)),-e FACTOR_ROOTS=$(FACTOR_ROOTS),) \
+      $(foreach env,$(3),-e $(env)) \
+      $(call impl_to_image,$(call actual_impl,$(1))) \
+      ,\
+      env STEP=$($2) MAL_IMPL=$(MAL_IMPL) \
+      $(if $(strip $($(mode))),$(mode)=$($(mode)),) \
+      $(if $(filter factor,$(1)),FACTOR_ROOTS=$(FACTOR_ROOTS),) \
+      $(3))))
 
 # Takes impl and step
 # Returns the runtest command prefix (with runtest options) for testing the given step
@@ -369,7 +371,7 @@ $(foreach i,$(DO_IMPLS),$(foreach s,$(STEPS),$(call $(i)_STEP_TO_PROG,$(s)))):
        $(foreach impl,$(word 1,$(subst /, ,$(@))),\
          $(if $(DOCKERIZE), \
            $(call get_build_command,$(impl)) $(patsubst $(impl)/%,%,$(@)), \
-           $(call get_build_command,$(impl)) -C $(impl) $(subst $(impl)/,,$(@))))
+           $(call get_build_command,$(impl)) $(subst $(impl)/,,$(@))))
 
 # Allow IMPL, and IMPL^STEP
 $(DO_IMPLS): $$(foreach s,$$(STEPS),$$(call $$(@)_STEP_TO_PROG,$$(s)))
@@ -493,11 +495,8 @@ $(1): $(2)
 $(2):
        @echo "----------------------------------------------"; \
        $$(foreach impl,$$(word 2,$$(subst ^, ,$$(@))),\
-         $$(if $$(DOCKERIZE), \
-           echo "Running: $$(call get_build_command,$$(impl)) --no-print-directory $(1)"; \
-           $$(call get_build_command,$$(impl)) --no-print-directory $(1), \
-           echo "Running: $$(call get_build_command,$$(impl)) --no-print-directory -C $$(impl) $(1)"; \
-           $$(call get_build_command,$$(impl)) --no-print-directory -C $$(impl) $(1)))
+         echo "Running: $$(call get_build_command,$$(impl)) --no-print-directory $(1)"; \
+         $$(call get_build_command,$$(impl)) --no-print-directory $(1))
 endef
 
 recur_impls_ = $(filter-out $(foreach impl,$($(1)_EXCLUDES),$(1)^$(impl)),$(foreach impl,$(IMPLS),$(1)^$(impl)))
diff --git a/mal/run b/mal/run
index a6f4bfe..3e1e630 100755 (executable)
--- a/mal/run
+++ b/mal/run
@@ -1,5 +1,4 @@
 #!/bin/bash
-cd $(dirname $0)
 MAL_FILE=./../mal/${STEP:-stepA_mal}.mal
 export STEP=stepA_mal # force MAL_IMPL to use stepA
 exec ./../${MAL_IMPL:-js}/run ${MAL_FILE} "${@}"