aboutsummaryrefslogtreecommitdiffstats
path: root/Makefile
Commit message (Collapse)AuthorAgeFilesLines
* Release version 0.15.20.15.2Robin Jarry2023-05-111-1/+1
| | | | Signed-off-by: Robin Jarry <robin@jarry.cc>
* Release version 0.15.10.15.1Robin Jarry2023-04-281-1/+1
| | | | Signed-off-by: Robin Jarry <robin@jarry.cc>
* Release version 0.15.00.15.0Robin Jarry2023-04-261-1/+1
| | | | Signed-off-by: Robin Jarry <robin@jarry.cc>
* mod: update all dependenciesRobin Jarry2023-04-241-1/+1
| | | | | | | | | | | | | | Result of the following commands: go get -u -t go mod tidy -compat=1.18 I also updated gofumpt version in the makefile. golangci-lint cannot be updated to 1.52.* which requires go 1.19 or later. Aerc has a minimum required version of 1.18. Signed-off-by: Robin Jarry <robin@jarry.cc> Acked-by: Bence Ferdinandy <bence@ferdinandy.com>
* ci: fix lint if notmuch is not installedMoritz Poldrack2023-03-161-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | The linter goes completely crazy when notmuch is not installed and the notmuch build tag is enabled. With an otherwise successful lint, the following output is generated: worker/notmuch/lib/database.go:14:10: could not import github.com/zenhack/go.notmuch (-: # github.com/zenhack/go.notmuch ../../go/pkg/mod/github.com/brunnre8/go.notmuch@v0.0.0-20201126061756-caa2daf7093c/configList.go:9:11: fatal error: notmuch.h: No such file or directory 9 | // #include <notmuch.h> | ^~~~~~~~~~~ compilation terminated.) (typecheck) notmuch "github.com/zenhack/go.notmuch" ^ commands/eml.go:4:2: "bytes" imported and not used (typecheck) "bytes" ^ aerc.go:39:7: previous case (typecheck) case *widgets.AccountView: ^ exit status 1 make: *** [Makefile:73: lint] Error 1 Only include the notmuch build tag in the lint process if it is actually installed. Signed-off-by: Moritz Poldrack <git@moritz.sh> Signed-off-by: Robin Jarry <robin@jarry.cc>
* contrib: fix sendemail validate scriptRobin Jarry2023-03-081-1/+2
| | | | | | | | | | | | | | | | | | The current sendemail-validate script cannot be used for patch series. It works on each patch independently from the others and make it impossible to use when there are inter dependencies. I have submitted an alternate validate script that works on whole series which is still waiting for reviews. In the meantime, propose to use my script which can work. To install it in your environment: curl -Lo ~/.local/bin/git-send-email \ https://paste.sr.ht/blob/cedcf24383022949c8dc5bc1300cf5cbc879b36f echo 'export GIT_EXEC_PATH=$PATH:$(git --exec-path)' >> ~/.profile Link: https://lore.kernel.org/git/20230103231133.64050-1-robin@jarry.cc/ Link: https://paste.sr.ht/~rjarry/7e9a98866ba2c6f34e4169debf4f2c14b574613e Signed-off-by: Robin Jarry <robin@jarry.cc>
* mk: use fixed versions for gofumpt and golangci-lintRobin Jarry2023-03-081-3/+5
| | | | | | @latest is flaky and does not resist GOPROXY hiccups. Signed-off-by: Robin Jarry <robin@jarry.cc>
* mk: speed up notmuch detectionRobin Jarry2023-03-061-6/+4
| | | | | | | | | | | | | | | Use gcc instead of go to build a basic program and determine if notmuch is available. Building a minimal go program takes more than 300ms on a fast machine. A minimal C counterpart takes less than 100ms. To avoid lag when doing bash completion, avoid running any shell commands directly during make evaluation. Rename check-notmuch.sh to goflags.sh and make that script print the goflags directly. Signed-off-by: Robin Jarry <robin@jarry.cc> Tested-by: Inwit <inwit@sindominio.net>
* mk: remove smart rebuild when GOFLAGS have changedRobin Jarry2023-03-061-12/+2
| | | | | | | | | | | This was a nice idea but it is very annoying since the flags change every time the git commit changes even if there are no changes to the source files nor the GOFLAGS... Building with different GOFLAGS now requires cleaning first. Signed-off-by: Robin Jarry <robin@jarry.cc> Acked-by: Moritz Poldrack <moritz@poldrack.dev>
* mk: detect if notmuch headers & libs are availableRobin Jarry2023-03-031-1/+2
| | | | | | | | | | Detect if notmuch is available by trying to compile a minimal go program that uses the notmuch.h header and links to libnotmuch.so. If that succeeds, set the default GOFLAGS value to -tags=notmuch. Signed-off-by: Robin Jarry <robin@jarry.cc> Tested-by: Inwit <inwit@sindominio.net>
* lint: always run golangci-lint@latestRobin Jarry2023-02-261-3/+3
| | | | | | | | | | | | Do not store the dependency in tools.go as there may be conflicts with some indirect dependencies of aerc. Run gofumpt and golangci-lint from their latest tagged release. This should fix issues with go 1.20. Bonus, it drains a bit of fat from go.sum. Signed-off-by: Robin Jarry <robin@jarry.cc> Acked-by: Moritz Poldrack <moritz@poldrack.dev>
* stylesets: add solarized themeJens Grassel2023-01-281-0/+1
| | | | | | | | | This adds a styleset using the solarized theme to aerc which affects the tui and the colorize wrapper. Link: https://ethanschoonover.com/solarized/ Signed-off-by: Jens Grassel <jens@wegtam.com> Acked-by: Robin Jarry <robin@jarry.cc>
* filters: rewrite colorize in cRobin Jarry2023-01-261-5/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Since its introduction, we had multiple issues with the colorize awk script with regard to non-GNU awk compatibility. Also, this script is standalone and the color theme must be hard coded into it. Reading from an external configuration file (aerc's styleset) from a non-GNU awk is close to impossible (and even far from trivial with GNU awk). Rewrite the builtin colorize filter in C to allow getting the color theme from aerc's active styleset. The theme is configured using the existing styleset syntax and attributes under a separate [viewer] section (see examples and man page). Export the active styleset file path to AERC_STYLESET env var when invoking the filter command so that colorize can access it and use it. I have tested compilation (with clang-analyzer and gcc -fanalyzer) and basic operation on FreeBSD, Fedora (glibc) and Alpine (muslibc). More tests would probably be required on MacOSX and older Linux distros. I also added test vectors to give some confidence that this works as expected. The execution with these vectors passed valgrind --leak-check=full without errors. NB: the default theme has changed to be more minimal. Sample stylesets have more colorful examples. The awk -v theme=xxx option is no longer supported. usage: colorize [-h] [-s FILE] [-f FILE] options: -h show this help message -s FILE use styleset file (default $AERC_STYLESET) -f FILE read from filename (default stdin) Signed-off-by: Robin Jarry <robin@jarry.cc> Tested-by: Bence Ferdinandy <bence@ferdinandy.com> Acked-by: Moritz Poldrack <moritz@poldrack.dev>
* filters: rewrite wrap in cRobin Jarry2023-01-261-6/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This utility introduced in commit c9524d265793 ("filters: add wrap utility written in go") allows to reflow text to view emails that have very long lines without breaking quotes, lists and indentation. For such a simple task, go produces a binary that is 2.0M bytes on disk. After stripping debugging symbols, it can be reduced to 1.2M bytes. All of this for 267 lines of source code. This is a bit ridiculous, provided people may load this binary into memory multiple times per minute. This tool is a small side-project that seems not suitable for golang. Rewrite it in C. It now only depends on a POSIX libc to run. It is safe to assume that there is one available on all *NIX systems in the world of 2023. The resulting binary is now 27K bytes (15K after stripping). To build it, a C compiler and libc headers are required. These should most likely be available since they are dependencies of the go compiler toolchain. I have tested compilation (with clang-analyzer and gcc -fanalyzer) and basic operation on FreeBSD, Fedora (glibc) and Alpine (musl libc). More tests would probably be required on MacOSX and older Linux distros. I also added test vectors to give some confidence that this works as expected. Update CI with aggressive gcc hardening flags and to run these tests with valgrind --leak-check=full. Command line options are unchanged: usage: wrap [-h] [-w INT] [-r] [-l INT] [-f FILE] Wrap text without messing up email quotes. options: -h show this help message -w INT preferred wrap margin (default 80) -r reflow all paragraphs even if no trailing space -l INT minimum percentage of letters in a line to be considered a paragaph -f FILE read from filename (default stdin) Signed-off-by: Robin Jarry <robin@jarry.cc> Tested-by: Bence Ferdinandy <bence@ferdinandy.com> Tested-by: Maxwell G <gotmax@e.email>
* filters: install them in $PREFIX/libexec/aerc/filtersRobin Jarry2023-01-101-9/+12
| | | | | | | | | | | | | | | | | | | | | The filesystem hierarchy standard describes /usr/share as "Architecture-independent data". This folder is not intended for executable scripts and especially not for arch specific binary files (such as the wrap filter). Lintian reports an error with aerc 0.14.0: arch-dependent-file-in-usr-share [usr/share/aerc/filters/wrap] Which I had to fix by moving the filter into /usr/libexec. Install all filters into $PREFIX/libexec/aerc/filters and update the default SearchDirs to look them up in here as well. Link: https://refspecs.linuxfoundation.org/FHS_3.0/fhs/ch04s11.html Link: https://salsa.debian.org/go-team/packages/aerc/-/commit/a0ca00260ffd Signed-off-by: Robin Jarry <robin@jarry.cc> Acked-by: Moritz Poldrack <moritz@poldrack.dev>
* contrib: add linter to check for panic handler in goroutinesRobin Jarry2023-01-061-1/+4
| | | | | | | | | | | | | | | | | If log.PanicHandler() is not installed in a goroutine and a panic occurs, the terminal state is not restored. This causes the panic trace to be unreadable since the terminal is broken. Add a custom analyzer that parses our code and ensures that: defer log.PanicHandler() is the first statement of all functions that are executed in goroutines. Include that linter in golangci config. Signed-off-by: Robin Jarry <robin@jarry.cc> Tested-by: Bence Ferdinandy <bence@ferdinandy.com>
* Release version 0.14.00.14.0Robin Jarry2023-01-041-1/+1
| | | | Signed-off-by: Robin Jarry <robin@jarry.cc>
* mk: remove verbose for testsRobin Jarry2022-12-181-1/+1
| | | | | | This is useless and annoying. Signed-off-by: Robin Jarry <robin@jarry.cc>
* contributing: add tooling for git send-emailRobin Jarry2022-12-141-0/+12
| | | | | | | | | | | | | | | | | | | | | | | | | Add a gitconfig target in the Makefile to configure a new clone with sane defaults: - set subject prefix - set correct mailing list address - enable sendemail.validate - install sendemail-validate hook The sendemail-validate hook will make a shallow clone of the current upstream repo, apply every patch on it and run some checks (a stripped down version of what is run by the upstream CI). Add a new check-patches script that verifies that the commit message actually contains something and that the Signed-off-by trailer from the patch author is present. Call check-patches in both the CI and the sendemail-validate hook. Update CONTRIBUTING.md accordingly. Signed-off-by: Robin Jarry <robin@jarry.cc> Acked-by: Tim Culverhouse <tim@timculverhouse.com>
* stylesets: install styles with aercBence Ferdinandy2022-12-141-1/+5
| | | | | | | | Install styles along with aerc. Include stylesets from the wiki and Robin's pink/blue. Signed-off-by: Bence Ferdinandy <bence@ferdinandy.com> Acked-by: Robin Jarry <robin@jarry.cc>
* filters: add wrap utility written in goRobin Jarry2022-12-051-3/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | I had started writing this as an awk script but quickly got stuck with obscure code which did not even work properly. I jumped the gun and re did it in go. Bonus, we will not have MacOS's 1987 BSD awk issues. On the other hand, instead of a 20.0K awk script, we now have a 2.2M static go binary. If this makes people scream, I challenge them to do that with BSD awk :) Basically, this takes text from stdin or from a file and wraps long lines on word boundaries. It takes care of not breaking up email quotes nor list items (numbered as well). Also, it is conservative by default and only wraps long lines and lines that end with a space (indicating a format=flowed message). If the AERC_SUBJECT environment variable is defined and contains the word PATCH, the text is not modified at all (i.e. wrap behaves as cat(1)). There are a few command line options to control behavior: Usage of ./wrap: -f string read from file instead of stdin -l int minimum percentage of letters in a line to be considered a paragaph (default 50) -r reflow all paragraphs even if no trailing space -w int preferred wrap margin (default 80) Update docs, makefile and default config file with examples. Add a torture test to ensure it works as expected. Signed-off-by: Robin Jarry <robin@jarry.cc> Tested-by: Bence Ferdinandy <bence@ferdinandy.com>
* mk: display formatting diffsRobin Jarry2022-12-031-1/+1
| | | | | | It may help understanding what is currently going on with go 1.19. Signed-off-by: Robin Jarry <robin@jarry.cc>
* doc: extract accounts and binds into separate man pagesRobin Jarry2022-11-241-0/+8
| | | | | | | | | | | | | aerc-config(5) is getting too big and cluttered. Only keep aerc.conf settings in it. Move binds.conf settings in aerc-binds(5) and accounts.conf settings in aerc-accounts(5). Adjust all references accordingly. Update the README to reference the two new man pages. Update the Makefile to install them in proper locations. Signed-off-by: Robin Jarry <robin@jarry.cc> Acked-by: Koni Marti <koni.marti@gmail.com>
* Release version 0.13.00.13.0Robin Jarry2022-10-201-1/+1
| | | | Signed-off-by: Robin Jarry <robin@jarry.cc>
* lint: check for bad white space habitsRobin Jarry2022-10-191-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | A little coding hygiene cannot hurt. Add a simple awk script to check all source files for bad white space habits: - trailing white space - trailing new lines at the end of files - missing new line at the end of files - spaces followed by tabs The script outputs color when the terminal supports it. It exits with a non-zero code when there was at least one white space issue found. Call the script in the lint step. Example output of the awk script: config/default_styleset:1:# <-- trailing whitespace config/default_styleset:3:# <-- trailing whitespace doc/aerc.1.scd:78: Executes an arbitrary command in the background. Aerc will set the <-- trailing whitespace doc/aerc.1.scd:234: <-- trailing whitespace doc/aerc.1.scd:237: <-- trailing whitespace worker/types/thread_test.go:74: // return ErrSkipThread<-- space(s) followed by tab(s) worker/lib/testdata/message/invalid/hexa: trailing new line(s) Fix issues reported by the script. NB: The ENDFILE match is a GNU extension. It will be ignored on BSD-awk and trailing new lines will not be detected. The lint make target is only invoked on alpine linux which has GNU awk anyway. NB: Empty cells in scdoc tables require trailing white space... Avoid this by setting content in these cells. I don't really see a use for empty cells. Signed-off-by: Robin Jarry <robin@jarry.cc> Tested-by: Moritz Poldrack <moritz@poldrack.dev>
* mk: exclude govulncheck from lintRobin Jarry2022-10-071-0/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The vulnerability database is evolving with time. It can cause the lint step to fail suddenly without any source code changes on our side. Moreover, sometimes, there is nothing we can do to fix the issue nor to silence that specific error. Found 1 known vulnerability. Vulnerability #1: GO-2022-1039 Programs which compile regular expressions from untrusted sources may be vulnerable to memory exhaustion or denial of service. The parsed regexp representation is linear in the size of the input, but in some cases the constant factor can be as high as 40,000, making relatively small regexps consume much larger amounts of memory. After fix, each regexp being parsed is limited to a 256 MB memory footprint. Regular expressions whose representation would use more space than that are rejected. Normal use of regular expressions is unaffected. Call stacks in your code: config/config.go:1000:46: git.sr.ht/~rjarry/aerc/config.AercConfig.LoadBinds calls regexp.Compile, which eventually calls regexp/syntax.Parse Found in: regexp/syntax@go1.18.6 Fixed in: regexp/syntax@go1.19.2 More info: https://pkg.go.dev/vuln/GO-2022-1039 Move govulncheck into its own make target to be executed manually. Signed-off-by: Robin Jarry <robin@jarry.cc> Acked-by: Tim Culverhouse <tim@timculverhouse.com>
* mk: make it obvious that GOFLAGS change cause a rebuildRobin Jarry2022-09-201-0/+1
| | | | | | We had a few issues with that for downstream distros recently. Signed-off-by: Robin Jarry <robin@jarry.cc>
* lint: warn about known security issuesMoritz Poldrack2022-09-141-0/+1
| | | | | Signed-off-by: Moritz Poldrack <git@moritz.sh> Acked-by: Robin Jarry <robin@jarry.cc>
* Release version 0.12.00.12.0Robin Jarry2022-09-011-1/+1
| | | | Signed-off-by: Robin Jarry <robin@jarry.cc>
* aerc: fix build when GOFLAGS contains spacesRobin Jarry2022-08-241-1/+2
| | | | | | | | | | | | Due to multiple levels of nested quoting, it is not possible to escape spaces and/or quotes from GOFLAGS and pass the value to go build -ldflags to set a compile time variable. Encode main.Flags in base64 and decode it when reading it. Fixes: d7e6dc3649ea ("aerc: add build info to version string") Signed-off-by: Robin Jarry <robin@jarry.cc> Acked-by: Moritz Poldrack <moritz@poldrack.dev>
* aerc: add build info to version stringRobin Jarry2022-08-221-0/+1
| | | | | | | | | | | | | | | | Example: $ aerc -v aerc 0.11.0 +notmuch (go1.18.4 amd64 linux) Also include that version information in the debug and panic logs. debug.ReadBuildInfo() is only available in go 1.18+. Add a new variable set at build time to store $GOFLAGS. Suggested-by: Tim Culverhouse <tim@timculverhouse.com> Signed-off-by: Robin Jarry <robin@jarry.cc> Acked-by: Moritz Poldrack <moritz@poldrack.dev>
* lint: add golangci-lint to the lintersMoritz Poldrack2022-08-041-1/+1
| | | | | | | | go vet has been removed from the lint step as it is run by the new linter. Signed-off-by: Moritz Poldrack <moritz@poldrack.dev> Acked-by: Robin Jarry <robin@jarry.cc>
* lint: use gofumpt instead of gofmtMoritz Poldrack2022-08-011-6/+4
| | | | | | Link: https://github.com/mvdan/gofumpt Signed-off-by: Moritz Poldrack <git@moritz.sh> Acked-by: Robin Jarry <robin@jarry.cc>
* mk: compute version deterministicallyJose Lombera2022-07-171-1/+1
| | | | | | | | | | Ensure abbreviated commit id of fixed length in computed version regardless of user's configuration. Choose length 12 as safe value. Link: https://github.com/git/git/commit/dce96489162b Signed-off-by: Jose Lombera <jose@lombera.dev> Acked-by: Moritz Poldrack <moritz@poldrack.dev> Acked-by: Robin Jarry <robin@jarry.cc>
* Release version 0.11.00.11.0Robin Jarry2022-07-111-1/+1
| | | | Signed-off-by: Robin Jarry <robin@jarry.cc>
* mk: merge checkfmt into lintRobin Jarry2022-06-241-6/+3
| | | | | | No need to have two separate targets. Signed-off-by: Robin Jarry <robin@jarry.cc>
* mk: add lint targetMoritz Poldrack2022-06-241-0/+4
| | | | | | | | Run go vet only for now. More linters can be added later. Run linters in the CI pipeline. Signed-off-by: Moritz Poldrack <git@moritz.sh> Acked-by: Robin Jarry <robin@jarry.cc>
* mk: add dev target with go race detector enabledMoritz Poldrack2022-06-241-0/+5
| | | | | | | | | Add a dev target which enables Go's race detector. This requires CGo to be enabled and reduces performance significantly, but helps in finding data races which can lead to hard to diagnose bugs. Signed-off-by: Moritz Poldrack <git@moritz.sh> Acked-by: Robin Jarry <robin@jarry.cc>
* mk: show built version in build logMoritz Poldrack2022-06-241-1/+1
| | | | | | | | Replace the implicit shell-parsing with explicitly running the command. This allows the built version to be reflected in the build log. Signed-off-by: Moritz Poldrack <git@moritz.sh> Acked-by: Robin Jarry <robin@jarry.cc>
* mk: strip build dir from stack tracesMoritz Poldrack2022-06-241-1/+2
| | | | | | | | | | | Add the -trimpath flag to the default build command to remove the user's path from stack traces. Use a separate BUILD_OPTS make var to avoid it being accidentally overridden on the command line. Signed-off-by: Moritz Poldrack <git@moritz.sh> Acked-by: Robin Jarry <robin@jarry.cc>
* filters: awk filter to parse text/calendarKoni Marti2022-05-311-0/+1
| | | | | | | | | Implement a filter to read text/calendar (ics) data with awk. Parses multiple events and shows the date recurrence if available. Awk alternative to the python filter. Signed-off-by: Koni Marti <koni.marti@gmail.com> Acked-by: Robin Jarry <robin@jarry.cc>
* gpg: make tests more robustRobin Jarry2022-05-101-0/+4
| | | | | | | | | Skip the tests if gpg is not installed. Avoid interference with the global ~/.gnupg. Automatically delete GNUPGHOME at the end of tests. Signed-off-by: Robin Jarry <robin@jarry.cc> Acked-by: Tim Culverhouse <tim@timculverhouse.com>
* mk: bump versionRobin Jarry2022-05-101-1/+1
| | | | | | I guess I forget to do it every other time... Signed-off-by: Robin Jarry <robin@jarry.cc>
* Add html "unsafe" filter to work also without danteJens Grassel2022-04-171-0/+1
| | | | | | | | If socksify (from dante) is not installed then the filter uses w3m without it to render an html message part. Signed-off-by: Jens Grassel <jens@wegtam.com> Acked-by: Robin Jarry <robin@jarry.cc>
* mk: do not depend on cmp being availableRobin Jarry2022-04-141-3/+1
| | | | | | | cmp is part of gnu diffutils which may not be available. Use grep which is more widespread. Signed-off-by: Robin Jarry <robin@jarry.cc>
* mk: rename ambiguous LDFLAGS variableRobin Jarry2022-04-061-4/+7
| | | | | | | | | | | | | | | | | | The LDFLAGS environment variable is usually indented for C the linker flags which are not compatible with go -ldflags. Use a more explicit GO_LDFLAGS variable instead. Allow adding extra flags without overriding the default ones by specifying GO_EXTRA_LDFLAGS. This may break the build on some distros that rely on setting LDFLAGS to change the default shareDir or version. They will have to switch to GO_EXTRA_LDFLAGS. Link: https://salsa.debian.org/go-team/packages/aerc/-/commit/e9ed90beae9f Link: https://src.fedoraproject.org/rpms/aerc/blob/f36/f/aerc.spec#_86 Fixes: e7e22aba60ce ("mk: rebuild if goflags or ldflags have changed") Signed-off-by: Robin Jarry <robin@jarry.cc>
* Add filter script for ics files.Jens Grassel2022-03-231-0/+1
| | | | | | | | This is a python script for python 3 using the vobject library to show details about an ics file (text/calendar attachment). Signed-off-by: Jens Grassel <jens@wegtam.com> Tested-by: Moritz Poldrack <moritz@poldrack.dev>
* Release version 0.9.00.9.0Robin Jarry2022-03-211-1/+1
| | | | Signed-off-by: Robin Jarry <robin@jarry.cc>
* config: specify sharedir during buildDaniel Patterson2022-03-031-0/+1
| | | | | | | | | | | | | We should use the Makefile value of SHAREDIR when searching for config files and templates etc. This is important for systems which do not use the standard file hierarchy or which do not have a consistent location for installing program files, for example NixOS, which will have a different install location with every update. Signed-off-by: Daniel Patterson <me@danielpatterson.dev> Acked-by: Robin Jarry <robin@jarry.cc>
* mk: fix dynamic source dependencies with bsd makeRobin Jarry2022-02-271-1/+1
| | | | | | | | | | | | | | | | | When building with BSD make, running `make` after updating a source file will not cause the binary to be rebuilt. After inspection, it appears that the GOSRC variable only contains "go.mod go.sum". The aerc target does not depend on .go source files. The $(shell) construct is GNU make specific. BSD make has a special assignment operator (!=) which evaluates a shell command. Since GNU make 4.0, the BSD != operator is supported for compatibility. Use a syntax that is available in both make flavours. Link: https://git.savannah.gnu.org/cgit/make.git/commit/?id=b34438bee83ee Signed-off-by: Robin Jarry <robin@jarry.cc> Tested-by: Koni Marti <koni.marti@gmail.com>