Commit 6503b9ff76a90cebb6c1c86996793a1dd4c449fe
1 parent
a14056db
Correctly set libtool version
Showing
1 changed file
with
112 additions
and
22 deletions
dev/set_version.py
| ... | ... | @@ -57,6 +57,42 @@ def get_current(): |
| 57 | 57 | return version |
| 58 | 58 | |
| 59 | 59 | |
| 60 | +# ========================== # | |
| 61 | +# Get libtool version number # | |
| 62 | +# ========================== # | |
| 63 | +def get_libtool(): | |
| 64 | + """ | |
| 65 | + Get libtools version number | |
| 66 | + | |
| 67 | + Returns | |
| 68 | + ------- | |
| 69 | + version : str | |
| 70 | + Version number | |
| 71 | + """ | |
| 72 | + # Initialse version number of empty string | |
| 73 | + version = '' | |
| 74 | + | |
| 75 | + # Open configure.ac file | |
| 76 | + f = open('configure.ac', 'r') | |
| 77 | + | |
| 78 | + # Read all lines | |
| 79 | + for line in f: | |
| 80 | + | |
| 81 | + # Search for pattern | |
| 82 | + if line.startswith('CTOOLS_LT_VERSION='): | |
| 83 | + | |
| 84 | + # Extract version number | |
| 85 | + start = line.find('"')+1 | |
| 86 | + stop = line.find('"', start) | |
| 87 | + version = line[start:stop].strip() | |
| 88 | + | |
| 89 | + # Close file | |
| 90 | + f.close() | |
| 91 | + | |
| 92 | + # Return version | |
| 93 | + return version | |
| 94 | + | |
| 95 | + | |
| 60 | 96 | # ============================== # |
| 61 | 97 | # Set version number in one file # |
| 62 | 98 | # ============================== # |
| ... | ... | @@ -84,7 +120,6 @@ def set_version(filename, version, current): |
| 84 | 120 | |
| 85 | 121 | # Replace version number |
| 86 | 122 | new_content = content.replace(current, version) |
| 87 | - #print(new_content) | |
| 88 | 123 | |
| 89 | 124 | # Open file in write mode |
| 90 | 125 | f = open(filename, 'w') |
| ... | ... | @@ -130,29 +165,58 @@ def set_versions(version, current): |
| 130 | 165 | |
| 131 | 166 | |
| 132 | 167 | # =============================================== # |
| 133 | -# Set special version number in configure.ac file # | |
| 168 | +# Set libtool version number in configure.ac file # | |
| 134 | 169 | # =============================================== # |
| 135 | -def set_special_configure(version, current): | |
| 170 | +def set_libtool_version(library=False, added=False, removed=False, changed=False): | |
| 136 | 171 | """ |
| 137 | 172 | Set special version numbers in configure.ac file |
| 138 | 173 | |
| 139 | 174 | Parameters |
| 140 | 175 | ---------- |
| 141 | - version : str | |
| 142 | - Version number | |
| 143 | - current : str | |
| 144 | - Current version number | |
| 176 | + library : bool, optional | |
| 177 | + Library source code changed | |
| 178 | + added : bool, optional | |
| 179 | + Interfaces added | |
| 180 | + removed : bool, optional | |
| 181 | + Interfaces removed | |
| 182 | + changed : bool, optional | |
| 183 | + Interfaces changed | |
| 145 | 184 | """ |
| 146 | - # Generate current version number | |
| 147 | - split = current.split('.') | |
| 148 | - cur = '%s:%s:%s' % (split[0], split[1], split[2]) | |
| 149 | - | |
| 150 | - # Generate new version number | |
| 151 | - split = version.split('.') | |
| 152 | - ver = '%s:%s:%s' % (split[0], split[1], split[2]) | |
| 153 | - | |
| 154 | - # Set version number | |
| 155 | - set_version('configure.ac', ver, cur) | |
| 185 | + # Get libtool version number | |
| 186 | + old = get_libtool() | |
| 187 | + split = old.split(':') | |
| 188 | + | |
| 189 | + # Decompose libtool version number | |
| 190 | + current = int(split[0]) | |
| 191 | + revision = int(split[1]) | |
| 192 | + age = int(split[2]) | |
| 193 | + | |
| 194 | + # If the library source code has changed at all since the last update, then | |
| 195 | + # increment revision | |
| 196 | + if library: | |
| 197 | + revision += 1 | |
| 198 | + | |
| 199 | + # If any interfaces have been added, removed, or changed since the last | |
| 200 | + # update, increment current, and set revision to 0 | |
| 201 | + if added or removed or changed: | |
| 202 | + current += 1 | |
| 203 | + revision = 0 | |
| 204 | + | |
| 205 | + # If any interfaces have been added since the last public release, then | |
| 206 | + # increment age | |
| 207 | + if added: | |
| 208 | + age += 1 | |
| 209 | + | |
| 210 | + # If any interfaces have been removed or changed since the last public | |
| 211 | + # release, then set age to 0 | |
| 212 | + if removed or changed: | |
| 213 | + age = 0 | |
| 214 | + | |
| 215 | + # Build new libtool version number | |
| 216 | + version = '%d:%d:%d' % (current, revision, age) | |
| 217 | + | |
| 218 | + # Set libtool version number | |
| 219 | + set_version('configure.ac', version, old) | |
| 156 | 220 | |
| 157 | 221 | # Return |
| 158 | 222 | return |
| ... | ... | @@ -193,19 +257,45 @@ def set_special_conf(version, current): |
| 193 | 257 | if __name__ == '__main__': |
| 194 | 258 | |
| 195 | 259 | # Check for version number |
| 196 | - if len(sys.argv) < 2: | |
| 197 | - sys.exit('Usage: set_version.py version') | |
| 260 | + if len(sys.argv) < 3: | |
| 261 | + print('Usage: set_version.py version [larc]') | |
| 262 | + print(' l : source code changed') | |
| 263 | + print(' a : interface(s) added') | |
| 264 | + print(' r : interface(s) removed') | |
| 265 | + print(' c : interface(s) changed') | |
| 266 | + sys.exit() | |
| 198 | 267 | |
| 199 | 268 | # Extract version number |
| 200 | 269 | version = sys.argv[1] |
| 201 | 270 | |
| 271 | + # Extract code change flags | |
| 272 | + if len(sys.argv) == 3: | |
| 273 | + flags = sys.argv[2] | |
| 274 | + | |
| 275 | + # Set change flags | |
| 276 | + library = False | |
| 277 | + added = False | |
| 278 | + removed = False | |
| 279 | + changed = False | |
| 280 | + if flags.find('l') != -1: | |
| 281 | + library = True | |
| 282 | + if flags.find('a') != -1: | |
| 283 | + added = True | |
| 284 | + if flags.find('r') != -1: | |
| 285 | + removed = True | |
| 286 | + if flags.find('c') != -1: | |
| 287 | + changed = True | |
| 288 | + | |
| 202 | 289 | # Get the current version |
| 203 | 290 | current = get_current() |
| 204 | 291 | |
| 205 | 292 | # Set versions |
| 206 | 293 | set_versions(version, current) |
| 207 | 294 | |
| 208 | - # Set special version number: | |
| 209 | - set_special_configure(version, current) # CTOOLS_LT_VERSION="x:y:z" | |
| 210 | - set_special_conf(version, current) # version = 'x.y' | |
| 295 | + # Set libtool version | |
| 296 | + set_libtool_version(library=library, added=added, removed=removed, | |
| 297 | + changed=changed) | |
| 298 | + | |
| 299 | + # Set special version number in doc/source/conf.py file | |
| 300 | + set_special_conf(version, current) | |
| 211 | 301 | ... | ... |