# toolchain build order: linux-api-headers->glibc->binutils->gcc->binutils->glibc # NOTE: valgrind requires rebuilt with each major glibc version pkgname=glibc pkgver=2.40 _commit=3e2a15c666e40e5ee740e5079c56d83469280323 pkgrel=1 pkgdesc="GNU C Library" arch=('x86_64') url="https://www.gnu.org/software/libc" license=('GPL' 'LGPL') groups=('base') depends=('linux-api-headers' 'tzdata') makedepends=('gcc' 'python3') backup=(etc/gai.conf etc/locale.gen etc/nscd.conf) options=('!strip') install=glibc.install source=("https://ftp.gnu.org/gnu/libc/${pkgname}-${pkgver}.tar.xz" #source=("https://github.com/bminor/glibc/archive/${_commit}.zip" "https://github.com/bminor/glibc/commit/07b9521fc6369d000216b96562ff7c0ed32a16c4.diff" 'locale.gen.txt' 'locale-gen' 'glibc.conf') md5sums=('b390feef233022114950317f10c4fa97' '66c0a97180c00ade30fec1d0c219198b' '07ac979b6ab5eeb778d55f041529d623' '476e9113489f93b348b21e144b6a8fcf' '8b3298de2392a10905a64ceccf56d2c1') prepare() { cd ${pkgname}-${pkgver} # CVE-2023-25139 #patch -p1 -i ${srcdir}/07b9521fc6369d000216b96562ff7c0ed32a16c4.diff } build() { mkdir -p build cd build echo "slibdir=/lib" >> configparms echo "rtlddir=/lib" >> configparms # remove stack protector for libs #CFLAGS=${CFLAGS/-fstack-protector/} #CPPFLAGS=${CPPFLAGS/-D_FORTIFY_SOURCE=2/} ../glibc-${pkgver}/configure --prefix=/usr \ --libdir=/usr/lib \ --libexecdir=/usr/lib \ --with-headers=/usr/include \ --with-bugurl=https://github.com/KaOSx/core/issues \ --enable-add-ons \ --enable-bind-now \ --enable-fortify-source \ --enable-kernel=4.4 \ --disable-profile \ --enable-stackguard-randomization \ --enable-lock-elision \ --disable-werror # build libs without stack protector #echo "build-programs=no" >> configparms #make # build bins with stack protector #sed -i "/build-programs=/s#no#yes#" configparms #echo "CC += -fstack-protector -D_FORTIFY_SOURCE=2" >> configparms #echo "CXX += -fstack-protector -D_FORTIFY_SOURCE=2" >> configparms make } check() { cd build # no stack protector for running tests sed -i '5,7d' configparms sed -i '/FORTIFY/d' configparms make check || true } package() { cd build install -dm755 ${pkgdir}/etc touch ${pkgdir}/etc/ld.so.conf make install_root=${pkgdir} install rm -f ${pkgdir}/etc/ld.so.{cache,conf} install -dm755 ${pkgdir}/{,usr/{sbin,lib/{,locale,systemd/system,tmpfiles.d}}} install -m644 ${srcdir}/glibc-${pkgver}/nscd/nscd.conf ${pkgdir}/etc/nscd.conf install -m644 ${srcdir}/glibc-${pkgver}/nscd/nscd.service ${pkgdir}/usr/lib/systemd/system install -m644 ${srcdir}/glibc-${pkgver}/nscd/nscd.tmpfiles ${pkgdir}/usr/lib/tmpfiles.d/nscd.conf install -m755 ${srcdir}/locale-gen ${pkgdir}/usr/sbin install -m644 ${srcdir}/glibc-${pkgver}/posix/gai.conf ${pkgdir}/etc/gai.conf # create /etc/locale.gen install -m644 ${srcdir}/locale.gen.txt ${pkgdir}/etc/locale.gen sed -e '1,3d' -e 's|/| |g' -e 's|\\| |g' -e 's|^|#|g' \ ${srcdir}/glibc-${pkgver}/localedata/SUPPORTED >> ${pkgdir}/etc/locale.gen # fix for the linker/should be possible to remove with glibc 2.35 toolchain sed -i '/RTLDLIST/s%lib64%lib%' ${pkgdir}/usr/bin/ldd # With glibc 2.35 ld-linux-x86-64.so moved to /lib, keep symlink until all that link to /lib64 version are rebuild mkdir ${pkgdir}/lib64 cd ${pkgdir}/lib64 ln -v -s ../lib/ld* . cd ${pkgdir} strip $STRIP_BINARIES sbin/{ldconfig,sln} \ usr/bin/{gencat,getconf,getent,iconv,locale} \ usr/bin/{localedef,pcprofiledump,sprof} \ usr/lib/getconf/* \ usr/sbin/{iconvconfig,nscd} #strip $STRIP_STATIC usr/lib/*.a strip $STRIP_SHARED lib/{libanl,libBrokenLocale}.so.1 \ lib/libnss_{compat,dns,files,hesiod}.so.2 \ lib/{libdl,libresolv}.so.2 \ lib/{libnsl,librt,libutil}.so.1 \ lib/{libmemusage,libpcprofile}.so \ usr/lib/{audit,gconv}/*.so #usr/lib/libm.so \ #lib/{libmemusage,libpcprofile,libSegFault}.so \ #usr/lib/{audit,gconv}/*.so \ #lib/libmvec-*.so # Still needed? Add /usr/lib32 to the default library search path install -Dm644 ${srcdir}/glibc.conf ${pkgdir}/etc/ld.so.conf.d/glibc.conf # part of libxcrypt, keep static .a & /lib/libcrypt.so.1 # until all rebuild with libxcrypt & no longer needed #rm -f ${pkgdir}/usr/include/crypt.h #rm -f ${pkgdir}/usr/lib/libcrypt.so }