99# <nico-linuxsetlocalversion -at- schottelius.org>.
1010#
1111#
12-
13- usage () {
14- echo " Usage: $0 [--save-scmversion] [srctree] [branch] [kmi-generation]" >&2
15- exit 1
16- }
17-
18- scm_only=false
19- srctree=.
20- android_release=
21- kmi_generation=
22- if test " $1 " = " --save-scmversion" ; then
23- scm_only=true
24- shift
25- fi
26- if test $# -gt 0; then
27- srctree=$1
28- shift
29- fi
30- if test $# -gt 0; then
31- # Extract the Android release version. If there is no match, then return 255
32- # and clear the var $android_release
33- android_release=` echo " $1 " | sed -e ' /android[0-9]\{2,\}/!{q255}; \
34- s/^\(android[0-9]\{2,\}\)-.*/\1/' `
35- if test $? -ne 0; then
36- android_release=
37- fi
38- shift
39-
40- if test $# -gt 0; then
41- kmi_generation=$1
42- [ $( expr $kmi_generation : ' ^[0-9]\+$' ) -eq 0 ] && usage
43- shift
44- fi
45- fi
46- if test $# -gt 0 -o ! -d " $srctree " ; then
47- usage
48- fi
49-
50- scm_version ()
51- {
52- local short
53- short=false
54-
55- cd " $srctree "
56- if test -e .scmversion; then
57- cat .scmversion
58- return
59- fi
60- if test " $1 " = " --short" ; then
61- short=true
62- fi
63-
64- # Check for git and a git repo.
65- if test -z " $( git rev-parse --show-cdup 2> /dev/null) " &&
66- head=$( git rev-parse --verify HEAD 2> /dev/null) ; then
67-
68- if [ -n " $android_release " ] && [ -n " $kmi_generation " ]; then
69- printf ' %s' " -$android_release -$kmi_generation "
70- elif [ -n " $android_release " ]; then
71- printf ' %s' " -$android_release "
72- fi
73-
74- # If we are at a tagged commit (like "v2.6.30-rc6"), we ignore
75- # it, because this version is defined in the top level Makefile.
76- if [ -z " ` git describe --exact-match 2> /dev/null` " ]; then
77-
78- # If only the short version is requested, don't bother
79- # running further git commands
80- if $short ; then
81- echo " +"
82- return
83- fi
84- # If we are past a tagged commit (like
85- # "v2.6.30-rc5-302-g72357d5"), we pretty print it.
86- #
87- # Ensure the abbreviated sha1 has exactly 12
88- # hex characters, to make the output
89- # independent of git version, local
90- # core.abbrev settings and/or total number of
91- # objects in the current repository - passing
92- # --abbrev=12 ensures a minimum of 12, and the
93- # awk substr() then picks the 'g' and first 12
94- # hex chars.
95- if atag=" $( git describe --abbrev=12 2> /dev/null) " ; then
96- echo " $atag " | awk -F- ' {printf("-%05d-%s", $(NF-1),substr($(NF),0,13))}'
97-
98- # If we don't have a tag at all we print -g{commitish},
99- # again using exactly 12 hex chars.
100- else
101- head=" $( echo $head | cut -c1-12) "
102- printf ' %s%s' -g $head
103- fi
104- fi
105-
106- # Is this git on svn?
107- if git config --get svn-remote.svn.url > /dev/null; then
108- printf -- ' -svn%s' " ` git svn find-rev $head ` "
109- fi
110-
111- # Check for uncommitted changes.
112- # First, with git-status, but --no-optional-locks is only
113- # supported in git >= 2.14, so fall back to git-diff-index if
114- # it fails. Note that git-diff-index does not refresh the
115- # index, so it may give misleading results. See
116- # git-update-index(1), git-diff-index(1), and git-status(1).
117- if {
118- git --no-optional-locks status -uno --porcelain 2> /dev/null ||
119- git diff-index --name-only HEAD
120- } | grep -qvE ' ^(.. )?scripts/package' ; then
121- printf ' %s' -dirty
122- fi
123-
124- # All done with git
125- return
126- fi
127-
128- # Check for mercurial and a mercurial repo.
129- if test -d .hg && hgid=` hg id 2> /dev/null` ; then
130- # Do we have an tagged version? If so, latesttagdistance == 1
131- if [ " ` hg log -r . --template ' {latesttagdistance}' ` " = " 1" ]; then
132- id=` hg log -r . --template ' {latesttag}' `
133- printf ' %s%s' -hg " $id "
134- else
135- tag=` printf ' %s' " $hgid " | cut -d' ' -f2`
136- if [ -z " $tag " -o " $tag " = tip ]; then
137- id=` printf ' %s' " $hgid " | sed ' s/[+ ].*//' `
138- printf ' %s%s' -hg " $id "
139- fi
140- fi
141-
142- # Are there uncommitted changes?
143- # These are represented by + after the changeset id.
144- case " $hgid " in
145- * +|* +\ * ) printf ' %s' -dirty ;;
146- esac
147-
148- # All done with mercurial
149- return
150- fi
151-
152- # Check for svn and a svn repo.
153- if rev=` LANG= LC_ALL= LC_MESSAGES=C svn info 2> /dev/null | grep ' ^Last Changed Rev' ` ; then
154- rev=` echo $rev | awk ' {print $NF}' `
155- printf -- ' -svn%s' " $rev "
156-
157- # All done with svn
158- return
159- fi
160- }
161-
162- collect_files ()
163- {
164- local file res=
165-
166- for file; do
167- case " $file " in
168- * \~ * )
169- continue
170- ;;
171- esac
172- if test -e " $file " ; then
173- res=" $res $( cat " $file " ) "
174- fi
175- done
176- echo " $res "
177- }
178-
179- if $scm_only ; then
180- if test ! -e .scmversion; then
181- res=$( scm_version)
182- echo " $res " > .scmversion
183- fi
184- exit
185- fi
186-
187- if test -e include/config/auto.conf; then
188- . include/config/auto.conf
189- else
190- echo " Error: kernelrelease not valid - run 'make prepare' to update it" >&2
191- exit 1
192- fi
193-
194- # localversion* files in the build and source directory
195- res=" $( collect_files localversion* ) "
196- if test ! " $srctree " -ef . ; then
197- res=" $res $( collect_files " $srctree " /localversion* ) "
198- fi
199-
200- # CONFIG_LOCALVERSION and LOCALVERSION (if set)
201- res=" ${res}${CONFIG_LOCALVERSION}${LOCALVERSION} "
202-
203- # scm version string if not at a tagged commit
204- if test " $CONFIG_LOCALVERSION_AUTO " = " y" ; then
205- # full scm version string
206- res=" $res $( scm_version) "
207- else
208- # append a plus sign if the repository is not in a clean
209- # annotated or signed tagged state (as git describe only
210- # looks at signed or annotated tags - git tag -a/-s) and
211- # LOCALVERSION= is not specified
212- if test " ${LOCALVERSION+set} " ! = " set" ; then
213- scm=$( scm_version --short)
214- res=" $res ${scm: ++} "
215- fi
216- fi
217-
218- echo " -qgki-gc916795b189b"
12+ echo " "
0 commit comments