commit:     e8e25b692b8ae413127a7766ae5c66461b33a864
Author:     Sergei Trofimovich <slyfox <AT> gentoo <DOT> org>
AuthorDate: Mon Oct  1 22:34:49 2018 +0000
Commit:     Sergei Trofimovich <slyfox <AT> gentoo <DOT> org>
CommitDate: Mon Oct  1 22:35:31 2018 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=e8e25b69

sys-boot/elilo: fix build failure against gnu-efi-3.0.8

Build failed as:
> ./../fs/../strops.h:30:16: error: conflicting types for 'StrnCpy'
> extern CHAR16 *StrnCpy(OUT CHAR16 *dst, IN const CHAR16 *src, UINTN count);
>                 ^~~~~~~

Work it around by renaming local 'StrnCpy' definition to 'elilo_StrnCpy'.

Reported-by: Bill Glessner
Signed-off-by: Sergei Trofimovich <slyfox <AT> gentoo.org>
Package-Manager: Portage-2.3.50, Repoman-2.3.11

 sys-boot/elilo/elilo-3.16-r3.ebuild                | 89 ++++++++++++++++++++++
 .../elilo/files/elilo-3.16-strncpy-clash.patch     | 23 ++++++
 2 files changed, 112 insertions(+)

diff --git a/sys-boot/elilo/elilo-3.16-r3.ebuild 
b/sys-boot/elilo/elilo-3.16-r3.ebuild
new file mode 100644
index 00000000000..de13af20f9a
--- /dev/null
+++ b/sys-boot/elilo/elilo-3.16-r3.ebuild
@@ -0,0 +1,89 @@
+# Copyright 1999-2018 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=6
+
+inherit toolchain-funcs eutils multilib
+
+DESCRIPTION="Linux boot loader for EFI-based systems such as IA-64"
+HOMEPAGE="https://sourceforge.net/projects/elilo/";
+SRC_URI="mirror://sourceforge/elilo/${P}-all.tar.gz
+       mirror://debian/pool/main/e/elilo/elilo_3.14-3.debian.tar.gz"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~ia64 ~x86"
+IUSE=""
+
+# gnu-efi contains only static libs, so there's no run-time dep on it
+DEPEND=">=sys-boot/gnu-efi-3.0g
+       dev-util/patchutils"
+# dosfstools[compat] to enable 'dosfsck' symlink
+RDEPEND="sys-boot/efibootmgr
+       sys-fs/dosfstools[compat]"
+
+S="${WORKDIR}/${P}-source"
+
+PATCHES=(
+       "${FILESDIR}"/${PN}-3.16-elilo-loop.patch #299665
+       "${FILESDIR}"/${PN}-3.16-gnu-efi-3.0.6-ia64.patch
+       "${FILESDIR}"/${PN}-3.16-strncpy-clash.patch
+)
+
+src_unpack() {
+       unpack ${A} ./${P}-source.tar.gz
+       mv debian "${S}"/ || die
+}
+
+src_prepare() {
+       default
+
+       case $(tc-arch) in
+       ia64)  iarch=ia64 ;;
+       x86)   iarch=ia32 ;;
+       amd64) iarch=x86_64 ;;
+       *)     die "unknown architecture: $(tc-arch)" ;;
+       esac
+
+       # Now Gentooize it.
+       sed -i \
+               -e '1s:/bin/sh:/bin/bash:' \
+               -e "s:##VERSION##:${PV}:" \
+               -e 's:Debian GNU/:Gentoo :g' \
+               -e 's:Debian:Gentoo:g' \
+               -e 's:debian:gentoo:g' \
+               -e "s:dpkg --print-architecture:echo ${iarch}:" \
+               debian/elilo.sh || die
+}
+
+src_compile() {
+       # "prefix" on the next line specifies where to find gcc, as, ld,
+       # etc.  It's not the usual meaning of "prefix".  By blanking it we
+       # allow PATH to be searched.
+       local libdir="${SYSROOT}${EPREFIX}/usr/$(get_libdir)"
+       emake -j1 \
+               prefix= \
+               AS="$(tc-getAS)" \
+               CC="$(tc-getCC)" \
+               LD="$(tc-getLD)" \
+               HOSTARCH=${iarch} \
+               ARCH=${iarch} \
+               EFIINC="${SYSROOT}${EPREFIX}/usr/include/efi" \
+               GNUEFILIB="${libdir}" \
+               EFILIB="${libdir}" \
+               EFICRT0="${libdir}"
+}
+
+src_install() {
+       exeinto /usr/lib/elilo
+       doexe elilo.efi
+
+       newsbin debian/elilo.sh elilo
+       dosbin tools/eliloalt
+
+       insinto /etc
+       newins "${FILESDIR}"/elilo.conf.sample elilo.conf
+
+       dodoc docs/* "${FILESDIR}"/elilo.conf.sample
+       doman debian/*.[0-9]
+}

diff --git a/sys-boot/elilo/files/elilo-3.16-strncpy-clash.patch 
b/sys-boot/elilo/files/elilo-3.16-strncpy-clash.patch
new file mode 100644
index 00000000000..fb2f6878be0
--- /dev/null
+++ b/sys-boot/elilo/files/elilo-3.16-strncpy-clash.patch
@@ -0,0 +1,23 @@
+gnu-efi-3.0.8 added StrnCpy. This caused conflict with elilo's definition:
+  ./../fs/../strops.h:30:16: error: conflicting types for 'StrnCpy'
+  extern CHAR16 *StrnCpy(OUT CHAR16 *dst, IN const CHAR16 *src, UINTN count);
+                  ^~~~~~~
+
+Work it around by always using private copy.
+
+Reported-by: Bill Glessner
+--- a/strops.h
++++ b/strops.h
+@@ -29,3 +29,4 @@
+ extern CHAR16 *StrChr(IN const CHAR16 *s, const CHAR16 c);
++#define StrnCpy elilo_StrnCpy
+ extern CHAR16 *StrnCpy(OUT CHAR16 *dst, IN const CHAR16 *src, UINTN count);
+ extern CHAR8 *StrnXCpy(OUT CHAR8 *dst, IN const CHAR16 *src, UINTN count);
+--- a/strops.c
++++ b/strops.c
+@@ -27,4 +27,6 @@
+ #include <efilib.h>
+ 
++#include "strops.h"
++
+ //#define CHAR_NULL    (CHAR16)'\0'

Reply via email to