8 if test "$#" -lt 2 ||
test "$#" -gt 3
10 echo >&2 "USAGE: $0 <SOURCE_DIR> (--format=<STRING>|<INPUT>) [<OUTPUT>]"
18 INPUT
="${2#--format=}"
23 echo >&2 "Input is not a file: $2"
32 # Protect us from reading Git version information outside of the Git directory
33 # in case it is not a repository itself, but embedded in an unrelated
35 GIT_CEILING_DIRECTORIES
="$SOURCE_DIR/.."
36 export GIT_CEILING_DIRECTORIES
38 if test -z "$GIT_VERSION"
40 # First see if there is a version file (included in release tarballs),
41 # then try git-describe, then default.
42 if test -f "$SOURCE_DIR"/version
44 VN
=$
(cat "$SOURCE_DIR"/version
) || VN
="$DEF_VER"
46 test -d "$SOURCE_DIR/.git" ||
47 test -d "${GIT_DIR:-.git}" ||
48 test -f "$SOURCE_DIR"/.git
;
50 VN
=$
(git
-C "$SOURCE_DIR" describe
--dirty --match="v[0-9]*" 2>/dev
/null
) &&
55 VN
=$
(echo "$VN" |
sed -e 's/-/./g');
60 GIT_VERSION
=$
(expr "$VN" : v
*'\(.*\)')
63 if test -z "$GIT_BUILT_FROM_COMMIT"
65 GIT_BUILT_FROM_COMMIT
=$
(git
-C "$SOURCE_DIR" rev-parse
-q --verify HEAD
2>/dev
/null
)
68 if test -z "$GIT_DATE"
70 GIT_DATE
=$
(git
-C "$SOURCE_DIR" show
--quiet --format='%as' 2>/dev
/null
)
73 if test -z "$GIT_USER_AGENT"
75 GIT_USER_AGENT
="git/$GIT_VERSION"
78 # While released Git versions only have three numbers, development builds also
79 # have a fourth number that corresponds to the number of patches since the last
81 read GIT_MAJOR_VERSION GIT_MINOR_VERSION GIT_MICRO_VERSION GIT_PATCH_LEVEL trailing
<<EOF
82 $(echo "$GIT_VERSION" 0 0 0 0 | tr '.a-zA-Z-' ' ')
85 REPLACED
=$
(printf "%s\n" "$INPUT" |
sed -e "s|@GIT_VERSION@|$GIT_VERSION|" \
86 -e "s|@GIT_MAJOR_VERSION@|$GIT_MAJOR_VERSION|" \
87 -e "s|@GIT_MINOR_VERSION@|$GIT_MINOR_VERSION|" \
88 -e "s|@GIT_MICRO_VERSION@|$GIT_MICRO_VERSION|" \
89 -e "s|@GIT_PATCH_LEVEL@|$GIT_PATCH_LEVEL|" \
90 -e "s|@GIT_BUILT_FROM_COMMIT@|$GIT_BUILT_FROM_COMMIT|" \
91 -e "s|@GIT_USER_AGENT@|$GIT_USER_AGENT|" \
92 -e "s|@GIT_DATE@|$GIT_DATE|"
97 printf "%s\n" "$REPLACED"
99 printf "%s\n" "$REPLACED" >"$OUTPUT".$$
+
100 if ! test -f "$OUTPUT" ||
! cmp "$OUTPUT".$$
+ "$OUTPUT" >/dev
/null
102 mv "$OUTPUT".$$
+ "$OUTPUT"