22# Copyright (c) 2024, International Business Machines
33# SPDX-License-Identifier: BSD-2-Clause-Patent
44
5- SRC_TOPLEVEL=" $( dirname $0 ) /.."
6- TEMPLATE=" $SRC_TOPLEVEL /cmake/version.h.template"
7- OUTPUT=" $SRC_TOPLEVEL /tracing_library/include/CommonLowLevelTracingKit/version.gen.h"
5+ set -e
6+
7+ SRC_TOPLEVEL=" $( dirname " $0 " ) /.."
8+
9+ # Version header generation (optional if only generating build_info)
10+ TEMPLATE=" "
11+ OUTPUT=" "
12+
13+ # Build info generation (optional, for command line tool)
14+ BUILD_INFO_TEMPLATE=" "
15+ BUILD_INFO_OUTPUT=" "
16+
17+ # Feature flags (default to 0/unknown when not specified)
18+ CLLTK_HAS_TRACING=" ${CLLTK_HAS_TRACING:- 0} "
19+ CLLTK_HAS_SNAPSHOT=" ${CLLTK_HAS_SNAPSHOT:- 0} "
20+ CLLTK_HAS_CPP_DECODER=" ${CLLTK_HAS_CPP_DECODER:- 0} "
21+ CLLTK_HAS_PYTHON_DECODER=" ${CLLTK_HAS_PYTHON_DECODER:- 0} "
22+ CLLTK_HAS_KERNEL_TRACING=" ${CLLTK_HAS_KERNEL_TRACING:- 0} "
823
924print_help () {
10- echo " $0 [-t TEMPLATE_FILE] [-o OUTPUT_FILE]"
25+ echo " $0 [-t TEMPLATE_FILE] [-o OUTPUT_FILE] [-b BUILD_INFO_TEMPLATE] [-B BUILD_INFO_OUTPUT] "
1126echo " \
27+ Generate version.gen.h and/or build_info.gen.h from templates.
28+ At least one of (-t and -o) or (-b and -B) must be specified.
29+
1230 args:
13- -t | --template TEMPLAE_FILE (default $TEMPLATE )
14- -o | --output OUTPUT_FILE (default $OUTPUT )
31+ -t | --template TEMPLATE_FILE version.h template
32+ -o | --output OUTPUT_FILE version.h output
33+ -b | --build-info-template TEMPLATE build_info.h template
34+ -B | --build-info-output OUTPUT build_info.h output
35+
36+ environment variables for build_info (feature flags):
37+ CLLTK_HAS_TRACING (0 or 1, default 0)
38+ CLLTK_HAS_SNAPSHOT (0 or 1, default 0)
39+ CLLTK_HAS_CPP_DECODER (0 or 1, default 0)
40+ CLLTK_HAS_PYTHON_DECODER (0 or 1, default 0)
41+ CLLTK_HAS_KERNEL_TRACING (0 or 1, default 0)
1542
1643 other:
1744 -h | --help this help
@@ -28,6 +55,14 @@ while (($#)) ; do
2855 OUTPUT=" $2 "
2956 shift 2
3057 ;;
58+ -b | --build-info-template)
59+ BUILD_INFO_TEMPLATE=" $2 "
60+ shift 2
61+ ;;
62+ -B | --build-info-output)
63+ BUILD_INFO_OUTPUT=" $2 "
64+ shift 2
65+ ;;
3166 -h | --help)
3267 print_help
3368 exit
@@ -40,16 +75,59 @@ while (($#)) ; do
4075 esac
4176done
4277
43- CLLTK_VERSION=$( cat " $SRC_TOPLEVEL /VERSION.md" | head -n1 )
44- CLLTK_VERSION_MAJOR=$( echo $CLLTK_VERSION | cut -d . -f 1 )
45- CLLTK_VERSION_MINOR=$( echo $CLLTK_VERSION | cut -d . -f 2 )
46- CLLTK_VERSION_PATCH=$( echo $CLLTK_VERSION | cut -d . -f 3 )
78+ # Validate that at least one output is requested
79+ if [[ -z " $TEMPLATE " && -z " $BUILD_INFO_TEMPLATE " ]]; then
80+ echo " Error: At least one of -t/-o or -b/-B must be specified"
81+ print_help
82+ exit 1
83+ fi
84+
85+ # Parse version from VERSION.md
86+ CLLTK_VERSION=$( head -n1 " $SRC_TOPLEVEL /VERSION.md" )
87+ CLLTK_VERSION_MAJOR=$( echo " $CLLTK_VERSION " | cut -d . -f 1)
88+ CLLTK_VERSION_MINOR=$( echo " $CLLTK_VERSION " | cut -d . -f 2)
89+ CLLTK_VERSION_PATCH=$( echo " $CLLTK_VERSION " | cut -d . -f 3)
4790
48- temp_file=$( mktemp)
49- env CLLTK_VERSION_MAJOR=$CLLTK_VERSION_MAJOR \
50- CLLTK_VERSION_MINOR=$CLLTK_VERSION_MINOR \
51- CLLTK_VERSION_PATCH=$CLLTK_VERSION_PATCH \
52- envsubst < " $TEMPLATE " > " $temp_file "
91+ # Get git information
92+ if git -C " $SRC_TOPLEVEL " rev-parse --git-dir > /dev/null 2>&1 ; then
93+ CLLTK_GIT_HASH=$( git -C " $SRC_TOPLEVEL " rev-parse --short HEAD 2> /dev/null || echo " unknown" )
94+ if git -C " $SRC_TOPLEVEL " diff --quiet 2> /dev/null; then
95+ CLLTK_GIT_DIRTY=0
96+ else
97+ CLLTK_GIT_DIRTY=1
98+ fi
99+ else
100+ CLLTK_GIT_HASH=" unknown"
101+ CLLTK_GIT_DIRTY=0
102+ fi
53103
54- rsync --checksum $temp_file $OUTPUT
55- rm -f " $temp_file "
104+ # Generate version.gen.h (if templates provided)
105+ if [[ -n " $TEMPLATE " && -n " $OUTPUT " ]]; then
106+ temp_file=$( mktemp)
107+ env CLLTK_VERSION_MAJOR=" $CLLTK_VERSION_MAJOR " \
108+ CLLTK_VERSION_MINOR=" $CLLTK_VERSION_MINOR " \
109+ CLLTK_VERSION_PATCH=" $CLLTK_VERSION_PATCH " \
110+ envsubst < " $TEMPLATE " > " $temp_file "
111+
112+ rsync --checksum " $temp_file " " $OUTPUT "
113+ rm -f " $temp_file "
114+ fi
115+
116+ # Generate build_info.gen.h (if templates provided)
117+ if [[ -n " $BUILD_INFO_TEMPLATE " && -n " $BUILD_INFO_OUTPUT " ]]; then
118+ temp_file=$( mktemp)
119+ env CLLTK_VERSION_MAJOR=" $CLLTK_VERSION_MAJOR " \
120+ CLLTK_VERSION_MINOR=" $CLLTK_VERSION_MINOR " \
121+ CLLTK_VERSION_PATCH=" $CLLTK_VERSION_PATCH " \
122+ CLLTK_GIT_HASH=" $CLLTK_GIT_HASH " \
123+ CLLTK_GIT_DIRTY=" $CLLTK_GIT_DIRTY " \
124+ CLLTK_HAS_TRACING=" $CLLTK_HAS_TRACING " \
125+ CLLTK_HAS_SNAPSHOT=" $CLLTK_HAS_SNAPSHOT " \
126+ CLLTK_HAS_CPP_DECODER=" $CLLTK_HAS_CPP_DECODER " \
127+ CLLTK_HAS_PYTHON_DECODER=" $CLLTK_HAS_PYTHON_DECODER " \
128+ CLLTK_HAS_KERNEL_TRACING=" $CLLTK_HAS_KERNEL_TRACING " \
129+ envsubst < " $BUILD_INFO_TEMPLATE " > " $temp_file "
130+
131+ rsync --checksum " $temp_file " " $BUILD_INFO_OUTPUT "
132+ rm -f " $temp_file "
133+ fi
0 commit comments