This file is indexed.

/usr/share/help/C/programming-guidelines/versioning.page is in gnome-devel-docs 3.18.1-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
<page xmlns="http://projectmallard.org/1.0/"
      xmlns:its="http://www.w3.org/2005/11/its"
      type="topic"
      id="versioning">

  <info>
    <link type="guide" xref="index#maintainer-guidelines"/>

    <credit type="author copyright">
      <name>Philip Withnall</name>
      <email its:translate="no">philip.withnall@collabora.co.uk</email>
      <years>2015</years>
    </credit>

    <include href="cc-by-sa-3-0.xml" xmlns="http://www.w3.org/2001/XInclude"/>

    <desc>Versioning and releasing libraries and applications</desc>
  </info>

  <title>Versioning</title>

  <synopsis>
    <title>Summary</title>

    <p>
      Module versioning differs for libraries and applications: libraries need a
      libtool version specified in addition to their package version.
      Applications just have a package version.
    </p>

    <list>
      <item><p>
        Libraries have a libtool version of the form
        <em>current:revision:age</em>. (<link xref="#library-versioning"/>)
      </p></item>
      <item><p>
        Libraries have a package version of the form <em>major.minor.micro</em>.
        (<link xref="#library-versioning"/>)
      </p></item>
      <item><p>
        Applications have a package version of the form <em>major.minor</em>.
        (<link xref="#application-versioning"/>)
      </p></item>
      <item><p>
        Version numbers should be updated for each release (using pre- and
        post-release increments). (<link xref="#release-process"/>)
      </p></item>
      <item><p>
        Package versions should be incremented for feature changes or additions.
        (<link xref="#library-versioning"/>)
      </p></item>
      <item><p>
        Libtool versions should be updated for API changes or additions.
        (<link xref="#library-versioning"/>)
      </p></item>
    </list>
  </synopsis>

  <section id="library-versioning">
    <title>Library Versioning</title>

    <p>
      Libraries have two version numbers: a libtool version which tracks ABI
      backwards compatibility (see <link xref="api-stability"/>), and a package
      version which tracks feature
      changes. These are normally incremented in synchronization, but should be
      kept separate because ABI backwards compatibility is not necessarily
      related to feature changes or bug fixes. Furthermore, the two version
      numbers have different semantics, and cannot be automatically generated
      from each other.
    </p>

    <p>
      A good overview of libtool versioning, and the differences from package
      versioning, is given in the
      <link href="https://autotools.io/libtool/version.html">Autotools
      Mythbuster</link>; another is in the
      <link href="http://www.gnu.org/s/libtool/manual/html_node/Updating-version-info.html">libtool
      manual</link>.
    </p>

    <p>
      To update the libtool version, follow the algorithm given in the comments
      below. This is a typical <file>configure.ac</file> snippet for setting up
      libtool versioning:
    </p>

    <code>
# Before making a release, the LT_VERSION string should be modified. The
# string is of the form c:r:a. Follow these instructions sequentially:
#   1. If the library source code has changed at all since the last update, then
#      increment revision (‘c:r:a’ becomes ‘c:r+1:a’).
#   2. If any interfaces have been added, removed, or changed since the last
#      update, increment current, and set revision to 0.
#   3. If any interfaces have been added since the last public release, then
#      increment age.
#   4. If any interfaces have been removed or changed since the last public
#      release, then set age to 0.
AC_SUBST([LT_VERSION],[0:0:0])</code>

    <p>
      The following snippet can be used in a <file>Makefile.am</file> to pass
      that version info to libtool:
    </p>
    <code>my_library_la_LDFLAGS = -version-info $(LT_VERSION)</code>

    <p>
      The package version number for a library is that passed to
      <code>AC_INIT()</code>, and the one which is typically known as the
      project’s version number. For example, the Debian package for a library
      will use the library’s package version (though may also include the major
      version number in the package name to allow for
      <link xref="parallel-installability">parallel installability</link>).
      Package versions have the form ‘major.minor.micro’, and are updated by the
      following rules:
    </p>
    <steps>
      <item><p>
        If breaking <link xref="api-stability">API compatibility</link>,
        increment major and set minor and micro to 0.
      </p></item>
      <item><p>
        Otherwise, if adding a large feature or other big change, or adding any
        API, increment minor and set micro to 0.
      </p></item>
      <item><p>
        Otherwise (for example, if making a release containing only bug fixes or
        translation updates), increment micro.
      </p></item>
    </steps>

    <p>
      Note that the minor version number should be updated if any API is added.
    </p>
  </section>

  <section id="application-versioning">
    <title>Application Versioning</title>

    <p>
      Application versioning is simpler than library versioning: applications
      only have a package number, and it follows the scheme ‘major.minor’.
    </p>

    <p>
      The application package number is updated similarly to the library package
      number, except the micro version is omitted:
    </p>
    <steps>
      <item><p>
        If making a large change to the application which affects everything
        (such as a UI redesign), increment major and set minor to 0.
      </p></item>
      <item><p>
        Otherwise, increment minor.
      </p></item>
    </steps>
  </section>

  <section id="release-process">
    <title>Release Process</title>

    <p>
      The standard process for making a release of a module increments the
      libtool version (if the module is a library) immediately before release,
      does the release, then increments the package version number immediately
      afterwards. This is called pre-release increment for libtool versioning
      and post-release increment for package versioning.
    </p>

    <p>
      The use of pre-release increment for libtool versions means that they are
      only incremented once for all ABI changes in a release. The use of
      post-release increment for package versions means the package version
      number is not outdated (still equal to the previous release) during
      the development cycle.
    </p>

    <p>
      The release process (based on the
      <link href="https://wiki.gnome.org/MaintainersCorner/Releasing">GNOME
      release process</link>):
    </p>
    <steps>
      <item><p>
        Make sure code is up to date: <cmd>git pull</cmd>
      </p></item>

      <item><p>
        Make sure you have no local changes: <cmd>git status</cmd>
      </p></item>
      <item><p>
        Increment the libtool version number in <file>configure.ac</file> (if it
        exists)
      </p></item>
      <item><p>
        Add an entry to the <file>NEWS</file> file
      </p></item>
      <item>
        <p>
          Run
          <cmd>./autogen.sh &amp;&amp; make &amp;&amp; make install &amp;&amp; make distcheck</cmd>
          and ensure it succeeds
        </p>
        <list>
          <item><p>
            Fix any issues which come up, commit those changes, and restart at
            step 3
          </p></item>
        </list>
      </item>
      <item><p>
        If <cmd>make distcheck</cmd> finishes with “[archive] is ready for
        distribution”, run <cmd>git commit -a -m "Release version x.y.z"</cmd>
        (where ‘x.y.z’ is the package version number)
      </p></item>
      <item>
        <p>
          Run <cmd>git push</cmd>
        </p>
        <list>
          <item><p>
            If that fails due to other commits having been pushed in the
            meantime, restart at step 1
          </p></item>
        </list>
      </item>
      <item><p>
        Tag the release: <cmd>git tag -s x.y.z</cmd> (where ‘x.y.z’ is the
        package version number)
      </p></item>
      <item><p>
        Run <cmd>git push origin x.y.z</cmd> (where ‘x.y.z’ is the package
        version number)
      </p></item>
    </steps>

    <p>
      The release is now complete, and the post-release version increment can be
      done:
    </p>
    <steps>
      <item><p>
        Increment the package version number in <file>configure.ac</file>
      </p></item>
      <item><p>
        Run <cmd>git commit -a -m "Post-release version increment"</cmd>
      </p></item>
      <item><p>
        Run <cmd>git push</cmd>
      </p></item>
    </steps>

    <p>
      The package archive generated by <cmd>make distcheck</cmd> can now be
      uploaded to download.gnome.org or distributed in other ways.
    </p>
  </section>
</page>