blob: f860ae722d6e9e15f36d02dcd8b167b56b01502b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
|
#!/bin/sh
set -u
root=$(cd "$(dirname "$0")" && pwd)
mkproj=${MKPROJ:-$root/mkproj}
work=$root/tests
rm -rf "$work"
mkdir -p "$work"
trap 'rm -rf "$work"' EXIT
pass=0
fail=0
ok() { pass=$((pass + 1)); printf ' ok %s\n' "$1"; }
bad() { fail=$((fail + 1)); printf ' FAIL %s\n' "$1"; }
skip() { printf ' skip %s\n' "$1"; }
have() { command -v "$1" >/dev/null 2>&1; }
build_run()
{
bs=$1 dir=$2 name=$3
case $bs in
make)
( cd "$dir" && make ) >/dev/null 2>&1
"$dir/bin/$name" 2>&1 ;;
premake)
( cd "$dir" && premake5 gmake2 && make ) >/dev/null 2>&1
"$dir/bin/$name" 2>&1 ;;
cmake)
( cd "$dir" && cmake -B build && cmake --build build ) >/dev/null 2>&1
"$dir/build/$name" 2>&1 ;;
meson)
( cd "$dir" && meson setup build && meson compile -C build ) >/dev/null 2>&1
"$dir/build/$name" 2>&1 ;;
xmake)
( cd "$dir" && xmake -y ) >/dev/null 2>&1
( cd "$dir" && xmake run ) 2>&1 ;;
esac
}
check()
{
label=$1 bs=$2 name=$3
shift 3
if ! ( cd "$work" && "$mkproj" --no-git -b "$bs" "$@" "$name" ) >/dev/null 2>&1
then
bad "$label (generate)"
return
fi
if build_run "$bs" "$work/$name" "$name" | grep -q 'type shi'
then
ok "$label"
else
bad "$label (build/run)"
fi
}
lib_build()
{
bs=$1 dir=$2
case $bs in
make) ( cd "$dir" && make ) >/dev/null 2>&1 ;;
premake) ( cd "$dir" && premake5 gmake2 && make ) >/dev/null 2>&1 ;;
cmake) ( cd "$dir" && cmake -B build && cmake --build build ) >/dev/null 2>&1 ;;
meson) ( cd "$dir" && meson setup build && meson compile -C build ) >/dev/null 2>&1 ;;
xmake) ( cd "$dir" && xmake -y ) >/dev/null 2>&1 ;;
esac
}
check_lib()
{
bs=$1 name=$2
if ! ( cd "$work" && "$mkproj" --no-git -b "$bs" -k lib "$name" ) >/dev/null 2>&1
then
bad "$bs / lib (generate)"
return
fi
if lib_build "$bs" "$work/$name"
then ok "$bs / lib"
else bad "$bs / lib (build)"
fi
}
echo "mkproj test harness ($mkproj)"
echo
echo "cli:"
"$mkproj" --version >/dev/null 2>&1 && ok "--version" || bad "--version"
"$mkproj" --help >/dev/null 2>&1 && ok "--help" || bad "--help"
( cd "$work" && "$mkproj" --no-git --lang=cpp eqform ) >/dev/null 2>&1 &&
[ -f "$work/eqform/src/main.cpp" ] && ok "--lang=cpp (=form)" || bad "--lang=cpp (=form)"
echo
echo "name validation (these must be rejected):"
for badname in "bad name" "a/b" ".." "" 'x") evil('; do
if ( cd "$work" && "$mkproj" --no-git "$badname" ) >/dev/null 2>&1
then bad "rejects [$badname]"
else ok "rejects [$badname]"
fi
done
echo
echo "build matrix:"
for bs in make cmake meson premake xmake; do
tool=$bs
[ "$bs" = premake ] && tool=premake5
if ! have "$tool"; then skip "$bs (no $tool)"; continue; fi
if [ "$bs" = meson ] && ! have ninja; then skip "meson (no ninja)"; continue; fi
check "$bs / c" "$bs" "t_${bs}_c"
check "$bs / cpp" "$bs" "t_${bs}_cpp" -l cpp
check "$bs / flat" "$bs" "t_${bs}_flat" --flat
[ "$(uname)" = Darwin ] && check "$bs / objc" "$bs" "t_${bs}_objc" -l objc
check_lib "$bs" "t_${bs}_lib"
done
echo
echo "generated files:"
( cd "$work" && "$mkproj" --no-git clangd_on ) >/dev/null 2>&1
[ -f "$work/clangd_on/compile_flags.txt" ] && ok "compile_flags.txt generated" || bad "compile_flags.txt generated"
( cd "$work" && "$mkproj" --no-git --no-clangd clangd_off ) >/dev/null 2>&1
[ -f "$work/clangd_off/compile_flags.txt" ] && bad "--no-clangd skips compile_flags.txt" || ok "--no-clangd skips compile_flags.txt"
( cd "$work" && "$mkproj" --no-git --license mit lic_mit ) >/dev/null 2>&1
grep -q 'MIT License' "$work/lic_mit/LICENSE" 2>/dev/null && ok "--license mit" || bad "--license mit"
( cd "$work" && MKPROJ_BUILD=cmake "$mkproj" --no-git envdef ) >/dev/null 2>&1
[ -f "$work/envdef/CMakeLists.txt" ] && ok "MKPROJ_BUILD env default" || bad "MKPROJ_BUILD env default"
echo
printf '%d passed, %d failed\n' "$pass" "$fail"
[ "$fail" -eq 0 ]
|