From 33fa411c1c95b2b3e3b249c2459ecf870b5a3f00 Mon Sep 17 00:00:00 2001 From: Tracker-Friendly Date: Tue, 5 Sep 2023 17:28:40 +0100 Subject: [PATCH] Ok --- srcpkgs/base-files/files/os-release | 6 +- srcpkgs/base-files/template | 2 +- srcpkgs/busybox-evolution/files/dotconfig | 4 +- srcpkgs/busybox-evolution/template | 7 +- srcpkgs/dhcpcd/files/dhcpcd-eth0/run | 4 + srcpkgs/dhcpcd/files/dhcpcd/run | 4 + ...-Improve-learning-IPv6-address-flags.patch | 62 ++++ .../dhcpcd/patches/privsep-ppc-build.patch | 24 ++ srcpkgs/dhcpcd/patches/wpa-hook-stop.patch | 10 + srcpkgs/dhcpcd/template | 36 +++ srcpkgs/dinit/files/dinit.d/ntpd | 5 + srcpkgs/dinit/files/dinit.d/rootrw | 1 - srcpkgs/dinit/files/dinit.d/splash | 4 + srcpkgs/dinit/template | 2 +- srcpkgs/evolution-artwork/files/oldsplash.png | Bin 9930 -> 9016 bytes srcpkgs/evolution-artwork/files/splash.png | Bin 15773 -> 19271 bytes srcpkgs/evolution-patches/INSTALL | 21 +- srcpkgs/evolution-patches/files/10_linux | 302 ++++++++++++++++++ srcpkgs/evolution-patches/files/grub | 21 ++ srcpkgs/evolution-patches/template | 6 +- srcpkgs/grub-arm64-efi | 1 + srcpkgs/grub-i386-efi | 1 + srcpkgs/grub-x86_64-efi | 1 + srcpkgs/grub/files/grub.default | 21 ++ srcpkgs/grub/files/kernel.d/grub.post | 19 ++ .../0004-add-GRUB_COLOR_variables.patch | 32 ++ .../grub/patches/evolutionos-is-not-gnu.patch | 15 + .../patches/fix-compat-binutils-2.36.patch | 96 ++++++ .../patches/grub-install-pvxen-paths.patch | 71 ++++ .../grub/patches/ieee1275-clear-reset.patch | 32 ++ .../patches/install_powerpc_machtypes.patch | 220 +++++++++++++ srcpkgs/grub/patches/os-prober-osx86.patch | 16 + .../grub/patches/ppc64el-disable-vsx.patch | 52 +++ srcpkgs/grub/patches/xx-e2fsprogs-1.patch | 62 ++++ srcpkgs/grub/patches/xx-e2fsprogs-2.patch | 60 ++++ srcpkgs/grub/template | 223 +++++++++++++ srcpkgs/mdocml/template | 4 +- srcpkgs/neofetch/template | 2 +- 38 files changed, 1430 insertions(+), 19 deletions(-) create mode 100644 srcpkgs/dhcpcd/files/dhcpcd-eth0/run create mode 100644 srcpkgs/dhcpcd/files/dhcpcd/run create mode 100644 srcpkgs/dhcpcd/patches/Linux-Improve-learning-IPv6-address-flags.patch create mode 100644 srcpkgs/dhcpcd/patches/privsep-ppc-build.patch create mode 100644 srcpkgs/dhcpcd/patches/wpa-hook-stop.patch create mode 100644 srcpkgs/dhcpcd/template create mode 100644 srcpkgs/dinit/files/dinit.d/ntpd create mode 100644 srcpkgs/dinit/files/dinit.d/splash create mode 100755 srcpkgs/evolution-patches/files/10_linux create mode 100644 srcpkgs/evolution-patches/files/grub create mode 120000 srcpkgs/grub-arm64-efi create mode 120000 srcpkgs/grub-i386-efi create mode 120000 srcpkgs/grub-x86_64-efi create mode 100644 srcpkgs/grub/files/grub.default create mode 100644 srcpkgs/grub/files/kernel.d/grub.post create mode 100644 srcpkgs/grub/patches/0004-add-GRUB_COLOR_variables.patch create mode 100644 srcpkgs/grub/patches/evolutionos-is-not-gnu.patch create mode 100644 srcpkgs/grub/patches/fix-compat-binutils-2.36.patch create mode 100644 srcpkgs/grub/patches/grub-install-pvxen-paths.patch create mode 100644 srcpkgs/grub/patches/ieee1275-clear-reset.patch create mode 100644 srcpkgs/grub/patches/install_powerpc_machtypes.patch create mode 100644 srcpkgs/grub/patches/os-prober-osx86.patch create mode 100644 srcpkgs/grub/patches/ppc64el-disable-vsx.patch create mode 100644 srcpkgs/grub/patches/xx-e2fsprogs-1.patch create mode 100644 srcpkgs/grub/patches/xx-e2fsprogs-2.patch create mode 100644 srcpkgs/grub/template diff --git a/srcpkgs/base-files/files/os-release b/srcpkgs/base-files/files/os-release index 53e6080..b45caad 100644 --- a/srcpkgs/base-files/files/os-release +++ b/srcpkgs/base-files/files/os-release @@ -1,9 +1,9 @@ -NAME="Evolution" -ID="evolution" +NAME="EvolutionOS" +ID="evolutionos" PRETTY_NAME="EvolutionOS" HOME_URL="https://evolutionos.codeberg.page" DOCUMENTATION_URL="https://evolutionos.codeberg.page/wiki/" LOGO="evolution-logo" ANSI_COLOR="0;38;2;71;128;97" -DISTRIB_ID="evolution" +DISTRIB_ID="evolutionos" diff --git a/srcpkgs/base-files/template b/srcpkgs/base-files/template index 2893db0..48ad661 100644 --- a/srcpkgs/base-files/template +++ b/srcpkgs/base-files/template @@ -1,7 +1,7 @@ # Template file for 'base-files' pkgname=base-files version=0.143 -revision=7 +revision=9 bootstrap=yes depends="xbps-triggers" short_desc="Evolution Linux base system files" diff --git a/srcpkgs/busybox-evolution/files/dotconfig b/srcpkgs/busybox-evolution/files/dotconfig index b138820..edc489f 100644 --- a/srcpkgs/busybox-evolution/files/dotconfig +++ b/srcpkgs/busybox-evolution/files/dotconfig @@ -30,7 +30,7 @@ CONFIG_FEATURE_INSTALLER=y CONFIG_FEATURE_SUID=y CONFIG_FEATURE_SUID_CONFIG=y CONFIG_FEATURE_SUID_CONFIG_QUIET=y -CONFIG_FEATURE_PREFER_APPLETS=y +# CONFIG_FEATURE_PREFER_APPLETS not set CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe" # CONFIG_SELINUX is not set CONFIG_FEATURE_CLEAN_UP=y @@ -1205,7 +1205,7 @@ CONFIG_FEATURE_SH_MATH=y CONFIG_FEATURE_SH_MATH_64=y CONFIG_FEATURE_SH_MATH_BASE=y CONFIG_FEATURE_SH_EXTRA_QUIET=y -CONFIG_FEATURE_SH_STANDALONE=y +# CONFIG_FEATURE_SH_STANDALONE not set CONFIG_FEATURE_SH_NOFORK=y CONFIG_FEATURE_SH_READ_FRAC=y CONFIG_FEATURE_SH_HISTFILESIZE=y diff --git a/srcpkgs/busybox-evolution/template b/srcpkgs/busybox-evolution/template index 253fd4e..272fb23 100644 --- a/srcpkgs/busybox-evolution/template +++ b/srcpkgs/busybox-evolution/template @@ -1,7 +1,7 @@ # Template file for 'busybox' pkgname=busybox-evolution version=1.36.1 -revision=2 +revision=4 hostmakedepends="perl pkg-config" checkdepends="tar which zip" short_desc="Swiss Army Knife of Embedded Linux (evolutionOS edition)" @@ -41,7 +41,7 @@ _patch_config() { do_configure() { mkdir -p src mv * src || true - + cp ${FILESDIR}/libbb.h src/include/libbb.h local t @@ -64,8 +64,7 @@ do_configure() { _patch_config busybox-static static for t in busybox busybox-static; do - CONFIG_EXTRA_LDLIBS="pam" - make -C "${t}" KBUILD_SRC="${wrksrc}/src" -f "${wrksrc}/src/Makefile" oldconfig + make -C "${t}" KBUILD_SRC="${wrksrc}/src" -f "${wrksrc}/src/Makefile" oldconfig make -C "${t}" KBUILD_SRC="${wrksrc}/src" -f "${wrksrc}/src/Makefile" prepare "${makejobs}" done diff --git a/srcpkgs/dhcpcd/files/dhcpcd-eth0/run b/srcpkgs/dhcpcd/files/dhcpcd-eth0/run new file mode 100644 index 0000000..9f24606 --- /dev/null +++ b/srcpkgs/dhcpcd/files/dhcpcd-eth0/run @@ -0,0 +1,4 @@ +#!/bin/sh +exec 2>&1 +[ -r conf ] && . ./conf +exec dhcpcd -B eth0 diff --git a/srcpkgs/dhcpcd/files/dhcpcd/run b/srcpkgs/dhcpcd/files/dhcpcd/run new file mode 100644 index 0000000..ef3ba51 --- /dev/null +++ b/srcpkgs/dhcpcd/files/dhcpcd/run @@ -0,0 +1,4 @@ +#!/bin/sh +exec 2>&1 +[ -r conf ] && . ./conf +exec dhcpcd -B diff --git a/srcpkgs/dhcpcd/patches/Linux-Improve-learning-IPv6-address-flags.patch b/srcpkgs/dhcpcd/patches/Linux-Improve-learning-IPv6-address-flags.patch new file mode 100644 index 0000000..5fceb5e --- /dev/null +++ b/srcpkgs/dhcpcd/patches/Linux-Improve-learning-IPv6-address-flags.patch @@ -0,0 +1,62 @@ +From 45e441ada6d3ea4355d623cf12d9a559a5c2afde Mon Sep 17 00:00:00 2001 +From: Roy Marples +Date: Tue, 23 May 2023 22:14:57 +0100 +Subject: [PATCH] Linux: Improve learning IPv6 address flags + +Rather than matching addresses during netlink message processing, +extract the local, address and flag parts. +Once done, then match local and address to the address we are +looking for and if equal apply the flags. + +Fixes #201 and maybe #149. +--- + src/if-linux.c | 24 +++++++++++++++++------- + 1 file changed, 17 insertions(+), 7 deletions(-) + +diff --git a/src/if-linux.c b/src/if-linux.c +index f2f609ed..212ed5df 100644 +--- a/src/if-linux.c ++++ b/src/if-linux.c +@@ -1996,7 +1996,8 @@ _if_addrflags6(__unused struct dhcpcd_ctx *ctx, + size_t len; + struct rtattr *rta; + struct ifaddrmsg *ifa; +- bool matches_addr = false; ++ struct in6_addr *local = NULL, *address = NULL; ++ uint32_t *flags = NULL; + + ifa = NLMSG_DATA(nlm); + if (ifa->ifa_index != ia->ifa_ifindex || ifa->ifa_family != AF_INET6) +@@ -2007,17 +2008,26 @@ _if_addrflags6(__unused struct dhcpcd_ctx *ctx, + for (; RTA_OK(rta, len); rta = RTA_NEXT(rta, len)) { + switch (rta->rta_type) { + case IFA_ADDRESS: +- if (IN6_ARE_ADDR_EQUAL(&ia->ifa_addr, (struct in6_addr *)RTA_DATA(rta))) +- ia->ifa_found = matches_addr = true; +- else +- matches_addr = false; ++ address = (struct in6_addr *)RTA_DATA(rta); ++ break; ++ case IFA_LOCAL: ++ local = (struct in6_addr *)RTA_DATA(rta); + break; + case IFA_FLAGS: +- if (matches_addr) +- memcpy(&ia->ifa_flags, RTA_DATA(rta), sizeof(ia->ifa_flags)); ++ flags = (uint32_t *)RTA_DATA(rta); + break; + } + } ++ ++ if (local) { ++ if (IN6_ARE_ADDR_EQUAL(&ia->ifa_addr, local)) ++ ia->ifa_found = true; ++ } else if (address) { ++ if (IN6_ARE_ADDR_EQUAL(&ia->ifa_addr, address)) ++ ia->ifa_found = true; ++ } ++ if (flags && ia->ifa_found) ++ memcpy(&ia->ifa_flags, flags, sizeof(ia->ifa_flags)); + return 0; + } + diff --git a/srcpkgs/dhcpcd/patches/privsep-ppc-build.patch b/srcpkgs/dhcpcd/patches/privsep-ppc-build.patch new file mode 100644 index 0000000..2ae9be6 --- /dev/null +++ b/srcpkgs/dhcpcd/patches/privsep-ppc-build.patch @@ -0,0 +1,24 @@ +From 76ec6a63705e1c3591b4da94c10047a79f0f49db Mon Sep 17 00:00:00 2001 +From: q66 +Date: Sun, 20 Dec 2020 15:16:08 +0100 +Subject: [PATCH] fix privsep build on ppc* + +--- + src/privsep-linux.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git src/privsep-linux.c src/privsep-linux.c +index e588ecd..9d335ca 100644 +--- a/src/privsep-linux.c ++++ b/src/privsep-linux.c +@@ -42,6 +42,7 @@ + #include + #include + #include ++#include + + #include "common.h" + #include "if.h" +-- +2.29.2 + diff --git a/srcpkgs/dhcpcd/patches/wpa-hook-stop.patch b/srcpkgs/dhcpcd/patches/wpa-hook-stop.patch new file mode 100644 index 0000000..1d16db4 --- /dev/null +++ b/srcpkgs/dhcpcd/patches/wpa-hook-stop.patch @@ -0,0 +1,10 @@ +--- a/hooks/10-wpa_supplicant 2014-11-26 16:34:35.000000000 +0100 ++++ b/hooks/10-wpa_supplicant 2014-11-28 11:53:48.929217243 +0100 +@@ -114,6 +114,6 @@ then + case "$reason" in + PREINIT) wpa_supplicant_start;; + RECONFIGURE) wpa_supplicant_reconfigure;; +- DEPARTED) wpa_supplicant_stop;; ++ DEPARTED|STOPPED) wpa_supplicant_stop;; + esac + fi diff --git a/srcpkgs/dhcpcd/template b/srcpkgs/dhcpcd/template new file mode 100644 index 0000000..83ec94c --- /dev/null +++ b/srcpkgs/dhcpcd/template @@ -0,0 +1,36 @@ +# Template file for 'dhcpcd' +pkgname=dhcpcd +version=10.0.1 +revision=3 +build_style=configure +make_check_target=test +configure_args=" + --prefix=/usr --sbindir=/usr/bin --sysconfdir=/etc --rundir=/run/dhcpcd + $(vopt_if privsep --privsepuser=_dhcpcd) $(vopt_enable privsep)" +hostmakedepends="ntp pkg-config" +makedepends="eudev-libudev-devel" +short_desc="RFC2131 compliant DHCP client" +maintainer="Cameron Nemo " +license="BSD-2-Clause" +homepage="https://roy.marples.name/projects/dhcpcd" +distfiles="https://github.com/NetworkConfiguration/dhcpcd/archive/refs/tags/v${version}.tar.gz" +checksum=2bd3480bc93e6bff530872b8bc80cbcaa821449f7bf6aaf202fa12fb8c2e6f55 +lib32disabled=yes +conf_files=/etc/dhcpcd.conf + +system_accounts="_dhcpcd" +_dhcpcd_homedir="/var/db/dhcpcd" + +build_options="privsep" +desc_option_privsep="Enable privilege separation mode for the daemon" + +post_install() { + vsv dhcpcd + vsv dhcpcd-eth0 + + # Enable controlgroup by default, to make dhcpcd-ui work. + vsed -e 's,^#\(controlgroup.*\),\1,' -i ${DESTDIR}/etc/dhcpcd.conf + + # License + vlicense LICENSE +} diff --git a/srcpkgs/dinit/files/dinit.d/ntpd b/srcpkgs/dinit/files/dinit.d/ntpd new file mode 100644 index 0000000..96a5186 --- /dev/null +++ b/srcpkgs/dinit/files/dinit.d/ntpd @@ -0,0 +1,5 @@ +type = scripted +command = /sbin/busybox ntpd -p pool.ntp.org +restart = false + +depends-on = early-filesystems diff --git a/srcpkgs/dinit/files/dinit.d/rootrw b/srcpkgs/dinit/files/dinit.d/rootrw index 22467e7..17f3141 100644 --- a/srcpkgs/dinit/files/dinit.d/rootrw +++ b/srcpkgs/dinit/files/dinit.d/rootrw @@ -8,4 +8,3 @@ logfile = /run/rootrw.log depends-on = udevd waits-for = hwclock -waits-for = rootfscheck diff --git a/srcpkgs/dinit/files/dinit.d/splash b/srcpkgs/dinit/files/dinit.d/splash new file mode 100644 index 0000000..79b7e8a --- /dev/null +++ b/srcpkgs/dinit/files/dinit.d/splash @@ -0,0 +1,4 @@ +type = scripted +command = /sbin/busybox fbsplash -s /home/liqing/oldsplash.ppm + +restart = false diff --git a/srcpkgs/dinit/template b/srcpkgs/dinit/template index e95d11b..94f8f62 100644 --- a/srcpkgs/dinit/template +++ b/srcpkgs/dinit/template @@ -1,7 +1,7 @@ #!/bin/sh pkgname=dinit version=0.17.1 -revision=1 +revision=3 short_desc="Simple Linux / BSD init system (NOT MY SOFTWARE)" maintainer="Tracker-Friendly " homepage="https://github.com/davmac314/dinit" diff --git a/srcpkgs/evolution-artwork/files/oldsplash.png b/srcpkgs/evolution-artwork/files/oldsplash.png index c5d7721a01d301e8a68ab851e24ffca5adb5aaaf..36475633d02eca2ad7b2a6d85950f51fcbc59437 100644 GIT binary patch delta 4153 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 literal 15773 zcmeHt1z42Z`tOh;X@DXiARz+635%TcYjB@^_Br=o=iK|h_dfSIJj2BIt?ym$`+IY(cRkfqSEM3mAcsI8R7!W{v>_0} zUKbCTkzTB>7_^PO6N(k<|QEFAXL~TK{@)FwJ7zOPL8FnX2}ui$=2ICZw4{f;}RG|f|Z+Mmf7uh zMl~&Mq5faFtmSS;X~DK_#Jwlxs`q{qUFlM|_?|SX^NwRD)F5!}k!b^CHQ`e$xbyLS zkqe&ki1j`?RPOY8nR7;N-$piVCwKF!)mB|);fdDQBnKnZX*<#RBFa{2Xv>)m9@&d4 z7amT?W3!_sp9sAlswYl~dh(WN=flN7P7aysJ=UOw;`Xl5B=LRZi3D#QBvQ_Exl}y> z4N&;iURG99NmlkRf&+1r0-j6WZIWU7U}2IW&qIBQ`_*r0h(URICP%twn%8>C^AT~T z`y^@%k+hc;-P0Og_BrX| zQZ9n*1eCS5(zRF%x?c*(t_5F{6W|fhNxk?%NTPW_(%-*6WaH+Fdr){_#yxl=*Ey~@ z7sL0A?*$WMI(SU85dgo?Tjp4GTzOe3h z`|okD9HLgbs`FgOzUS#L<^^aRzjM89Vl;#3IRCon3Fnh@tm)z8IYsBP^w>YhJ=%W3 ze2i>{MygylAPHrn$iDq>YWMBQgjc1Fo5N={a<2Phmxqt(iGHb-$wdy2H&=`z2nf3x zqx;te5*nAd=EK4-i4&4m+z(j{zrI2cD=xFC6ieCioKWcK1KVn#!g$mfQuKY?t;))6 zDRq|Mn;y|P0&42}YZp+3es$u#qr(lhLq|stw?j;(r}33-2!z_i9vGsbnkvEy?aYs~ zMq8rzy`5cwg+d?_(%!B}D@PQT)e>cE?;^>zQrp1BYHuycW^hXlrsgV(va`SIi$Ur5 zs_R<$I$DWYvq?*lOL!vy0cR8z$?EOwI-mSj7nivZv8m!WK|r$exgl5B=*nyj*D z42o5VUx**ZC+}_V31^ccXO+NM+aR>%6n-ZGeo3;~VX>|VDAdc#i{DF-AC0kv3W$k` zL1Azx9L@(u@VWcAV3FQ@F7E7j5%7_O4iav5HC@QIG{y_mRlC8b7>#0xxyuX>u+Uk#St{xbt(=paoP?QtO84z^`{0aQcc&xq6 zU%~nt-tc!$#rZQMV7fo(|IO&X$bLE)j8aoW$f2z~@RKUZNwVSjMOdS)?5z=}Uxlp1 zY;M7=tocNRk(PWyNNYHss36>i&syvj3??KhCWI0~{)v>5i#rzSVuiw!0>t_40Uc`* zApsjf0V_UX5kXNtAt3=#J~08&TYQ4TqHvL0w}b_4Yy|#9LIYzDtP<(;XRh$1tN|&c zkf4>I2;f0PP*{jh$XZZ<&k`m8;}aARg^8e0LZX(!qNk+rdO+OPRFY(a^TYmnMbin1 zwLxQ?CD~N%T|B)1dPCRV8Kr|o;z1J-784MF!NCM@VL>4{{I7%bQ5bh%aCn*mFn&Ry z(>vBy2n9e92@J>H8EK1xy1Lk&-oUE`0fYg-BJp+#D4$*jvLIwJC?pn*(M6-3B-!x1 zvf@epaa#?zlQj~HltW@sU^c)E0w#)p3F?9`f?^1`ATLY+0sGTwv$ zKUIF$-W|;Eb9(8gN9my4e*XIT)5-qSl~`F%odSWh`YD1t(i3HU$|s=p^Oltz(!~}9 zqQ~#%`j_kW|Ar|DS|Y8iY>-xbC}9CXJ|PhsB%heIkPx2$N&qG(Bp@toE%Z~WKd8H- zZLnTQ4C=Nmz!6{t%<~j0)*Gi9WH@E5?K|NSDu zY-|LrLWvbrT`^S4a@^CF7!{naLfez%F=MU;Tz z!{T3*DgphU)c$k8pW-Nh=I1pKpFy~X{t@qg#|)_Czw_^RbNla{f|d1Oll(*Y{tK>u z!SxRz@DC0Cmv#LMu73!De`xT(tm}UpT;zXUF``^Rq2~qGgMOSGpvEr*= zgZtE%ArMxGlH6@w@1Y-~ey&N=$d$G64V>S=f{jXyQ?pm-8i`fXy^DTKx80<|IxsI_PM{C;O~C^6O8>QeEydw_+J<3 z9|Q2;W$a%90TcW?+x)wq|18q~>~k&puc>I6Ld9sDwB;I!1Tc zM7L4hNNl;0tez{KtdA}+IGPXSe4)gN5bx{j;~d}NRO%mkw^R1u#CEU_?_^a%42+B( zALtD1-u^<8AnsK#(;lCmnRy+I=4PVirKfE5FjI;YPzay=QxN*NbB>!Y0YML9#8 zfu3Fy9dl-U;J zTvPt6_KCYlG`g^+rlxmntN_g8u{v?Ber?}zf9t*%#dtII!?f~;GQ`2k_ue~R2)2J! zQK8?k#@LY7muujN7weW|4B`F5mEwX$9_9#M@VfBy#)YS}1&L0$72arN?&o*s>UYMz zh_5US6eQPfS~Pg85>=Zjo!ftKn+z{PRI&daX4HE!%(&jS{1Tt>YdawxB@B}ykR&HJ zmsie0zAl?O{CcJ~ce1G49dXa4?(H9i3kJg#Z;rf8+(a)tz$5+1(b>6=uX5xSO~9P2 zag}SDWpNw__c^j`z%3OORnD6?-0icu*5Q-c4Gk8}5iA3pm1CbvyCk!+Dka|FbaPx8 z6-WtypW5U(7E~)#j``;5=No4{dPI7~$~sib%q$rwk}je-OMWvf15i*5XX+8`lE`lk zJa+#vT$?qwpLTB32So}TI@<>SwA9*D4ZFb-6#3(($o2Gqj*booCnsGPeO_zO&S0tS z=HbTh=26f|ig}Q;_%$*R3pGdYq-kC|jNv!qX>KW0VF^>{>+OC0=+UEhD7_;#r_jij z*Ma5EiGjOKEDL-2U6=ZqdM7B#RxbX6m;TELm-L>}XyCyQ;}UBnWUR~0OJ9=2+;uH1 zq^&AdfO5_K*GP`q8V*A$8rCsA9>21JWYAbvhHN4ob?=fiF1D0MR=Nl==s7y(0z+@( z|0Hn{SigN+4B!52&~fJ2U}dE!asHHB5gB+;CL=dLzmJGU;$;}4$fX!JH#39${Cr>s z{h?p``~=jK5g9C!``Nhdfs?E`TC8^9*((v>WPqxJmCJlKY(_l>%n}4`)sN+y={pi` zseos7Dl|8+Hu-%8$>Lj|*dylRvr>6*>PweS@nltrx!JRFa=hX=TI2DsJ4B8xK?I!w z*c_C(yne?y)YsQ{bCTu6(Bfpc@D14%gTys zcLG)eEYJ-{6}bKA!nqHZE9lH@qa$QyNC`nMRDGj)d(|PT(aL@8hk%)eL{*3 zO-P)bd&DTr9lh{nxYmpA$a96#C5Yi12(I_u`G2FZ=x&xic6)f|n$n(Fuu3dH-+R_f z1qtSXkB)`WlT|~wqrO**Pfk%gOA-E<+4nA9{vI*^SU!_XSJ8IT8sc}~iuwyJ3KP6d zplKZxccCsS>2kqDNq(S(_V-QJ3XbtkD*+l+BZgB=zwrC zV&EEaRlBtdIl1I(1|}xCA3`p>zeYbKBPKL1wF#RkE1RpfP33zkV?}x95xy)59dDwM z&MS8uxDOAu?-UJeg!pLiaaQAaN~6qe^5dOD03P*joC4wfU=SHN$18o0%74h6 z`q5Wr?+JoYOdH?B40F?gJ`jlMp2~d{{c`sP?dMj#TSGQb2NN}p#s z5(n4)qc5d?*qXN?g`f+DZGVQl~+_OxThYNYAy8* z3^)SYa!RuAq)*>k99Yyi*-VSv5MpHS32tnE%YP3d&+NZ?JKv}@b9Jx#HVf05iRAez z*B&+>oW=IbbKAs3f<)}W5c1{v9dqZeMQJxKNv+3Tslb@fwd9aQ0X!o3R_A|X!?En)HgTpaXpD2$j z5Sv*#yCbwm!X}3YdE(zUo>ziwoS?imuZhnvOWHn(SSowPwO;ITAE0duug7+QVJ z``r8W{>vlP`;%vm4gCOEAecT2G#wCF7v%xDgh039V5PwVMEr+cP2Y-)O-#6s0$(UE zN*{@o^;K|-lo4SPDiz)4k{uhrwTMbMnO%7}m3{kKK)X>UWBW8Gf%rG+bOB?pt-gJh zo$4k~~LpBGy0`*14{oTJcLaahBLCy1AMJ3+s4CjV2uT?nI zs<#z>c6NLmuv_ww2EEG8Wnr|p5S#UDiEmSiZegUc)l39^deX1wgJonWF5T=EU#ZJw zR~+L#D@S-P+q|8C*rsZ_Eq1YD*oF7z_D!Wyn+|O?wT{>0JJ6%ip)7vpU(Z*3O&^+R z5aitH17;w-yAt%$@TNXfu%#3$FzamNol&n;n~ns%T?vr*GBQw~R|aDH0zK9tq2F&^ zO)NR6nMt79Us?$$*ra+l75kU~{}7wVDE0;LYzwTBib`8l@~nuny98M}Nl9|eQ6Wgd z_yAgt=}U-QG$lWW2ROEN1!t0`nZ4@6aev8 zQ33bK`6RhBlHSH&n>SYy6BF~QI`~BgJ4CVkE|rdNP@3jlFmhvnl_Y>5afq> zC@uMXzX_TTan%rHqkw>;sAHxW$j!w|r81R>+^oaE*{;+=zrce^6@FXVbJYH5bs#1{$2bJl#k z8NcZPX*)~$V5rRgg_Qp&mG550R_xRSjVcSsAh`yG`m$D&-DoPf0{O2@)wk1Sy0z2-;;2Z# z96UXsddQMt)w~egxK{=uU8nd;Ymj9=2fHJu$UW---bqnRQ~OzBJb6xFOzUkSu^X_D zH<%+z-CWJVG{)7w(IatMtTUfPBe(KLeq&!WF&gKg|MptD5!)10E)zXmhQRt?-rnm$m6w;tPV}PV!b1h{<$uBW>UkeAi*PGzCU&b(r_R{&z0pRS z#@J$gm&P0Po^<&%Ji_7}ldBR$fPWpAz4d9%*y4lBm+>_>Z=vCv`^O^_hYg1&j~TI~ zvn0yoNfh;IZe{}>w9b?z1bCa(O^^=485%^p*&&z1Zz`xtVu0=6wVd=QC)I}Q}^UHJj3EKWsYBCDsM+7ir? zZ;Q=~TuDwGunm3w+!}=<44;}(B(AqsSohz%Z7-8D@|zZG`!E&$`3sKydEC`EFNG8% zU2mHX03WW`&o>46vX#nvUDARmeq_Q0$veJ*lH^@9;szd+7`nfyNGCgjae7eSO4^hIE++VY%nQ$wSffZX7;Nck%geP@(hWg)Ty!Ws385X^qD$%_0{?S``5R}MC z9~d_*%kF(h?N~i;n)_Dg{->P)BVMs^UMr?*byk+(n9^S$bXzJ{6Cv5^V08iP zHmyb(&Tj_rm*i%igD8wy}D)q-EZePPM zabD!Td7~6Q85KZuW=sR}ak3oV|7m}gt$Sx9E7<)JNm_Jtc_7mK<%-FbSglhb?LiP~ z{W$i?gWx^|m5f#ByR;`s!Q6;*??2r&4-~MQj61}@j#rx=gfS7G2EmlO9NNO$WHPF9 zkWPmrGheetVB!HS0()-KR_znZ7VL|q)U29Hap$RZ(|Y<3aq?Bd5QaMAQ zItOnmUX|Xbw|XrTI8c-qy%iQ({NV8!6`ZZuRVKVIsit>qmFgiFrPHEPcE5Hs&z0(t$XYKE!@+>Mvgq; z?Ey{eje_6$<1dZQD$)rhu;H9+zQ#tdYK0KwFUgyYJ{K;fzhmgQ1D#rPc|bz1B7xc!^jG z_1AYPp5vvFwiIb`5%Rn~xTRpOX$b)mI(#yF)#JIPKg>U2vA41i`dJ5Kfy*PSRX!smnbF#52?lqu2DNK##~h{5iStilF#_Op#M0hC8Y!Ysew zW>xgzAA4l3b4kZGJa0O88dncR7L;jZ1j8rII_P6XZXhzG(P4MwQxz5crRa8il+yiN z%L*G-Om~Np_;~au=?C8`@+EEyb+5D-vI|x*QEou+;hm$!rW6Hbp{I{~bdu1+?v}sT zSjC2U)ou{bGfUC#)S>VFd3l8>M@#PQGe2|A3r~>*H+;A)%s2xgne^|~#o_8?^lci*pdiizV?NgH|aD;9(18r5Y`sBM=d{{uy075${JbJ>(P ziHLO5#>UL|a26OL*NiX-L;6O+fQ0@?HD+@>DYxuXXMfN>dhu6nhTo(Y5W(AoD^1Z_ zxenM^_lE@nDin?+)RjZ+0~QFDfvzQf=gKT0O`G#`J-!ieQ8{l#aVCKQmDhf|}vFsiLCdAf(+I9=-KIUFM7^+}QDw zUA~`7nvF)qZ};^p&i#sWisww&xF&XZK$T3z0qacW;L9`*vJ;-CIkN&4@s5z)0p=jh zwyoMSs7Q!uRj}dwG>uu8(0HTkVA^mu?(M{jVhj^|R~Ph36WOV{IUdun#LW7T6F)n- z*kw~%(y#xX``e?=V1X;9SE?_&l2<-G@`|TG1dL$6`K0)d8=%oEyC!2iL95O8Hsilh zC=yk@-Zi7lzQd)Fa#Nh9d*?`t=3KQk-4lD{+@8?FhOHdIz9($`@%Ao*QuuQ#N{Tx~ zpnPtLRK2b;o}Qnd2VrXFzh|5Vr&MDR^_yw0VpbMk`ZWHXqh=kd^ct^f zaACEjIDf+tbtdmn_1N_7X;8m6P+&HVKOC4jf91C88_FNYKbDul0(g>hU|8VMR*6_{ zsB{_gOFiM)(%X0ku=WA9a4Y{HGM}$5&B7scS&c@vD?KHJd216J>!Tiav?bP+gKjh! zDqX*Fh%cgEEN-sqct-okrc%do8Hy2n1@;IZ5?Q)8zQJ~k&)KwgXf)K%2Oggn>=XQY z6#H9?HMvS7llRVOKJdx3@NSpq(WH67KNmTPXgd3l2 zG_^dJN5mFNpy~M+$)fyHI4+#6ulKW!hgdTb0AQYBRwr&JUzu*FGBY!aJ)9N1h-Fj_ zcM{Ik<>6F9crImQs!iPv?GHCj@LieA?ljrQt>!5$);u$I_jEI@;oOeSfkzGSFK6kG z@Iui!G>2bZmndBFh=!4S2Zj=ullL2Ql4>0EkB=8RccJL-yCu*3}f(pDrea% z%5h>-fkl|nUz74&ic?RPFv2j#c$`+@JYa)%;_U-eVcRrD`T7edj;OhX1)k8=AEUL8 zck$DG=~ygmkXon-N={CWU7Ceo^ki4%7~i3&4f--)#vHU%964Nca2bzO6<4Z%$?791 zZ8RD!&q8TA7s@>_I%+0rvHAAF8IPIGH=plLx#1^`=1c5w=t_}96_)nrq^D1Qet)&e zkFMF+1WW$*$FK$GscNuW?=NaZtV9ESGX_i$;v@GKYdtylX0$2R_Bl9(RxR)dER-x5_u$zuX^&GhAW(VTMn*Xy{aQc zZuhbHOx);u9jq}|s=dw!0_=F<312=j^T z8JdNBk?|XW;ZOEXM-3@)T=3oMGf=!rqRMeW$4?F>pe0aKTT2m9KkGBJz8M35{)vbb z&tgV1OOStW`AJ?m!e@OdDt}ElCApTmHkd1UEY_l7qg?_R!cY0D@c}dB-%A?Eqhi6ZI z42JGOd6OILrYK$9t<;dzui4oZ!wE68dYacrGKKuRlEif4PVDphVzN^C_c()lPGRXd znm8lf{fLTD$Zvb8WT3LL671o(d5n^KKW7L~d>Gw_^iyak^4oltAHEl&@R>(YB~^H_ zti3&c^PtTdF28tu6@k@k@LsZIuMkWRk|{@ChQWxE#oQGD+KgNKPQu~~Z`m$h6`!4C zu{wW9W&!<`^s&tReCPJXEDnhCUhEr|19WWstbv)Y(90LX z0`?InPcL$jr)GVzKbljN<_RUGUNhXG!P|B$SBm$YgPj$Yt$o$&>D$}eO5!};61BlZ znTHbZbrxm`>hAUrMOFm?d)WHuI2__K>)ua;4-EkzR4@l@YGr7ruh;-P0d;9Y)Imhz zgb!LL*KV+_5Edr*U4Wch^xOEx=KL4nf)BgI5uFPMC&%^Q@6x)T;J4iShHwD~aam7F z`xgKjphtA^@VgbZ)<|H+nSu7RsZO9+0%J!>PLPuWZTHQKsog8_s@FrPSJwh8q>oxO zJYLm%OJ%Q^^v{###PQB|4N^9?Z_gy67alRX(0lxlcFgzn^XvQi^+t1i)i|SxTK&8A za*eB;#R7`wk2Gvw%!FPD=F3#SJzZvztapW{KM-#^;?Ngf%^;x!kcayf%}# z|55r#*6q-3;*922sOXi85TyZgzkJ;4L+A~LuyEhR{e53P(<;|H?A@__Qo{xL+rhrh z3b!wI-?=q+X_ov}&P<&}?Rdqayq{qJ!*5*D4P<3o6azFzM$5tHgT6W|1dd~%q56~3 zel1lqBGh9%tXwCzKHj)tu%TC&m`sn(`CiGR{-7k6kk2g{Wu6m7VZBt&8O-M)(LXXu6pmpr?bcN@aicVO%el(xF zL*O7xHGS5pTOgpMD@I)Em}a7@U7>pT*^qR+aEeRX7)Paf5{t z7Uq_-Ti*nMP%`4r0$e`_AsOHAuPk#Kgy);r`}PheN&4x7oiDIr`?4T1+Vdi>rt6kd zsFt6fU(0=o!n*Zm%m;%SA^ePs*%l&GH?%MRw#B!0Mwft^kU;ad4x6now7)EfUshuU z_4Q^?<$j?Orban~%(^|0?BDB{eq6A|T+B17+`+2t1qF=mQ`LVyGjp2X|Y zQk{5J1+c`|V}ddXLVe!4Xmg9^6|byBiMLG1#Bda_wp9j!DpQP#|L`S6$h`HA`u7# zcIj*JE3-P>%3_Pfv9`wH_u|jHjOp{CFHVZ|*GrvDUK+y)$?oZ*aeJBg4xO0$OsG%o z^0EubgWF&WU3iGobANL_aunBZT)+8Q-;$NH2~GQuNgs^+S==UlGEame@cZ{7H} znJ5vM2jO)D;m0H(kqIim<9o;I{XC|l4RX@bknO{uPl+lu>g(^na9;=@94|nHU@%SEpfOR6t#72Ep_8B5cGo3mPVhCtm2{BhYCV5^uJKq@kTe_l4U5Rv z<;n1t;2-c9^nP&@L`F~-fat(E@MElACFm#!m!r$$p|!>}?M1-Ii#qrj=>*lmseL5J zs{eUW80=+10Y5+mv@V3lIFvH95#FmW;qj_19w5~B7&IKBK-r|y3MC6jTjNp+cjVyp zN!q6Z8g5s8Du<7C1Fg}#UA5w0caGi-a#cm`itQT7cEzLE6XwwrE^#y1Cj(Bs3yxj38@=*NXt7YTi| zy?0LrG*Y?6$GePkucC2ppeKDz3yX`4%A!6v=!xZ-)x4>T_(Tf@DbgT#X&&|k~ zuB!wkwKB&AjF~}?T~trwPVp!Wi&P#cZ!jRA`p##>Zi-kOG$?0n)c(4`9<;)Kj4!KT zrikSJHfTfMLyF4|poM@*DjtZg?9a){QhcMUTx=NH(?|h)3}`M>Crh1+o0kOewf5xfhJ6o>-G4TKmZ(W0H!{l*?x zEWYin6BHCQILz@v>1eJ;aSJ`ZH-NP8I{s2izzR7l16gSUl~sW?{0*utCT!7(wcj{H zn;Y~ITRhC<+0J`X&{&0PX=p@*Gl{*DW7G2N)rcG#8rlpC+UIiiS%{5%4ce1QvlhK? znISe`7en7epF*yGT%T^+QViNuG_J->laQEkT+jmh`aTgiQ_gC?iBeAz)hhF}s16Q1 zDj(R4IN7B^_|24Ya5IE(4<=g1Lh*XbSZgGrnX_U!h7?#QxilPkf{q)mFg-B6 zCmZB;&~z_!6*YanK@uhaR*3cW^$W|(%o}!N&%rX!WLV&6ic7jj&?F_2Bj2!Ec?Gu- zUP2_6au?6u7Zoe3bg83xjYW``yO#z_$9Hxpzy=-Il$T&O054G{9EVD)Xm~m}w(&DO z0NWWG8*@`kjY_@fy)dQZJX)hCeHgLQwjq&kRIC29Q@!46icEv~lws%N!@Z$8pVETb zWyCFEVfC*&9%cq08{tn{fH_Ws`18e@b*_om6$Oi}8xqqPF#vDI7yGT99sE&_7cHin z0Z9lSZD`%osoA{GyB`ZX>3VrZY%h#iC#Tt8*$>=fDZvW%!+9eHYyf_OxCJkFAHG4CO<)De0V}8t;tiA{qGQP`$ zwp+a~PBLiBOSLF2`ODyg-B|sBHyggK+%7R->K^8T+p{qX*y_XA)6c%V2XcZ?uk5$8 z-1kD`SR3p*8<-YrgG{L*wf7nn^ga{#{>Hh8W)E<9VV<33?}>h%p}>!R!p#5+V95Q2 zG)&zp(1zE+jNQQfP)v$w+}b1az-c;WYrrWalw^in z)XNqdYtLXO1{(Ume+bb7#sjKLe8!2lP5Jf~-!*UifOi7t%F#?JMq#_LIv=1bpe3Ds zLGP3-)$94;;p+GUNQn!elMl`-0jmdVjMpgv+eSae8&c0u;sfYKJ|=3%FPUmXMaT#E z_Rq(U3i9b%BoE#y#mm~A#u#wS2-JYls@JzbquGA3KOf=03!}jw_W(z$8&j/dev/null 2>&1; then + + for i in $(busybox --list-full); do + + if [ -e "/$i" ]; then + busybox echo "Error: $i already exists." + else + busybox echo "Creating symlink from /bin/busybox to $i" + busybox ln -s "/usr/bin/busybox" "/$i" + fi + + done + +else + + busybox echo "Busybox is not installed or not in the system." + +fi esac diff --git a/srcpkgs/evolution-patches/files/10_linux b/srcpkgs/evolution-patches/files/10_linux new file mode 100755 index 0000000..862aeeb --- /dev/null +++ b/srcpkgs/evolution-patches/files/10_linux @@ -0,0 +1,302 @@ +#! /bin/sh +set -e + +# grub-mkconfig helper script. +# Copyright (C) 2006,2007,2008,2009,2010 Free Software Foundation, Inc. +# +# GRUB is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GRUB is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GRUB. If not, see . + +prefix="/usr" +exec_prefix="/usr" +datarootdir="/usr/share" + +. "$pkgdatadir/grub-mkconfig_lib" + +export TEXTDOMAIN=grub +export TEXTDOMAINDIR="${datarootdir}/locale" + +CLASS="--class gnu-linux --class gnu --class os" + +if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then + OS="" +else + OS="${GRUB_DISTRIBUTOR}" + CLASS="--class $(echo ${GRUB_DISTRIBUTOR} | tr 'A-Z' 'a-z' | cut -d' ' -f1|LC_ALL=C sed 's,[^[:alnum:]_],_,g') ${CLASS}" +fi + +# loop-AES arranges things so that /dev/loop/X can be our root device, but +# the initrds that Linux uses don't like that. +case ${GRUB_DEVICE} in + /dev/loop/*|/dev/loop[0-9]) + GRUB_DEVICE=`losetup ${GRUB_DEVICE} | sed -e "s/^[^(]*(\([^)]\+\)).*/\1/"` + ;; +esac + +# Default to disabling partition uuid support to maintian compatibility with +# older kernels. +GRUB_DISABLE_LINUX_PARTUUID=${GRUB_DISABLE_LINUX_PARTUUID-true} + +# btrfs may reside on multiple devices. We cannot pass them as value of root= parameter +# and mounting btrfs requires user space scanning, so force UUID in this case. +if ( [ "x${GRUB_DEVICE_UUID}" = "x" ] && [ "x${GRUB_DEVICE_PARTUUID}" = "x" ] ) \ + || ( [ "x${GRUB_DISABLE_LINUX_UUID}" = "xtrue" ] \ + && [ "x${GRUB_DISABLE_LINUX_PARTUUID}" = "xtrue" ] ) \ + || ( ! test -e "/dev/disk/by-uuid/${GRUB_DEVICE_UUID}" \ + && ! test -e "/dev/disk/by-partuuid/${GRUB_DEVICE_PARTUUID}" ) \ + || ( test -e "${GRUB_DEVICE}" && uses_abstraction "${GRUB_DEVICE}" lvm ); then + LINUX_ROOT_DEVICE=${GRUB_DEVICE} +elif [ "x${GRUB_DEVICE_UUID}" = "x" ] \ + || [ "x${GRUB_DISABLE_LINUX_UUID}" = "xtrue" ]; then + LINUX_ROOT_DEVICE=PARTUUID=${GRUB_DEVICE_PARTUUID} +else + LINUX_ROOT_DEVICE=UUID=${GRUB_DEVICE_UUID} +fi + +case x"$GRUB_FS" in + xbtrfs) + rootsubvol="`make_system_path_relative_to_its_root /`" + rootsubvol="${rootsubvol#/}" + if [ "x${rootsubvol}" != x ]; then + GRUB_CMDLINE_LINUX="rootflags=subvol=${rootsubvol} ${GRUB_CMDLINE_LINUX}" + fi;; + xzfs) + rpool=`${grub_probe} --device ${GRUB_DEVICE} --target=fs_label 2>/dev/null || true` + bootfs="`make_system_path_relative_to_its_root / | sed -e "s,@$,,"`" + LINUX_ROOT_DEVICE="ZFS=${rpool}${bootfs%/}" + ;; +esac + +title_correction_code= + +linux_entry () +{ + os="$1" + version="$2" + type="$3" + args="$4" + + if [ -z "$boot_device_id" ]; then + boot_device_id="$(grub_get_device_id "${GRUB_DEVICE}")" + fi + if [ x$type != xsimple ] ; then + case $type in + recovery) + title="$(gettext_printf "%s, with Linux %s (recovery mode)" "${os}" "${version}")" ;; + *) + title="$(gettext_printf "%s, with Linux %s" "${os}" "${version}")" ;; + esac + if [ x"$title" = x"$GRUB_ACTUAL_DEFAULT" ] || [ x"Previous Linux versions>$title" = x"$GRUB_ACTUAL_DEFAULT" ]; then + replacement_title="$(echo "Advanced options for ${OS}" | sed 's,>,>>,g')>$(echo "$title" | sed 's,>,>>,g')" + quoted="$(echo "$GRUB_ACTUAL_DEFAULT" | grub_quote)" + title_correction_code="${title_correction_code}if [ \"x\$default\" = '$quoted' ]; then default='$(echo "$replacement_title" | grub_quote)'; fi;" + grub_warn "$(gettext_printf "Please don't use old title \`%s' for GRUB_DEFAULT, use \`%s' (for versions before 2.00) or \`%s' (for 2.00 or later)" "$GRUB_ACTUAL_DEFAULT" "$replacement_title" "gnulinux-advanced-$boot_device_id>gnulinux-$version-$type-$boot_device_id")" + fi + echo "menuentry '$(echo "$title" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-$version-$type-$boot_device_id' {" | sed "s/^/$submenu_indentation/" + else + echo "menuentry '$(echo "$os" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-simple-$boot_device_id' {" | sed "s/^/$submenu_indentation/" + fi + if [ x$type != xrecovery ] ; then + save_default_entry | grub_add_tab + fi + + # Use ELILO's generic "efifb" when it's known to be available. + # FIXME: We need an interface to select vesafb in case efifb can't be used. + if [ "x$GRUB_GFXPAYLOAD_LINUX" = x ]; then + echo " load_video" | sed "s/^/$submenu_indentation/" + if grep -qx "CONFIG_FB_EFI=y" "${config}" 2> /dev/null \ + && grep -qx "CONFIG_VT_HW_CONSOLE_BINDING=y" "${config}" 2> /dev/null; then + echo " set gfxpayload=keep" | sed "s/^/$submenu_indentation/" + fi + else + if [ "x$GRUB_GFXPAYLOAD_LINUX" != xtext ]; then + echo " load_video" | sed "s/^/$submenu_indentation/" + fi + echo " set gfxpayload=$GRUB_GFXPAYLOAD_LINUX" | sed "s/^/$submenu_indentation/" + fi + + echo " insmod gzio" | sed "s/^/$submenu_indentation/" + + if [ x$dirname = x/ ]; then + if [ -z "${prepare_root_cache}" ]; then + prepare_root_cache="$(prepare_grub_to_access_device ${GRUB_DEVICE} | grub_add_tab)" + fi + printf '%s\n' "${prepare_root_cache}" | sed "s/^/$submenu_indentation/" + else + if [ -z "${prepare_boot_cache}" ]; then + prepare_boot_cache="$(prepare_grub_to_access_device ${GRUB_DEVICE_BOOT} | grub_add_tab)" + fi + printf '%s\n' "${prepare_boot_cache}" | sed "s/^/$submenu_indentation/" + fi + message="$(gettext_printf "Loading Linux %s ..." ${version})" + sed "s/^/$submenu_indentation/" << EOF + echo '$(echo "$message" | grub_quote)' + linux ${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro ${args} +EOF + if test -n "${initrd}" ; then + # TRANSLATORS: ramdisk isn't identifier. Should be translated. + message="$(gettext_printf "Loading initial ramdisk ...")" + initrd_path= + for i in ${initrd}; do + initrd_path="${initrd_path} ${rel_dirname}/${i}" + done + sed "s/^/$submenu_indentation/" << EOF + echo '$(echo "$message" | grub_quote)' + initrd $(echo $initrd_path) +EOF + fi + sed "s/^/$submenu_indentation/" << EOF +} +EOF +} + +machine=`uname -m` +case "x$machine" in + xi?86 | xx86_64) + list= + for i in /boot/vmlinuz-* /vmlinuz-* /boot/kernel-* ; do + if grub_file_is_not_garbage "$i" ; then list="$list $i" ; fi + done ;; + *) + list= + for i in /boot/vmlinuz-* /boot/vmlinux-* /vmlinuz-* /vmlinux-* /boot/kernel-* ; do + if grub_file_is_not_garbage "$i" ; then list="$list $i" ; fi + done ;; +esac + +case "$machine" in + i?86) GENKERNEL_ARCH="x86" ;; + mips|mips64) GENKERNEL_ARCH="mips" ;; + mipsel|mips64el) GENKERNEL_ARCH="mipsel" ;; + arm*) GENKERNEL_ARCH="arm" ;; + *) GENKERNEL_ARCH="$machine" ;; +esac + +prepare_boot_cache= +prepare_root_cache= +boot_device_id= +title_correction_code= + +# Extra indentation to add to menu entries in a submenu. We're not in a submenu +# yet, so it's empty. In a submenu it will be equal to '\t' (one tab). +submenu_indentation="" + +is_top_level=true +while [ "x$list" != "x" ] ; do + linux=`version_find_latest $list` + gettext_printf "Found linux image: %s\n" "$linux" >&2 + basename=`basename $linux` + dirname=`dirname $linux` + rel_dirname=`make_system_path_relative_to_its_root $dirname` + version=`echo $basename | sed -e "s,^[^0-9]*-,,g"` + alt_version=`echo $version | sed -e "s,\.old$,,g"` + linux_root_device_thisversion="${LINUX_ROOT_DEVICE}" + + initrd_early= + for i in ${GRUB_EARLY_INITRD_LINUX_STOCK} \ + ${GRUB_EARLY_INITRD_LINUX_CUSTOM}; do + if test -e "${dirname}/${i}" ; then + initrd_early="${initrd_early} ${i}" + fi + done + + initrd_real= + for i in "initrd.img-${version}" "initrd-${version}.img" "initrd-${version}.gz" \ + "initrd-${version}" "initramfs-${version}.img" \ + "initrd.img-${alt_version}" "initrd-${alt_version}.img" \ + "initrd-${alt_version}" "initramfs-${alt_version}.img" \ + "initramfs-genkernel-${version}" \ + "initramfs-genkernel-${alt_version}" \ + "initramfs-genkernel-${GENKERNEL_ARCH}-${version}" \ + "initramfs-genkernel-${GENKERNEL_ARCH}-${alt_version}"; do + if test -e "${dirname}/${i}" ; then + initrd_real="${i}" + break + fi + done + + initrd= + if test -n "${initrd_early}" || test -n "${initrd_real}"; then + initrd="${initrd_early} ${initrd_real}" + + initrd_display= + for i in ${initrd}; do + initrd_display="${initrd_display} ${dirname}/${i}" + done + gettext_printf "Found initrd image: %s\n" "$(echo $initrd_display)" >&2 + fi + + config= + for i in "${dirname}/config-${version}" "${dirname}/config-${alt_version}" "/etc/kernels/kernel-config-${version}" ; do + if test -e "${i}" ; then + config="${i}" + break + fi + done + + initramfs= + if test -n "${config}" ; then + initramfs=`grep CONFIG_INITRAMFS_SOURCE= "${config}" | cut -f2 -d= | tr -d \"` + fi + + if test -z "${initramfs}" && test -z "${initrd_real}" ; then + # "UUID=" and "ZFS=" magic is parsed by initrd or initramfs. Since there's + # no initrd or builtin initramfs, it can't work here. + if [ "x${GRUB_DEVICE_PARTUUID}" = "x" ] \ + || [ "x${GRUB_DISABLE_LINUX_PARTUUID}" = "xtrue" ]; then + + linux_root_device_thisversion=${GRUB_DEVICE} + else + linux_root_device_thisversion=PARTUUID=${GRUB_DEVICE_PARTUUID} + fi + fi + + # The GRUB_DISABLE_SUBMENU option used to be different than others since it was + # mentioned in the documentation that has to be set to 'y' instead of 'true' to + # enable it. This caused a lot of confusion to users that set the option to 'y', + # 'yes' or 'true'. This was fixed but all of these values must be supported now. + if [ "x${GRUB_DISABLE_SUBMENU}" = xyes ] || [ "x${GRUB_DISABLE_SUBMENU}" = xy ]; then + GRUB_DISABLE_SUBMENU="true" + fi + + if [ "x$is_top_level" = xtrue ] && [ "x${GRUB_DISABLE_SUBMENU}" != xtrue ]; then + linux_entry "${OS}" "${version}" simple \ + "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}" + + submenu_indentation="$grub_tab" + + if [ -z "$boot_device_id" ]; then + boot_device_id="$(grub_get_device_id "${GRUB_DEVICE}")" + fi + # TRANSLATORS: %s is replaced with an OS name + echo "submenu '$(gettext_printf "Advanced options for %s" "${OS}" | grub_quote)' \$menuentry_id_option 'gnulinux-advanced-$boot_device_id' {" + is_top_level=false + fi + + linux_entry "${OS}" "${version}" advanced \ + "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}" + if [ "x${GRUB_DISABLE_RECOVERY}" != "xtrue" ]; then + linux_entry "${OS}" "${version}" recovery \ + "single ${GRUB_CMDLINE_LINUX}" + fi + + list=`echo $list | tr ' ' '\n' | fgrep -vx "$linux" | tr '\n' ' '` +done + +# If at least one kernel was found, then we need to +# add a closing '}' for the submenu command. +if [ x"$is_top_level" != xtrue ]; then + echo '}' +fi + +echo "$title_correction_code" diff --git a/srcpkgs/evolution-patches/files/grub b/srcpkgs/evolution-patches/files/grub new file mode 100644 index 0000000..a8908cb --- /dev/null +++ b/srcpkgs/evolution-patches/files/grub @@ -0,0 +1,21 @@ +# +# Configuration file for GRUB. +# +GRUB_DEFAULT=0 +#GRUB_HIDDEN_TIMEOUT=0 +#GRUB_HIDDEN_TIMEOUT_QUIET=false +GRUB_TIMEOUT=1 +GRUB_DISTRIBUTOR="EvolutionOS" +GRUB_CMDLINE_LINUX_DEFAULT="loglevel=0 quiet vt.global_cursor_default=0" +# Uncomment to use basic console +#GRUB_TERMINAL_INPUT="console" +# Uncomment to disable graphical terminal +#GRUB_TERMINAL_OUTPUT=console +#GRUB_BACKGROUND=/usr/share/evolution-artwork/splash.png +#GRUB_GFXMODE=1920x1080x32 +#GRUB_DISABLE_LINUX_UUID=true +GRUB_DISABLE_RECOVERY=true +# Uncomment and set to the desired menu colors. Used by normal and wallpaper +# modes only. Entries specified as foreground/background. +#GRUB_COLOR_NORMAL="light-blue/black" +#GRUB_COLOR_HIGHLIGHT="light-cyan/blue" diff --git a/srcpkgs/evolution-patches/template b/srcpkgs/evolution-patches/template index b6a9769..ce33fd8 100644 --- a/srcpkgs/evolution-patches/template +++ b/srcpkgs/evolution-patches/template @@ -1,6 +1,6 @@ pkgname=evolution-patches -version=1.0 -revision=15 +version=1.1 +revision=2 build_style=meta maintainer="Tracker-Friendly " short_desc="Simple patches that enable an usable OS out of the box" @@ -17,7 +17,7 @@ do_install() { # Get the list of commands from busybox - commands="[ [[ arch ascii base32 base64 basename brctl cat chgrp chmod chown chroot comm cp crc32 cttyhack cut date dc dd df dirname dnsdomainname du dumpkmap echo ed env expand expr factor false fatattr fbset fold fsync fuser getty groups head hexedit i2cdetect i2cdump i2cget i2cset i2ctransfer id ifconfig ifenslave install iostat ipaddr iplink ipneigh iproute iprule iptunnel killall killall5 link ln loadkmap ls lsof lsscsi lzcat md5sum mkdir mkfifo mknod mkstat mv nc netstat nice nl nohup nproc nslookup od partprobe paste patch pipe_progress powertop printenv printf pstree pwd readlink realpath rm rmdir seq setfattr sha1sum sha256sum sha3sum sha512sum shred shuf sleep sort split ssl_client stat strings stty sum svok sync tac tail tee telnet test time touch tr true truncate ts tty uevent uname unexpand uniq unlink unxz unzip uudecode uuencode wc wget whoami whois xxd xz xzcat yes sh find diff gunzip tar gzip sed less which mktemp grep xargs cmp egrep fgrep lspci lsusb mpstat tree tsort zcat add-shell addgroup adduser adjtimex ar arp ash awk bc beep bunzip2 bzcat chat cksum conspy crond crontab cryptpw delgroup deluser depmod devmem dhcprelay dnsd dos2unix dpkg dpkg-deb dumpleases ether-wake fakeidentd fbsplash fdflush fdformat freeramdisk ftpd ftpget ftpput hd hdparm hostid hostname httpd hush ifdown ifplugd ifup inetd insmod ipcalc klogd linux32 linux64 loadfont logger logname logread lpd lpq lpr lsmod lzma lzop lzopcat makedevs makemime man mdev microcom mim minips mkdosfs mkfs.ext2 mkfs.vfat mkpasswd modinfo modprobe mt nameif nanddump nandwrite nbd-client netcat nmeter ntpd nuke ping ping6 popmaildir pscan raidautorun rdate rdev readahead reformime remove-shell reset resize resume rmmod route rpm rpm2cpio run-init runlevel rx seedrng sendmail setconsole setlogcons setserial slattach smemcap start-stop-daemon syslogd tcpsvd telnetd tftp tftpd timeout traceroute traceroute6 ttysize tunctl ubiattach ubidetach ubimkvol ubirename ubirmvol ubirsvol ubiupdatevol udhcpc udhcpc6 udhcpd udpsvd uncompress unix2dos unlzma unlzop users usleep vconfig vi volname w watchdog who zcip" + commands="[ [[ arch ascii base32 base64 basename brctl cat chgrp chmod chown chroot comm cp crc32 cttyhack cut date dc dd df dirname dnsdomainname du dumpkmap echo ed env expand expr factor false fatattr fbset fold fsync fuser getty groups head hexedit i2cdetect i2cdump i2cget i2cset i2ctransfer id ifconfig ifenslave install iostat ipaddr iplink ipneigh iproute iprule iptunnel killall killall5 link ln loadkmap ls lsof lsscsi lzcat md5sum mkdir mkfifo mknod mkstat mv nc netstat nice nl nohup nproc nslookup od partprobe paste patch pipe_progress powertop printenv printf pstree pwd readlink realpath rm rmdir seq setfattr sha1sum sha256sum sha3sum sha512sum shred shuf sleep sort split ssl_client stat strings stty sum svok sync tac tail tee telnet test time touch tr true truncate ts tty uevent uname unexpand uniq unlink unxz unzip uudecode uuencode wc wget whoami whois xxd xz xzcat yes sh find diff gunzip tar gzip sed which mktemp grep xargs cmp egrep fgrep lspci lsusb mpstat tree tsort zcat add-shell addgroup adduser adjtimex ar arp ash awk bc beep chat cksum conspy crond crontab cryptpw delgroup deluser devmem dhcprelay dnsd dos2unix dpkg dpkg-deb dumpleases ether-wake fakeidentd fbsplash fdflush fdformat freeramdisk ftpd ftpget ftpput hd hdparm hostid hostname httpd hush ifdown ifplugd ifup inetd ipcalc klogd linux32 linux64 loadfont logger logname logread lpd lpq lpr lzma lzop lzopcat makedevs makemime mdev microcom mim minips mkdosfs mkfs.ext2 mkfs.vfat mkpasswd mt nameif nanddump nandwrite nbd-client netcat nmeter ntpd nuke ping ping6 popmaildir pscan raidautorun rdate rdev readahead reformime remove-shell resize resume route rpm rpm2cpio run-init runlevel rx seedrng sendmail setconsole setlogcons setserial slattach smemcap start-stop-daemon syslogd tcpsvd telnetd tftp tftpd timeout traceroute traceroute6 ttysize tunctl ubiattach ubidetach ubimkvol ubirename ubirmvol ubirsvol ubiupdatevol udhcpc udhcpc6 udhcpd udpsvd uncompress unix2dos unlzma unlzop users usleep vconfig vi volname w watchdog who zcip" mkdir -p ${DESTDIR}/usr/bin/ # Loop through each command for cmd in $commands; do diff --git a/srcpkgs/grub-arm64-efi b/srcpkgs/grub-arm64-efi new file mode 120000 index 0000000..2c8276e --- /dev/null +++ b/srcpkgs/grub-arm64-efi @@ -0,0 +1 @@ +grub \ No newline at end of file diff --git a/srcpkgs/grub-i386-efi b/srcpkgs/grub-i386-efi new file mode 120000 index 0000000..2c8276e --- /dev/null +++ b/srcpkgs/grub-i386-efi @@ -0,0 +1 @@ +grub \ No newline at end of file diff --git a/srcpkgs/grub-x86_64-efi b/srcpkgs/grub-x86_64-efi new file mode 120000 index 0000000..2c8276e --- /dev/null +++ b/srcpkgs/grub-x86_64-efi @@ -0,0 +1 @@ +grub \ No newline at end of file diff --git a/srcpkgs/grub/files/grub.default b/srcpkgs/grub/files/grub.default new file mode 100644 index 0000000..4b07afe --- /dev/null +++ b/srcpkgs/grub/files/grub.default @@ -0,0 +1,21 @@ +# +# Configuration file for GRUB. +# +GRUB_DEFAULT=0 +#GRUB_HIDDEN_TIMEOUT=0 +#GRUB_HIDDEN_TIMEOUT_QUIET=false +GRUB_TIMEOUT=5 +GRUB_DISTRIBUTOR="EvolutionOS" +GRUB_CMDLINE_LINUX_DEFAULT="loglevel=4" +# Uncomment to use basic console +#GRUB_TERMINAL_INPUT="console" +# Uncomment to disable graphical terminal +#GRUB_TERMINAL_OUTPUT=console +#GRUB_BACKGROUND=/usr/share/void-artwork/splash.png +#GRUB_GFXMODE=1920x1080x32 +#GRUB_DISABLE_LINUX_UUID=true +GRUB_DISABLE_RECOVERY=true +# Uncomment and set to the desired menu colors. Used by normal and wallpaper +# modes only. Entries specified as foreground/background. +#GRUB_COLOR_NORMAL="light-blue/black" +#GRUB_COLOR_HIGHLIGHT="light-cyan/blue" diff --git a/srcpkgs/grub/files/kernel.d/grub.post b/srcpkgs/grub/files/kernel.d/grub.post new file mode 100644 index 0000000..561d8b2 --- /dev/null +++ b/srcpkgs/grub/files/kernel.d/grub.post @@ -0,0 +1,19 @@ +#!/bin/sh +# +# Kernel hook for GRUB 2. +# +# Arguments passed to this script: $1 pkgname, $2 version. +# +PKGNAME="$1" +VERSION="$2" + +export ZPOOL_VDEV_NAME_PATH=YES + +if command -v grub-mkconfig >/dev/null 2>&1; then + if [ -d $ROOTDIR/boot/grub ]; then + grub-mkconfig -o $ROOTDIR/boot/grub/grub.cfg + exit $? + fi +fi + +exit 0 diff --git a/srcpkgs/grub/patches/0004-add-GRUB_COLOR_variables.patch b/srcpkgs/grub/patches/0004-add-GRUB_COLOR_variables.patch new file mode 100644 index 0000000..903a39c --- /dev/null +++ b/srcpkgs/grub/patches/0004-add-GRUB_COLOR_variables.patch @@ -0,0 +1,32 @@ +diff --git a/util/grub-mkconfig.in b/util/grub-mkconfig.in +index f8cbb8d..f271608 100644 +--- a/util/grub-mkconfig.in ++++ b/util/grub-mkconfig.in +@@ -246,6 +246,8 @@ export GRUB_DEFAULT \ + GRUB_BACKGROUND \ + GRUB_THEME \ + GRUB_GFXPAYLOAD_LINUX \ ++ GRUB_COLOR_NORMAL \ ++ GRUB_COLOR_HIGHLIGHT \ + GRUB_INIT_TUNE \ + GRUB_SAVEDEFAULT \ + GRUB_ENABLE_CRYPTODISK \ +diff --git a/util/grub.d/00_header.in b/util/grub.d/00_header.in +index d2e7252..8259f45 100644 +--- a/util/grub.d/00_header.in ++++ b/util/grub.d/00_header.in +@@ -125,6 +125,14 @@ cat < +Date: Tue, 28 Sep 2021 13:50:47 +0800 +Subject: build: Fix build error with binutils 2.36 + +The following procedure to build xen/pvgrub is broken. + + git clone https://git.savannah.gnu.org/git/grub.git + cd grub + ./bootstrap + mkdir build-xen + cd build-xen + ../configure --with-platform=xen + make + +It fails with the message: + + /usr/lib64/gcc/x86_64-suse-linux/10/../../../../x86_64-suse-linux/bin/ld: + section .note.gnu.property VMA [0000000000400158,0000000000400187] + overlaps section .bss VMA [000000000000f000,000000000041e1af] + +The most significant factor is that new assembler (GNU as) generates the +.note.gnu.property section as default. This note section overlaps with +.bss because it doesn't reposition with -Wl,-Ttext,0 with which the base +address of .text section is set, rather the address of .note.gnu.property +is calculated for some reason from 0x400000 where the ELF executable +defaults to start. + +Using -Ttext-segment doesn't help either, though it is said to set the +address of the first byte of the text segment according to "man ld". +What it actually does is to override the default 0x400000, aka the image +base address, to something else. The entire process can be observed in +the default linker script used by gcc [1]. Therefore we can't expect it +to achieve the same thing as -Ttext given that the first segment where +.text resides is offset by SIZEOF_HEADERS plus some sections may be +preceding it within the first segment. The end result is .text always +has to start with non-zero address with -Wl,-Ttext-segment,0 if using +default linker script. + +It is also worth mentioning that binutils upstream apparently doesn't +seem to consider this as a bug [2] and proposed to use -Wl,-Ttext-segment,0 +which is not fruitful as what has been tested by Gentoo [3]. + +As long as GRUB didn't use ISA information encoded in .note.gnu.property, +we can safely drop it via -Wa,-mx86-used-note=no assembler option to +fix the linker error above. + +This is considered a better approach than using custom linker script to +drop the .note.gnu.property section because object file manipulation can +also be hampered one way or the other in that linker script may not be +helpful. See also this commit removing the section in the process of objcopy. + + 6643507ce build: Fix GRUB i386-pc build with Ubuntu gcc + +[1] In /usr/lib64/ldscripts/elf_x86_64.x or use 'gcc -Wl,--verbose ...' + PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x400000)); + . = SEGMENT_START("text-segment", 0x400000) + SIZEOF_HEADERS; +[2] https://sourceware.org/bugzilla/show_bug.cgi?id=27377 +[3] https://bugs.gentoo.org/787221 + +Signed-off-by: Michael Chang +Reviewed-by: Daniel Kiper +--- + configure.ac | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +(limited to 'configure.ac') + +diff --git a/configure.ac b/configure.ac +index eeb5d22..8d1c81a 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -840,6 +840,20 @@ if ( test "x$target_cpu" = xi386 || test "x$target_cpu" = xx86_64 ) && test "x$p + TARGET_CFLAGS="$TARGET_CFLAGS -mno-mmx -mno-sse -mno-sse2 -mno-sse3 -mno-3dnow" + fi + ++if ( test "x$target_cpu" = xi386 || test "x$target_cpu" = xx86_64 ); then ++ AC_CACHE_CHECK([whether -Wa,-mx86-used-note works], [grub_cv_cc_mx86_used_note], [ ++ CFLAGS="$TARGET_CFLAGS -Wa,-mx86-used-note=no -Werror" ++ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], ++ [grub_cv_cc_mx86_used_note=yes], ++ [grub_cv_cc_mx86_used_note=no]) ++ ]) ++ ++ if test "x$grub_cv_cc_mx86_used_note" = xyes; then ++ TARGET_CFLAGS="$TARGET_CFLAGS -Wa,-mx86-used-note=no" ++ TARGET_CCASFLAGS="$TARGET_CCASFLAGS -Wa,-mx86-used-note=no" ++ fi ++fi ++ + # GRUB doesn't use float or doubles at all. Yet some toolchains may decide + # that floats are a good fit to run instead of what's written in the code. + # Given that floating point unit is disabled (if present to begin with) +-- +cgit v1.1 + diff --git a/srcpkgs/grub/patches/grub-install-pvxen-paths.patch b/srcpkgs/grub/patches/grub-install-pvxen-paths.patch new file mode 100644 index 0000000..0965c05 --- /dev/null +++ b/srcpkgs/grub/patches/grub-install-pvxen-paths.patch @@ -0,0 +1,71 @@ +From 04aa0aa735f4bfa2d7a4f6593745fbe1d7fa0d0a Mon Sep 17 00:00:00 2001 +From: Ian Campbell +Date: Sat, 6 Sep 2014 12:20:12 +0100 +Subject: grub-install: Install PV Xen binaries into the upstream specified + path + +Upstream have defined a specification for where guests ought to place their +xenpv grub binaries in order to facilitate chainloading from a stage 1 grub +loaded from dom0. + +http://xenbits.xen.org/docs/unstable-staging/misc/x86-xenpv-bootloader.html + +The spec calls for installation into /boot/xen/pvboot-i386.elf or +/boot/xen/pvboot-x86_64.elf. + +Signed-off-by: Ian Campbell + +Bug-Debian: https://bugs.debian.org/762307 +Forwarded: http://lists.gnu.org/archive/html/grub-devel/2014-10/msg00041.html +Last-Update: 2014-10-24 + +Patch-Name: grub-install-pvxen-paths.patch + +--- +v2: Respect bootdir, create /boot/xen as needed. +--- + util/grub-install.c | 24 ++++++++++++++++++++++-- + 1 file changed, 22 insertions(+), 2 deletions(-) + +diff --git a/util/grub-install.c b/util/grub-install.c +index b82c14d41..caadada98 100644 +--- a/util/grub-install.c ++++ b/util/grub-install.c +@@ -1962,6 +1962,28 @@ main (int argc, char *argv[]) + } + break; + ++ case GRUB_INSTALL_PLATFORM_I386_XEN: ++ { ++ char *path = grub_util_path_concat (2, bootdir, "xen"); ++ char *dst = grub_util_path_concat (2, path, "pvboot-i386.elf"); ++ grub_install_mkdir_p (path); ++ grub_install_copy_file (imgfile, dst, 1); ++ free (dst); ++ free (path); ++ } ++ break; ++ ++ case GRUB_INSTALL_PLATFORM_X86_64_XEN: ++ { ++ char *path = grub_util_path_concat (2, bootdir, "xen"); ++ char *dst = grub_util_path_concat (2, path, "pvboot-x86_64.elf"); ++ grub_install_mkdir_p (path); ++ grub_install_copy_file (imgfile, dst, 1); ++ free (dst); ++ free (path); ++ } ++ break; ++ + case GRUB_INSTALL_PLATFORM_MIPSEL_LOONGSON: + case GRUB_INSTALL_PLATFORM_MIPSEL_QEMU_MIPS: + case GRUB_INSTALL_PLATFORM_MIPS_QEMU_MIPS: +@@ -1971,8 +1971,6 @@ main (int argc, char *argv[]) + case GRUB_INSTALL_PLATFORM_MIPSEL_ARC: + case GRUB_INSTALL_PLATFORM_ARM_UBOOT: + case GRUB_INSTALL_PLATFORM_I386_QEMU: +- case GRUB_INSTALL_PLATFORM_I386_XEN: +- case GRUB_INSTALL_PLATFORM_X86_64_XEN: + case GRUB_INSTALL_PLATFORM_I386_XEN_PVH: + grub_util_warn ("%s", + _("WARNING: no platform-specific install was performed")); diff --git a/srcpkgs/grub/patches/ieee1275-clear-reset.patch b/srcpkgs/grub/patches/ieee1275-clear-reset.patch new file mode 100644 index 0000000..18ff773 --- /dev/null +++ b/srcpkgs/grub/patches/ieee1275-clear-reset.patch @@ -0,0 +1,32 @@ +From 54b741317568867fc4ad801a65397d05f3ea0f59 Mon Sep 17 00:00:00 2001 +From: Paulo Flabiano Smorigo +Date: Thu, 25 Sep 2014 18:41:29 -0300 +Subject: Include a text attribute reset in the clear command for ppc + +Always clear text attribute for clear command in order to avoid problems +after it boots. + +* grub-core/term/terminfo.c: Add escape for text attribute reset + +Bug-Ubuntu: https://bugs.launchpad.net/bugs/1295255 +Origin: other, https://lists.gnu.org/archive/html/grub-devel/2014-09/msg00076.html +Last-Update: 2014-09-26 + +Patch-Name: ieee1275-clear-reset.patch +--- + grub-core/term/terminfo.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/grub-core/term/terminfo.c b/grub-core/term/terminfo.c +index f0d3e3deb..7cb7909c8 100644 +--- a/grub-core/term/terminfo.c ++++ b/grub-core/term/terminfo.c +@@ -151,7 +151,7 @@ grub_terminfo_set_current (struct grub_term_output *term, + /* Clear the screen. Using serial console, screen(1) only recognizes the + * ANSI escape sequence. Using video console, Apple Open Firmware + * (version 3.1.1) only recognizes the literal ^L. So use both. */ +- data->cls = grub_strdup (" \e[2J"); ++ data->cls = grub_strdup (" \e[2J\e[m"); + data->reverse_video_on = grub_strdup ("\e[7m"); + data->reverse_video_off = grub_strdup ("\e[m"); + if (grub_strcmp ("ieee1275", str) == 0) diff --git a/srcpkgs/grub/patches/install_powerpc_machtypes.patch b/srcpkgs/grub/patches/install_powerpc_machtypes.patch new file mode 100644 index 0000000..ca992d9 --- /dev/null +++ b/srcpkgs/grub/patches/install_powerpc_machtypes.patch @@ -0,0 +1,220 @@ +From 35118b5023b0d9b4e3ad82f6e15fb696ad8e2a10 Mon Sep 17 00:00:00 2001 +From: Colin Watson +Date: Tue, 28 Jan 2014 14:40:02 +0000 +Subject: Port yaboot logic for various powerpc machine types + +Some powerpc machines require not updating the NVRAM. This can be handled +by existing grub-install command-line options, but it's friendlier to detect +this automatically. + +On chrp_ibm machines, use the nvram utility rather than nvsetenv. (This +is possibly suitable for other machines too, but that needs to be +verified.) + +Forwarded: no +Last-Update: 2014-10-15 + +Patch-Name: install_powerpc_machtypes.patch +--- + grub-core/osdep/basic/platform.c | 5 +++ + grub-core/osdep/linux/platform.c | 72 ++++++++++++++++++++++++++++++ + grub-core/osdep/unix/platform.c | 28 +++++++++--- + grub-core/osdep/windows/platform.c | 6 +++ + include/grub/util/install.h | 3 ++ + util/grub-install.c | 11 +++++ + 6 files changed, 119 insertions(+), 6 deletions(-) + +diff --git a/grub-core/osdep/basic/platform.c b/grub-core/osdep/basic/platform.c +index 4b5502aeb..2ab907976 100644 +--- a/grub-core/osdep/basic/platform.c ++++ b/grub-core/osdep/basic/platform.c +@@ -30,3 +30,8 @@ grub_install_get_default_x86_platform (void) + return "i386-pc"; + } + ++const char * ++grub_install_get_default_powerpc_machtype (void) ++{ ++ return "generic"; ++} +diff --git a/grub-core/osdep/linux/platform.c b/grub-core/osdep/linux/platform.c +index 35f1bcc0e..9805c36d4 100644 +--- a/grub-core/osdep/linux/platform.c ++++ b/grub-core/osdep/linux/platform.c +@@ -23,6 +23,7 @@ + #include + #include + #include ++#include + #include + + #include +@@ -154,3 +154,74 @@ grub_install_get_default_x86_platform (void) + grub_util_info ("... not found"); + return "i386-pc"; + } ++ ++const char * ++grub_install_get_default_powerpc_machtype (void) ++{ ++ FILE *fp; ++ char *buf = NULL; ++ size_t len = 0; ++ const char *machtype = "generic"; ++ ++ fp = grub_util_fopen ("/proc/cpuinfo", "r"); ++ if (! fp) ++ return machtype; ++ ++ while (getline (&buf, &len, fp) > 0) ++ { ++ if (strncmp (buf, "pmac-generation", ++ sizeof ("pmac-generation") - 1) == 0) ++ { ++ if (strstr (buf, "NewWorld")) ++ { ++ machtype = "pmac_newworld"; ++ break; ++ } ++ if (strstr (buf, "OldWorld")) ++ { ++ machtype = "pmac_oldworld"; ++ break; ++ } ++ } ++ ++ if (strncmp (buf, "motherboard", sizeof ("motherboard") - 1) == 0 && ++ strstr (buf, "AAPL")) ++ { ++ machtype = "pmac_oldworld"; ++ break; ++ } ++ ++ if (strncmp (buf, "machine", sizeof ("machine") - 1) == 0 && ++ strstr (buf, "CHRP IBM")) ++ { ++ if (strstr (buf, "qemu")) ++ { ++ machtype = "chrp_ibm_qemu"; ++ break; ++ } ++ else ++ { ++ machtype = "chrp_ibm"; ++ break; ++ } ++ } ++ ++ if (strncmp (buf, "platform", sizeof ("platform") - 1) == 0) ++ { ++ if (strstr (buf, "Maple")) ++ { ++ machtype = "maple"; ++ break; ++ } ++ if (strstr (buf, "Cell")) ++ { ++ machtype = "cell"; ++ break; ++ } ++ } ++ } ++ ++ free (buf); ++ fclose (fp); ++ return machtype; ++} +diff --git a/grub-core/osdep/unix/platform.c b/grub-core/osdep/unix/platform.c +index a3fcfcaca..28cb37e15 100644 +--- a/grub-core/osdep/unix/platform.c ++++ b/grub-core/osdep/unix/platform.c +@@ -218,13 +218,29 @@ grub_install_register_ieee1275 (int is_prep, const char *install_device, + else + boot_device = get_ofpathname (install_device); + +- if (grub_util_exec ((const char * []){ "nvsetenv", "boot-device", +- boot_device, NULL })) ++ if (strcmp (grub_install_get_default_powerpc_machtype (), "chrp_ibm") == 0) + { +- char *cmd = xasprintf ("setenv boot-device %s", boot_device); +- grub_util_error (_("`nvsetenv' failed. \nYou will have to set `boot-device' variable manually. At the IEEE1275 prompt, type:\n %s\n"), +- cmd); +- free (cmd); ++ char *arg = xasprintf ("boot-device=%s", boot_device); ++ if (grub_util_exec ((const char * []){ "nvram", ++ "--update-config", arg, NULL })) ++ { ++ char *cmd = xasprintf ("setenv boot-device %s", boot_device); ++ grub_util_error (_("`nvram' failed. \nYou will have to set `boot-device' variable manually. At the IEEE1275 prompt, type:\n %s\n"), ++ cmd); ++ free (cmd); ++ } ++ free (arg); ++ } ++ else ++ { ++ if (grub_util_exec ((const char * []){ "nvsetenv", "boot-device", ++ boot_device, NULL })) ++ { ++ char *cmd = xasprintf ("setenv boot-device %s", boot_device); ++ grub_util_error (_("`nvsetenv' failed. \nYou will have to set `boot-device' variable manually. At the IEEE1275 prompt, type:\n %s\n"), ++ cmd); ++ free (cmd); ++ } + } + + free (boot_device); +diff --git a/grub-core/osdep/windows/platform.c b/grub-core/osdep/windows/platform.c +index 912269191..c30025b13 100644 +--- a/grub-core/osdep/windows/platform.c ++++ b/grub-core/osdep/windows/platform.c +@@ -128,6 +128,12 @@ grub_install_get_default_x86_platform (void) + return "i386-efi"; + } + ++const char * ++grub_install_get_default_powerpc_machtype (void) ++{ ++ return "generic"; ++} ++ + static void * + get_efi_variable (const wchar_t *varname, ssize_t *len) + { +diff --git a/include/grub/util/install.h b/include/grub/util/install.h +index 5ca4811cd..9f517a1bb 100644 +--- a/include/grub/util/install.h ++++ b/include/grub/util/install.h +@@ -223,6 +223,9 @@ grub_install_get_default_arm_platform (void); + const char * + grub_install_get_default_x86_platform (void); + ++const char * ++grub_install_get_default_powerpc_machtype (void); ++ + int + grub_install_register_efi (grub_device_t efidir_grub_dev, + const char *efifile_path, +diff --git a/util/grub-install.c b/util/grub-install.c +index e1a0202da..70b22eec4 100644 +--- a/util/grub-install.c ++++ b/util/grub-install.c +@@ -1179,7 +1179,18 @@ main (int argc, char *argv[]) + + if (platform == GRUB_INSTALL_PLATFORM_POWERPC_IEEE1275) + { ++ const char *machtype = grub_install_get_default_powerpc_machtype (); + int is_guess = 0; ++ ++ if (strcmp (machtype, "pmac_oldworld") == 0) ++ update_nvram = 0; ++ else if (strcmp (machtype, "cell") == 0) ++ update_nvram = 0; ++ else if (strcmp (machtype, "generic") == 0) ++ update_nvram = 0; ++ else if (strcmp (machtype, "chrp_ibm_qemu") == 0) ++ update_nvram = 0; ++ + if (!macppcdir) + { + char *d; diff --git a/srcpkgs/grub/patches/os-prober-osx86.patch b/srcpkgs/grub/patches/os-prober-osx86.patch new file mode 100644 index 0000000..f0357c7 --- /dev/null +++ b/srcpkgs/grub/patches/os-prober-osx86.patch @@ -0,0 +1,16 @@ +Patches OS X detection out of os-prober hook on non-x86 architectures. The +menu entries generated for those are invalid for non-x86 Mac stuff. +--- a/util/grub.d/30_os-prober.in ++++ b/util/grub.d/30_os-prober.in +@@ -45,6 +45,11 @@ if [ -z "${OSPROBED}" ] ; then + fi + + osx_entry() { ++ # GRUB won't load OS X outside of x86, no entry ++ case "x`uname -m`" in ++ xi?86|xx86_64) ;; ++ *) return ;; ++ esac + if [ x$2 = x32 ]; then + # TRANSLATORS: it refers to kernel architecture (32-bit) + bitstr="$(gettext "(32-bit)")" diff --git a/srcpkgs/grub/patches/ppc64el-disable-vsx.patch b/srcpkgs/grub/patches/ppc64el-disable-vsx.patch new file mode 100644 index 0000000..67744dd --- /dev/null +++ b/srcpkgs/grub/patches/ppc64el-disable-vsx.patch @@ -0,0 +1,52 @@ +From efc381a55124b12fc74ed8117283f11367c9372a Mon Sep 17 00:00:00 2001 +From: Paulo Flabiano Smorigo +Date: Thu, 25 Sep 2014 19:33:39 -0300 +Subject: Disable VSX instruction + +VSX bit is enabled by default for Power7 and Power8 CPU models, +so we need to disable them in order to avoid instruction exceptions. +Kernel will activate it when necessary. + +* grub-core/kern/powerpc/ieee1275/startup.S: Disable VSX. + +Also-By: Adhemerval Zanella +Also-By: Colin Watson + +Origin: other, https://lists.gnu.org/archive/html/grub-devel/2014-09/msg00078.html +Last-Update: 2015-01-27 + +Patch-Name: ppc64el-disable-vsx.patch +--- + grub-core/kern/powerpc/ieee1275/startup.S | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +diff --git a/grub-core/kern/powerpc/ieee1275/startup.S b/grub-core/kern/powerpc/ieee1275/startup.S +index 21c884b43..de9a9601a 100644 +--- a/grub-core/kern/powerpc/ieee1275/startup.S ++++ b/grub-core/kern/powerpc/ieee1275/startup.S +@@ -20,6 +20,8 @@ + #include + #include + ++#define MSR_VSX 0x80 ++ + .extern __bss_start + .extern _end + +@@ -28,6 +30,16 @@ + .globl start, _start + start: + _start: ++ _start: ++ ++ /* Disable VSX instruction */ ++ mfmsr 0 ++ oris 0,0,MSR_VSX ++ /* The "VSX Available" bit is in the lower half of the MSR, so we ++ don't need mtmsrd, which in any case won't work in 32-bit mode. */ ++ mtmsr 0 ++ isync ++ + li 2, 0 + li 13, 0 + diff --git a/srcpkgs/grub/patches/xx-e2fsprogs-1.patch b/srcpkgs/grub/patches/xx-e2fsprogs-1.patch new file mode 100644 index 0000000..5cd8327 --- /dev/null +++ b/srcpkgs/grub/patches/xx-e2fsprogs-1.patch @@ -0,0 +1,62 @@ +Patch-Source: https://git.savannah.gnu.org/cgit/grub.git/commit/?id=7fd5feff97c4b1f446f8fcf6d37aca0c64e7c763 +useful because e2fsprogs 1.47 defaults to this enabled, and grub won't touch it +-- +From 7fd5feff97c4b1f446f8fcf6d37aca0c64e7c763 Mon Sep 17 00:00:00 2001 +From: Javier Martinez Canillas +Date: Fri, 11 Jun 2021 21:36:16 +0200 +Subject: fs/ext2: Ignore checksum seed incompat feature + +This incompat feature is used to denote that the filesystem stored its +metadata checksum seed in the superblock. This is used to allow tune2fs +changing the UUID on a mounted metdata_csum filesystem without having +to rewrite all the disk metadata. However, the GRUB doesn't use the +metadata checksum at all. So, it can just ignore this feature if it +is enabled. This is consistent with the GRUB filesystem code in general +which just does a best effort to access the filesystem's data. + +The checksum seed incompat feature has to be removed from the ignore +list if the support for metadata checksum verification is added to the +GRUB ext2 driver later. + +Suggested-by: Eric Sandeen +Suggested-by: Lukas Czerner +Signed-off-by: Javier Martinez Canillas +Reviewed-by: Lukas Czerner +Reviewed-by: Daniel Kiper +--- + grub-core/fs/ext2.c | 10 ++++++++-- + 1 file changed, 8 insertions(+), 2 deletions(-) + +diff --git a/grub-core/fs/ext2.c b/grub-core/fs/ext2.c +index e7dd78e..4953a15 100644 +--- a/grub-core/fs/ext2.c ++++ b/grub-core/fs/ext2.c +@@ -103,6 +103,7 @@ GRUB_MOD_LICENSE ("GPLv3+"); + #define EXT4_FEATURE_INCOMPAT_64BIT 0x0080 + #define EXT4_FEATURE_INCOMPAT_MMP 0x0100 + #define EXT4_FEATURE_INCOMPAT_FLEX_BG 0x0200 ++#define EXT4_FEATURE_INCOMPAT_CSUM_SEED 0x2000 + #define EXT4_FEATURE_INCOMPAT_ENCRYPT 0x10000 + + /* The set of back-incompatible features this driver DOES support. Add (OR) +@@ -123,10 +124,15 @@ GRUB_MOD_LICENSE ("GPLv3+"); + * mmp: Not really back-incompatible - was added as such to + * avoid multiple read-write mounts. Safe to ignore for this + * RO driver. ++ * checksum seed: Not really back-incompatible - was added to allow tools ++ * such as tune2fs to change the UUID on a mounted metadata ++ * checksummed filesystem. Safe to ignore for now since the ++ * driver doesn't support checksum verification. However, it ++ * has to be removed from this list if the support is added later. + */ + #define EXT2_DRIVER_IGNORED_INCOMPAT ( EXT3_FEATURE_INCOMPAT_RECOVER \ +- | EXT4_FEATURE_INCOMPAT_MMP) +- ++ | EXT4_FEATURE_INCOMPAT_MMP \ ++ | EXT4_FEATURE_INCOMPAT_CSUM_SEED) + + #define EXT3_JOURNAL_MAGIC_NUMBER 0xc03b3998U + +-- +cgit v1.1 + diff --git a/srcpkgs/grub/patches/xx-e2fsprogs-2.patch b/srcpkgs/grub/patches/xx-e2fsprogs-2.patch new file mode 100644 index 0000000..7e02e20 --- /dev/null +++ b/srcpkgs/grub/patches/xx-e2fsprogs-2.patch @@ -0,0 +1,60 @@ +Patch-Source: https://git.savannah.gnu.org/cgit/grub.git/patch/?id=2e9fa73a040462b81bfbfe56c0bc7ad2d30b446b +useful to support the large_dir ext4 feature +-- +From 2e9fa73a040462b81bfbfe56c0bc7ad2d30b446b Mon Sep 17 00:00:00 2001 +From: Theodore Ts'o +Date: Tue, 30 Aug 2022 22:41:59 -0400 +Subject: fs/ext2: Ignore the large_dir incompat feature + +Recently, ext4 added the large_dir feature, which adds support for +a 3 level htree directory support. + +The GRUB supports existing file systems with htree directories by +ignoring their existence, and since the index nodes for the hash tree +look like deleted directory entries (by design), the GRUB can simply do +a brute force O(n) linear search of directories. The same is true for +3 level deep htrees indicated by large_dir feature flag. + +Hence, it is safe for the GRUB to ignore the large_dir incompat feature. + +Fixes: https://savannah.gnu.org/bugs/?61606 + +Signed-off-by: Theodore Ts'o +Reviewed-by: Daniel Kiper +--- + grub-core/fs/ext2.c | 10 +++++++++- + 1 file changed, 9 insertions(+), 1 deletion(-) + +diff --git a/grub-core/fs/ext2.c b/grub-core/fs/ext2.c +index 0989e26..e1cc5e6 100644 +--- a/grub-core/fs/ext2.c ++++ b/grub-core/fs/ext2.c +@@ -104,6 +104,7 @@ GRUB_MOD_LICENSE ("GPLv3+"); + #define EXT4_FEATURE_INCOMPAT_MMP 0x0100 + #define EXT4_FEATURE_INCOMPAT_FLEX_BG 0x0200 + #define EXT4_FEATURE_INCOMPAT_CSUM_SEED 0x2000 ++#define EXT4_FEATURE_INCOMPAT_LARGEDIR 0x4000 /* >2GB or 3 level htree */ + #define EXT4_FEATURE_INCOMPAT_ENCRYPT 0x10000 + + /* The set of back-incompatible features this driver DOES support. Add (OR) +@@ -129,10 +130,17 @@ GRUB_MOD_LICENSE ("GPLv3+"); + * checksummed filesystem. Safe to ignore for now since the + * driver doesn't support checksum verification. However, it + * has to be removed from this list if the support is added later. ++ * large_dir: Not back-incompatible given that the GRUB ext2 driver does ++ * not implement EXT2_FEATURE_COMPAT_DIR_INDEX. If the GRUB ++ * eventually supports the htree feature (aka dir_index) ++ * it should support 3 level htrees and then move ++ * EXT4_FEATURE_INCOMPAT_LARGEDIR to ++ * EXT2_DRIVER_SUPPORTED_INCOMPAT. + */ + #define EXT2_DRIVER_IGNORED_INCOMPAT ( EXT3_FEATURE_INCOMPAT_RECOVER \ + | EXT4_FEATURE_INCOMPAT_MMP \ +- | EXT4_FEATURE_INCOMPAT_CSUM_SEED) ++ | EXT4_FEATURE_INCOMPAT_CSUM_SEED \ ++ | EXT4_FEATURE_INCOMPAT_LARGEDIR) + + #define EXT3_JOURNAL_MAGIC_NUMBER 0xc03b3998U + +-- +cgit v1.1 diff --git a/srcpkgs/grub/template b/srcpkgs/grub/template new file mode 100644 index 0000000..a8a5948 --- /dev/null +++ b/srcpkgs/grub/template @@ -0,0 +1,223 @@ +# Template file for 'grub' +pkgname=grub +version=2.06 +revision=4 +hostmakedepends="python3 pkg-config flex freetype-devel font-unifont-bdf help2man + automake gettext-devel-tools" +makedepends="libusb-compat-devel ncurses-devel freetype-devel + liblzma-devel device-mapper-devel fuse-devel" +depends="os-prober" +conf_files="/etc/default/grub /etc/grub.d/*" +short_desc="GRand Unified Bootloader 2" +maintainer="Tracker-Friendly " +license="GPL-3.0-or-later" +homepage="https://www.gnu.org/software/grub/" +distfiles="${GNU_SITE}/grub/grub-${version}.tar.xz" +checksum=b79ea44af91b93d17cd3fe80bdae6ed43770678a9a5ae192ccea803ebb657ee1 + +archs="i686 x86_64-musl" +nopie=yes + +subpackages="grub-utils" +# _SUPPLEMENTARY_BUILDS is a list of - version of grub to build +case "$XBPS_TARGET_MACHINE" in + x86_64*) + _NATIVE_PLATFORM=pc + _SUPPLEMENTARY_BUILDS="i386-efi x86_64-efi i386-coreboot x86_64-xen" + subpackages+=" grub-i386-efi grub-x86_64-efi grub-i386-coreboot grub-xen" + ;; + i686*) + CFLAGS="-D_FILE_OFFSET_BITS=64" + hostmakedepends+=" cross-x86_64-linux-musl" + configure_args+=" ac_cv_sizeof_off_t=8" + _NATIVE_PLATFORM=pc + _SUPPLEMENTARY_BUILDS="i386-efi x86_64-efi i386-coreboot i386-xen" + subpackages+=" grub-i386-efi grub-x86_64-efi grub-i386-coreboot grub-xen" + ;; + aarch64*) + _NATIVE_PLATFORM=efi + subpackages+=" grub-arm64-efi" + ;; + ppc*) + _NATIVE_PLATFORM=ieee1275 + subpackages+=" grub-powerpc-ieee1275" + ;; +esac + +pre_configure() { + autoreconf -fi +} + +do_configure() { + # workaround for https://savannah.gnu.org/bugs/?60458 + # some more info: https://www.linuxquestions.org/questions/showthread.php?p=6257712 + # grub 2.06 reboots immediately when compiled with -O2, + # only affects legacy BIOS + export CFLAGS="${CFLAGS/-O2/-Os}" + export CXXFLAGS="${CXXFLAGS/-O2/-Os}" + + unset CC AS LD RANLIB CPP + local freestanding_cflags="-fno-stack-protector" + + # building with altivec generates broken grub core + case "$XBPS_TARGET_MACHINE" in + ppc*) freestanding_cflags+=" -mno-altivec" ;; + esac + CFLAGS+=" $freestanding_cflags" + + configure_args+=" --enable-device-mapper --enable-cache-stats --enable-nls + --enable-grub-mkfont --enable-grub-mount --disable-werror + --sbindir=/usr/bin" + + # build tools + msg_normal "Configuring grub tools...\n" + mkdir $wrksrc/build + cd $wrksrc/build + ../configure --host=${XBPS_TARGET_MACHINE} ${configure_args} \ + ${_NATIVE_PLATFORM:+--with-platform=${_NATIVE_PLATFORM}} + + for _SUPP_BUILD in ${_SUPPLEMENTARY_BUILDS}; do + _TARGET=${_SUPP_BUILD%%-*} + _PLATFORM=${_SUPP_BUILD##*-} + msg_normal "Configuring ${_TARGET} ${_PLATFORM} grub...\n" + mkdir $wrksrc/${_PLATFORM}_${_TARGET}_build + cd $wrksrc/${_PLATFORM}_${_TARGET}_build + if [ "$_TARGET" = x86_64 ] && + [ "${XBPS_TARGET_MACHINE%-musl}" = i686 ]; then + _TARGET=x86_64-linux-musl + fi + CFLAGS="$freestanding_cflags" \ + ../configure --host=${XBPS_TARGET_MACHINE} \ + --target=${_TARGET} \ + --with-platform=${_PLATFORM} ${configure_args} \ + --disable-efiemu \ + --libdir=/usr/lib + done +} + +do_build() { + # XXX remove the strip wrapper + rm ${XBPS_WRAPPERDIR}/strip + + msg_normal "Building grub tools...\n" + cd $wrksrc/build + make ${makejobs} + + for _SUPP_BUILD in ${_SUPPLEMENTARY_BUILDS}; do + _TARGET=${_SUPP_BUILD%%-*} + _PLATFORM=${_SUPP_BUILD##*-} + msg_normal "Building ${_TARGET} ${_PLATFORM} grub...\n" + cd $wrksrc/${_PLATFORM}_${_TARGET}_build + make ${makejobs} + done +} + +do_install() { + # XXX remove the strip wrapper + rm ${XBPS_WRAPPERDIR}/strip + + for _SUPP_BUILD in ${_SUPPLEMENTARY_BUILDS}; do + _TARGET=${_SUPP_BUILD%%-*} + _GRUB_TARGET=${_TARGET} + case "${_GRUB_TARGET}" in + aarch64*) + _GRUB_TARGET=arm64 + ;; + esac + _PLATFORM=${_SUPP_BUILD##*-} + cd $wrksrc/${_PLATFORM}_${_TARGET}_build + make DESTDIR=$DESTDIR/${_PLATFORM}_${_TARGET} install + # Remove non-platform specific files + rm -rf ${DESTDIR}/${_PLATFORM}_${_TARGET}/{boot,etc,usr/{share,bin}} + rm -f ${DESTDIR}/${_PLATFORM}_${_TARGET}/usr/lib/grub/${_GRUB_TARGET}-${_PLATFORM}/${_GRUB_TARGET}-* + rm -f ${DESTDIR}/${_PLATFORM}_${_TARGET}/usr/lib/grub/${_GRUB_TARGET}-${_PLATFORM}/*.{module,image} + cp -r ${DESTDIR}/${_PLATFORM}_${_TARGET}/* ${DESTDIR} + rm -rf ${DESTDIR}/${_PLATFORM}_${_TARGET} + done + + cd $wrksrc/build + make DESTDIR=$DESTDIR install + + # Required to compress info files. + vmkdir usr/share/info + touch -f ${DESTDIR}/usr/share/info/dir + + vinstall ${FILESDIR}/grub.default 644 etc/default grub + # Kernel hooks. + vinstall ${FILESDIR}/kernel.d/grub.post 750 \ + etc/kernel.d/post-install 50-grub + vinstall ${FILESDIR}/kernel.d/grub.post 750 \ + etc/kernel.d/post-remove 50-grub + + # update-grub for noobs. + printf "#!/bin/sh\ngrub-mkconfig -o /boot/grub/grub.cfg\nexit \$?\n" >> \ + ${DESTDIR}/usr/bin/update-grub + chmod 755 ${DESTDIR}/usr/bin/update-grub + + vmkdir usr/share/bash-completion/completions + mv ${DESTDIR}/etc/bash_completion.d/grub \ + ${DESTDIR}/usr/share/bash-completion/completions + + # Remove useless tools + rm ${DESTDIR}/usr/bin/grub-ofpathname + rm ${DESTDIR}/usr/bin/grub-sparc64-setup +} + +grub-utils_package() { + short_desc+=" - additional utilities" + depends="grub>=${version}" + pkg_install() { + vmove usr/bin/grub-menulst2cfg + vmove usr/bin/grub-fstest + vmove usr/bin/grub-mkfont + } +} +grub-x86_64-efi_package() { + depends="grub>=$version dosfstools efibootmgr" + short_desc+=" - x86_64 EFI support" + pkg_install() { + vmove usr/lib/grub/x86_64-efi + } +} +grub-i386-efi_package() { + depends="grub>=$version dosfstools efibootmgr" + short_desc+=" - i386 EFI support" + pkg_install() { + vmove usr/lib/grub/i386-efi + } +} +grub-i386-coreboot_package() { + depends="grub>=$version" + short_desc+=" - i386 coreboot support" + pkg_install() { + vmove usr/lib/grub/i386-coreboot + } +} +grub-xen_package() { + depends="grub>=$version" + short_desc+=" - Xen PV support" + pkg_install() { + case "$XBPS_TARGET_MACHINE" in + x86_64*) + vmove usr/lib/grub/x86_64-xen + ;; + i686*) + vmove usr/lib/grub/i386-xen + ;; + esac + } +} +grub-arm64-efi_package() { + depends="grub>=$version dosfstools efibootmgr" + short_desc+=" - arm64 EFI support" + pkg_install() { + vmove usr/lib/grub/arm64-efi + } +} +grub-powerpc-ieee1275_package() { + depends="grub>=$version powerpc-utils" + short_desc+=" - powerpc Open Firmware support" + pkg_install() { + vmove usr/lib/grub/powerpc-ieee1275 + } +} diff --git a/srcpkgs/mdocml/template b/srcpkgs/mdocml/template index 57f8a57..d346c7a 100644 --- a/srcpkgs/mdocml/template +++ b/srcpkgs/mdocml/template @@ -1,13 +1,13 @@ # Template file for 'mdocml' pkgname=mdocml version=1.14.6 -revision=8 +revision=9 build_style=configure make_build_args="all man.cgi" make_check_target="regress" hostmakedepends="less" makedepends="zlib-devel" -depends="busybox-evolution" +depends="less" checkdepends="perl" conf_files="/etc/man.conf" short_desc="UNIX manpage compiler toolset (mandoc)" diff --git a/srcpkgs/neofetch/template b/srcpkgs/neofetch/template index 4120d83..2389e60 100644 --- a/srcpkgs/neofetch/template +++ b/srcpkgs/neofetch/template @@ -1,7 +1,7 @@ #!/bin/sh pkgname=neofetch version=7.1.0 -revision=5 +revision=6 short_desc="Simple system information script (not my software)" maintainer="Tracker-Friendly " homepage="https://codeberg.org/EvolutionOS/neofetch"