commit:     c3759ec007c6cda0a7c1100247d455f33a2a1314
Author:     Sergei Trofimovich <slyfox <AT> gentoo <DOT> org>
AuthorDate: Sat Jul 29 17:34:08 2017 +0000
Commit:     Sergei Trofimovich <slyfox <AT> gentoo <DOT> org>
CommitDate: Sat Jul 29 17:34:41 2017 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=c3759ec0

dev-util/include-what-you-use: worjaround <stddef.h> lookup failure, bug #625972

libclangDriver treats path to include files as stable relative
to clang binary: when we run /usr/lib64/llvm/4/bin/clang it resolves
<stddef.h> the following way:
    "/usr/lib64/llvm/4/bin/" + "../../../../lib/clang/4.0.1/include/stddef.h"

Unfortunately when someone reuses clang driver to build a new tool
heared lookup breaks if final tool resides in "/usr/bin":
    "/usr/bin/" + "../../../../lib/clang/4.0.1/include/stddef.h"
causing file open failures in case of include-what-you-use:
    /usr/include/wchar.h:39:11: fatal error: 'stdarg.h' file not found
    # include <stdarg.h>
              ^~~~~~~~~~

The workaround is to install executable to the same directory as clang itself.

Reported-by: MichaƂ Bartoszkiewicz
Bug: https://bugs.gentoo.org/625972
Package-Manager: Portage-2.3.6, Repoman-2.3.3

 .../include-what-you-use-4.0-r1.ebuild             | 56 ++++++++++++++++++++++
 1 file changed, 56 insertions(+)

diff --git a/dev-util/include-what-you-use/include-what-you-use-4.0-r1.ebuild 
b/dev-util/include-what-you-use/include-what-you-use-4.0-r1.ebuild
new file mode 100644
index 00000000000..4876be74098
--- /dev/null
+++ b/dev-util/include-what-you-use/include-what-you-use-4.0-r1.ebuild
@@ -0,0 +1,56 @@
+# Copyright 1999-2017 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=6
+
+PYTHON_COMPAT=( python2_7 python3_{4,5,6} )
+
+inherit cmake-utils flag-o-matic llvm python-single-r1
+
+DESCRIPTION="Find unused include directives in C/C++ programs"
+HOMEPAGE="https://include-what-you-use.org/";
+SRC_URI="https://github.com/${PN}/${PN}/archive/clang_${PV}.tar.gz -> 
${P}.src.tar.gz"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+
+RDEPEND="sys-devel/llvm:4
+       sys-devel/clang:4
+       ${PYTHON_DEPS}
+"
+DEPEND="${RDEPEND}"
+
+REQUIRED_USE=${PYTHON_REQUIRED_USE}
+
+S=${WORKDIR}/${PN}-clang_${PV}
+
+pkg_setup() {
+       llvm_pkg_setup
+       python-single-r1_pkg_setup
+}
+
+src_prepare() {
+       python_fix_shebang .
+       default
+}
+
+src_configure() {
+       local mycmakeargs=(
+               -DIWYU_LLVM_INCLUDE_PATH=$(llvm-config --includedir)
+               -DIWYU_LLVM_LIB_PATH=$(llvm-config --libdir)
+
+               # Note [llvm install path]
+               # Unfortunately all binaries using clang driver
+               # have to reside at the same path depth as
+               # 'clang' binary itself. See bug #625972
+               # Thus as a hack we install it to the same directory
+               # as llvm/clang itself.
+               -DCMAKE_INSTALL_PREFIX="$(get_llvm_prefix)"
+       )
+       cmake-utils_src_configure
+}
+
+src_test() {
+       "${EPYTHON}" run_iwyu_tests.py
+}

Reply via email to