-
Notifications
You must be signed in to change notification settings - Fork 2.1k
makefiles/utils/strings.mk: Fix version_is_greater_or_equal #19133
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
The Makefile function `version_is_greater_or_equal` is used to check if a version of GNU Make is at least the required one. However, it has the built-in assumption the version numbers have to format x.y.z, but Alpine Linux currently ships GNU Make 4.4. This results in `$(call _pad_number,3,)` which runs `printf '$03d' ''` in the shell, which is not valid. This fixes the issue by making `_pad_number` more robust by fall back to printing `0` with the given padding, if the number given to print is empty.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ACK.
bors merge
bors merge |
Already running a review |
bors cancel |
Canceled. |
bors merge already! |
Already running a review |
sudo bors merge |
bors merge --force |
Already running a review |
bors cancel |
Canceled. |
19128: boards: common: stdio_cdc_acm: let tests wait a bit for serial port r=aabadie a=miri64 19133: makefiles/utils/strings.mk: Fix version_is_greater_or_equal r=maribu a=maribu ### Contribution description The Makefile function `version_is_greater_or_equal` is used to check if a version of GNU Make is at least the required one. However, it has the built-in assumption the version numbers have to format x.y.z, but Alpine Linux currently ships GNU Make 4.4. This results in `$(call _pad_number,3,)` which runs `printf '$03d' ''` in the shell, which is not valid. This fixes the issue by making `_pad_number` more robust by fall back to printing `0` with the given padding, if the number given to print is empty. ### Testing procedure Append ```Makefile $(info A=$(call version_is_greater_or_equal,4.2.0,4.2.0)) $(info B=$(call version_is_greater_or_equal,4.2,4.2.0)) $(info C=$(call version_is_greater_or_equal,4.1,4.2.0)) $(info D=$(call version_is_greater_or_equal,4.1.9,4.2.0)) $(info E=$(call version_is_greater_or_equal,5.1.9,4.2.0)) $(info F=$(call version_is_greater_or_equal,5.0.0,4.2.0)) $(info G=$(call version_is_greater_or_equal,4.2.1,4.2.0)) $(info H=$(call version_is_greater_or_equal,4.3.1,4.2.0)) ``` e.g. to `makefiles/utils/strings.mk`, build something and observe the info output. This yields ``` A=1 B=1 C= D= E=1 F=1 G=1 H=1 ``` for me and does not complain about invalid `printf` invocations. ### Issues/PRs references None Co-authored-by: Martine Lenders <m.lenders@fu-berlin.de> Co-authored-by: Marian Buschsieweke <marian.buschsieweke@ovgu.de>
Build failed (retrying...): |
19133: makefiles/utils/strings.mk: Fix version_is_greater_or_equal r=maribu a=maribu ### Contribution description The Makefile function `version_is_greater_or_equal` is used to check if a version of GNU Make is at least the required one. However, it has the built-in assumption the version numbers have to format x.y.z, but Alpine Linux currently ships GNU Make 4.4. This results in `$(call _pad_number,3,)` which runs `printf '$03d' ''` in the shell, which is not valid. This fixes the issue by making `_pad_number` more robust by fall back to printing `0` with the given padding, if the number given to print is empty. ### Testing procedure Append ```Makefile $(info A=$(call version_is_greater_or_equal,4.2.0,4.2.0)) $(info B=$(call version_is_greater_or_equal,4.2,4.2.0)) $(info C=$(call version_is_greater_or_equal,4.1,4.2.0)) $(info D=$(call version_is_greater_or_equal,4.1.9,4.2.0)) $(info E=$(call version_is_greater_or_equal,5.1.9,4.2.0)) $(info F=$(call version_is_greater_or_equal,5.0.0,4.2.0)) $(info G=$(call version_is_greater_or_equal,4.2.1,4.2.0)) $(info H=$(call version_is_greater_or_equal,4.3.1,4.2.0)) ``` e.g. to `makefiles/utils/strings.mk`, build something and observe the info output. This yields ``` A=1 B=1 C= D= E=1 F=1 G=1 H=1 ``` for me and does not complain about invalid `printf` invocations. ### Issues/PRs references None Co-authored-by: Marian Buschsieweke <marian.buschsieweke@ovgu.de>
Build failed: |
bors retry |
Build succeeded: |
Thx :) |
Backport provided in #19135 |
19135: makefiles/utils/strings.mk: Fix version_is_greater_or_equal [backport 2023.01] r=benpicco a=maribu # Backport of #19133 ### Contribution description The Makefile function `version_is_greater_or_equal` is used to check if a version of GNU Make is at least the required one. However, it has the built-in assumption the version numbers have to format x.y.z, but Alpine Linux currently ships GNU Make 4.4. This results in `$(call _pad_number,3,)` which runs `printf '$03d' ''` in the shell, which is not valid. This fixes the issue by making `_pad_number` more robust by fall back to printing `0` with the given padding, if the number given to print is empty. ### Testing procedure Append ```Makefile $(info A=$(call version_is_greater_or_equal,4.2.0,4.2.0)) $(info B=$(call version_is_greater_or_equal,4.2,4.2.0)) $(info C=$(call version_is_greater_or_equal,4.1,4.2.0)) $(info D=$(call version_is_greater_or_equal,4.1.9,4.2.0)) $(info E=$(call version_is_greater_or_equal,5.1.9,4.2.0)) $(info F=$(call version_is_greater_or_equal,5.0.0,4.2.0)) $(info G=$(call version_is_greater_or_equal,4.2.1,4.2.0)) $(info H=$(call version_is_greater_or_equal,4.3.1,4.2.0)) ``` e.g. to `makefiles/utils/strings.mk`, build something and observe the info output. This yields ``` A=1 B=1 C= D= E=1 F=1 G=1 H=1 ``` for me and does not complain about invalid `printf` invocations. ### Issues/PRs references None Co-authored-by: Marian Buschsieweke <marian.buschsieweke@ovgu.de>
19135: makefiles/utils/strings.mk: Fix version_is_greater_or_equal [backport 2023.01] r=kaspar030 a=maribu # Backport of #19133 ### Contribution description The Makefile function `version_is_greater_or_equal` is used to check if a version of GNU Make is at least the required one. However, it has the built-in assumption the version numbers have to format x.y.z, but Alpine Linux currently ships GNU Make 4.4. This results in `$(call _pad_number,3,)` which runs `printf '$03d' ''` in the shell, which is not valid. This fixes the issue by making `_pad_number` more robust by fall back to printing `0` with the given padding, if the number given to print is empty. ### Testing procedure Append ```Makefile $(info A=$(call version_is_greater_or_equal,4.2.0,4.2.0)) $(info B=$(call version_is_greater_or_equal,4.2,4.2.0)) $(info C=$(call version_is_greater_or_equal,4.1,4.2.0)) $(info D=$(call version_is_greater_or_equal,4.1.9,4.2.0)) $(info E=$(call version_is_greater_or_equal,5.1.9,4.2.0)) $(info F=$(call version_is_greater_or_equal,5.0.0,4.2.0)) $(info G=$(call version_is_greater_or_equal,4.2.1,4.2.0)) $(info H=$(call version_is_greater_or_equal,4.3.1,4.2.0)) ``` e.g. to `makefiles/utils/strings.mk`, build something and observe the info output. This yields ``` A=1 B=1 C= D= E=1 F=1 G=1 H=1 ``` for me and does not complain about invalid `printf` invocations. ### Issues/PRs references None Co-authored-by: Marian Buschsieweke <marian.buschsieweke@ovgu.de>
Contribution description
The Makefile function
version_is_greater_or_equal
is used to check if a version of GNU Make is at least the required one. However, it has the built-in assumption the version numbers have to format x.y.z, but Alpine Linux currently ships GNU Make 4.4. This results in$(call _pad_number,3,)
which runsprintf '$03d' ''
in the shell, which is not valid.This fixes the issue by making
_pad_number
more robust by fall back to printing0
with the given padding, if the number given to print is empty.Testing procedure
Append
e.g. to
makefiles/utils/strings.mk
, build something and observe the info output.This yields
for me and does not complain about invalid
printf
invocations.Issues/PRs references
None