blob: edb2d069c1be61baacf701a55258bdfdfd0ade37 [file] [log] [blame]
PORT=/dev/ttyS0 #TODO(apenwarr): don't hardcode this
PASSWORD=google
PORTSH=./portsh/portsh -p'$(PASSWORD)'
NMAP_SUBNETS=192.168.2.0/24 #TODO(apenwarr): auto-read the subnet from eth1?
default: all
all: map.stamp
lint:
gpylint *.py configs/core.py
test:
wvtest/wvtestrun $(MAKE) runtests
test_with_output:
$(MAKE) runtests &> result.txt
wvtest_result_converter.py result.txt result.xml
#TODO(apenwarr): use a smarter allocator.
# We could enable parallelism by depending on $(addsuffix ...) instead of
# looping through them one by one. But then we end up running multiple
# tests on the same device at once, which would cause conflicts. We need
# a smarter allocator first.
runtests: localtests install-wvtest
for d in $(addsuffix .run,$(wildcard [0-9]*.sh [0-9]*.py)); do \
$(MAKE) $$d; \
done
localtests:
./wvtest/wvtest.py *_test.py configs/*_test.py
install-wvtest: map.stamp *.py *.sh wvtest/*
@echo 'Testing "install-wvtest" in Makefile:'
tar -cf - $^ | \
$(PORTSH) $(PORT) \
'mkdir -p /tmp/tests && cd /tmp/tests && tar -xf -'
%.sh.run: %.sh
echo "Testing $<"
$(PORTSH) $(PORT) \
'cd /tmp/tests && sh ./$<' </dev/null
%.py.run: %.py
echo "Testing $<"
$(PORTSH) $(PORT) \
'cd /tmp/tests && python ./wvtest/wvtest.py $<' </dev/null
# This rule regenerates the map *every* time. Run it when your node
# configuration has changed.
map: serialmap nmap
touch map.stamp
# This rule just runs once; 'make map' or delete map.stamp to re-run.
# Depend on this rule to ensure we have a map, without regenerating it
# every time we run make.
map.stamp:
$(MAKE) map
nmap:
rm -f configs/nmap.*.tmp
$(MAKE) $$(nmap -n -p22 -oG - $(NMAP_SUBNETS) | \
grep ^Host: | \
awk '{printf "configs/nmap.%s.tmp\n", $$2}')
cat configs/header configs/nmap.*.tmp >configs/auto_nmap.py.new
mv configs/auto_nmap.py.new configs/auto_nmap.py
serialmap:
rm -f configs/tty.*.tmp
$(MAKE) $$(cd /dev && /bin/ls ttyS*[0-9] ttyUSB*[0-9] | \
awk '{printf "configs/tty.%s.tmp\n", $$1}')
cat configs/header configs/tty.*.tmp >configs/auto_serial.py.new
mv configs/auto_serial.py.new configs/auto_serial.py
PROBE_CMD=\
PATH=$$PATH:/bin:/usr/bin:/sbin:/usr/sbin; \
hnvram -r 1ST_SERIAL_NUMBER -r SERIAL_NO -r MAC_ADDR -r PLATFORM_NAME; \
[ -e /tmp/NFS ] && echo IS_NFSROOT=1; \
ip addr show br0; \
ip addr show eth0; \
ip addr show eth1; \
ip addr show eth2; \
ip addr show eth4; \
cat /proc/cpuinfo
configs/nmap.%.tmp:
ssh -oNumberOfPasswordPrompts=0 \
root@$* \
'echo NET_OK=1; $(PROBE_CMD)' 2>&1 | \
./parse-probe-data >$@.new
mv $@.new $@
configs/tty.%.tmp:
$(PORTSH) $* \
'echo SERIALPORT=$*; $(PROBE_CMD)' 2>&1 | \
./parse-probe-data >$@.new
mv $@.new $@
clean:
rm -f *~ .*~ */*~ */.*~ *.pyc */*.pyc *.stamp \
configs/*.tmp configs/*.new configs/auto_*.py