Skip to content

Commit ca6f25d

Browse files
committed
refactor(templates): Improve test_project.sh robustness
- Add proper argument parsing with case statement - Use modern cmake -S/-B and --build syntax - Replace backticks with $() syntax - Add trap for cleanup on exit - Use bash arrays for cmake parameters - Add -u and -o pipefail to set flags - Make -x conditional on DEBUG environment variable - Add template directory validation - Use readonly for immutable variables - Redirect errors to stderr - Add --help flag
1 parent 9ee097e commit ca6f25d

1 file changed

Lines changed: 61 additions & 32 deletions

File tree

templates/test_project.sh.in

Lines changed: 61 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,58 +1,87 @@
11
#!/bin/bash
22

3-
set -x -e
3+
set -e -u -o pipefail
4+
[[ "${DEBUG:-0}" == "1" ]] && set -x
45

5-
# Usage: test_project.sh <container_type> [--double-configure]
6-
# where container_type is either 'root' or 'stl'
7-
8-
if [ $# -lt 1 ]; then
9-
echo "Usage: $0 <container_type> [--double-configure]"
10-
echo " container_type: 'root' or 'stl'"
6+
usage() {
7+
echo "Usage: $0 <container_type> [--double-configure]" >&2
8+
echo " container_type: 'root' or 'stl'" >&2
119
exit 1
10+
}
11+
12+
# Parse arguments
13+
CONTAINER_TYPE=""
14+
DOUBLE_CONFIGURE=0
15+
16+
while [[ $# -gt 0 ]]; do
17+
case $1 in
18+
--double-configure)
19+
DOUBLE_CONFIGURE=1
20+
shift
21+
;;
22+
root|stl)
23+
if [[ -n "$CONTAINER_TYPE" ]]; then
24+
echo "Error: container_type specified multiple times" >&2
25+
usage
26+
fi
27+
CONTAINER_TYPE=$1
28+
shift
29+
;;
30+
-h|--help)
31+
usage
32+
;;
33+
*)
34+
echo "Error: Unknown argument '$1'" >&2
35+
usage
36+
;;
37+
esac
38+
done
39+
40+
if [[ -z "$CONTAINER_TYPE" ]]; then
41+
echo "Error: container_type is required" >&2
42+
usage
1243
fi
1344

14-
CONTAINER_TYPE=$1
15-
DOUBLE_CONFIGURE_FLAG=$2
45+
readonly CONTAINER_TYPE
46+
readonly DOUBLE_CONFIGURE
47+
48+
readonly CURRENT_DIR=$(pwd)
49+
readonly SOURCE_DIR=@CMAKE_SOURCE_DIR@
50+
readonly MYTMPDIR=$(mktemp -d 2>/dev/null || mktemp -d -t 'mytmpdir')
1651

17-
if [[ "$CONTAINER_TYPE" != "root" && "$CONTAINER_TYPE" != "stl" ]]; then
18-
echo "Error: container_type must be 'root' or 'stl'"
52+
# Ensure cleanup on exit
53+
trap 'cd "$CURRENT_DIR" && rm -rf "$MYTMPDIR"' EXIT
54+
55+
readonly TEMPLATE_DIR="$SOURCE_DIR/templates/project_${CONTAINER_TYPE}_containers"
56+
if [[ ! -d "$TEMPLATE_DIR" ]]; then
57+
echo "Error: Template directory not found: $TEMPLATE_DIR" >&2
1958
exit 1
2059
fi
2160

22-
CURRENT_DIR=`pwd`
23-
SOURCE_DIR=@CMAKE_SOURCE_DIR@
24-
MYTMPDIR=`mktemp -d 2>/dev/null || mktemp -d -t 'mytmpdir'`
25-
26-
cd $MYTMPDIR
27-
cp -a $SOURCE_DIR/templates/project_${CONTAINER_TYPE}_containers .
28-
cd project_${CONTAINER_TYPE}_containers
61+
cd "$MYTMPDIR"
62+
cp -a "$TEMPLATE_DIR" .
63+
cd "project_${CONTAINER_TYPE}_containers"
2964
./rename.sh TestProj Tst det
30-
mkdir build
31-
cd build
3265

3366
export SIMPATH=@SIMPATH@
3467
export FAIRROOTPATH=@CMAKE_INSTALL_PREFIX@
3568

36-
parameters="-DCMAKE_CXX_STANDARD=@CMAKE_CXX_STANDARD@"
69+
# Use array for proper argument handling
70+
parameters=(-DCMAKE_CXX_STANDARD=@CMAKE_CXX_STANDARD@)
3771

3872
if [[ -n "@CMAKE_OSX_SYSROOT@" ]]; then
39-
parameters="$parameters -DCMAKE_OSX_SYSROOT=@CMAKE_OSX_SYSROOT@"
73+
parameters+=(-DCMAKE_OSX_SYSROOT=@CMAKE_OSX_SYSROOT@)
4074
fi
4175

42-
cmake $parameters ..
76+
cmake -S . -B build "${parameters[@]}"
4377

44-
if [[ "$DOUBLE_CONFIGURE_FLAG" = "--double-configure" ]]; then
78+
if [[ "$DOUBLE_CONFIGURE" == "1" ]]; then
4579
echo "*** Calling cmake configure again:"
4680
# Check if all the cache variables
4781
# are good for a reconfiguration step
48-
cmake ..
82+
cmake -S . -B build
4983
fi
5084

51-
make
52-
53-
if [ $? -eq 0 ]; then
54-
echo 'Test successful.'
55-
fi
85+
cmake --build build
5686

57-
cd $CURRENT_DIR
58-
rm -rf $MYTMPDIR
87+
echo "Test successful."

0 commit comments

Comments
 (0)