#!/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 if false; then # provided by latest 'bootstrap' ## # Perl # nprl=perl; vprl=5.36.0; test ! -f ._${vprl}-${vprl} && \ ( test ! -d ${nprl}-${vprl} \ && curl -s https://www.cpan.org/src/${vprl%%.*}.0/perl-${vprl}.tar.gz \ | tar -xzf - \ ; cd ${nprl}-${vprl}; rm -fr x; mkdir x; cd x; ../Configure -des; make -j$(nproc); make install; ) touch ._${nprl}-${vprl}; rm -fr ${nprl}-${vprl}; fi ## # 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 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}; ./bootstrap; f=$(mktemp); # needed due to "error: unknown type name 'cap_user_header_t'" echo > ${f} "#include "; cat libfakeroot.c >> ${f}; mv ${f} libfakeroot.c; rm -fr x; mkdir x; cd x; # -D_ID_T is for "error: conflicting types for 'id_t'; have 'int'" CFLAGS="-D_ID_T" \ ../configure \ --prefix="${DEST}" \ ; sed -i Makefile \ -e '/^SUBDIRS =/ s/doc//g' \ ; make -j$(nproc) install; ) touch ._${nfrt}-${vfrt#*:}; rm -fr ${nfrt}-${vfrt#*:};