From da3fdd33d1a447e500505f90f03d63da776d713f Mon Sep 17 00:00:00 2001 From: "Martine S. Lenders" Date: Tue, 7 Jul 2020 18:57:16 +0200 Subject: [PATCH 1/2] tools: add capability to provide make command via environment Not all operating systems name the GNU Make `make`. FreeBSD e.g. uses a different dialect of Make, that seems to be incompatible with GNU make. (I wasn't able to get `make` run, but `gmake` works). This allows our test scripts to be configured via the environment variable `MAKE` to point to a different make command. --- dist/pythonlibs/testrunner/spawn.py | 5 +++-- dist/tools/ci/print_toolchain_versions.sh | 6 ++++-- .../compile_and_test_for_board.py | 6 ++++-- dist/tools/compile_test/compile_test.py | 7 +++++-- 4 files changed, 16 insertions(+), 8 deletions(-) diff --git a/dist/pythonlibs/testrunner/spawn.py b/dist/pythonlibs/testrunner/spawn.py index c7daa6155808..502bb63b6e6a 100644 --- a/dist/pythonlibs/testrunner/spawn.py +++ b/dist/pythonlibs/testrunner/spawn.py @@ -41,13 +41,14 @@ TESTRUNNER_RESET_AFTER_TERM = int(os.environ.get('TESTRUNNER_RESET_AFTER_TERM') or '0') +MAKE = os.environ.get('MAKE', 'make') def _reset_board(env): if MAKE_RESET_DELAY > 0: time.sleep(MAKE_RESET_DELAY) try: - subprocess.check_output(('make', 'reset'), env=env, + subprocess.check_output((MAKE, 'reset'), env=env, stderr=subprocess.PIPE) except subprocess.CalledProcessError: # make reset yields error on some boards even if successful @@ -74,7 +75,7 @@ def setup_child(timeout=10, spawnclass=pexpect.spawnu, env=None, logfile=None): # the serial terminal. This gives time for stdio to be ready. time.sleep(MAKE_TERM_CONNECT_DELAY) - child = spawnclass("make cleanterm", env=env, timeout=timeout, + child = spawnclass("{} cleanterm".format(MAKE), env=env, timeout=timeout, codec_errors='replace', echo=False) # on many platforms, the termprog needs a short while to be ready... diff --git a/dist/tools/ci/print_toolchain_versions.sh b/dist/tools/ci/print_toolchain_versions.sh index 73d253f3cc2f..18fa3f3c1055 100755 --- a/dist/tools/ci/print_toolchain_versions.sh +++ b/dist/tools/ci/print_toolchain_versions.sh @@ -1,5 +1,7 @@ #!/bin/sh +MAKE=${MAKE:-make} + get_cmd_version() { if [ -z "$1" ]; then return @@ -80,7 +82,7 @@ get_sys_shell() { } _get_make_shell() { - make -sf - 2>/dev/null </dev/null < Date: Wed, 8 Jul 2020 08:38:16 +0200 Subject: [PATCH 2/2] tests: add capability to provide make command via environment For those tests that don't use the tooling fixed in the previous commit --- dist/pythonlibs/testrunner/spawn.py | 1 + tests/lwip/tests/01-run.py | 26 ++++++++++++++------------ tests/riotboot/tests/01-run.py | 3 ++- tests/warn_conflict/tests/01-make.py | 3 ++- 4 files changed, 19 insertions(+), 14 deletions(-) diff --git a/dist/pythonlibs/testrunner/spawn.py b/dist/pythonlibs/testrunner/spawn.py index 502bb63b6e6a..8b6c05144ce0 100644 --- a/dist/pythonlibs/testrunner/spawn.py +++ b/dist/pythonlibs/testrunner/spawn.py @@ -43,6 +43,7 @@ MAKE = os.environ.get('MAKE', 'make') + def _reset_board(env): if MAKE_RESET_DELAY > 0: time.sleep(MAKE_RESET_DELAY) diff --git a/tests/lwip/tests/01-run.py b/tests/lwip/tests/01-run.py index cb180faccc83..68770891e17f 100755 --- a/tests/lwip/tests/01-run.py +++ b/tests/lwip/tests/01-run.py @@ -18,6 +18,8 @@ DEFAULT_TIMEOUT = 5 +MAKE = os.environ.get('MAKE', 'make') + class Strategy(object): def __init__(self, func=None): @@ -47,7 +49,7 @@ def __run_make(self, application, make_targets, env=None): if env is not None: env.update(env) env.update(self.board.to_env()) - cmd = ("make", "-C", application) + make_targets + cmd = (MAKE, "-C", application) + make_targets print(' '.join(cmd)) print(subprocess.check_output(cmd, env=env)) @@ -165,7 +167,7 @@ def default_test_case(board_group, application, env=None): if env is not None: env.update(env) env.update(board.to_env()) - with pexpect.spawnu("make", ["-C", application, "term"], env=env, + with pexpect.spawnu(MAKE, ["-C", application, "term"], env=env, timeout=DEFAULT_TIMEOUT, logfile=sys.stdout) as spawn: spawn.expect("TEST: SUCCESS") @@ -201,9 +203,9 @@ def test_ipv6_send(board_group, application, env=None): if env is not None: env_receiver.update(env) env_receiver.update(board_group.boards[1].to_env()) - with pexpect.spawnu("make", ["-C", application, "term"], env=env_sender, + with pexpect.spawnu(MAKE, ["-C", application, "term"], env=env_sender, timeout=DEFAULT_TIMEOUT) as sender, \ - pexpect.spawnu("make", ["-C", application, "term"], env=env_receiver, + pexpect.spawnu(MAKE, ["-C", application, "term"], env=env_receiver, timeout=DEFAULT_TIMEOUT) as receiver: ipprot = random.randint(0x00, 0xff) receiver_ip = get_ipv6_address(receiver) @@ -225,9 +227,9 @@ def test_udpv6_send(board_group, application, env=None): if env is not None: env_receiver.update(env) env_receiver.update(board_group.boards[1].to_env()) - with pexpect.spawnu("make", ["-C", application, "term"], env=env_sender, + with pexpect.spawnu(MAKE, ["-C", application, "term"], env=env_sender, timeout=DEFAULT_TIMEOUT) as sender, \ - pexpect.spawnu("make", ["-C", application, "term"], env=env_receiver, + pexpect.spawnu(MAKE, ["-C", application, "term"], env=env_receiver, timeout=DEFAULT_TIMEOUT) as receiver: port = random.randint(0x0000, 0xffff) receiver_ip = get_ipv6_address(receiver) @@ -250,9 +252,9 @@ def test_tcpv6_send(board_group, application, env=None): if env is not None: env_server.update(env) env_server.update(board_group.boards[1].to_env()) - with pexpect.spawnu("make", ["-C", application, "term"], env=env_client, + with pexpect.spawnu(MAKE, ["-C", application, "term"], env=env_client, timeout=DEFAULT_TIMEOUT) as client, \ - pexpect.spawnu("make", ["-C", application, "term"], env=env_server, + pexpect.spawnu(MAKE, ["-C", application, "term"], env=env_server, timeout=DEFAULT_TIMEOUT) as server: port = random.randint(0x0000, 0xffff) server_ip = get_ipv6_address(server) @@ -284,9 +286,9 @@ def test_tcpv6_multiconnect(board_group, application, env=None): if env is not None: env_server.update(env) env_server.update(board_group.boards[1].to_env()) - with pexpect.spawnu("make", ["-C", application, "term"], env=env_client, + with pexpect.spawnu(MAKE, ["-C", application, "term"], env=env_client, timeout=DEFAULT_TIMEOUT) as client, \ - pexpect.spawnu("make", ["-C", application, "term"], env=env_server, + pexpect.spawnu(MAKE, ["-C", application, "term"], env=env_server, timeout=DEFAULT_TIMEOUT) as server: port = random.randint(0x0000, 0xffff) server_ip = get_ipv6_address(server) @@ -327,9 +329,9 @@ def test_triple_send(board_group, application, env=None): if env is not None: env_receiver.update(env) env_receiver.update(board_group.boards[1].to_env()) - with pexpect.spawnu("make", ["-C", application, "term"], env=env_sender, + with pexpect.spawnu(MAKE, ["-C", application, "term"], env=env_sender, timeout=DEFAULT_TIMEOUT) as sender, \ - pexpect.spawnu("make", ["-C", application, "term"], env=env_receiver, + pexpect.spawnu(MAKE, ["-C", application, "term"], env=env_receiver, timeout=DEFAULT_TIMEOUT) as receiver: udp_port = random.randint(0x0000, 0xffff) tcp_port = random.randint(0x0000, 0xffff) diff --git a/tests/riotboot/tests/01-run.py b/tests/riotboot/tests/01-run.py index db9bf8fd7d7d..35b94c459658 100755 --- a/tests/riotboot/tests/01-run.py +++ b/tests/riotboot/tests/01-run.py @@ -10,11 +10,12 @@ import sys import subprocess from testrunner import run +from testrunner.spawn import MAKE def flash_slot(slotnum, version): cmd = [ - "make", + MAKE, "RIOTBOOT_SKIP_COMPILE=1", "riotboot/flash-slot{}".format(slotnum), "APP_VER={}".format(version), diff --git a/tests/warn_conflict/tests/01-make.py b/tests/warn_conflict/tests/01-make.py index a82a2b261481..7d869bd86e10 100755 --- a/tests/warn_conflict/tests/01-make.py +++ b/tests/warn_conflict/tests/01-make.py @@ -7,6 +7,7 @@ import pexpect BOARD = os.getenv('BOARD', 'stm32f4discovery') +MAKE = os.environ.get('MAKE', 'make') def testfunc(): @@ -20,7 +21,7 @@ def testfunc(): if exc.errno == os.errno.ENOENT: print("ABORTING TEST: {} seems to be missing.\n".format(cross_gcc)) else: - child = pexpect.spawnu(['make'], env=os.environ) + child = pexpect.spawnu([MAKE], env=os.environ) child.logfile = sys.stdout try: