mirror of
https://git.savannah.gnu.org/git/make.git
synced 2024-11-24 12:19:02 +00:00
65 lines
2.6 KiB
Text
65 lines
2.6 KiB
Text
04 July 2022 -*-text-*-
|
|
|
|
The gnulib project provides a fantastic array of modules that can support both
|
|
POSIX and also extended features for GNU software.
|
|
|
|
Unfortunately using it in GNU make is problematic: GNU make is a foundational
|
|
utility (if you don't have a "make" program you pretty much can't build any
|
|
software), one of our goals in GNU make is to provide scripts (e.g.,
|
|
"build.sh") that will build GNU make without needing an instance of make.
|
|
|
|
Instead of running "./configure && make", you should be able to run
|
|
"./configure && ./build.sh" and get a build of GNU make as a result.
|
|
|
|
However, more and more gnulib modules are relying not on M4 macros and
|
|
the configure script to manage their configuration, but in addition special
|
|
makefile recipes that perform various post-configure operations. Since we
|
|
don't have an instance of "make", we cannot use these modules as-is.
|
|
|
|
There are various options we could choose for solving this:
|
|
|
|
- Avoid gnulib modules and write our own portability interfaces.
|
|
I really am not too excited about this.
|
|
|
|
- Give up on "build.sh" and require users to already have "make".
|
|
The argument here is that you must already have a compiler, and it couldn't
|
|
have been built without "make", and/or if you build it with a cross-compiler
|
|
then you should be able to use that cross-development environment to build
|
|
GNU make as well.
|
|
|
|
- Provide a "mini-make" with just enough functionality to support the gnulib
|
|
makefiles but no extra features, that didn't need any complex gnulib
|
|
modules. As with the first option, I'm not too excited about this.
|
|
|
|
Although arguably the second option is the sane one, I'm not really excited
|
|
about any of them for the time being. So I elected to try something between
|
|
the first and second options:
|
|
|
|
The gnulib-port Git branch will contain unmodified copies of gnulib modules
|
|
that we want to use with GNU make. From there, we merge them into the main
|
|
Git branch then modify / simplify them to avoid unnecessary extra modules and
|
|
allow "build.sh" to be used.
|
|
|
|
By keeping the unmodified versions on the gnulib-port branch, we enable Git
|
|
merge facilities to merge in new versions as follows:
|
|
|
|
* Check out the gnulib-port branch
|
|
|
|
* Update its content with any updates to gnulib modules. Something like:
|
|
(
|
|
cd gl \
|
|
&& find */. -type f \
|
|
| while read fn; do
|
|
test -f "$GNULIB_SRCDIR/$fn" && cp "$GNULIB_SRCDIR/$fn" "$fn"
|
|
done
|
|
)
|
|
|
|
* Commit the changes _without modification_
|
|
|
|
* Check out the main branch
|
|
|
|
* Run "git merge --no-ff gnulib-port" to merge in the changes
|
|
|
|
* Resolve any conflicts and commit the merge.
|
|
|
|
-- pds
|