├── BSDmakefile ├── LICENSE └── README.md /BSDmakefile: -------------------------------------------------------------------------------- 1 | # GNU makefile proxy script for BSD make 2 | # 3 | # Written and maintained by Mahmoud Al-Qudsi 4 | # Copyright NeoSmart Technologies 2014-2019 5 | # Obtain updates from 6 | # 7 | # Redistribution and use in source and binary forms, with or without 8 | # modification, are permitted provided that the following conditions are met: 9 | # 10 | # 1. Redistributions of source code must retain the above copyright notice, this 11 | # list of conditions and the following disclaimer. 12 | # 13 | # 2. Redistributions in binary form must reproduce the above copyright notice, 14 | # this list of conditions and the following disclaimer in the documentation 15 | # and/or other materials provided with the distribution. 16 | # 17 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 18 | # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19 | # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 20 | # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 21 | # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22 | # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 23 | # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 24 | # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 25 | # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26 | # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 | 28 | JARG = 29 | GMAKE = "gmake" 30 | # When gmake is called from another make instance, -w is automatically added 31 | # which causes extraneous messages about directory changes to be emitted. 32 | # Running with --no-print-directory silences these messages. 33 | GARGS = "--no-print-directory" 34 | 35 | .if "$(.MAKE.JOBS)" != "" 36 | JARG = -j$(.MAKE.JOBS) 37 | .endif 38 | 39 | # bmake prefers out-of-source builds and tries to cd into ./obj (among others) 40 | # where possible. GNU Make doesn't, so override that value. 41 | .OBJDIR: ./ 42 | 43 | # The GNU convention is to use the lowercased `prefix` variable/macro to 44 | # specify the installation directory. Humor them. 45 | GPREFIX = "" 46 | .if defined(PREFIX) && ! defined(prefix) 47 | GPREFIX = 'prefix = "$(PREFIX)"' 48 | .endif 49 | 50 | .BEGIN: .SILENT 51 | which $(GMAKE) || printf "Error: GNU Make is required!\n\n" 1>&2 && false 52 | 53 | .PHONY: FRC 54 | $(.TARGETS): FRC 55 | $(GMAKE) $(GPREFIX) $(GARGS) $(.TARGETS:S,.DONE,,) $(JARG) 56 | 57 | .DONE .DEFAULT: .SILENT 58 | $(GMAKE) $(GPREFIX) $(GARGS) $(.TARGETS:S,.DONE,,) $(JARG) 59 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2014 - 2018, Mahmoud Al-Qudsi, NeoSmart Technologies 2 | 3 | Redistribution and use in source and binary forms, with or without 4 | modification, are permitted provided that the following conditions are met: 5 | 6 | 1. Redistributions of source code must retain the above copyright notice, this 7 | list of conditions and the following disclaimer. 8 | 9 | 2. Redistributions in binary form must reproduce the above copyright notice, 10 | this list of conditions and the following disclaimer in the documentation 11 | and/or other materials provided with the distribution. 12 | 13 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 14 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 16 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 17 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 18 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 19 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 20 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 21 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 22 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # gmake-proxy 2 | 3 | `gmake-proxy` consists of a single `BSDmakefile` that can be dropped into any 4 | project with an existing `Makefile` relying on syntax specific to GNU `make`. 5 | Instead of seeing and endless wall of errors as bmake attempts (and fails) to 6 | parse the `gmake`-specific contents, with this `BSDmakefile` in place `make` 7 | will silently proxy all commands (and even attempt to forward commandline 8 | options in a compatibile manner) to GNU `make` if `gmake` is found. 9 | 10 | If `gmake` is not installed, this makefile will emit the appropriate error 11 | message informing the end user that `gmake` is required to compile the project 12 | in question. 13 | 14 | ## How this works 15 | 16 | Since the split from the original AT&T `make`, both GNU's `make` and the BSD 17 | `make` have adopted different syntax to improve and expand the makefile syntax. 18 | These syntaxes changes are largely incompatible with one another. While the BSD 19 | makefile syntax is typically seen as being cleaner and clearer (and `bmake` can 20 | handle paths with spaces), the GNU variant of the makefile syntax is by far the 21 | more popular of the two in random open source projects found around the web. 22 | 23 | Fortunately, both GNU `make` and BSD `make` default to a different makefile 24 | name that, if present, will be used instead of a file named `Makefile` in the 25 | project root. For BSD `make`, that filename is `BSDmakefile`, while for GNU 26 | `make`, that name is is `GNUmakefile`. 27 | 28 | This project consists of a single `BSDmakefile` that can be dropped into any 29 | directory containing either a `GNUmakefile` or (as is most common) a 30 | platform-agnostic `Makefile` that incorrectly contains GNU-specific 31 | syntax/code. This `BSDmakefile` will attempt to intercept the user's build 32 | command and forward it to a GNU `make` instance, relying on the presence of GNU 33 | `make` installed under the name `gmake`. 34 | 35 | ## Copyright and authorship 36 | 37 | `gmake-proxy` is written and developed by Mahmoud Al-Qudsi of NeoSmart 38 | Technologies. This project is (aptly) released to the general public under the 39 | terms of the two-clause BSD license (aka "the simplified BSD license" or "the 40 | FreeBSD license"). Please see the `LICENSE` file for the full text of the 41 | license. 42 | 43 | (Code licensed under the BSD license may be freely used in GPL projects, 44 | unfortunately the converse is not true.) 45 | --------------------------------------------------------------------------------