sci-libs/flann: fix build with >cmake-3.10
authorMaxim Koltsov <maksbotan@gentoo.org>
Sun, 1 Jul 2018 10:10:55 +0000 (13:10 +0300)
committerMaxim Koltsov <maksbotan@gentoo.org>
Sun, 1 Jul 2018 10:10:55 +0000 (13:10 +0300)
Took patch from Buildroot project, see
https://github.com/buildroot/buildroot/commit/0c469478f64d0ddaf72c0622a1830d855306d51c

Closes: https://bugs.gentoo.org/652594
Closes: https://bugs.gentoo.org/657470
Package-Manager: Portage-2.3.41, Repoman-2.3.9

sci-libs/flann/files/flann-1.9.1-cmake-3.11.patch [new file with mode: 0644]
sci-libs/flann/flann-1.9.1-r1.ebuild [new file with mode: 0644]
sci-libs/flann/flann-9999.ebuild

diff --git a/sci-libs/flann/files/flann-1.9.1-cmake-3.11.patch b/sci-libs/flann/files/flann-1.9.1-cmake-3.11.patch
new file mode 100644 (file)
index 0000000..b37bedc
--- /dev/null
@@ -0,0 +1,80 @@
+From fa5ec96a94646492a3f908e12905b3e48a8e800b Mon Sep 17 00:00:00 2001
+From: Romain Naour <romain.naour@gmail.com>
+Date: Wed, 18 Apr 2018 20:24:13 +0200
+Subject: [PATCH] src/cpp: fix cmake >= 3.11 build
+
+CMake < 3.11 doesn't support add_library() without any source file
+(i.e add_library(foo SHARED)). But flann CMake use a trick that use
+an empty string "" as source list (i.e add_library(foo SHARED "")).
+This look like a bug in CMake < 3.11.
+
+With CMake >= 3.11, the new behaviour of add_library() break the
+existing flann CMake code.
+
+From CMake Changelog [1]:
+"add_library() and add_executable() commands can now be called without
+ any sources and will not complain as long as sources are added later
+ via the target_sources() command."
+
+Note: flann CMake code doesn't use target_sources() since no source file
+are provided intentionally since the flann shared library is created by
+linking with the flann_cpp_s static library with this line:
+
+target_link_libraries(flann_cpp -Wl,-whole-archive flann_cpp_s -Wl,-no-whole-archive)
+
+If you try to use "add_library(flann_cpp SHARED ${CPP_SOURCES})" (as it should
+be normally done), the link fail due to already defined symbol.
+
+They are building the shared version using the static library "to speedup the
+build time" [3]
+
+This issue is already reported upstream [2] with a proposed solution.
+
+Upstream status: Pending
+
+Fixes:
+http://autobuild.buildroot.net/results/b2f/b2febfaf8c44ce477b3e4a5b9b976fd25e8d7454
+
+[1] https://cmake.org/cmake/help/v3.11/release/3.11.html
+[2] https://github.com/mariusmuja/flann/issues/369
+[3] https://github.com/mariusmuja/flann/commit/0fd62b43be2fbb0b8d791ee36290791224dc030c
+
+Signed-off-by: Romain Naour <romain.naour@gmail.com>
+---
+ src/cpp/CMakeLists.txt | 4 ++--
+ src/cpp/empty.cpp      | 1 +
+ 2 files changed, 3 insertions(+), 2 deletions(-)
+ create mode 100644 src/cpp/empty.cpp
+
+diff --git a/src/cpp/CMakeLists.txt b/src/cpp/CMakeLists.txt
+index b44a735..a816863 100644
+--- a/src/cpp/CMakeLists.txt
++++ b/src/cpp/CMakeLists.txt
+@@ -29,7 +29,7 @@ if (BUILD_CUDA_LIB)
+ endif()
+ if(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND CMAKE_COMPILER_IS_GNUCC)
+-    add_library(flann_cpp SHARED "")
++    add_library(flann_cpp SHARED "empty.cpp")
+     set_target_properties(flann_cpp PROPERTIES LINKER_LANGUAGE CXX)
+     target_link_libraries(flann_cpp -Wl,-whole-archive flann_cpp_s -Wl,-no-whole-archive)
+@@ -85,7 +85,7 @@ if (BUILD_C_BINDINGS)
+     set_property(TARGET flann_s PROPERTY COMPILE_DEFINITIONS FLANN_STATIC)
+     if(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND CMAKE_COMPILER_IS_GNUCC)
+-        add_library(flann SHARED "")
++        add_library(flann SHARED "empty.cpp")
+         set_target_properties(flann PROPERTIES LINKER_LANGUAGE CXX)
+         target_link_libraries(flann -Wl,-whole-archive flann_s -Wl,-no-whole-archive)
+     else()
+diff --git a/src/cpp/empty.cpp b/src/cpp/empty.cpp
+new file mode 100644
+index 0000000..40a8c17
+--- /dev/null
++++ b/src/cpp/empty.cpp
+@@ -0,0 +1 @@
++/* empty */
+-- 
+2.14.3
+
diff --git a/sci-libs/flann/flann-1.9.1-r1.ebuild b/sci-libs/flann/flann-1.9.1-r1.ebuild
new file mode 100644 (file)
index 0000000..fcb4ef9
--- /dev/null
@@ -0,0 +1,90 @@
+# Copyright 1999-2018 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=6
+
+inherit cmake-utils cuda flag-o-matic toolchain-funcs
+
+DESCRIPTION="Fast approximate nearest neighbor searches in high dimensional spaces"
+HOMEPAGE="http://www.cs.ubc.ca/research/flann/"
+SRC_URI="https://github.com/mariusmuja/${PN}/archive/${PV}.tar.gz -> ${P}.tar.gz"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~ppc ~x86 ~amd64-linux ~x86-linux"
+IUSE="cuda doc examples mpi openmp octave static-libs"
+
+RDEPEND="
+       cuda? ( >=dev-util/nvidia-cuda-toolkit-5.5 )
+       mpi? (
+               sci-libs/hdf5[mpi]
+               dev-libs/boost:=[mpi]
+       )
+       !mpi? ( !sci-libs/hdf5[mpi] )
+       octave? ( >=sci-mathematics/octave-3.6.4-r1 )"
+DEPEND="${RDEPEND}
+       app-arch/unzip
+       doc? ( dev-tex/latex2html )"
+# TODO:
+# readd dependencies for test suite,
+# requires multiple ruby dependencies
+
+PATCHES=(
+       "${FILESDIR}"/flann-1.9.1-cmake-3.11.patch
+)
+
+pkg_pretend() {
+       [[ ${MERGE_TYPE} != binary ]] && use openmp && tc-check-openmp
+}
+
+pkg_setup() {
+       [[ ${MERGE_TYPE} != binary ]] && use openmp && tc-check-openmp
+}
+
+src_prepare() {
+       # bug #302621
+       use mpi && export CXX=mpicxx
+       # produce pure octave files
+       # octave gentoo installation for .m files respected
+       sed -i \
+               -e 's/--mex//' \
+               -e 's/\.mex/\.oct/' \
+               -e '/FILES/s/${MEX_FILE}//' \
+               -e 's:share/flann/octave:share/octave/site/m:' \
+               -e "/CUSTOM_TARGET/a\INSTALL(FILES \${MEX_FILE} DESTINATION libexec/octave/site/oct/${CHOST})" \
+               src/matlab/CMakeLists.txt || die
+       use cuda && cuda_src_prepare
+
+       cmake-utils_src_prepare
+}
+
+src_configure() {
+       append-cxxflags -std=c++11
+
+       # python bindings are split
+       # off into dev-python/pyflann
+       local mycmakeargs=(
+               -DBUILD_C_BINDINGS=ON
+               -DBUILD_PYTHON_BINDINGS=OFF
+               -DPYTHON_EXECUTABLE=
+               -DDOCDIR=share/doc/${PF}
+               -DBUILD_CUDA_LIB=$(usex cuda)
+               -DBUILD_EXAMPLES=$(usex examples)
+               -DBUILD_DOC=$(usex doc)
+               -DBUILD_TESTS=OFF
+               -DBUILD_MATLAB_BINDINGS=$(usex octave)
+               -DUSE_MPI=$(usex mpi)
+               -DUSE_OPENMP=$(usex openmp)
+       )
+       use cuda && mycmakeargs+=(
+               -DCUDA_NVCC_FLAGS="${NVCCFLAGS} --linker-options \"-arsch\""
+       )
+       cmake-utils_src_configure
+}
+
+src_install() {
+       cmake-utils_src_install
+       if ! use static-libs; then
+               find "${D}" -name 'lib*.a' -delete || die
+       fi
+}
index 06d78eb963d7c7f75d539f1a2f5c3a3c59489543..e8b80e9f855fe479583289cf0840755805cfb499 100644 (file)
@@ -29,6 +29,10 @@ DEPEND="${RDEPEND}
 # readd dependencies for test suite,
 # requires multiple ruby dependencies
 
+PATCHES=(
+       "${FILESDIR}"/flann-1.9.1-cmake-3.11.patch
+)
+
 pkg_pretend() {
        [[ ${MERGE_TYPE} != binary ]] && use openmp && tc-check-openmp
 }