BUILD: makefile: commit the tiny FreeBSD makefile stub

The idea here is to try to detect the use of "make" instead of "gmake"
on FreeBSD. After having long tried, there's no way to construct a
condition that is common to both makefile languages and could serve as
a differentiator since there's simply no common word between the two
languages. However on FreeBSD (the main used BSD platform), "make" is
configured to look for BSDmakefile before the other ones. It allows us
to intercept it and explain to use gmake with an example of a roughly
converted make command line (we just strip "-J xx,xx" that systematically
gets inserted if "-j" is used). A few tricks are used, such as creating
a dummy target on the fly based on the requested one just to silence the
output, and always match "all" since it's used by default when no target
is specified. .DEFAULTS was initially used but finally dropped thanks to
this.

For example:

  $ make -j$(getconf NPROCESSORS_ONLN) TARGET=freebsd USE_OPENSSL=1
  Please use GNU make instead. It is often called gmake.
  Example:
    gmake  -j 4 TARGET=freebsd USE_OPENSSL=1  all

It will often be sufficient to permit a copy-paste and to try again.
Note that the .gitignore was updated.
This commit is contained in:
Willy Tarreau 2023-05-24 17:06:30 +02:00
parent 1c07da4b48
commit af26361837
2 changed files with 11 additions and 0 deletions

1
.gitignore vendored
View File

@ -10,6 +10,7 @@
!/CHANGELOG
!/LICENSE
!/BRANCHES
!/BSDmakefile
!/Makefile
!/README
!/INSTALL

10
BSDmakefile Normal file
View File

@ -0,0 +1,10 @@
# Makefile stub for FreeBSD, it checks BSDmakefile before Makefile so
# we can be friendly to the user and tell them to use gmake.
.BEGIN:
@echo "Please use GNU make instead. It is often called gmake on BSD systems."
@echo "Example:"
@echo ' gmake ${MAKEFLAGS} $(.TARGETS)' | sed -e 's, -J[ ]*[0-9,]*,,'
@echo
all $(.TARGETS): .SILENT
@-