Makes testing Makefile is (Free|Open)BSDmake compatible easier on GNU/Linux
- Copy
GNUmakefile
and the directorymk
to your project directory. - Copy
Makefile.EXAMPLE
to your project directory asMakefile
.
GNUmakefile
is a file that is only understood by GNU Make. So, when make
is run, if you are on GNU/Linux, (or using gmake
on another system,) it will attempt to run all common commands through Busybox to make sure your Makefile
works with stripped down non-GNU coreutils.
However, when run on a system with only bsdmake
(bmake
on GNU/Linux), the file is totally ignored and busybox
is not used.
All of your recipes must be written as:
myrecipe:
$(DOBEFORE) && (\
# …
)
# …
.include <mk/before.mk>
Furthermore, it is highly recommended to enforce:
SHELL=/bin/sh
At the top of the Makefile
. This ensures compatibility with POSIX shells,
such as those in use by default on *BSD.
By default sed
and awk
will use generic versions, with their paths at $SED
and $AWK
, either through Busybox or through the system coreutils as appropriate. You can add any program busybox
supports by editing the all
recipe in GNUmakefile
, and adding more $(MAKE) test_busybox_has
lines. E.g., to add cat
as $CAT
, add the line:
all:
# …
$(eval export $(shell $(MAKE) WHAT=cat test_busybox_has))
# …
I got this idea while working on yeslogic/glyph-names№3 and added BSDmakefile
to that project in yeslogic/glyph-names№2.
###############################################################################
#- BSDmakefile © 2022 Fredrick R. Brennan <[email protected]> -#
###############################################################################
#- Permission is hereby granted, free of charge, to any person obtaining a #
#- copy of this software and associated documentation files (the "Software"), #
#- to deal in the Software without restriction, including without limitation #
#- the rights to use, copy, modify, merge, publish, distribute, sublicense, #
#- and/or sell copies of the Software, and to permit persons to whom the #
#- Software is furnished to do so, subject to the following conditions: #
#- #
#- The above copyright notice and this permission notice shall be included in #
#- all copies or substantial portions of the Software. #
#- #
#- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR #
#- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, #
#- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL #
#- THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER #
#- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING #
#- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER #
#- DEALINGS IN THE SOFTWARE. #
###############################################################################