Il 04 lug 2017 12:24, "Vadim Zhukov" <[email protected]> ha scritto:
>> >> a port i'm working on (pgpointcloud) uses cmake to detect libxml2: >> >> https://github.com/pgpointcloud/pointcloud/blob/master/CMakeLists.txt#L91 >> >> with this CMakeLists the build fails because -I/usr/local/include is not >> on the CFLAGS: >> >> /usr/obj/ports/pgpointcloud-1.1.0pre0/bin/cc -I/usr/local/include/libxml2 -Ilib -O2 -pipe -DNDEBUG -fPIC >> -MD -MT lib/CMakeFiles/libpc-static.dir/pc_schema.c.o -MF lib/CMakeFiles/libpc-static.dir/pc_schema.c.o.d -o >> lib/CMakeFiles/libpc-static.dir/pc_schema.c.o -c >> /usr/obj/ports/pgpointcloud-1.1.0pre0/pointcloud- 0130a1c49dc3f8c3beaa5f033c66691bdc422987/lib/pc_schema.c >> In file included from /usr/obj/ports/pgpointcloud-1.1.0pre0/pointcloud- 0130a1c49dc3f8c3beaa5f033c66691bdc422987/lib/pc_schema.c:13 >> In file included from /usr/local/include/libxml2/libxml/parser.h:810: >> /usr/local/include/libxml2/libxml/encoding.h:28:10: fatal error: 'iconv.h' file not found >> #include <iconv.h> >> >> What i dont understand is that libxml-2.0.pc sets it: >> >> $pkg-config --cflags libxml-2.0 >> -I/usr/local/include/libxml2 -I/usr/local/include >> >> And afaik our FindLibxml2.cmake module in >> /usr/local/share/cmake/Modules/FindLibXml2.cmake uses that: >> =========== >> find_package(PkgConfig QUIET) >> PKG_CHECK_MODULES(PC_LIBXML QUIET libxml-2.0) >> set(LIBXML2_DEFINITIONS ${PC_LIBXML_CFLAGS_OTHER}) >> >> find_path(LIBXML2_INCLUDE_DIR NAMES libxml/xpath.h >> HINTS >> ${PC_LIBXML_INCLUDEDIR} >> ${PC_LIBXML_INCLUDE_DIRS} >> PATH_SUFFIXES libxml2 >> ) >> >> find_library(LIBXML2_LIBRARIES NAMES xml2 libxml2 >> HINTS >> ${PC_LIBXML_LIBDIR} >> ${PC_LIBXML_LIBRARY_DIRS} >> ) >> >> =========== >> >> So with my limited cmake-fu, i'm puzzled as to why usr/local/include >> isnt part of the include paths. It 'works' if i patch the CmakeLists.txt >> this way: >> >> find_package (LibXml2 REQUIRED) >> mark_as_advanced (CLEAR LIBXML2_INCLUDE_DIR) >> mark_as_advanced (CLEAR LIBXML2_LIBRARIES) >> include_directories (${LIBXML2_INCLUDE_DIR}) >> +include_directories (/usr/local/include) >> >> But that's of course ugly, so i'm looking for help to figure out if this >> is a problem in FindLibxml2.cmake or in pgpointcloud's CMakeLists.txt.. >> > > It's definitely not a FindLibxml2.cmake problem because > "find_package(LibXml2)" works fine with akonadi-17.04.1 (kf5 port on > openbsd-wip). It's definitely the FindLibXml2.cmake problem, since it doesn't provide LIBXML2_INCLUDE_DIRS (notice the 'S'), and only LIBXML_INCLUDE_DIR. This should be fixed upstream with patch like below; I'll need to recover my Kitware account password, though... :) After that applied, you'll need to tweak the pgpointcloud port to use the ${LIBXML2_INCLUDE_DIRS} instead of ${LIBXML2_INCLUDE_DIR}. Oh, and with akonadi we just get lucky due to smth. else picking up /usr/local/include. -- WBR, Vadim Zhukov Index: patches/patch-Modules_FindLibXml2_cmake =================================================================== RCS file: patches/patch-Modules_FindLibXml2_cmake diff -N patches/patch-Modules_FindLibXml2_cmake --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-Modules_FindLibXml2_cmake 4 Jul 2017 10:18:02 -0000 @@ -0,0 +1,43 @@ +$OpenBSD$ +Provide de-facto standard CMake variables. + +Index: Modules/FindLibXml2.cmake +--- Modules/FindLibXml2.cmake.orig ++++ Modules/FindLibXml2.cmake +@@ -12,7 +12,9 @@ + # :: + # + # LIBXML2_FOUND - System has LibXml2 +-# LIBXML2_INCLUDE_DIR - The LibXml2 include directory ++# LIBXML2_INCLUDE_DIR - The actual LibXml2 include directory ++# LIBXML2_INCLUDE_DIRS - The list of include directories needed to use LibXml2 ++# LIBXML2_LIBRARY - The actual LibXml2 library + # LIBXML2_LIBRARIES - The libraries needed to use LibXml2 + # LIBXML2_DEFINITIONS - Compiler switches required for using LibXml2 + # LIBXML2_XMLLINT_EXECUTABLE - The XML checking tool xmllint coming with LibXml2 +@@ -31,7 +33,7 @@ find_path(LIBXML2_INCLUDE_DIR NAMES libxml/xpath.h + PATH_SUFFIXES libxml2 + ) + +-find_library(LIBXML2_LIBRARIES NAMES xml2 libxml2 ++find_library(LIBXML2_LIBRARY NAMES xml2 libxml2 + HINTS + ${PC_LIBXML_LIBDIR} + ${PC_LIBXML_LIBRARY_DIRS} +@@ -52,11 +54,14 @@ elseif(LIBXML2_INCLUDE_DIR AND EXISTS "${LIBXML2_INCLU + unset(libxml2_version_str) + endif() + ++set(LIBXML2_INCLUDE_DIRS ${LIBXML2_INCLUDE_DIR} ${PC_LIBXML_INCLUDE_DIRS}) ++set(LIBXML2_LIBRARIES ${LIBXML2_LIBRARY}) ++ + # handle the QUIETLY and REQUIRED arguments and set LIBXML2_FOUND to TRUE if + # all listed variables are TRUE + include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) + FIND_PACKAGE_HANDLE_STANDARD_ARGS(LibXml2 +- REQUIRED_VARS LIBXML2_LIBRARIES LIBXML2_INCLUDE_DIR ++ REQUIRED_VARS LIBXML2_LIBRARY LIBXML2_INCLUDE_DIR + VERSION_VAR LIBXML2_VERSION_STRING) + +-mark_as_advanced(LIBXML2_INCLUDE_DIR LIBXML2_LIBRARIES LIBXML2_XMLLINT_EXECUTABLE) ++mark_as_advanced(LIBXML2_INCLUDE_DIR LIBXML2_LIBRARY LIBXML2_XMLLINT_EXECUTABLE) Index: Makefile =================================================================== RCS file: /cvs/ports/devel/cmake/Makefile,v retrieving revision 1.156 diff -u -p -r1.156 Makefile --- Makefile 21 Apr 2017 18:37:43 -0000 1.156 +++ Makefile 4 Jul 2017 10:18:02 -0000 @@ -7,7 +7,7 @@ COMMENT = portable build system VER = 3.7.2 DISTNAME = cmake-${VER} CATEGORIES = devel -REVISION = 0 +REVISION = 1 HOMEPAGE = https://www.cmake.org/ Ok with me. David
