diff --git a/parts.rst b/parts.rst index a8836f7..507d99c 100644 --- a/parts.rst +++ b/parts.rst @@ -171,7 +171,7 @@ bzip2 1.0.8 ``bzip2`` is a compression format that compresses more than ``gzip``. It is preferred where we can use it, and makes source code sizes smaller. -coreutils 5.0.0 +coreutils 5.0 =============== GNU Coreutils is a collection of widely used utilities such as ``cat``, @@ -370,32 +370,43 @@ packaging software on computer systems where a Bourne shell is available. At this stage we still do not have a working autotools system, so we manually install ``autoconf`` script and replace a few placeholder variables with ``sed``. +Autoconf 2.52 is the newest version of ``autoconf`` that does not need ``perl``, and hence +a bit easier to install. + +automake 1.6.3 +============== + +GNU Automake is a tool for automatically generating Makefile.in files. It is another major +part of GNU Autotools build system and consists of ``aclocal`` and ``automake`` scripts. + +We bootstrap it using a 3 stage process: + +1. Use ``sed`` to replace a few placeholder variables in ``aclocal.in`` script. + Then we manually install ``aclocal`` script and its dependencies. +2. Patch ``configure.in`` to create ``automake`` file but skip ``Makefile.in`` processing. + Again we manually install ``automake`` script and its dependencies. +3. We now use ``aclocal``, ``autoconf``, and ``automake`` to do a proper build and install. + automake 1.4-p6 =============== -GNU Automake is a tool for automatically generating Makefile.in files. It is another -major part of GNU Autotools build system. - -``automake`` again needs both ``automake`` and ``autoconf``. In order to bootstrap it -we patch ``configure.in`` file to produce ``automake`` and skip ``Makefile`` effectively -removing dependency on ``automake`` at the cost of having to install ``automake`` manually. - -Then we rebuild both ``automake`` using already installed ``autoconf`` and ``automake``. +This is an older version of GNU Automake. Various versions of GNU Autotools are not fully +compatible, and we will need older ``automake`` to build some older software. autoconf 2.52 ============= -We now properly rebuild ``autoconf`` using ``autoconf`` and ``automake``. +We now properly rebuild ``autoconf`` using ``automake-1.4`` and manually installed ``autoconf``. autoconf 2.13 ============= -Different versions of autotools are not fully compatible, so build older ``autoconf`` too. +An older ``autoconf`` will be necessary to build GNU Binutils. autoconf 2.12 ============= -Yet another old autoconf version that we will need for GNU Binutils. +Yet another old autoconf version that we will need for some parts of GNU Binutils. libtool 1.4 =========== @@ -438,11 +449,3 @@ interactively. This newer version of ``bash`` compiles without any patches, provides new features, and is built with GNU readline support so it can be used as an interactive shell. autoconf 2.52 is used to regenerate the configure script and bison is used to recreate some included generated files. - -automake 1.6.3 -============== - -This is a newer version of GNU Automake that is required to build newer -versions of ``autoconf``. We again use two stage approach like we did -with ``automake-1.4`` because previous versions of ``automake`` are too old -to properly build ``automake-1.6``. diff --git a/rootfs.sh b/rootfs.sh index 0d6f69b..7abaa55 100755 --- a/rootfs.sh +++ b/rootfs.sh @@ -156,9 +156,6 @@ get_file ftp://sourceware.org/pub/bzip2/bzip2-1.0.8.tar.gz 1 # coreutils 5.0 get_file https://ftp.gnu.org/gnu/coreutils/coreutils-5.0.tar.bz2 1 -# coreutils 6.3 -get_file https://ftp.gnu.org/gnu/coreutils/coreutils-6.3.tar.bz2 - # heirloom-devtools get_file http://downloads.sourceforge.net/project/heirloom/heirloom-devtools/070527/heirloom-devtools-070527.tar.bz2 @@ -189,6 +186,9 @@ get_file https://ftp.gnu.org/gnu/grep/grep-2.4.tar.gz # diffutils 2.7 get_file https://ftp.gnu.org/gnu/diffutils/diffutils-2.7.tar.gz +# coreutils 6.3 +get_file https://ftp.gnu.org/gnu/coreutils/coreutils-6.3.tar.bz2 + # gawk 3.0.4 get_file https://ftp.gnu.org/gnu/gawk/gawk-3.0.4.tar.gz @@ -210,6 +210,9 @@ get_file https://www.cpan.org/src/5.0/perl-5.6.2.tar.gz # autoconf 2.52 get_file https://ftp.gnu.org/gnu/autoconf/autoconf-2.52.tar.gz +# automake 1.6.3 +get_file https://ftp.gnu.org/gnu/automake/automake-1.6.3.tar.bz2 + # automake 1.4-p6 get_file https://ftp.gnu.org/gnu/automake/automake-1.4-p6.tar.gz @@ -228,9 +231,6 @@ get_file https://ftp.gnu.org/gnu/binutils/binutils-2.14.tar.bz2 # bash 3.2.57 get_file https://ftp.gnu.org/gnu/bash/bash-3.2.57.tar.gz -# automake 1.6.3 -get_file https://ftp.gnu.org/gnu/automake/automake-1.6.3.tar.bz2 - # General cleanup find tmp -name .git -exec rm -rf \; diff --git a/sysa/autoconf-2.52/stage1.sh b/sysa/autoconf-2.52/stage1.sh index 0708858..aed76b5 100755 --- a/sysa/autoconf-2.52/stage1.sh +++ b/sysa/autoconf-2.52/stage1.sh @@ -4,12 +4,9 @@ src_compile() { cp autoconf.in autoconf - sed -i "s# @SHELL@#/bin/sh#" autoconf - sed -i 's/@M4@/m4/' autoconf - sed -i 's/@AWK@/awk/' autoconf - sed -i 's/@PACKAGE_NAME@/Autoconf/' autoconf - sed -i 's/@VERSION@/2.52/' autoconf - sed -i "s#@datadir@#${PREFIX}/share/autoconf-2.52#" autoconf + sed -i -e "s# @SHELL@#/bin/sh#" -e 's/@M4@/m4/' -e 's/@AWK@/awk/' \ + -e 's/@PACKAGE_NAME@/Autoconf/' -e 's/@VERSION@/2.52/' \ + -e "s#@datadir@#${PREFIX}/share/autoconf-2.52#" autoconf chmod +x autoconf m4 autoconf.m4 --freeze-state=autoconf.m4f diff --git a/sysa/autoconf-2.52/stage2.sh b/sysa/autoconf-2.52/stage2.sh index da084a6..2be0069 100755 --- a/sysa/autoconf-2.52/stage2.sh +++ b/sysa/autoconf-2.52/stage2.sh @@ -10,7 +10,7 @@ src_prepare() { # Install autoconf data files into versioned directory for file in */Makefile.in Makefile.in; do - sed -i '/^pkgdatadir/s:$:-@VERSION@:' $file + sed -i '/^pkgdatadir/s:$:-@VERSION@:' $file done } diff --git a/sysa/automake-1.4-p6/automake-1.4-p6.sh b/sysa/automake-1.4-p6/automake-1.4-p6.sh new file mode 100755 index 0000000..0708c57 --- /dev/null +++ b/sysa/automake-1.4-p6/automake-1.4-p6.sh @@ -0,0 +1,17 @@ +# SPDX-FileCopyrightText: 2021 Andrius Štikonas +# +# SPDX-License-Identifier: GPL-3.0-or-later + +src_prepare() { + rm configure Makefile.in */Makefile.in aclocal.m4 + aclocal-1.6 + autoconf-2.52 + # When building with newer automake we get the following error + # Makefile.am:59: ETAGS_ARGS multiply defined in condition TRUE + sed -i '/ETAGS_ARGS/,+1d' Makefile.am + automake-1.6 +} + +src_configure() { + ./configure --prefix=/after +} diff --git a/sysa/automake-1.4-p6/stage1.sh b/sysa/automake-1.4-p6/stage1.sh deleted file mode 100755 index 88b8163..0000000 --- a/sysa/automake-1.4-p6/stage1.sh +++ /dev/null @@ -1,30 +0,0 @@ -# SPDX-FileCopyrightText: 2021 Andrius Štikonas -# -# SPDX-License-Identifier: GPL-3.0-or-later - -src_prepare() { - sed -i 's#m4/Makefile tests/Makefile##; s/Makefile //' configure.in - - rm configure Makefile.in */Makefile.in - autoconf-2.52 -} - -src_configure() { - ./configure --prefix=/after -} - -src_compile() { - cp m4/amversion.in m4/amversion.m4 - sed -i 's/@VERSION@/1.4-p6/' m4/amversion.m4 - sed -i 's/@APIVERSION@/1.4/' m4/amversion.m4 -} - -src_install() { - install automake "${PREFIX}"/bin/automake-1.4 - mkdir -p "${PREFIX}"/share/automake-1.4 - cp -r *.am "${PREFIX}"/share/automake-1.4/ - - install aclocal "${PREFIX}"/bin/aclocal-1.4 - mkdir -p "${PREFIX}"/share/aclocal-1.4 - cp -r m4/*.m4 "${PREFIX}"/share/aclocal-1.4/ -} diff --git a/sysa/automake-1.6.3/stage1.sh b/sysa/automake-1.6.3/stage1.sh index 0a04c71..db6685e 100755 --- a/sysa/automake-1.6.3/stage1.sh +++ b/sysa/automake-1.6.3/stage1.sh @@ -3,27 +3,22 @@ # SPDX-License-Identifier: GPL-3.0-or-later src_prepare() { - sed -i '/Makefile/d' configure.in - rm configure Makefile.in */Makefile.in */*/Makefile.in aclocal.m4 - autoconf-2.52 -} - -src_configure() { - ./configure --prefix=/after + cp aclocal.in aclocal + cp m4/amversion.in m4/amversion.m4 } src_compile() { - cp m4/amversion.in m4/amversion.m4 - sed -i 's/@VERSION@/1.6.3/' m4/amversion.m4 - sed -i 's/@APIVERSION@/1.6/' m4/amversion.m4 + sed -i -e 's/@VERSION@/1.6.3/' -e 's/@APIVERSION@/1.6/' m4/amversion.m4 + + sed -i -e 's#@PERL@#/after/bin/perl#' -e 's/@PACKAGE@/automake/' \ + -e 's/@APIVERSION@/1.6/' -e 's/@VERSION@/1.6.3/' \ + -e 's#@prefix@#/after#' -e 's#@datadir@#/after/share#' aclocal } src_install() { - install automake "${PREFIX}"/bin/automake-1.6 - mkdir -p "${PREFIX}"/share/automake-1.6/{Automake,am} + mkdir -p "${PREFIX}"/share/automake-1.6/Automake cp lib/Automake/*.pm "${PREFIX}"/share/automake-1.6/Automake/ - cp -r lib/am/*.am "${PREFIX}"/share/automake-1.6/am/ install aclocal "${PREFIX}"/bin/aclocal-1.6 mkdir -p "${PREFIX}"/share/aclocal-1.6 diff --git a/sysa/automake-1.6.3/stage2.sh b/sysa/automake-1.6.3/stage2.sh index 02caaee..87691c9 100755 --- a/sysa/automake-1.6.3/stage2.sh +++ b/sysa/automake-1.6.3/stage2.sh @@ -3,22 +3,29 @@ # SPDX-License-Identifier: GPL-3.0-or-later src_prepare() { + sed -i '/Makefile/d' configure.in + rm configure Makefile.in */Makefile.in */*/Makefile.in aclocal.m4 aclocal-1.6 autoconf-2.52 - automake-1.6 } src_configure() { ./configure --prefix=/after } -src_install() { - # cleanup old manual install - rm "${PREFIX}"/bin/automake-1.6 - rm "${PREFIX}"/bin/aclocal-1.6 - rm -rf "${PREFIX}"/share/automake-1.6 - rm -rf "${PREFIX}"/share/aclocal-1.6 - - default_src_install +src_compile() { + cp m4/amversion.in m4/amversion.m4 + sed -i 's/@VERSION@/1.6.3/' m4/amversion.m4 + sed -i 's/@APIVERSION@/1.6/' m4/amversion.m4 +} + +src_install() { + install automake "${PREFIX}"/bin/automake-1.6 + mkdir -p "${PREFIX}"/share/automake-1.6/am + cp lib/Automake/*.pm "${PREFIX}"/share/automake-1.6/Automake/ + cp -r lib/am/*.am "${PREFIX}"/share/automake-1.6/am/ + + install aclocal "${PREFIX}"/bin/aclocal-1.6 + cp -r m4/*.m4 "${PREFIX}"/share/aclocal-1.6/ } diff --git a/sysa/automake-1.4-p6/stage2.sh b/sysa/automake-1.6.3/stage3.sh similarity index 52% rename from sysa/automake-1.4-p6/stage2.sh rename to sysa/automake-1.6.3/stage3.sh index f88ac94..02caaee 100755 --- a/sysa/automake-1.4-p6/stage2.sh +++ b/sysa/automake-1.6.3/stage3.sh @@ -3,10 +3,10 @@ # SPDX-License-Identifier: GPL-3.0-or-later src_prepare() { - rm configure Makefile.in */Makefile.in + rm configure Makefile.in */Makefile.in */*/Makefile.in aclocal.m4 + aclocal-1.6 autoconf-2.52 - aclocal-1.4 - automake-1.4 + automake-1.6 } src_configure() { @@ -15,9 +15,10 @@ src_configure() { src_install() { # cleanup old manual install - rm "${PREFIX}"/bin/automake-1.4 - rm -rf "${PREFIX}"/share/automake-1.4 - rm -rf "${PREFIX}"/share/aclocal-1.4 + rm "${PREFIX}"/bin/automake-1.6 + rm "${PREFIX}"/bin/aclocal-1.6 + rm -rf "${PREFIX}"/share/automake-1.6 + rm -rf "${PREFIX}"/share/aclocal-1.6 default_src_install } diff --git a/sysa/run.sh b/sysa/run.sh index 9f0707d..386942d 100755 --- a/sysa/run.sh +++ b/sysa/run.sh @@ -76,8 +76,11 @@ populate_device_nodes build autoconf-2.52 stage1.sh -build automake-1.4-p6 stage1.sh -build automake-1.4-p6 stage2.sh +build automake-1.6.3 stage1.sh +build automake-1.6.3 stage2.sh +build automake-1.6.3 stage3.sh + +build automake-1.4-p6 build autoconf-2.52 stage2.sh diff --git a/sysa/run2.sh b/sysa/run2.sh index fadc238..9ace4cc 100755 --- a/sysa/run2.sh +++ b/sysa/run2.sh @@ -9,9 +9,6 @@ set -e . helpers.sh -build automake-1.6.3 stage1.sh -build automake-1.6.3 stage2.sh - echo "Bootstrapping completed." exec env - PATH=/after/bin PS1="\w # " bash -i