summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Hill <ahill@breadpudding.dev>2025-11-24 10:36:57 -0500
committerAlexander Hill <ahill@breadpudding.dev>2025-11-24 10:36:57 -0500
commit38329ef5fd8096b8b41859a802c491df6db9748c (patch)
treee8d50ca29f3ff9363e56d60e3359ddaa13e92a9c
parent0a5a1839bcb657702db24dc69e5860fa14ee3164 (diff)
Added byacc, editline, flex, m4, muon, and ncurses
...and updated treetap
-rw-r--r--STATUS.md6
-rwxr-xr-xbootstrap.sh2
-rwxr-xr-xrootbuild.sh10
-rw-r--r--sources/byacc/byacc.spec29
-rw-r--r--sources/editline/editline.spec24
-rw-r--r--sources/flex/flex.spec21
-rw-r--r--sources/m4/m4.spec20
-rw-r--r--sources/muon/muon.spec24
-rw-r--r--sources/ncurses/ncurses.spec30
-rwxr-xr-xtreetap57
10 files changed, 211 insertions, 12 deletions
diff --git a/STATUS.md b/STATUS.md
index 4c64bcb..2108466 100644
--- a/STATUS.md
+++ b/STATUS.md
@@ -3,14 +3,20 @@ This document tracks which packages can be built and packaged within the chroot.
| Package | Can Build? | Can Package? |
| ------------ | ---------- | ------------ |
| `busybox` | No | No |
+| `byacc` | Yes | Yes |
| `bzip2` | Yes | Yes |
| `cmake` | Yes | Yes |
+| `editline` | Yes | Yes |
+| `flex` | Yes | Yes |
| `libarchive` | Yes | Yes |
| `libressl` | Yes | Yes |
| `linux` | No | No |
| `llvm` | No | No |
+| `m4` | Yes | Yes |
| `make` | Yes | Yes |
| `mold` | Yes | Yes |
+| `muon` | Yes | Yes |
| `musl` | Yes | Yes |
+| `ncurses` | Yes | Yes |
| `xz` | Yes | Yes |
| `zlib` | Yes | Yes | \ No newline at end of file
diff --git a/bootstrap.sh b/bootstrap.sh
index 9db1e37..41feb22 100755
--- a/bootstrap.sh
+++ b/bootstrap.sh
@@ -241,7 +241,7 @@ cp $TREETAP $BOOTSTRAP/root/bin/
mkdir -p $BOOTSTRAP/root/maple/
cp rootbuild.sh $BOOTSTRAP/root/maple/
export TT_DIR=$BOOTSTRAP/root/maple/.treetap
-SOURCES=(libarchive libressl xz)
+SOURCES=(busybox byacc bzip2 cmake editline flex libarchive libressl linux llvm m4 make mold muon musl ncurses xz zlib)
for name in $SOURCES; do
$TREETAP fetch $SPEC/$name/$name.spec
done
diff --git a/rootbuild.sh b/rootbuild.sh
index aa8f530..32a4cec 100755
--- a/rootbuild.sh
+++ b/rootbuild.sh
@@ -3,12 +3,15 @@ export CFLAGS="-O3 -pipe"
export CXXFLAGS=$CFLAGS
# xz Build
+# NOTE: xz is needed to run "treetap package", so we manually install. ~ahill
cd /maple
treetap build sources/xz/xz.spec
cd .treetap/sources/xz/*/*/xz-*/
make -j $(nproc) install DESTDIR=/
# libarchive Build
+# NOTE: bsdcpio is needed to run "treetap package", so we manually install.
+# ~ahill
cd /maple
treetap build sources/libarchive/libarchive.spec
cd .treetap/sources/libarchive/*/*/libarchive-*/
@@ -18,9 +21,12 @@ make -j $(nproc) install DESTDIR=/
# NOTE: bzip2, xz, and zlib need to be built before libarchive or we will be
# missing functionality! ~ahill
# NOTE: CMake requires LibreSSL and libarchive to function properly so it is
-# built after that. ~ahill
+# built after them. ~ahill
# NOTE: mold requires CMake to build. ~ahill
-PACKAGES="bzip2 libressl make musl xz zlib libarchive cmake mold"
+# NOTE: flex requires byacc and m4 to build. ~ahill
+# NOTE: editline requires ncurses to build. ~ahill
+cd /maple
+PACKAGES="byacc bzip2 libressl m4 make muon musl ncurses xz zlib editline flex libarchive cmake mold"
for pkg in $PACKAGES; do
treetap fetch sources/$pkg/$pkg.spec
treetap build sources/$pkg/$pkg.spec
diff --git a/sources/byacc/byacc.spec b/sources/byacc/byacc.spec
new file mode 100644
index 0000000..e859572
--- /dev/null
+++ b/sources/byacc/byacc.spec
@@ -0,0 +1,29 @@
+# Maintainer: Alexander Hill <ahill@breadpudding.dev>
+SRC_HASH="192c2fae048d4e7f514ba451627f9c4e612765099f819c19191f9fde3e609673"
+SRC_NAME="byacc"
+SRC_URL="https://invisible-mirror.net/archives/byacc/byacc-20241231.tgz"
+SRC_VERSION="20241231"
+
+build() {
+ tar xf ../$SRC_FILENAME
+ cd byacc-*/
+ ./configure $TT_AUTOCONF_COMMON
+ make -O -j $TT_PROCS
+}
+
+clean() {
+ rm -rf byacc-*/
+}
+
+package() {
+ cd byacc-*/
+ # NOTE: byacc's "make install" calls diff -c, which is unsupported by
+ # Busybox. Unfortunately, our other implementation of diff requires
+ # byacc to build, meaning we'll need to do a manual install to prevent
+ # a circular dependency. ~ahill
+ mkdir -p $TT_INSTALLDIR/bin
+ cp yacc $TT_INSTALLDIR/bin/
+ ln -s yacc $TT_INSTALLDIR/bin/byacc
+ mkdir -p $TT_INSTALLDIR/usr/share/man/man1
+ cp yacc.1 $TT_INSTALLDIR/usr/share/man/man1/
+} \ No newline at end of file
diff --git a/sources/editline/editline.spec b/sources/editline/editline.spec
new file mode 100644
index 0000000..bbca7dd
--- /dev/null
+++ b/sources/editline/editline.spec
@@ -0,0 +1,24 @@
+# Maintainer: Alexander Hill <ahill@breadpudding.dev>
+SRC_HASH="21362b00653bbfc1c71f71a7578da66b5b5203559d43134d2dd7719e313ce041"
+SRC_NAME="editline"
+SRC_URL="https://thrysoee.dk/editline/libedit-20251016-3.1.tar.gz"
+SRC_VERSION="20251016-3.1"
+
+build() {
+ tar xf ../$SRC_FILENAME
+ cd libedit-*/
+ ./configure $TT_AUTOCONF_COMMON --disable-static
+ # NOTE: wchar_t isn't defined correctly due to a bug in clang, preventing
+ # libedit from building properly. ~ahill
+ # See also: https://bugs.gentoo.org/870001
+ make -O -j $TT_PROCS CFLAGS="$CFLAGS -include stdc-predef.h"
+}
+
+clean() {
+ rm -rf libedit-*/
+}
+
+package() {
+ cd libedit-*/
+ make -O -j $TT_PROCS install DESTDIR=$TT_INSTALLDIR
+} \ No newline at end of file
diff --git a/sources/flex/flex.spec b/sources/flex/flex.spec
new file mode 100644
index 0000000..dbf0ee6
--- /dev/null
+++ b/sources/flex/flex.spec
@@ -0,0 +1,21 @@
+# Maintainer: Alexander Hill <ahill@breadpudding.dev>
+SRC_HASH="e87aae032bf07c26f85ac0ed3250998c37621d95f8bd748b31f15b33c45ee995"
+SRC_NAME="flex"
+SRC_URL="https://github.com/westes/flex/releases/download/v2.6.4/flex-2.6.4.tar.gz"
+SRC_VERSION="2.6.4"
+
+build() {
+ tar xf ../$SRC_FILENAME
+ cd flex-*/
+ ./configure $TT_AUTOCONF_COMMON --disable-static
+ make -O -j $TT_PROCS
+}
+
+clean() {
+ rm -rf flex-*/
+}
+
+package() {
+ cd flex-*/
+ make -O -j $TT_PROCS install DESTDIR=$TT_INSTALLDIR
+} \ No newline at end of file
diff --git a/sources/m4/m4.spec b/sources/m4/m4.spec
new file mode 100644
index 0000000..8894ded
--- /dev/null
+++ b/sources/m4/m4.spec
@@ -0,0 +1,20 @@
+# Maintainer: Alexander Hill <ahill@breadpudding.dev>
+SRC_HASH="e4315fef49b08912b1d1db3774dd98f971397b2751c648512b6c8d852590dc50"
+SRC_NAME="m4"
+SRC_URL="http://haddonthethird.net/m4/m4-2.tar.bz2"
+SRC_VERSION="2"
+
+build() {
+ tar xf ../$SRC_FILENAME
+ cd m4-*/
+ make -O -j $TT_PROCS
+}
+
+clean() {
+ rm -rf m4-*/
+}
+
+package() {
+ cd m4-*/
+ make -O -j $TT_PROCS install DESTDIR=$TT_INSTALLDIR
+} \ No newline at end of file
diff --git a/sources/muon/muon.spec b/sources/muon/muon.spec
new file mode 100644
index 0000000..158eaf5
--- /dev/null
+++ b/sources/muon/muon.spec
@@ -0,0 +1,24 @@
+# Maintainer: Alexander Hill <ahill@breadpudding.dev>
+SRC_FILENAME="muon-0.5.0.tar.gz"
+SRC_HASH="565c1b6e1e58f7e90d8813fda0e2102df69fb493ddab4cf6a84ce3647466bee5"
+SRC_NAME="muon"
+SRC_URL="https://git.sr.ht/~lattis/muon/archive/0.5.0.tar.gz"
+SRC_VERSION="0.5.0"
+
+build() {
+ tar xf ../$SRC_FILENAME
+ cd muon-*/
+ ./bootstrap.sh build
+ ./build/muon-bootstrap setup build
+ ./build/muon-bootstrap -C build samu
+ ./build/muon -C build test -R
+}
+
+clean() {
+ rm -rf muon-*/
+}
+
+package() {
+ cd muon-*/
+ DESTDIR=$TT_INSTALLDIR ./build/muon -C build install
+} \ No newline at end of file
diff --git a/sources/ncurses/ncurses.spec b/sources/ncurses/ncurses.spec
new file mode 100644
index 0000000..c5918ca
--- /dev/null
+++ b/sources/ncurses/ncurses.spec
@@ -0,0 +1,30 @@
+# Maintainer: Alexander Hill <ahill@breadpudding.dev>
+SRC_HASH="136d91bc269a9a5785e5f9e980bc76ab57428f604ce3e5a5a90cebc767971cc6"
+SRC_NAME="ncurses"
+SRC_URL="https://invisible-island.net/archives/ncurses/ncurses-6.5.tar.gz"
+SRC_VERSION="6.5"
+
+build() {
+ tar xf ../$SRC_FILENAME
+ cd ncurses-*/
+ ./configure $TT_AUTOCONF_COMMON \
+ --with-cxx-shared \
+ --with-shared \
+ --without-ada \
+ --without-normal \
+ --without-tests
+ make -O -j $TT_PROCS
+}
+
+clean() {
+ rm -rf ncurses-*/
+}
+
+package() {
+ cd ncurses-*/
+ make -O -j $TT_PROCS install DESTDIR=$TT_INSTALLDIR
+ # NOTE: These symlinks exist for compatibility's sake, since some libraries
+ # will only look for "ncurses" and not "ncursesw". ~ahill
+ ln -s libncursesw.so $TT_INSTALLDIR/lib/libncurses.so
+ ln -s libncurses++w.so $TT_INSTALLDIR/lib/libncurses++.so
+} \ No newline at end of file
diff --git a/treetap b/treetap
index 8407870..9b1902b 100755
--- a/treetap
+++ b/treetap
@@ -18,6 +18,15 @@
# Changelog #
#############
+# November 24, 2025 (1.3.0)
+# + Added TT_DATADIR [ahill]
+# + Added TT_MESON_COMMON for easy Meson integration [ahill]
+# + Added TT_RUNDIR [ahill]
+# + Added TT_STATEDIR [ahill]
+# * Fixed a bug where applying TT_AUTOCONF_COMMON with some versions of autoconf
+# cause it to think we're cross-compiling when we're not. [ahill]
+# * Switched from GNU cpio to bsdcpio to function on Maple Linux [ahill]
+
# November 22, 2025 (1.2.0)
# + Added support for the CCACHE environment variable [ahill]
# + Added TT_ARCH [ahill]
@@ -82,6 +91,8 @@
# [scope: source]
# TT_CONFDIR - The desired path for configuration files
# [scope: source] [default: /etc]
+# TT_DATADIR - The desired path for data files
+# [scope: source] [default: /usr/share]
# TT_DIR - The path to the treetap directory
# [scope: global]
# TT_INCLUDEDIR - The desired path for header files
@@ -90,6 +101,8 @@
# [scope: source]
# TT_LIBDIR - The desired path for libraries
# [scope: source] [default: /lib]
+# TT_MESON_COMMON - The default meson arguments based on the environment
+# [scope: source]
# TT_MICROARCH - The microarchitecture to optimize for
# [scope: source]
# TT_PKGDIR - The path to the package directory
@@ -98,6 +111,10 @@
# [scope: source] [default: /]
# TT_PROCS - The number of processors on the build system
# [scope: source]
+# TT_RUNDIR - The desired path for temporary runtime information
+# [scope: source] [default: /run]
+# TT_STATEDIR - The desired path for persistent runtime information
+# [scope: source] [default: /var]
# TT_SYSROOT - The sysroot of the target system
# [scope: global]
# TT_TARGET - The target triple of the target system
@@ -112,7 +129,7 @@
[ -z "$TT_DIR" ] && TT_DIR="$(pwd)/.treetap"
[ -z "$TT_PKGDIR" ] && TT_PKGDIR="$TT_DIR/packages"
[ -z "$TT_SYSROOT" ] && TT_SYSROOT=/
-TT_VERSION="1.2.0"
+TT_VERSION="1.3.0"
#####################
# Utility Functions #
@@ -171,10 +188,13 @@ source_spec() {
TT_BUILD=$(clang -dumpmachine)
[ -z "$TT_TARGET" ] && TT_TARGET=$TT_BUILD
[ -z "$TT_CONFDIR" ] && TT_CONFDIR=/etc
+ [ -z "$TT_DATADIR" ] && TT_DATADIR=/usr/share
[ -z "$TT_INCLUDEDIR" ] && TT_INCLUDEDIR=/usr/include
[ -z "$TT_LIBDIR" ] && TT_LIBDIR=/lib
[ -z "$TT_PREFIX" ] && TT_PREFIX=/
[ -z "$TT_PROCS" ] && TT_PROCS=$(nproc)
+ [ -z "$TT_RUNDIR" ] && TT_RUNDIR=/run
+ [ -z "$TT_STATEDIR" ] && TT_STATEDIR=/var
# Attempt to guess TT_MICROARCH if it isn't defined
TT_ARCH=$(echo $TT_TARGET | cut -d"-" -f1)
@@ -200,19 +220,25 @@ source_spec() {
# Create convenience variables
TT_AUTOCONF_COMMON=$(echo "--bindir=$TT_BINDIR \
--build=$TT_BUILD \
- --datarootdir=/usr/share \
- --host=$TT_TARGET \
+ --datarootdir=$TT_DATADIR \
--includedir=$TT_INCLUDEDIR \
--libdir=$TT_LIBDIR \
--libexecdir=$TT_LIBDIR \
- --localstatedir=/var \
+ --localstatedir=$TT_STATEDIR \
--prefix=$TT_PREFIX \
- --runstatedir=/run \
+ --runstatedir=$TT_RUNDIR \
--sbindir=$TT_BINDIR \
--sysconfdir=$TT_CONFDIR \
- --target=$TT_TARGET \
--with-sysroot=$TT_SYSROOT" | xargs)
+ # NOTE: Some versions of autoconf does not like having host/target set
+ # unless we're actually cross-compiling.
+ if [ ! "$TT_BUILD" = "$TT_TARGET" ]; then
+ TT_AUTOCONF_COMMON=$(echo "$TT_AUTOCONF_COMMON \
+ --host=$TT_TARGET \
+ --target=$TT_TARGET" | xargs)
+ fi
+
TT_CMAKE_COMMON=$(echo "-DCMAKE_ASM_COMPILER_TARGET=$TT_TARGET \
-DCMAKE_C_COMPILER_TARGET=$TT_TARGET \
-DCMAKE_CXX_COMPILER_TARGET=$TT_TARGET \
@@ -229,6 +255,19 @@ source_spec() {
-DCMAKE_CXX_COMPILER_LAUNCHER=$CCACHE" | xargs)
fi
+ TT_MESON_COMMON=$(echo "-Dbindir=$TT_BINDIR \
+ -Ddatadir=$TT_DATADIR \
+ -Dincludedir=$TT_INCLUDEDIR \
+ -Dinfodir=$TT_DATADIR/info \
+ -Dlibdir=$TT_LIBDIR \
+ -Dlibexecdir=$TT_LIBDIR \
+ -Dlocaledir=$TT_DATADIR/locale \
+ -Dlocalstatedir=$TT_STATEDIR \
+ -Dmandir=$TT_DATADIR/man \
+ -Dprefix=$TT_PREFIX \
+ -Dsbindir=$TT_BINDIR \
+ -Dsysconfdir=$TT_CONFDIR" | xargs)
+
true
}
@@ -243,7 +282,7 @@ package_install() {
echo "Installing $(basename $1)"
PUSHD=$(pwd)
cd $TT_SYSROOT
- xz -cdk $PKG_FULLPATH | cpio -idmu --quiet
+ bsdcpio -iJ < $PKG_FULLPATH
cd $PUSHD
exit 0
}
@@ -255,7 +294,7 @@ package_uninstall() {
echo "Uninstalling $(basename $1)"
PUSHD=$(pwd)
cd $TT_SYSROOT
- xz -cdk $PKG_FULLPATH | cpio -it --quiet | tail -n +2 | sort -r | while read path; do
+ bsdcpio -iJt < $PKG_FULLPATH | tail -n +2 | sort -r | while read path; do
if [ -d $path ]; then
rmdir --ignore-fail-on-non-empty $path
else
@@ -342,7 +381,7 @@ source_package() {
echo "Archiving $SRC_NAME $SRC_VERSION for $TT_MICROARCH"
package > package-$(date +%Y%m%d%H%M%S).log
cd $TT_INSTALLDIR
- find | cpio -o --quiet | xz -cz > "$TT_PKGDIR/$TT_MICROARCH/$SRC_NAME-$SRC_VERSION-$TT_MICROARCH.cpio.xz"
+ find | bsdcpio -Jo > "$TT_PKGDIR/$TT_MICROARCH/$SRC_NAME-$SRC_VERSION-$TT_MICROARCH.cpio.xz"
rm -rf $TT_INSTALLDIR
cd $PUSHD
exit 0