>>
>> 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/
 

Reply via email to