|
1 | 1 | #!/bin/bash |
2 | 2 |
|
3 | | -set -x -e |
| 3 | +set -e -u -o pipefail |
| 4 | +[[ "${DEBUG:-0}" == "1" ]] && set -x |
4 | 5 |
|
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 |
11 | 9 | 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 |
12 | 43 | fi |
13 | 44 |
|
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') |
16 | 51 |
|
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 |
19 | 58 | exit 1 |
20 | 59 | fi |
21 | 60 |
|
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" |
29 | 64 | ./rename.sh TestProj Tst det |
30 | | -mkdir build |
31 | | -cd build |
32 | 65 |
|
33 | 66 | export SIMPATH=@SIMPATH@ |
34 | 67 | export FAIRROOTPATH=@CMAKE_INSTALL_PREFIX@ |
35 | 68 |
|
36 | | -parameters="-DCMAKE_CXX_STANDARD=@CMAKE_CXX_STANDARD@" |
| 69 | +# Use array for proper argument handling |
| 70 | +parameters=(-DCMAKE_CXX_STANDARD=@CMAKE_CXX_STANDARD@) |
37 | 71 |
|
38 | 72 | if [[ -n "@CMAKE_OSX_SYSROOT@" ]]; then |
39 | | - parameters="$parameters -DCMAKE_OSX_SYSROOT=@CMAKE_OSX_SYSROOT@" |
| 73 | + parameters+=(-DCMAKE_OSX_SYSROOT=@CMAKE_OSX_SYSROOT@) |
40 | 74 | fi |
41 | 75 |
|
42 | | -cmake $parameters .. |
| 76 | +cmake -S . -B build "${parameters[@]}" |
43 | 77 |
|
44 | | -if [[ "$DOUBLE_CONFIGURE_FLAG" = "--double-configure" ]]; then |
| 78 | +if [[ "$DOUBLE_CONFIGURE" == "1" ]]; then |
45 | 79 | echo "*** Calling cmake configure again:" |
46 | 80 | # Check if all the cache variables |
47 | 81 | # are good for a reconfiguration step |
48 | | - cmake .. |
| 82 | + cmake -S . -B build |
49 | 83 | fi |
50 | 84 |
|
51 | | -make |
52 | | - |
53 | | -if [ $? -eq 0 ]; then |
54 | | - echo 'Test successful.' |
55 | | -fi |
| 85 | +cmake --build build |
56 | 86 |
|
57 | | -cd $CURRENT_DIR |
58 | | -rm -rf $MYTMPDIR |
| 87 | +echo "Test successful." |
0 commit comments