public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Marek Szuba" <marecki@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] repo/gentoo:master commit in: sys-apps/flashrom/, sys-apps/flashrom/files/
Date: Tue, 28 Jul 2020 22:14:42 +0000 (UTC)	[thread overview]
Message-ID: <1595974401.c6600e403c0fc58fc168d7f3b2d0b911ed836fca.marecki@gentoo> (raw)

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	other threads:[~2020-07-28 22:14 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-07-28 22:14 Marek Szuba [this message]
  -- strict thread matches above, loose matches on Subject: below --
2021-01-27 17:29 [gentoo-commits] repo/gentoo:master commit in: sys-apps/flashrom/, sys-apps/flashrom/files/ Marek Szuba
2024-03-13  4:46 Sam James
2024-07-02 14:03 Fabian Groffen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1595974401.c6600e403c0fc58fc168d7f3b2d0b911ed836fca.marecki@gentoo \
    --to=marecki@gentoo.org \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox