Patrick Steinhardt <ps@xxxxxx> writes: > The GIT-VERSION-GEN script requires an input file containing formatting > directives to be replaced as well as an output file that will get > overwritten in case the file contents have changed. When computing the > project version for Meson we don't want to have either though: > > - We only want to compute the version without anything else, but don't > have an input file that would match that exact format. While we > could of course introduce a new file just for that usecase, it feels > suboptimal to add another file every time we want to have a slightly > different format for versioned data. > > - The computed version needs to be read from stdout so that Meson can > wire it up for the project. > > Extend the script to handle both usecases by recognizing `--format=` as > alternative to providing an input path and by writing to stdout in case > no output file was given. > > Signed-off-by: Patrick Steinhardt <ps@xxxxxx> > --- > GIT-VERSION-GEN | 44 +++++++++++++++++++++++++++++--------------- > 1 file changed, 29 insertions(+), 15 deletions(-) > > diff --git a/GIT-VERSION-GEN b/GIT-VERSION-GEN > index b8b683b9337e5771e14a2cfb84022a11489bb432..9d201a98fd2766911544225c62159cbfe8dff5fe 100755 > --- a/GIT-VERSION-GEN > +++ b/GIT-VERSION-GEN > @@ -5,21 +5,29 @@ DEF_VER=v2.48.0 > LF=' > ' > > -if test "$#" -ne 3 > +if test "$#" -lt 2 || test "$#" -gt 3 > then > - echo >&2 "USAGE: $0 <SOURCE_DIR> <INPUT> <OUTPUT>" > + echo >&2 "USAGE: $0 <SOURCE_DIR> (--format=<STRING>|<INPUT>) [<OUTPUT>]" > exit 1 > fi > > SOURCE_DIR="$1" > -INPUT="$2" > -OUTPUT="$3" > > -if ! test -f "$INPUT" > -then > - echo >&2 "Input is not a file: $INPUT" > - exit 1 > -fi > +case "$2" in > +--format=*) > + INPUT="${2#--format=}" > + ;; > +*) > + if ! test -f "$2" > + then > + echo >&2 "Input is not a file: $2" > + exit 1 > + fi > + INPUT=$(cat "$2") > + ;; > +esac > + > +OUTPUT="$3" > > # Protect us from reading Git version information outside of the Git directory > # in case it is not a repository itself, but embedded in an unrelated > @@ -74,19 +82,25 @@ read GIT_MAJOR_VERSION GIT_MINOR_VERSION GIT_MICRO_VERSION GIT_PATCH_LEVEL trail > $(echo "$GIT_VERSION" 0 0 0 0 | tr '.a-zA-Z-' ' ') > EOF > > -sed -e "s|@GIT_VERSION@|$GIT_VERSION|" \ > +REPLACED=$(printf "%s" "$INPUT" | sed -e "s|@GIT_VERSION@|$GIT_VERSION|" \ > -e "s|@GIT_MAJOR_VERSION@|$GIT_MAJOR_VERSION|" \ > -e "s|@GIT_MINOR_VERSION@|$GIT_MINOR_VERSION|" \ > -e "s|@GIT_MICRO_VERSION@|$GIT_MICRO_VERSION|" \ > -e "s|@GIT_PATCH_LEVEL@|$GIT_PATCH_LEVEL|" \ > -e "s|@GIT_BUILT_FROM_COMMIT@|$GIT_BUILT_FROM_COMMIT|" \ > -e "s|@GIT_USER_AGENT@|$GIT_USER_AGENT|" \ > - -e "s|@GIT_DATE@|$GIT_DATE|" \ > - "$INPUT" >"$OUTPUT".$$+ > + -e "s|@GIT_DATE@|$GIT_DATE|" > +) > > -if ! test -f "$OUTPUT" || ! cmp "$OUTPUT".$$+ "$OUTPUT" >/dev/null > +if test -z "$OUTPUT" > then > - mv "$OUTPUT".$$+ "$OUTPUT" > + printf "%s\n" "$REPLACED" > else > - rm "$OUTPUT".$$+ > + printf "%s\n" "$REPLACED" >"$OUTPUT".$$+ > + if ! test -f "$OUTPUT" || ! cmp "$OUTPUT".$$+ "$OUTPUT" >/dev/null > + then > + mv "$OUTPUT".$$+ "$OUTPUT" > + else > + rm "$OUTPUT".$$+ > + fi > fi > > -- > 2.48.0.257.gd3603152ad.dirty I was considering to suggest to have GIT-VERSION-GEN accept --stdin for $INPUT and have it read from stdin instead of passing the format as an argument, but looking at the following commits I agree with your approach. -- Toon