From owner-freebsd-ports@freebsd.org Sun Apr 24 07:13:54 2016 Return-Path: Delivered-To: freebsd-ports@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 45E25B19786 for ; Sun, 24 Apr 2016 07:13:54 +0000 (UTC) (envelope-from fullermd@over-yonder.net) Received: from mail.infocus-llc.com (mail.infocus-llc.com [199.15.120.13]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 16EC71A55 for ; Sun, 24 Apr 2016 07:13:53 +0000 (UTC) (envelope-from fullermd@over-yonder.net) Received: from draco.over-yonder.net (c-75-65-60-66.hsd1.ms.comcast.net [75.65.60.66]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.tarragon.infocus-llc.com (Postfix) with ESMTPSA id 3qt0vh17s2zmH; Sun, 24 Apr 2016 02:13:52 -0500 (CDT) Received: by draco.over-yonder.net (Postfix, from userid 100) id 3qt0vg1d3Qz31q; Sun, 24 Apr 2016 02:13:51 -0500 (CDT) Date: Sun, 24 Apr 2016 02:13:51 -0500 From: "Matthew D. Fuller" To: abi Cc: freebsd-ports@freebsd.org Subject: Re: Making a port - debugging cmake check_include_file Message-ID: <20160424071351.GQ83618@over-yonder.net> References: <571BE034.9070200@abinet.ru> <20160423215530.GP83618@over-yonder.net> <571BF713.4040607@abinet.ru> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <571BF713.4040607@abinet.ru> X-Editor: vi X-OS: FreeBSD X-Virus-Scanned: clamav-milter 0.99 at mail.tarragon.infocus-llc.com X-Virus-Status: Clean User-Agent: Mutt/1.6.0-fullermd.4 (2016-04-01) X-BeenThere: freebsd-ports@freebsd.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: Porting software to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 24 Apr 2016 07:13:54 -0000 On Sun, Apr 24, 2016 at 01:28:35AM +0300 I heard the voice of abi, and lo! it spake thus: > Thanks! > If speak about general purpose solution, acceptable by upstream, I should > 1. make cmake variable like INCLUDE_DIR_EXTRA > 2. if set, include it contents. > 3. add default value if platform is FreeBSD > Am I right? I'd say it depends on how much work you wanna put in, and how interested upstream is. The pkgconfig path is fairly simple. In a quick test: include(FindPkgConfig) pkg_check_modules(LIBV4L1 libv4l1) if(LIBV4L1_FOUND) include_directories(${LIBV4L1_INCLUDE_DIRS}) endif() seems to set things right here (I assume from the libv4l1-videodev.h that it wants v4l_1_ rather than v4l_2_). That may be trivially upstreamable, since it should just quietly have no effect in the cases where v4l isn't in pkgconf, and DTRT when it is. Of course, it won't work if a system doesn't have pkg-config installed, so unless you wanted to add that as a build dep (it _is_ pretty tiny, but it's an extra dep), you couldn't assume it was there on the system. A somewhat more verbose solution that passes more control to the port level would be to patch in a block like if(EXTRA_INCDIRS) foreach(dir ${EXTRA_INCDIRS}) include_directories(${dir}) endforeach() endif() relatively early into the CMakeLists.txt and then add $LOCALBASE into the cmake command with something like CMAKE_ARGS+=-DEXTRA_INCDIRS="${LOCALBASE}" in the port Makefile (untested). Aside from potential need to redo the patch if the CMakeLists.txt changes between releases, that doesn't really need any upstream involvement at all, it can just be carried in the port. OTOH, it's probably not too objectionable (possibly with tweaks to variable naming) to upstream either. -- Matthew Fuller (MF4839) | fullermd@over-yonder.net Systems/Network Administrator | http://www.over-yonder.net/~fullermd/ On the Internet, nobody can hear you scream.