blob: c35dd2f51514828bc8c3dcd7467fd6bb6df44765 (
plain) (
tree)
|
|
#!/bin/sh -e
##
# This script is to be called from 'bootstrap.sh', not sourced.
# PATH is fully contained. We install to 'MCMTOOLS/sys', which
# will add (and may overwrite) in some cases. This process is
# destructive. We do this so that we may easily 'chroot' later.
#
HERE="$(dirname $(readlink -f ${0}))";
DEST=/usr/local;
git config --global http.sslCAInfo "${CURL_CA_BUNDLE}";
mkdir -p "${DEST}";
cd "${DEST}"; # this directory will already exist if correct
##
# musl
#
# This provides the dynamic loader for the foreign (target) arch
# so that we do not have to force building static musl binaries.
#
nmus=musl;
vmus=1.2.3;
test ! -f ._${nmus}-${vmus} && \
(
test ! -d ${nmus}-${vmus} \
&& curl -s https://musl.libc.org/releases/${nmus}-${vmus}.tar.gz \
| tar -xzf - \
;
cd ${nmus}-${vmus};
rm -fr x; mkdir x; cd x;
../configure \
--prefix=/usr \
--enable-static \
--enable-shared \
;
make -j$(nproc);
make install;
)
touch ._${nmus}-${vmus};
rm -fr ${nmus}-${vmus};
##
# OpenSSL
#
nssl=openssl;
vssl=1.1.1s;
test ! -f ._${nssl}-${vssl} && \
(
test ! -d ${nssl}-${vssl} \
&& curl -s https://www.openssl.org/source/${nssl}-${vssl}.tar.gz \
| tar -xzf - \
;
cd ${nssl}-${vssl};
rm -fr x; mkdir x; cd x;
../Configure cc \
--prefix="${DEST}" \
--openssldir="${DEST}" \
no-shared \
;
make -j$(nproc);
make install_sw install_ssldirs;
)
touch ._${nssl}-${vssl};
rm -fr ${nssl}-${vssl};
##
# zlib
#
nzlb=zlib;
vzlb=1.2.13;
test ! -f ._${nzlb}-${vzlb} && \
(
test ! -d ${nzlb}-${vzlb} \
&& curl -s https://www.zlib.net/${nzlb}-${vzlb}.tar.gz \
| tar -xzf - \
;
cd ${nzlb}-${vzlb};
rm -fr x; mkdir x; cd x;
../configure \
--prefix="${DEST}" \
--static \
;
make -j$(nproc);
make install;
)
touch ._${nzlb}-${vzlb};
rm -fr ${nzlb}-${vzlb};
##
# abuild
#
nbld=abuild;
vbld=ee13f777d56e8f3e8848fec9a422430a66292cc1;
test ! -f ._${nbld}-${vbld} && \
(
test ! -d ${nbld}-${vbld} \
&& git clone https://git.alpinelinux.org/${nbld} ${nbld}-${vbld} \
;
cd abuild-${vbld};
git checkout ${vbld};
# patch -p1 --forward < "${HERE}/patches/0001-allow-untrusted.diff" || true; # FIXME
# patch -p1 --forward < "${HERE}/patches/0001-etc-apk-keys.diff" || true; # FIXME
# patch -p1 --forward < "${HERE}/patches/0001-extra-lib-paths.diff" || true; # FIXME
rm -fr x; mkdir x; cd x;
export SSL_CFLAGS="-I${DEST}/include";
export SSL_LDFLAGS="-L${DEST}/lib";
export SSL_LIBS="-lssl -lcrypto"; # not in mcmtools
export ZLIB_LIBS="-lz"; # do not use from mcmtools
export LDFLAGS="-L${DEST}/lib -lssl -lcrypto";
export CFLAGS="-DABUILD_GROUP=\\\"$(id -gn)\\\" -static -I${DEST}/include"; # default 'abuild' if undefined
sed -i "${DEST}/abuild-${vbld}/abuild-sudo.c" \
-e "s@/sbin/apk@${DEST}/bin/apk@" \
; # hardcoded
make -j$(nproc) -C .. install \
prefix="${DEST}" \
sysconfdir="${DEST}" \
SCDOC=true \
;
sed -i "${DEST}/bin/abuild" \
-e 's@/bin/ash -e@/usr/bin/env bash@' \
; # hardcoded
)
touch ._${nbld}-${vbld};
rm -fr ${nbld}-${vbld};
##
# util-linux (for 'getopt' used by 'abuild-keygen')
#
nutl=util-linux;
vutl=08431acdf5b3accd0887ab550bfa4efabed751d6;
test ! -f ._${nutl}-${vutl} && \
(
test ! -d ${nutl}-${vutl} \
&& mkdir ${nutl}-${vutl} \
&& git clone https://github.com/karelzak/${nutl}.git ${nutl}-${vutl} \
;
cd ${nutl}-${vutl};
git checkout ${vutl};
test -f configure || ./autogen.sh;
rm -fr x; mkdir x; cd x;
../configure \
--prefix="${DEST}" \
--host="$(${CC} -dumpmachine)" \
--enable-static \
--disable-shared \
;
sed -i Makefile \
-e 's/chgrp/-chgrp/g' \
-e 's/chmod/-chmod/g' \
-e 's/chown/-chown/g' \
; # allow non-root installation
make -j$(nproc) install;
)
touch ._${nutl}-${vutl};
rm -fr ${nutl}-${vutl};
##
# pkgconf (pkg-config replacement)
#
npkg=pkgconf;
vpkg=623b8f7851648a5c476de904a8ffed7b7b679aab; # until autoconf 2.71
test ! -f ._${npkg}-${vpkg} &&
(
test ! -d ${npkg}-${vpkg} \
&& git clone https://github.com/${npkg}/${npkg}.git ${npkg}-${vpkg} \
;
cd ${npkg}-${vpkg};
git checkout ${vpkg};
./autogen.sh;
./configure \
--prefix="${DEST}" \
--host="$(${CC} -dumpmachine)" \
--enable-static \
--disable-shared \
--with-system-libdir=/lib:/usr/lib \
--with-system-includedir=/usr/include \
;
make -j$(nproc) install;
)
touch ._${npkg}-${vpkg};
rm -fr ${npkg}-${vpkg};
##
# samurai (ninja replacement)
#
nsam=samurai;
vsam=4cc8f4a3654b72c977e0e62367d1ab6d5b873def;
test ! -f ._${nsam}-${vsam} &&
(
test ! -d ${nsam}-${vsam} \
&& git clone https://github.com/michaelforney/${nsam}.git ${nsam}-${vsam} \
;
cd ${nsam}-${vsam};
make -j$(nproc) install \
PREFIX="" \
DESTDIR="${DEST}" \
;
)
touch ._${nsam}-${vsam};
rm -fr ${nsam}-${vsam};
##
# muon (meson replacement)
#
nmun=muon;
vmun=62ce4561b4444e5020dc39aad0381655afeda0d6;
test ! -f ._${nmun}-${vmun} &&
(
test ! -d ${nmun}-${vmun} \
&& git clone https://git.sr.ht/~lattis/${nmun} ${nmun}-${vmun} \
;
cd ${nmun}-${vmun};
sed -i bootstrap.sh \
-e 's/if.*then/if false; then/g' \
;
./bootstrap.sh \
bootstrap \
;
bootstrap/muon setup \
-Dstatic=true \
build \
;
sed -i build/build.ninja \
-e "s@\bar\b@${AR}@g" \
;
samu -C build;
cp build/muon "${DEST}/bin";
)
touch ._${nmun}-${vmun};
rm -fr ${nmun}-${vmun};
##
# apk-tools
#
# Ariadne says use meson, and 'muon' doesn't work so... kludges!
# Also, '-j' will break the build.
#
natl=apk-tools;
vatl=be4ce40797af9056c79be4dc74ff978f1f4957e4;
test ! -f ._${natl}-${vatl} && \
(
test ! -d ${natl}-${vatl} \
&& git clone https://git.alpinelinux.org/${natl} ${natl}-${vatl} \
;
cd ${natl}-${vatl};
sed -i Make.rules \
-e '/targets += $(__shlibs) $(shobjs)/d' \
; # disable shared libs
sed -i Make.rules \
-e '/CC.*:=/d' \
-e '/AR.*:=/d' \
-e '/LD.*:=/d' \
; # inherit from environment
sed -i src/Makefile \
-e 's/$(install-libapk_so)//g' -e 's/$(libapk_so)//g' \
-e 's/ version.o/ version.o strlcpy.o/' \
; # disable shared libs, hack the hack
sed -i src/context.c \
-e "s@var/log@${DEST}/${1}/var/log@" \
; # hardcoded
ln -sf ../portability/strlcpy.c src/strlcpy.c;
export LUA=no; # documentation requires lua
make clean;
make \
INSTALLDIR="${DEST}" \
CFLAGS="-I${DEST}/include -DNEED_STRLCPY -Wno-error" \
LDFLAGS="-L${DEST}/lib -L${DEST}/${natl}-${vatl}/libfetch" \
LIBS="-lapk -lfetch -lssl -lcrypto -lz" \
;
cp src/apk "${DEST}/bin";
)
touch ._${natl}-${vatl};
rm -fr ${natl}-${vatl};
##
# pax-utils
#
npax=pax-utils;
vpax=974b9359c2f89d57e69598572aafcd8f920d79e2;
test ! -f ._${npax}-${vpax} && \
(
test ! -d ${npax}-${vpax} \
&& git clone https://anongit.gentoo.org/git/proj/${npax}.git ${npax}-${vpax} \
;
cd ${npax}-${vpax};
git checkout ${vpax};
muon setup build;
)
touch ._${npax}-${vpax};
rm -fr ${npax}-${vpax};
##
# fakeroot
#
nfrt=fakeroot;
vfrt=8c0260009e85264fd1ea282fbb22063fc694c552; # until autoconf 2.71
test ! -f ._${nfrt}-${vfrt#*:} && \
(
test ! -d ${nfrt}-${vfrt} \
&& git clone https://salsa.debian.org/clint/${nfrt}.git ${nfrt}-${vfrt} \
;
cd ${nfrt}-${vfrt};
git checkout ${vfrt};
while read k; do curl -s ${k} | patch -p1 || true; done <<EOF
https://git.alpinelinux.org/aports/plain/main/fakeroot/do-not-redefine-id_t.patch?id=bb497eeb2155d0332284942105692bc05fec25a9
https://git.alpinelinux.org/aports/plain/main/fakeroot/fakeroot-no64.patch?id=bb497eeb2155d0332284942105692bc05fec25a9
https://git.alpinelinux.org/aports/plain/main/fakeroot/fakeroot-stdint.patch?id=bb497eeb2155d0332284942105692bc05fec25a9
https://git.alpinelinux.org/aports/plain/main/fakeroot/fix-format.patch?id=bb497eeb2155d0332284942105692bc05fec25a9
https://git.alpinelinux.org/aports/plain/main/fakeroot/fix-shell-in-fakeroot.patch?id=bb497eeb2155d0332284942105692bc05fec25a9
EOF
./bootstrap;
f=$(mktemp); # needed due to "error: unknown type name 'cap_user_header_t'"
echo > ${f} "#include <linux/capability.h>";
cat libfakeroot.c >> ${f};
mv ${f} libfakeroot.c;
rm -fr x; mkdir x; cd x;
CFLAGS="-D_STAT_VER=0 $CFLAGS" \
../configure \
--prefix="${DEST}" \
;
sed -i Makefile \
-e '/^SUBDIRS =/ s/doc//g' \
;
make -j$(nproc) install;
)
touch ._${nfrt}-${vfrt#*:};
rm -fr ${nfrt}-${vfrt#*:};
|