commit:     c6600e403c0fc58fc168d7f3b2d0b911ed836fca
Author:     Marek Szuba <marecki <AT> gentoo <DOT> org>
AuthorDate: Tue Jul 28 22:09:18 2020 +0000
Commit:     Marek Szuba <marecki <AT> gentoo <DOT> org>
CommitDate: Tue Jul 28 22:13:21 2020 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=c6600e40

sys-apps/flashrom: try making libflashrom usable for sys-apps/fwupd

Create a pkgconfig file so that fwupd can actually find this library,
and fix a makefile bug which left the symbol 'boards_known' undefined
in the library.

Signed-off-by: Marek Szuba <marecki <AT> gentoo.org>

 .../flashrom-1.2_make-libflashrom-usable.patch     |  70 ++++++++
 sys-apps/flashrom/flashrom-1.2-r2.ebuild           | 180 +++++++++++++++++++++
 2 files changed, 250 insertions(+)

diff --git a/sys-apps/flashrom/files/flashrom-1.2_make-libflashrom-usable.patch 
b/sys-apps/flashrom/files/flashrom-1.2_make-libflashrom-usable.patch
new file mode 100644
index 00000000000..ea15a423059
--- /dev/null
+++ b/sys-apps/flashrom/files/flashrom-1.2_make-libflashrom-usable.patch
@@ -0,0 +1,70 @@
+1. Add an (extremely primitive) rule for generating a pkgconfig file
+   for libflashrom, as fwupd cannot find it without one. Note that this
+   rule depends on several variables to be passed to make, see ebuilds
+   using this patch for details;
+2. Tweak the way library dependencies are passed around a bit to make it
+   easier to inject them into said pkgconfig file;
+3. Move print.o from CLI_OBJS to LIB_OBJS - it contains the array
+   'boards_known' which is used in library code. Upstream have already
+   fixed this in Meson files but not in the Makefile.
+
+diff -urN a/flashrom.pc.in b/flashrom.pc.in
+--- a/flashrom.pc.in   1970-01-01 01:00:00.000000000 +0100
++++ b/flashrom.pc.in   2020-07-28 22:47:01.928679346 +0200
+@@ -0,0 +1,9 @@
++prefix=@PREFIX@
++libdir=${prefix}/@LIBDIR@
++includedir=${prefix}/@INCLUDEDIR@
++
++Name: libflashrom
++Description: library to interact with flashrom
++Version: @VERSION@
++Libs: -L${libdir} -lflashrom @LIBS@
++Cflags: -I${includedir}
+diff -urN a/Makefile b/Makefile
+--- a/Makefile 2019-12-31 18:25:41.000000000 +0100
++++ b/Makefile 2020-07-28 23:18:41.019492448 +0200
+@@ -570,12 +570,12 @@
+ 
###############################################################################
+ # Library code.
+ 
+-LIB_OBJS = libflashrom.o layout.o flashrom.o udelay.o programmer.o helpers.o 
ich_descriptors.o fmap.o
++LIB_OBJS = libflashrom.o layout.o flashrom.o udelay.o programmer.o helpers.o 
ich_descriptors.o fmap.o print.o
+ 
+ 
###############################################################################
+ # Frontend related stuff.
+ 
+-CLI_OBJS = cli_classic.o cli_output.o cli_common.o print.o
++CLI_OBJS = cli_classic.o cli_output.o cli_common.o
+ 
+ # versioninfo.inc stores metadata required to build a packaged flashrom. It 
is generated by the export rule and
+ # imported below. If versioninfo.inc is not found and the variables are not 
defined by the user, the info will
+@@ -1130,11 +1130,16 @@
+       @+$(MAKE) -C util/ich_descriptors_tool/ TARGET_OS=$(TARGET_OS) 
EXEC_SUFFIX=$(EXEC_SUFFIX)
+ endif
+ 
++ALL_LIBS = $(LIBS) $(PCILIBS) $(FEATURE_LIBS) $(USBLIBS) $(USB1LIBS) 
$(JAYLINKLIBS) $(NI845X_LIBS)
++
++flashrom.pc:
++      sed -e "s#@PREFIX@#$(PREFIX)#" -e "s#@LIBDIR@#$(LIBDIR)#" -e 
"s#@INCLUDEDIR@#$(INCLUDEDIR)#" -e "s#@VERSION@#$(VERSION)#" -e 
"s#@LIBS@#$(ALL_LIBS)#" < $@.in > $@.tmp && mv $@.tmp $@
++
+ $(PROGRAM)$(EXEC_SUFFIX): $(OBJS)
+-      $(CC) $(LDFLAGS) -o $(PROGRAM)$(EXEC_SUFFIX) $(OBJS) $(LIBS) $(PCILIBS) 
$(FEATURE_LIBS) $(USBLIBS) $(USB1LIBS) $(JAYLINKLIBS) $(NI845X_LIBS)
++      $(CC) $(LDFLAGS) -o $(PROGRAM)$(EXEC_SUFFIX) $(OBJS) $(ALL_LIBS)
+ 
+-libflashrom.a: $(LIBFLASHROM_OBJS)
+-      $(AR) rcs $@ $^
++libflashrom.a: $(LIBFLASHROM_OBJS) flashrom.pc
++      $(AR) rcs $@ $(LIBFLASHROM_OBJS)
+       $(RANLIB) $@
+ 
+ # TAROPTIONS reduces information leakage from the packager's system.
+@@ -1149,7 +1154,7 @@
+ # This includes all frontends and libflashrom.
+ # We don't use EXEC_SUFFIX here because we want to clean everything.
+ clean:
+-      rm -f $(PROGRAM) $(PROGRAM).exe libflashrom.a *.o *.d $(PROGRAM).8 
$(PROGRAM).8.html $(BUILD_DETAILS_FILE)
++      rm -f $(PROGRAM) $(PROGRAM).exe libflashrom.a flashrom.pc *.o *.d 
$(PROGRAM).8 $(PROGRAM).8.html $(BUILD_DETAILS_FILE)
+       @+$(MAKE) -C util/ich_descriptors_tool/ clean
+ 
+ distclean: clean

diff --git a/sys-apps/flashrom/flashrom-1.2-r2.ebuild 
b/sys-apps/flashrom/flashrom-1.2-r2.ebuild
new file mode 100644
index 00000000000..ae710e47031
--- /dev/null
+++ b/sys-apps/flashrom/flashrom-1.2-r2.ebuild
@@ -0,0 +1,180 @@
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+inherit flag-o-matic toolchain-funcs
+
+if [[ ${PV} == "9999" ]] ; then
+       EGIT_REPO_URI="https://review.coreboot.org/flashrom.git";
+       inherit git-r3
+else
+       MY_P="${PN}-v${PV}"
+       SRC_URI="https://download.flashrom.org/releases/${MY_P}.tar.bz2";
+       KEYWORDS="~amd64 ~arm ~arm64 ~ppc ~ppc64 ~sparc ~x86"
+       S="${WORKDIR}/${MY_P}"
+fi
+
+DESCRIPTION="Utility for reading, writing, erasing and verifying flash ROM 
chips"
+HOMEPAGE="https://flashrom.org/";
+
+LICENSE="GPL-2"
+SLOT="0"
+# The defaults match the upstream Makefile.
+# Note: Do not list bitbang_spi as it is not a programmer; it's a backend used
+# by some other spi programmers.
+IUSE_PROGRAMMERS="
+       atahpt
+       +atapromise
+       +atavia
+       +buspirate-spi
+       +ch341a-spi
+       +dediprog
+       +developerbox-spi
+       +digilent-spi
+       +drkaiser
+       +dummy
+       +ft2232-spi
+       +gfxnvidia
+       +internal
+       +it8212
+       jlink-spi
+       +linux-mtd
+       +linux-spi
+       mstarddc-spi
+       +nic3com
+       +nicintel
+       +nicintel-eeprom
+       +nicintel-spi
+       nicnatsemi
+       +nicrealtek
+       +ogp-spi
+       +pickit2-spi
+       +pony-spi
+       +rayer-spi
+       +satamv
+       +satasii
+       +serprog
+       stlinkv3-spi
+       +usbblaster-spi
+"
+
+IUSE="${IUSE_PROGRAMMERS} +internal-dmi static tools +wiki"
+
+LIB_DEPEND="
+       atahpt? ( sys-apps/pciutils[static-libs(+)] )
+       atapromise? ( sys-apps/pciutils[static-libs(+)] )
+       atavia? ( sys-apps/pciutils[static-libs(+)] )
+       ch341a-spi? ( virtual/libusb:1[static-libs(+)] )
+       dediprog? ( virtual/libusb:1[static-libs(+)] )
+       developerbox-spi? ( virtual/libusb:1[static-libs(+)] )
+       digilent-spi? ( virtual/libusb:1[static-libs(+)] )
+       drkaiser? ( sys-apps/pciutils[static-libs(+)] )
+       ft2232-spi? ( dev-embedded/libftdi:=[static-libs(+)] )
+       gfxnvidia? ( sys-apps/pciutils[static-libs(+)] )
+       internal? ( sys-apps/pciutils[static-libs(+)] )
+       it8212? ( sys-apps/pciutils[static-libs(+)] )
+       jlink-spi? ( dev-embedded/libjaylink[static-libs(+)] )
+       nic3com? ( sys-apps/pciutils[static-libs(+)] )
+       nicintel-eeprom? ( sys-apps/pciutils[static-libs(+)] )
+       nicintel-spi? ( sys-apps/pciutils[static-libs(+)] )
+       nicintel? ( sys-apps/pciutils[static-libs(+)] )
+       nicnatsemi? ( sys-apps/pciutils[static-libs(+)] )
+       nicrealtek? ( sys-apps/pciutils[static-libs(+)] )
+       ogp-spi? ( sys-apps/pciutils[static-libs(+)] )
+       pickit2-spi? ( virtual/libusb:0[static-libs(+)] )
+       rayer-spi? ( sys-apps/pciutils[static-libs(+)] )
+       satamv? ( sys-apps/pciutils[static-libs(+)] )
+       satasii? ( sys-apps/pciutils[static-libs(+)] )
+       stlinkv3-spi? ( virtual/libusb:1[static-libs(+)] )
+       usbblaster-spi? ( dev-embedded/libftdi:=[static-libs(+)] )
+"
+RDEPEND="!static? ( ${LIB_DEPEND//\[static-libs(+)]} )"
+DEPEND="${RDEPEND}
+       static? ( ${LIB_DEPEND} )
+       sys-apps/diffutils"
+RDEPEND+=" !internal-dmi? ( sys-apps/dmidecode )"
+
+PATCHES=(
+       "${FILESDIR}"/${PN}-1.2_make-libflashrom-usable.patch
+)
+
+_flashrom_enable() {
+       local c="CONFIG_${2:-$(echo "$1" | tr '[:lower:]-' '[:upper:]_')}"
+       args+=( "${c}=$(usex $1 yes no)" )
+}
+flashrom_enable() {
+       local u
+       for u ; do _flashrom_enable "${u}" ; done
+}
+
+src_prepare() {
+       # To make libflashrom.a actually useful
+       append-flags -fPIC
+
+       default
+}
+
+src_compile() {
+       # Help keep things in sync.
+       local sprogs=$(echo $(
+               grep -o 'CONFIG_[A-Z0-9_]*' flashrom.c | \
+                       LC_ALL=C sort -u | \
+                       sed 's:^CONFIG_::' | \
+                       tr '[:upper:]_' '[:lower:]-' | \
+                       grep -v ni845x-spi))
+       local eprogs=$(echo ${IUSE_PROGRAMMERS} | sed -E 's/\B[-+]\b//g')
+       if [[ ${sprogs} != "${eprogs}" ]] ; then
+               eerror "The ebuild needs to be kept in sync."
+               eerror "IUSE set to: ${eprogs}"
+               eerror "flashrom.c : ${sprogs}"
+               die "sync IUSE to the list of source programmers"
+       fi
+
+       # Turn USE flags into CONFIG_xxx settings.
+       local args=()
+       flashrom_enable ${eprogs}
+       _flashrom_enable wiki PRINT_WIKI
+       _flashrom_enable static STATIC
+
+       # You have to specify at least one programmer, and if you specify more 
than
+       # one programmer you have to include either dummy or internal in the 
list.
+       # We pick dummy as the default because internal requires libpci.
+       if ! use internal && ! use dummy ; then
+               if [[ ${#args[@]} -ne 1 ]] ; then
+                       ewarn "You have to specify at least one programmer, and 
if you specify"
+                       ewarn "more than one programmer, you have to enable 
either dummy or"
+                       ewarn "internal as well.  'dummy' will be the default 
now."
+                       args+=( CONFIG_DUMMY=yes )
+               fi
+       fi
+
+       tc-export AR CC PKG_CONFIG RANLIB
+       # PREFIX, INCLUDEDIR and LIBDIR are injected into the libflashrom 
pkgconfig
+       # file, which is why we pass them here even though src_install() puts 
all
+       # files in correct locations without employing make.
+       # VERSION too goes into the pkgconfig file, and we override the upstream
+       # value to get rid of the prefix 'v'.
+       emake \
+               INCLUDEDIR="include" \
+               LIBDIR="$(get_libdir)" \
+               PREFIX="${EPREFIX}/usr" \
+               VERSION="${PV}" \
+               WARNERROR=no "${args[@]}" \
+               all libflashrom.a
+}
+
+src_install() {
+       dosbin flashrom
+       doman flashrom.8
+       dodoc README Documentation/*.txt
+       dolib.a libflashrom.a
+       doheader libflashrom.h
+
+       insinto /usr/$(get_libdir)/pkgconfig
+       doins ${PN}.pc
+
+       if use tools; then
+               dosbin util/ich_descriptors_tool/ich_descriptors_tool
+       fi
+}

Reply via email to