~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/scripts/setlocalversion

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /scripts/setlocalversion (Version linux-6.12-rc7) and /scripts/setlocalversion (Version linux-5.9.16)


  1 #!/bin/sh                                           1 #!/bin/sh
  2 # SPDX-License-Identifier: GPL-2.0                  2 # SPDX-License-Identifier: GPL-2.0
  3 #                                                   3 #
  4 # This scripts adds local version information       4 # This scripts adds local version information from the version
  5 # control system git.                          !!   5 # control systems git, mercurial (hg) and subversion (svn).
  6 #                                                   6 #
  7 # If something goes wrong, send a mail the ker      7 # If something goes wrong, send a mail the kernel build mailinglist
  8 # (see MAINTAINERS) and CC Nico Schottelius         8 # (see MAINTAINERS) and CC Nico Schottelius
  9 # <nico-linuxsetlocalversion -at- schottelius.      9 # <nico-linuxsetlocalversion -at- schottelius.org>.
 10 #                                                  10 #
 11 #                                                  11 #
 12                                                    12 
 13 usage() {                                          13 usage() {
 14         echo "Usage: $0 [--no-local] [srctree] !!  14         echo "Usage: $0 [--save-scmversion] [srctree]" >&2
 15         exit 1                                     15         exit 1
 16 }                                                  16 }
 17                                                    17 
 18 no_local=false                                 !!  18 scm_only=false
 19 if test "$1" = "--no-local"; then              !!  19 srctree=.
 20         no_local=true                          !!  20 if test "$1" = "--save-scmversion"; then
                                                   >>  21         scm_only=true
 21         shift                                      22         shift
 22 fi                                                 23 fi
 23                                                << 
 24 srctree=.                                      << 
 25 if test $# -gt 0; then                             24 if test $# -gt 0; then
 26         srctree=$1                                 25         srctree=$1
 27         shift                                      26         shift
 28 fi                                                 27 fi
 29 if test $# -gt 0 -o ! -d "$srctree"; then          28 if test $# -gt 0 -o ! -d "$srctree"; then
 30         usage                                      29         usage
 31 fi                                                 30 fi
 32                                                    31 
 33 scm_version()                                      32 scm_version()
 34 {                                                  33 {
 35         local short=false                      !!  34         local short
 36         local no_dirty=false                   !!  35         short=false
 37         local tag                              << 
 38                                                << 
 39         while [ $# -gt 0 ];                    << 
 40         do                                     << 
 41                 case "$1" in                   << 
 42                 --short)                       << 
 43                         short=true;;           << 
 44                 --no-dirty)                    << 
 45                         no_dirty=true;;        << 
 46                 esac                           << 
 47                 shift                          << 
 48         done                                   << 
 49                                                    36 
 50         cd "$srctree"                              37         cd "$srctree"
 51                                                !!  38         if test -e .scmversion; then
 52         if test -n "$(git rev-parse --show-cdu !!  39                 cat .scmversion
 53                 return                             40                 return
 54         fi                                         41         fi
 55                                                !!  42         if test "$1" = "--short"; then
 56         if ! head=$(git rev-parse --verify HEA !!  43                 short=true
 57                 return                         << 
 58         fi                                         44         fi
 59                                                    45 
 60         # mainline kernel:  6.2.0-rc5  ->  v6. !!  46         # Check for git and a git repo.
 61         # stable kernel:    6.1.7      ->  v6. !!  47         if test -z "$(git rev-parse --show-cdup 2>/dev/null)" &&
 62         version_tag=v$(echo "${KERNELVERSION}" !!  48            head=$(git rev-parse --verify HEAD 2>/dev/null); then
 63                                                !!  49 
 64         # If a localversion* file exists, and  !!  50                 # If we are at a tagged commit (like "v2.6.30-rc6"), we ignore
 65         # annotated tag exists and is an ances !!  51                 # it, because this version is defined in the top level Makefile.
 66         # it. This is the case in linux-next.  !!  52                 if [ -z "$(git describe --exact-match 2>/dev/null)" ]; then
 67         tag=${file_localversion#-}             !!  53 
 68         desc=                                  !!  54                         # If only the short version is requested, don't bother
 69         if [ -n "${tag}" ]; then               !!  55                         # running further git commands
 70                 desc=$(git describe --match=$t !!  56                         if $short; then
 71         fi                                     !!  57                                 echo "+"
 72                                                !!  58                                 return
 73         # Otherwise, if a localversion* file e !!  59                         fi
 74         # obtained by appending it to the tag  !!  60                         # If we are past a tagged commit (like
 75         # KERNELVERSION exists and is an ances !!  61                         # "v2.6.30-rc5-302-g72357d5"), we pretty print it.
 76         # it. This is e.g. the case in linux-r !!  62                         #
 77         if [ -z "${desc}" ] && [ -n "${file_lo !!  63                         # Ensure the abbreviated sha1 has exactly 12
 78                 tag="${version_tag}${file_loca !!  64                         # hex characters, to make the output
 79                 desc=$(git describe --match=$t !!  65                         # independent of git version, local
 80         fi                                     !!  66                         # core.abbrev settings and/or total number of
 81                                                !!  67                         # objects in the current repository - passing
 82         # Otherwise, default to the annotated  !!  68                         # --abbrev=12 ensures a minimum of 12, and the
 83         if [ -z "${desc}" ]; then              !!  69                         # awk substr() then picks the 'g' and first 12
 84                 tag="${version_tag}"           !!  70                         # hex chars.
 85                 desc=$(git describe --match=$t !!  71                         if atag="$(git describe --abbrev=12 2>/dev/null)"; then
 86         fi                                     !!  72                                 echo "$atag" | awk -F- '{printf("-%05d-%s", $(NF-1),substr($(NF),0,13))}'
 87                                                !!  73 
 88         # If we are at the tagged commit, we i !!  74                         # If we don't have a tag at all we print -g{commitish},
 89         # well-defined.                        !!  75                         # again using exactly 12 hex chars.
 90         if [ "${tag}" != "${desc}" ]; then     !!  76                         else
 91                                                !!  77                                 head="$(echo $head | cut -c1-12)"
 92                 # If only the short version is !!  78                                 printf '%s%s' -g $head
 93                 # running further git commands !!  79                         fi
 94                 if $short; then                << 
 95                         echo "+"               << 
 96                         return                 << 
 97                 fi                                 80                 fi
 98                 # If we are past the tagged co !!  81 
 99                 # (like 6.1.0-14595-g292a089d7 !!  82                 # Is this git on svn?
100                 if [ -n "${desc}" ]; then      !!  83                 if git config --get svn-remote.svn.url >/dev/null; then
101                         echo "${desc}" | awk - !!  84                         printf -- '-svn%s' "$(git svn find-rev $head)"
                                                   >>  85                 fi
                                                   >>  86 
                                                   >>  87                 # Check for uncommitted changes.
                                                   >>  88                 # First, with git-status, but --no-optional-locks is only
                                                   >>  89                 # supported in git >= 2.14, so fall back to git-diff-index if
                                                   >>  90                 # it fails. Note that git-diff-index does not refresh the
                                                   >>  91                 # index, so it may give misleading results. See
                                                   >>  92                 # git-update-index(1), git-diff-index(1), and git-status(1).
                                                   >>  93                 if {
                                                   >>  94                         git --no-optional-locks status -uno --porcelain 2>/dev/null ||
                                                   >>  95                         git diff-index --name-only HEAD
                                                   >>  96                 } | grep -qvE '^(.. )?scripts/package'; then
                                                   >>  97                         printf '%s' -dirty
102                 fi                                 98                 fi
103                                                    99 
104                 # Add -g and exactly 12 hex ch !! 100                 # All done with git
105                 printf '%s%s' -g "$(echo $head !! 101                 return
106         fi                                        102         fi
107                                                   103 
108         if ${no_dirty}; then                   !! 104         # Check for mercurial and a mercurial repo.
                                                   >> 105         if test -d .hg && hgid=$(hg id 2>/dev/null); then
                                                   >> 106                 # Do we have an tagged version?  If so, latesttagdistance == 1
                                                   >> 107                 if [ "$(hg log -r . --template '{latesttagdistance}')" = "1" ]; then
                                                   >> 108                         id=$(hg log -r . --template '{latesttag}')
                                                   >> 109                         printf '%s%s' -hg "$id"
                                                   >> 110                 else
                                                   >> 111                         tag=$(printf '%s' "$hgid" | cut -d' ' -f2)
                                                   >> 112                         if [ -z "$tag" -o "$tag" = tip ]; then
                                                   >> 113                                 id=$(printf '%s' "$hgid" | sed 's/[+ ].*//')
                                                   >> 114                                 printf '%s%s' -hg "$id"
                                                   >> 115                         fi
                                                   >> 116                 fi
                                                   >> 117 
                                                   >> 118                 # Are there uncommitted changes?
                                                   >> 119                 # These are represented by + after the changeset id.
                                                   >> 120                 case "$hgid" in
                                                   >> 121                         *+|*+\ *) printf '%s' -dirty ;;
                                                   >> 122                 esac
                                                   >> 123 
                                                   >> 124                 # All done with mercurial
109                 return                            125                 return
110         fi                                        126         fi
111                                                   127 
112         # Check for uncommitted changes.       !! 128         # Check for svn and a svn repo.
113         # This script must avoid any write att !! 129         if rev=$(LANG= LC_ALL= LC_MESSAGES=C svn info 2>/dev/null | grep '^Last Changed Rev'); then
114         # might be read-only.                  !! 130                 rev=$(echo $rev | awk '{print $NF}')
115         # You cannot use 'git describe --dirty !! 131                 printf -- '-svn%s' "$rev"
116         # .git/index.lock .                    !! 132 
117         # First, with git-status, but --no-opt !! 133                 # All done with svn
118         # git >= 2.14, so fall back to git-dif !! 134                 return
119         # git-diff-index does not refresh the  << 
120         # results.                             << 
121         # See git-update-index(1), git-diff-in << 
122         if {                                   << 
123                 git --no-optional-locks status << 
124                 git diff-index --name-only HEA << 
125         } | read dummy; then                   << 
126                 printf '%s' -dirty             << 
127         fi                                        135         fi
128 }                                                 136 }
129                                                   137 
130 collect_files()                                   138 collect_files()
131 {                                                 139 {
132         local file res=                           140         local file res=
133                                                   141 
134         for file; do                              142         for file; do
135                 case "$file" in                   143                 case "$file" in
136                 *\~*)                             144                 *\~*)
137                         continue                  145                         continue
138                         ;;                        146                         ;;
139                 esac                              147                 esac
140                 if test -e "$file"; then          148                 if test -e "$file"; then
141                         res="$res$(cat "$file"    149                         res="$res$(cat "$file")"
142                 fi                                150                 fi
143         done                                      151         done
144         echo "$res"                               152         echo "$res"
145 }                                                 153 }
146                                                   154 
147 if [ -z "${KERNELVERSION}" ]; then             !! 155 if $scm_only; then
148         echo "KERNELVERSION is not set" >&2    !! 156         if test ! -e .scmversion; then
                                                   >> 157                 res=$(scm_version)
                                                   >> 158                 echo "$res" >.scmversion
                                                   >> 159         fi
                                                   >> 160         exit
                                                   >> 161 fi
                                                   >> 162 
                                                   >> 163 if test -e include/config/auto.conf; then
                                                   >> 164         . include/config/auto.conf
                                                   >> 165 else
                                                   >> 166         echo "Error: kernelrelease not valid - run 'make prepare' to update it" >&2
149         exit 1                                    167         exit 1
150 fi                                                168 fi
151                                                   169 
152 # localversion* files in the build and source     170 # localversion* files in the build and source directory
153 file_localversion="$(collect_files localversio !! 171 res="$(collect_files localversion*)"
154 if test ! "$srctree" -ef .; then                  172 if test ! "$srctree" -ef .; then
155         file_localversion="${file_localversion !! 173         res="$res$(collect_files "$srctree"/localversion*)"
156 fi                                                174 fi
157                                                   175 
158 if ${no_local}; then                           !! 176 # CONFIG_LOCALVERSION and LOCALVERSION (if set)
159         echo "${KERNELVERSION}$(scm_version -- !! 177 res="${res}${CONFIG_LOCALVERSION}${LOCALVERSION}"
160         exit 0                                 << 
161 fi                                             << 
162                                                   178 
163 if ! test -e include/config/auto.conf; then    !! 179 # scm version string if not at a tagged commit
164         echo "Error: kernelrelease not valid - !! 180 if test "$CONFIG_LOCALVERSION_AUTO" = "y"; then
165         exit 1                                 << 
166 fi                                             << 
167                                                << 
168 # version string from CONFIG_LOCALVERSION      << 
169 config_localversion=$(sed -n 's/^CONFIG_LOCALV << 
170                                                << 
171 # scm version string if not at the kernel vers << 
172 if grep -q "^CONFIG_LOCALVERSION_AUTO=y$" incl << 
173         # full scm version string                 181         # full scm version string
174         scm_version="$(scm_version)"           !! 182         res="$res$(scm_version)"
175 elif [ "${LOCALVERSION+set}" != "set" ]; then  !! 183 else
176         # If the variable LOCALVERSION is not  !! 184         # append a plus sign if the repository is not in a clean
177         # sign if the repository is not in a c !! 185         # annotated or signed tagged state (as git describe only
178         # signed tagged state (as git describe !! 186         # looks at signed or annotated tags - git tag -a/-s) and
179         # or annotated tags - git tag -a/-s).  !! 187         # LOCALVERSION= is not specified
180         #                                      !! 188         if test "${LOCALVERSION+set}" != "set"; then
181         # If the variable LOCALVERSION is set  !! 189                 scm=$(scm_version --short)
182         # to an empty string), we don't want t !! 190                 res="$res${scm:++}"
183         scm_version="$(scm_version --short)"   !! 191         fi
184 fi                                                192 fi
185                                                   193 
186 echo "${KERNELVERSION}${file_localversion}${co !! 194 echo "$res"
                                                      

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php