Skip to content

Commit 3660644

Browse files
dann frazierrtg-canonical
dann frazier
authored andcommitted
UBUNTU: [debian] Allow for package revisions condusive for branching
TLDR; This changes the way that version strings are parsed in the packaging to make it easier for me to maintain topic branches/PPA builds. There should be no changes to how things work today for standard Ubuntu kernels. But, it allows for topic-branch maintainers to add an optional ".X" in the ABI name, for reasons described below. <Regression Testing> ------------------ Old Parsing: = abinum = $ echo "33.58" | sed -e 's/\..*//' 33 = uploadnum = $ echo "33.58" | sed -e 's/.*\.//' 58 = abi = $ echo "33.58" | gawk -F. '{print $1}' 33 New Parsing: = abinum = $ echo "33.58" | sed -r -e 's/([^\+]*)\.[^\.]+(\+.*)?$/\1/' 33 = uploadnum = $ echo "33.58" | sed -r -e 's/[^\+]*\.([^\.]+(\+.*)?$$)/\1/' 58 = abi = $ echo "33.58" | sed -r -e 's/([^\+]*)\.[^\.]+(\+.*)?$/\1/' 33 </Regression Testing> When maintaining topic customizations that track Ubuntu kernel releases, it is nice have the following features: 1) Ability to decipher the base Ubuntu kernel revision used from the topic kernel's revision number 2) Use a version that dpkg sorts > the base Ubuntu version 3) Use a version that dpkg sorts < the next expected Ubuntu version 4) Ability to retains the same ABI as the base Ubuntu version when the ABI has indeed not changed. This helps with e.g. d-i compatibility. 5) Make use of ABI tracking facilities (vs. just disabling them) This is difficult to do with the current version scheme, which encodes the ABI number in the version string: <upstream-version>-<abi>.<rev> I can tack a "+topic.<N>" to the end of rev, we can solve 1-3, but only as long as as the ABI is the same. Once the ABI changes, I don't have a good way to bump it. If I increment the ABI, we'll overlap with the next Ubuntu ABI (breaking #4). If we jump to a huge ABI number (e.g. x100 to go from 32 to 3200), we'll have a package revision that will never again upgrade to an Ubuntu version (breaking #3), and never get back to the Ubuntu ABI (again breaking #4). I can of course use a linux-meta package to e.g. transition from a 3200 ABI back to a 32 ABI at the packaging level, but the bootloader will still consider 3200 to be newer and therefore the default. I've therefore started using the following scheme: <upstream-version>-<abi>(.topicabi)?.<rev>(+<topic>.<topicrev>)? Where topicabi must always be >= <rev> (ugly, but necessary). If I don't break the ABI, I can then branch and return like so: 3.16.0-8.6 -------------------------------------------------> 3.16.0-8.7 \ ^ \ | \--> 3.16.0-8.6+topic.1 -------> 3.16.0-8.6+topic.2 --------/ If I do need to break the ABI, I can branch and return like so: 3.16.0-8.6 -------------------------------------------------> 3.16.0-9.1 \ ^ \ ABI break #1 ABI break #2 | \--> 3.16.0-8.6.6+topic.1 -------> 3.16.0-8.7.6+topic.2 ----/ Signed-off-by: dann frazier <[email protected]> Signed-off-by: Tim Gardner <[email protected]>
1 parent 11c9d4f commit 3660644

File tree

2 files changed

+4
-4
lines changed

2 files changed

+4
-4
lines changed

debian/rules.d/0-common-vars.mk

+3-3
Original file line numberDiff line numberDiff line change
@@ -61,11 +61,11 @@ ifeq ($(full_build),false)
6161
skipdbg=true
6262
endif
6363

64-
abinum := $(shell echo $(revision) | sed -e 's/\..*//')$(abi_suffix)
65-
prev_abinum := $(shell echo $(prev_revision) | sed -e 's/\..*//')$(abi_suffix)
64+
abinum := $(shell echo $(revision) | sed -r -e 's/([^\+]*)\.[^\.]+(\+.*)?$$/\1/')$(abi_suffix)
65+
prev_abinum := $(shell echo $(prev_revision) | sed -r -e 's/([^\+]*)\.[^\.]+(\+.*)?$$/\1/')$(abi_suffix)
6666
abi_release := $(release)-$(abinum)
6767

68-
uploadnum := $(shell echo $(revision) | sed -e 's/.*\.//')
68+
uploadnum := $(shell echo $(revision) | sed -r -e 's/[^\+]*\.([^\.]+(\+.*)?$$)/\1/')
6969
ifneq ($(full_build),false)
7070
uploadnum := $(uploadnum)-Ubuntu
7171
endif

debian/scripts/misc/getabis

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ fi
1111

1212
ver=$1
1313
revision=$2
14-
abi=$(echo $revision | gawk -F. '{print $1}')
14+
abi=$(echo $revision | sed -r -e 's/([^\+]*)\.[^\.]+(\+.*)?$/\1/')
1515

1616
verabi=$ver-$abi
1717
verfull=$ver-$revision

0 commit comments

Comments
 (0)