# Copyright 2026 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 EAPI=8 inherit crossdev flag-o-matic DESCRIPTION="GNU Hurd is the GNU project's replacement for UNIX" HOMEPAGE="https://www.gnu.org/software/hurd/hurd.html" if [[ ${PV} == 9999 ]] ; then EGIT_REPO_URI="https://git.savannah.gnu.org/git/hurd/hurd.git" inherit autotools git-r3 elif [[ ${PV} == *_p* ]] ; then inherit autotools MY_PV=${PV%_p*}.git${PV#*_p} MY_P=${PN}_${MY_PV} # savannah doesn't allow snapshot downloads from cgit as of 2026-03, # but the Debian maintainer is also upstream, so just use theirs # instead. SRC_URI="mirror://debian/pool/main/${PN:0:1}/${PN}/${MY_P}.orig.tar.bz2" S="${WORKDIR}"/${MY_P/_/-} else SRC_URI="mirror://gnu/${PN}/${P}.tar.bz2" fi LICENSE="GPL-2 BSD-2" SLOT="0" if is_crosspkg ; then IUSE="custom-cflags headers-only" else IUSE="custom-cflags headers-only ncurses rumpkernel xkb" fi [[ ${PV} != 9999 ]] && KEYWORDS="~amd64 ~x86" if is_crosspkg ; then BDEPEND=" !headers-only? ( cross-${CTARGET}/mig ) " else DEPEND=" app-arch/bzip2:=[static-libs] dev-libs/libdaemon:= >=dev-libs/libgcrypt-1.8.0:= dev-util/mig sys-apps/util-linux[static-libs] sys-block/parted[static-libs] sys-power/libacpica x11-libs/libpciaccess[static-libs] virtual/libcrypt:=[static-libs] virtual/zlib:=[static-libs] ncurses? ( sys-libs/ncurses:= ) rumpkernel? ( sys-kernel/rumpkernel ) xkb? ( x11-libs/libxkbcommon ) " RDEPEND="${DEPEND}" BDEPEND="virtual/pkgconfig" fi PATCHES=( "${FILESDIR}"/${PN}-0.9_p20251029-rump-link.patch ) src_prepare() { default [[ ${PV} == 9999 || ${PV} == *_p* ]] && eautoreconf } src_configure() { if target_is_not_host ; then local sysroot=/usr/${CTARGET} export MIG="${CTARGET}-mig" fi local myeconfargs=( # XXX: --enable-static-progs seems to behave differently # to the default. --prefix="${EPREFIX}${sysroot}/usr" --datadir="${EPREFIX}${sysroot}/usr/share" --host=${CTARGET} # Builds everything twice and needs profiling libs --disable-profile ) if ! use custom-cflags ; then strip-flags filter-lto # Hangs on boot without this append-flags -U_FORTIFY_SOURCE fi append-flags -Wl,--no-error-rwx-segments -Wl,--no-error-execstack -Wl,-z,notext # For cross-*, we always want a minimal build even with USE=-headers-only, # as we will need libshouldbeinlibc. if use headers-only || is_crosspkg ; then myeconfargs+=( ac_cv_func_file_exec_paths=no ac_cv_func_exec_exec_paths=no ac_cv_func__hurd_exec_paths=no ac_cv_func__hurd_libc_proc_init=no ac_cv_func_mach_port_set_ktype=no ac_cv_func_file_utimens=no --without-acpica --without-libcrypt --without-libbz2 --without-libdaemon --without-libz --without-libtirpc --without-parted --without-rump --disable-ncursesw ) cat <<-EOF >> config.make.in || die "Failed to amend config.make.in" HAVE_LIBGCRYPT = no HAVE_LIBPCIACCESS = no HAVE_XKBCOMMON = no EOF else myeconfargs+=( # TODO (nfs) --without-libtirpc --with-acpica --with-libcrypt --with-libbz2 --with-libz # configure really wants parted (may be needed for rump too) --with-parted $(use_enable ncurses ncursesw) $(use_with rumpkernel rump) ) cat <<-EOF >> config.make.in || die "Failed to amend config.make.in" HAVE_XKBCOMMON = $(usex xkb) EOF fi econf "${myeconfargs[@]}" } src_compile() { if use headers-only ; then return elif is_crosspkg ; then emake \ lib-subdirs="libshouldbeinlibc libihash libstore libirqhelp" \ prog-subdirs= \ other-subdirs= else default fi } src_test() { use headers-only && return default } src_install() { if use headers-only ; then emake DESTDIR="${D}" install-headers no_deps=t elif is_crosspkg ; then emake DESTDIR="${D}" install-headers no_deps=t emake DESTDIR="${D}" install \ lib-subdirs="libshouldbeinlibc libihash libstore libirqhelp" \ prog-subdirs= \ other-subdirs= \ no_deps=t else emake DESTDIR="${D}" install fi if target_is_not_host ; then # TODO: Is this needed? # On Hurd, gcc expects system headers to be in /include, not /usr/include dosym usr/include /usr/${CTARGET}/include # Avoid collisions for other Hurd targets # TODO: autoconf var? rm -rfv "${ED}"/usr/share/info || die fi }