From 1ee1d66e9b2bbcd8d957b7e6854bd930fa53db46 Mon Sep 17 00:00:00 2001 From: Mohammad Akhlaghi Date: Tue, 1 Dec 2020 17:32:44 +0000 Subject: Installation: m4 no longer depends on Texinfo In a recent build on a macOS, we recognized that Texinfo needs the 'libintl.h' headers of Gettext. However, Gettext depends on M4, and until now we had set M4 to depend on Texinfo. Therefore adding Gettext as a dependency of Texinfo would cause a circular dependency. On the macOS, we temporarily disabled M4's Texinfo dependency, and the build went through. I also checked on my GNU/Linux system: temporarily renamed all Texinfo built files from my system and done a clean build of M4 and it succeeded. To be further safe, I built Maneage from this commit (where M4 doesn't depend on Texinfo) in a Docker container, and it went through with no problems. So the current M4 version indeed doesn't need Texinfo. I think adding Texinfo as a dependency of M4 was a historic issue from the early days. In the process, I also cleaned 'basic.mk' a little: - A "# Level N" comment was added on top of each group of software that can be built in parallel (generally). - GNU Nano was moved to the end of the file (to be "Level 6"). - Some comments were edited in some places. --- reproduce/software/make/basic.mk | 96 ++++++++++++++++++++++++++++------------ 1 file changed, 67 insertions(+), 29 deletions(-) (limited to 'reproduce/software/make/basic.mk') diff --git a/reproduce/software/make/basic.mk b/reproduce/software/make/basic.mk index 934580a..d5484b2 100644 --- a/reproduce/software/make/basic.mk +++ b/reproduce/software/make/basic.mk @@ -572,8 +572,16 @@ $(ibidir)/bash-$(bash-version): \ -# The `-shared' flag will cause problems while building Perl on macOS, so -# we'll only use this configuration option when we are GNU/Linux + + + + + +# Level 4: Most other programs +# ---------------------------- + +# In Perl, The `-shared' flag will cause problems while building on macOS, +# so we'll only use this configuration option when we are GNU/Linux # systems. However, since the whole option must be used (which includes `=' # and empty space), its easier to define the variable as a Make variable # outside the recipe, not as a shell variable inside it. @@ -993,7 +1001,11 @@ $(ibidir)/libbsd-$(libbsd-version): $(ibidir)/coreutils-$(coreutils-version) # # [1] https://raw.githubusercontent.com/macports/macports-ports/edf0ee1e2cf/devel/m4/files/secure_snprintf.patch # [2] https://github.com/Homebrew/homebrew-core/blob/master/Formula/m4.rb -$(ibidir)/m4-$(m4-version): $(ibidir)/texinfo-$(texinfo-version) +# +# M4 doesn't depend on PatchELF, but just to be consistent with the +# levels/phases introduced here (where the compressors are level 1, +# PatchELF is level 2, and ...), we'll set it as a dependency. +$(ibidir)/m4-$(m4-version): $(ibidir)/patchelf-$(patchelf-version) tarball=m4-$(m4-version).tar.gz $(call import-source, $(m4-url), $(m4-checksum)) cd $(ddir) @@ -1140,7 +1152,8 @@ $(ibidir)/sed-$(sed-version): $(ibidir)/coreutils-$(coreutils-version) echo "GNU Sed $(sed-version)" > $@ $(ibidir)/texinfo-$(texinfo-version): \ - $(ibidir)/perl-$(perl-version) + $(ibidir)/perl-$(perl-version) \ + $(ibidir)/gettext-$(gettext-version) tarball=texinfo-$(texinfo-version).tar.xz $(call import-source, $(texinfo-url), $(texinfo-checksum)) $(call gbuild, texinfo-$(texinfo-version), static) @@ -1156,28 +1169,7 @@ $(ibidir)/which-$(which-version): $(ibidir)/coreutils-$(coreutils-version) $(call gbuild, which-$(which-version), static) echo "GNU Which $(which-version)" > $@ -# GNU Nano is a very light-weight and small, command-line text editor (in -# total around 3.5 Mb after installation!). It is top-level target in the -# basic tools (nothing depends on it, it just depends on GCC). This is -# because some projects may choose to not have it by manually removing it -# from 'targets-proglib' above (it has no effect on processing after all!). -$(ibidir)/nano-$(nano-version): $(ibidir)/gcc-$(gcc-version) - tarball=nano-$(nano-version).tar.xz - $(call import-source, $(nano-url), $(nano-checksum)) - $(call gbuild, nano-$(nano-version), static) - echo "GNU Nano $(nano-version)" > $@ - - - - - - - - - - -# GCC and its prerequisites -# ------------------------- +# GNU ISL is necessary to build GCC. $(ibidir)/isl-$(isl-version): $(ibidir)/gmp-$(gmp-version) tarball=isl-$(isl-version).tar.bz2 $(call import-source, $(isl-url), $(isl-checksum)) @@ -1189,6 +1181,7 @@ $(ibidir)/isl-$(isl-version): $(ibidir)/gmp-$(gmp-version) echo "GNU Integer Set Library $(isl-version)" > $@ fi +# GNU MPC is necessary to build GCC. $(ibidir)/mpc-$(mpc-version): $(ibidir)/mpfr-$(mpfr-version) tarball=mpc-$(mpc-version).tar.gz $(call import-source, $(mpc-url), $(mpc-checksum)) @@ -1200,10 +1193,23 @@ $(ibidir)/mpc-$(mpc-version): $(ibidir)/mpfr-$(mpfr-version) echo "GNU Multiple Precision Complex library" > $@ fi + + + + + + + + + +# Level 5: Binutils & GCC +# ----------------------- +# # The installation of Binutils can cause problems during the build of other -# programs (http://savannah.nongnu.org/bugs/?56294). Therefore, we'll set -# all other basic programs as Binutils prerequisite and GCC (the final -# basic target) ultimately just depends on Binutils. +# programs (http://savannah.nongnu.org/bugs/?56294), but its necessary for +# GCC. Therefore, we'll set all other basic programs as Binutils +# prerequisite and GCC (the final basic target) ultimately just depends on +# Binutils. $(ibidir)/binutils-$(binutils-version): \ $(ibidir)/sed-$(sed-version) \ $(ibidir)/isl-$(isl-version) \ @@ -1213,6 +1219,7 @@ $(ibidir)/binutils-$(binutils-version): \ $(ibidir)/file-$(file-version) \ $(ibidir)/gawk-$(gawk-version) \ $(ibidir)/which-$(which-version) \ + $(ibidir)/texinfo-$(texinfo-version) \ $(ibidir)/libtool-$(libtool-version) \ $(ibidir)/metastore-$(metastore-version) \ $(ibidir)/findutils-$(findutils-version) \ @@ -1463,3 +1470,34 @@ $(ibidir)/gcc-$(gcc-version): $(ibidir)/binutils-$(binutils-version) # Write the final target. echo "GNU Compiler Collection (GCC) $(gcc-version)" > $@ fi + + + + + + + + + + +# Level 6: Basic text editor +# -------------------------- +# +# If the project is built in a minimal environment, there is no text +# editor, making it hard to work on the project. By default a minimal +# (relatively user-friendly: GNU Nano) text editor will thus also be built +# at the end of the "basic" tools. More advanced editors are available as +# optional high-level programs. GNU Nano is a very light-weight and small +# command-line text editor (around 3.5 Mb after installation!). +# +# The editor is a top-level target in the basic tools (given to +# 'targets-proglib' above). Hence nothing depends on it, and it just +# depends on GCC. This is done because some projects may choose to not have +# nano (and use their own optional high-level text editor). To do this, +# they just have to manually remove 'nano' from 'targets-proglib' above and +# add their optional text editor in 'TARGETS.conf'. +$(ibidir)/nano-$(nano-version): $(ibidir)/gcc-$(gcc-version) + tarball=nano-$(nano-version).tar.xz + $(call import-source, $(nano-url), $(nano-checksum)) + $(call gbuild, nano-$(nano-version), static) + echo "GNU Nano $(nano-version)" > $@ -- cgit v1.2.1 From 021ff34c256e1a1eb9de3f80e0d27a5b3477a2e4 Mon Sep 17 00:00:00 2001 From: Mohammad Akhlaghi Date: Wed, 2 Dec 2020 01:01:45 +0000 Subject: Less is now built as a basic software Less is rarely used in non-interactive mode and is primarily intended for interactively viewing large files. So its need within Maneage (for batch processing) wasn't often felt until now. However, when running './project shell' (which completely closes-off the outside environment), or building a Maneage'd project within a minimal container that doesn't have less, it becomes hard to use Git (and in particular its 'diff' output which depends on 'less'). With this commit, Less has been added as a dependency of Git in 'basic.mk'. In total its built product is roughly 800KB and builds within a second or two. So it isn't a burden on any project. But it can be very useful when the projects are being developed within the Maneage environment itself. --- reproduce/software/make/basic.mk | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'reproduce/software/make/basic.mk') diff --git a/reproduce/software/make/basic.mk b/reproduce/software/make/basic.mk index d5484b2..1349122 100644 --- a/reproduce/software/make/basic.mk +++ b/reproduce/software/make/basic.mk @@ -947,6 +947,7 @@ $(ibidir)/gettext-$(gettext-version): \ echo "GNU gettext $(gettext-version)" > $@ $(ibidir)/git-$(git-version): \ + $(ibidir)/less-$(less-version) \ $(ibidir)/curl-$(curl-version) \ $(ibidir)/gettext-$(gettext-version) \ $(ibidir)/libiconv-$(libiconv-version) @@ -970,6 +971,15 @@ $(ibidir)/gmp-$(gmp-version): \ -j$(numthreads) ,make check) echo "GNU Multiple Precision Arithmetic Library $(gmp-version)" > $@ +# Less is useful with Git (to view the diffs within a minimal container) +# and generally to view large files easily when the project is built in a +# container with a minimal OS. +$(ibidir)/less-$(less-version): $(ibidir)/patchelf-$(patchelf-version) + tarball=less-$(less-version).tar.gz + $(call import-source, $(less-url), $(less-checksum)) + $(call gbuild, less-$(less-version), static,,-j$(numthreads)) + echo "Less $(less-version)" > $@ + # On Mac OS, libtool does different things, so to avoid confusion, we'll # prefix GNU's libtool executables with `glibtool'. $(ibidir)/libtool-$(libtool-version): $(ibidir)/m4-$(m4-version) -- cgit v1.2.1 From ff43476c4d293fda8765cfddbb1378f1b910218c Mon Sep 17 00:00:00 2001 From: Mohammad Akhlaghi Date: Sat, 2 Jan 2021 15:52:31 +0000 Subject: Copyright year updated in all source files Having entered 2021, it was necessary to update the copyright years at the top of the source files. We recommend that you do this for all your project-specific source files also. --- reproduce/software/make/basic.mk | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'reproduce/software/make/basic.mk') diff --git a/reproduce/software/make/basic.mk b/reproduce/software/make/basic.mk index 1349122..c4f0a16 100644 --- a/reproduce/software/make/basic.mk +++ b/reproduce/software/make/basic.mk @@ -21,8 +21,8 @@ # # ------------------------------------------------------------------------ # -# Copyright (C) 2018-2020 Mohammad Akhlaghi -# Copyright (C) 2019-2020 Raul Infante-Sainz +# Copyright (C) 2018-2021 Mohammad Akhlaghi +# Copyright (C) 2019-2021 Raul Infante-Sainz # # This Makefile is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -- cgit v1.2.1