pkgsrc-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

pkg/50201: devel/libdevq port from FreeBSD / DragonFly



>Number:         50201
>Category:       pkg
>Synopsis:       devel/libdevq port from FreeBSD / DragonFly
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    pkg-manager
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Fri Sep 04 03:20:00 +0000 2015
>Originator:     David Shao
>Release:        pkgsrc current
>Organization:
>Environment:
DragonFly  4.3-DEVELOPMENT DragonFly v4.3.1.401.g3f4ec-DEVELOPMENT #2: Thu Sep  3 07:03:26 PDT 2015     xxxxxx@:/usr/obj/usr/src/sys/X86_64_GENERIC  x86_64

>Description:
devel/libdevq from FreeBSD ports / DragonFly dports could be the basis for some of the functionality of udev.  Right now it is used for one function in MesaLib.

The port for pkgsrc is complicated by my ignorance:  There is a pkg-config .pc file that unfortunately is not named directly after libdevq but has a version number, which isn't the real version number, in it.  I was having difficulty getting a piece of configure spliced into MesaLib's to find the .pc file, so finally I just patched libdevq to rename it to the standard name libdevq.pc.

Also libdevq's library is dlopened in MesaLib, so does that mean 
.include "../../mk/dlopen.buildlink3.mk"
should be in the buildlink3.mk?


>How-To-Repeat:

>Fix:
Makefile:

# $NetBSD$

DISTNAME=	libdevq-0.0.2
CATEGORIES=	devel
MASTER_SITES=	http://rainbow-runner.nl/freebsd/
EXTRACT_SUFX=	.tar.xz

MAINTAINER=	INSERT_YOUR_MAIL_ADDRESS_HERE
HOMEPAGE=	http://rainbow-runner.nl/freebsd/
COMMENT=	Generic Device Query and Monitor interface

LICENSE=	2-clause-bsd

GNU_CONFIGURE=	yes
USE_LIBTOOL=	yes
USE_TOOLS+=	gmake pkg-config

PKGCONFIG_OVERRIDE+=	src/libdevq.pc.in

PKG_OPTIONS_VAR=	PKG_OPTIONS.libdevq
PKG_SUPPORTED_OPTIONS=	diagnostic-bin	
PKG_SUGGESTED_OPTIONS+=	diagnostic-bin	

.include "../../mk/bsd.options.mk"

PLIST_VARS+=	diagnostic-bin

.if !empty(PKG_OPTIONS:Mdiagnostic-bin)
PLIST.libdevq=		yes
.endif

.include "../../mk/bsd.pkg.mk"

DESCR:

Generic Device Query and Monitor interface

WWW: https://github.com/freebsd/libdevq

PLIST:

@comment $NetBSD$
${PLIST.diagnostic-bin}bin/devq-evwatch
${PLIST.diagnostic-bin}bin/lsdri
include/libdevq.h
lib/libdevq.la
lib/pkgconfig/libdevq.pc

buildlink3.mk:

# $NetBSD: buildlink3.mk$

BUILDLINK_TREE+=	libdevq

.if !defined(LIBDEVQ_BUILDLINK3_MK)
LIBDEVQ_BUILDLINK3_MK:=

BUILDLINK_API_DEPENDS.libdevq+=	libdevq>=0.0.2
BUILDLINK_PKGSRCDIR.libdevq?=	../../devel/libdevq
.include "../../mk/dlopen.buildlink3.mk"
.endif # LIBDEVQ_BUILDLINK3_MK

BUILDLINK_TREE+=	-libdevq

distinfo:

$NetBSD$

SHA1 (libdevq-0.0.2.tar.xz) = a7a06d4cc3e8de2e8015fb3f78cd596ede6e87ca
RMD160 (libdevq-0.0.2.tar.xz) = df81ed6172c2f55035ff6804b67d9fea4ba5d5ee
Size (libdevq-0.0.2.tar.xz) = 210960 bytes
SHA1 (patch-Makefile.am) = 764e298d076d53290d30b80107e1a1625b7e6b18
SHA1 (patch-Makefile.in) = 049471b08f8df28faea7057c7408edbc01bf88f0
SHA1 (patch-configure) = b10969a381619e28b4a08fa5de5f60ac4411b048
SHA1 (patch-src_device.c) = cd545f3f1bdb5ab72a87c7d2defbb978b781082c
SHA1 (patch-src_libdevq.pc.in) = 9adb9aa98ec927a7a5728f6d8c2d3b394ab7f808

patches/patch-Makefile.am:

$NetBSD$

--- Makefile.am.orig	2015-08-12 04:46:06.219961000 +0000
+++ Makefile.am
@@ -22,4 +22,4 @@ devq_lsdri_CPPFLAGS = -I$(top_srcdir)/in
 devq_lsdri_LDADD = libdevq.la
 
 pkgconfigdir = $(libdir)/pkgconfig
-nodist_pkgconfig_DATA = src/libdevq-1.0.pc
+nodist_pkgconfig_DATA = src/libdevq.pc

patches/patch-Makefile.in

$NetBSD$

--- Makefile.in.orig	2015-08-12 04:46:58.299449000 +0000
+++ Makefile.in
@@ -87,7 +87,7 @@ target_triplet = @target@
 subdir = .
 DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
 	$(top_srcdir)/configure $(am__configure_deps) \
-	$(top_srcdir)/src/libdevq-1.0.pc.in \
+	$(top_srcdir)/src/libdevq.pc.in \
 	$(top_srcdir)/ac-aux/depcomp $(include_HEADERS) AUTHORS \
 	COPYING README ac-aux/compile ac-aux/config.guess \
 	ac-aux/config.sub ac-aux/depcomp ac-aux/install-sh \
@@ -106,7 +106,7 @@ am__configure_deps = $(am__aclocal_m4_de
 am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
  configure.lineno config.status.lineno
 mkinstalldirs = $(install_sh) -d
-CONFIG_CLEAN_FILES = src/libdevq-1.0.pc
+CONFIG_CLEAN_FILES = src/libdevq.pc
 CONFIG_CLEAN_VPATH_FILES =
 am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
 am__vpath_adj = case $$p in \
@@ -373,7 +373,7 @@ devq_lsdri_SOURCES = tools/lsdri/lsdri.c
 devq_lsdri_CPPFLAGS = -I$(top_srcdir)/include
 devq_lsdri_LDADD = libdevq.la
 pkgconfigdir = $(libdir)/pkgconfig
-nodist_pkgconfig_DATA = src/libdevq-1.0.pc
+nodist_pkgconfig_DATA = src/libdevq.pc
 all: all-am
 
 .SUFFIXES:
@@ -412,7 +412,7 @@ $(top_srcdir)/configure:  $(am__configur
 $(ACLOCAL_M4):  $(am__aclocal_m4_deps)
 	$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
 $(am__aclocal_m4_deps):
-src/libdevq-1.0.pc: $(top_builddir)/config.status $(top_srcdir)/src/libdevq-1.0.pc.in
+src/libdevq.pc: $(top_builddir)/config.status $(top_srcdir)/src/libdevq.pc.in
 	cd $(top_builddir) && $(SHELL) ./config.status $@
 
 install-libLTLIBRARIES: $(lib_LTLIBRARIES)

patches/patch-configure:

$NetBSD$

--- configure.orig	2014-05-09 09:39:39.000000000 +0000
+++ configure
@@ -11725,7 +11725,7 @@ esac
 
 
 case $target_os in
-freebsd*) opsys=freebsd ;;
+dragonfly*|freebsd*) opsys=freebsd ;;
 *) opsys=$target_os ;;
 esac
 
@@ -11836,7 +11836,7 @@ fi
 
 # ----------------------------------------------------------------------------
 
-ac_config_files="$ac_config_files Makefile src/libdevq-1.0.pc"
+ac_config_files="$ac_config_files Makefile src/libdevq.pc"
 
 
 cat >confcache <<\_ACEOF
@@ -12864,7 +12866,7 @@ do
     "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
     "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
     "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
-    "src/libdevq-1.0.pc") CONFIG_FILES="$CONFIG_FILES src/libdevq-1.0.pc" ;;
+    "src/libdevq.pc") CONFIG_FILES="$CONFIG_FILES src/libdevq.pc" ;;
 
   *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
   esac

patches/patch-src_device.c

$NetBSD$

--- src/device.c.orig	2014-05-08 14:38:51.000000000 +0000
+++ src/device.c
@@ -187,6 +187,58 @@ out:
 #endif /* defined(HAVE_LIBPROCSTAT_H) */
 }
 
+static int
+devq_compare_vgapci_busaddr(int i, int *domain, int *bus, int *slot,
+    int *function)
+{
+	int ret;
+	char sysctl_name[32], sysctl_value[128];
+	size_t sysctl_value_len;
+
+	sprintf(sysctl_name, "dev.vgapci.%d.%%location", i);
+
+	sysctl_value_len = sizeof(sysctl_value);
+	memset(sysctl_value, 0, sysctl_value_len);
+	ret = sysctlbyname(sysctl_name, sysctl_value,
+	    &sysctl_value_len, NULL, 0);
+	if (ret != 0)
+		return (-1);
+
+	/*
+	 * dev.vgapci.$m.%location can have two formats:
+	 *     o  "pci0:2:0:0 handle=\_SB_.PCI0.PEG3.MXM3" (FreeBSD 11+)
+	 *     o  "slot=1 function=0" (up-to FreeBSD 10)
+	 */
+
+	ret = sscanf(sysctl_value, "pci%d:%d:%d:%d %*s",
+	    domain, bus, slot, function);
+	if (ret == 4)
+		return (0);
+
+	ret = sscanf(sysctl_value, "slot=%d function=%d %*s",
+	    slot, function);
+	if (ret != 2)
+		return (-1);
+
+	sprintf(sysctl_name, "dev.vgapci.%d.%%parent", i);
+
+	sysctl_value_len = sizeof(sysctl_value);
+	memset(sysctl_value, 0, sysctl_value_len);
+	ret = sysctlbyname(sysctl_name, sysctl_value,
+	    &sysctl_value_len, NULL, 0);
+	if (ret != 0)
+		return (-1);
+
+	ret = sscanf(sysctl_value, "pci%d", bus);
+	if (ret != 1)
+		return (-1);
+
+	/* FIXME: What domain to assume? */
+	*domain = 0;
+
+	return (0);
+}
+
 int
 devq_device_get_pciid_from_fd(int fd,
     int *vendor_id, int *device_id)
@@ -252,38 +304,17 @@ devq_device_get_pciid_from_fd(int fd,
 	 *     o  dev.vgapci.$m.%parent
 	 */
 	for (i = 0; i < DEVQ_MAX_DEVS; ++i) {
-		sprintf(sysctl_name, "dev.vgapci.%d.%%location", i);
-
-		sysctl_value_len = sizeof(sysctl_value);
-		memset(sysctl_value, 0, sysctl_value_len);
-		ret = sysctlbyname(sysctl_name, sysctl_value,
-		    &sysctl_value_len, NULL, 0);
-		if (ret != 0)
-			continue;
+		int tmp_domain, tmp_bus, tmp_slot, tmp_function;
 
-		int tmp_slot, tmp_function;
-		ret = sscanf(sysctl_value, "slot=%d function=%d %*s",
+		ret = devq_compare_vgapci_busaddr(i, &tmp_domain, &tmp_bus,
 		    &tmp_slot, &tmp_function);
-		if (ret != 2 ||
-		    tmp_slot != slot || tmp_function != function)
-			continue;
-
-		sprintf(sysctl_name, "dev.vgapci.%d.%%parent", i);
-
-		sysctl_value_len = sizeof(sysctl_value);
-		memset(sysctl_value, 0, sysctl_value_len);
-		ret = sysctlbyname(sysctl_name, sysctl_value,
-		    &sysctl_value_len, NULL, 0);
-		if (ret != 0)
-			continue;
-
-		int tmp_bus;
-		ret = sscanf(sysctl_value, "pci%d",
-		    &tmp_bus);
-		if (ret != 1 || tmp_bus != bus)
-			continue;
 
-		break;
+		if (ret == 0 &&
+		    tmp_domain == domain &&
+		    tmp_bus == bus &&
+		    tmp_slot == slot &&
+		    tmp_function == function)
+			break;
 	}
 
 	if (i == DEVQ_MAX_DEVS) {

patches/patch-src_libdevq.pc.in

$NetBSD$

--- src/libdevq.pc.in.orig	2015-08-12 04:48:57.548278000 +0000
+++ src/libdevq.pc.in
@@ -0,0 +1,10 @@
+prefix=@prefix@
+exec_prefix=${prefix}
+includedir=${prefix}/include
+libdir=${exec_prefix}/lib
+
+Name: @PACKAGE_NAME@
+Description: Generic device query and monitor interface
+Version: @PACKAGE_VERSION@
+Cflags: -I${includedir}
+Libs: -Wl,-R${libdir} -L${libdir} -ldevq




Home | Main Index | Thread Index | Old Index