[PATCH] [RFC] um: define and use HAVE_LIBPCAP/HAVE_LIBVDEPLUG

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

 



If you don't have libpcap or libvdeplug installed, you will get build
failures when compiling certain files:

arch/um/drivers/vde_user.c:8:24: fatal error: libvdeplug.h: No such file or directory
 #include <libvdeplug.h>

arch/um/drivers/pcap_user.c:7:18: fatal error: pcap.h: No such file or directory
 #include <pcap.h>

This patch adds a basic pre-build check and defines the kconfig variables
HAVE_LIBPCAP and HAVE_LIBVDEPLUG depending on the result.

There is a basic disadvantage to this scheme, namely that the user may
never see the options that rely on these libraries if they are not
installed. As a trade-off, we add a brand new option, MISSING_LIBRARIES
(defaulting to 'y'), which allows those options to be visible (and
selectable) anyway.

[Note: I find this useful personally as I ran into the above build
 failures when playing around with UML -- so take this more as a
 suggestion on how things MAY be done better than a real patch.]

Signed-off-by: Vegard Nossum <vegard.nossum@xxxxxxxxxx>
---
 arch/um/Kconfig.common | 18 ++++++++++++++++++
 arch/um/Kconfig.net    |  2 ++
 arch/um/Kconfig.um     | 13 +++++++++++++
 arch/um/Makefile       |  5 +++++
 4 files changed, 38 insertions(+)

diff --git a/arch/um/Kconfig.common b/arch/um/Kconfig.common
index d195a87..35ce3a1 100644
--- a/arch/um/Kconfig.common
+++ b/arch/um/Kconfig.common
@@ -59,3 +59,21 @@ config HZ
 config SUBARCH
 	string
 	option env="SUBARCH"
+
+# Host libraries; these are defined by arch/um/Makefile
+
+config ENV_HAVE_LIBPCAP
+	string
+	option env="ENV_HAVE_LIBPCAP"
+
+config HAVE_LIBPCAP
+	bool
+	default y if ENV_HAVE_LIBPCAP="1"
+
+config ENV_HAVE_LIBVDEPLUG
+	string
+	option env="ENV_HAVE_LIBVDEPLUG"
+
+config HAVE_LIBVDEPLUG
+	bool
+	default y if ENV_HAVE_LIBVDEPLUG="1"
diff --git a/arch/um/Kconfig.net b/arch/um/Kconfig.net
index 820a56f..dfa7849 100644
--- a/arch/um/Kconfig.net
+++ b/arch/um/Kconfig.net
@@ -111,6 +111,7 @@ config UML_NET_DAEMON
 config UML_NET_VDE
 	bool "VDE transport"
 	depends on UML_NET
+	depends on HAVE_LIBVDEPLUG || MISSING_LIBRARIES
 	help
 	This User-Mode Linux network transport allows one or more running
 	UMLs on a single host to communicate with each other and also
@@ -158,6 +159,7 @@ config UML_NET_MCAST
 config UML_NET_PCAP
 	bool "pcap transport"
 	depends on UML_NET
+	depends on HAVE_LIBPCAP || MISSING_LIBRARIES
 	help
 	The pcap transport makes a pcap packet stream on the host look
 	like an ethernet device inside UML.  This is useful for making
diff --git a/arch/um/Kconfig.um b/arch/um/Kconfig.um
index 28a9885..15944d9 100644
--- a/arch/um/Kconfig.um
+++ b/arch/um/Kconfig.um
@@ -9,6 +9,19 @@ config STATIC_LINK
 	  Additionally, this option enables using higher memory spaces (up to
 	  2.75G) for UML.
 
+config MISSING_LIBRARIES
+	bool "Prompt for options which require missing host libraries"
+	default y
+	help
+	  Certain options rely on host libraries to compile.
+
+	  If you say N here, then these options will only be available if
+	  the libraries they require have been detected to be present.
+
+	  If you say Y, then the options will be available anyway, but
+	  beware that attempting to build the kernel will most likely
+	  result in an error.
+
 source "mm/Kconfig"
 
 config LD_SCRIPT_STATIC
diff --git a/arch/um/Makefile b/arch/um/Makefile
index e3abe6f..a8320e6 100644
--- a/arch/um/Makefile
+++ b/arch/um/Makefile
@@ -166,3 +166,8 @@ include/generated/user_constants.h: $(HOST_DIR)/um/user-offsets.s
 	$(call filechk,gen-asm-offsets)
 
 export SUBARCH USER_CFLAGS CFLAGS_NO_HARDENING OS DEV_NULL_PATH
+
+# Host libraries
+has_header = $(shell echo | $(CC) -include $(1) -xc -c - >/dev/null 2>&1 && echo 1)
+export ENV_HAVE_LIBPCAP := $(call has_header,pcap.h)
+export ENV_HAVE_LIBVDEPLUG := $(call has_header,libvdeplug.h)
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux&nblp;USB Development]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite Secrets]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux