- FindGLIB2.cmake updates from
[metze/wireshark/wip.git] / cmake / modules / FindGLIB2.cmake
index c00932f22c6157227286ecee4e168e092ffcaab2..0db72abb72434e05f45a6d0409230b2259f0876a 100644 (file)
@@ -1,16 +1,22 @@
 #
 # $Id$
 #
-# Try to find GLIB2
+# - Try to find GLib2
 # Once done this will define
 #
-#  GLIB2_FOUND - system has GLIB2
-#  GLIB2_INCLUDE_DIRS - the GLIB2 include directory
-#  GLIB2_LIBRARIES - Link these to use GLIB2
-#  GLIB2_DEFINITIONS - Compiler switches required for using GLIB2
+#  GLIB2_FOUND - system has GLib2
+#  GLIB2_INCLUDE_DIRS - the GLib2 include directory
+#  GLIB2_LIBRARIES - Link these to use GLib2
+#
+#  HAVE_GLIB_GREGEX_H  glib has gregex.h header and 
+#                      supports g_regex_match_simple
 #
 #  Copyright (c) 2006 Andreas Schneider <mail@cynapses.org>
 #  Copyright (c) 2006 Philippe Bernery <philippe.bernery@gmail.com>
+#  Copyright (c) 2007 Daniel Gollub <gollub@b1-systems.de>
+#  Copyright (c) 2007 Alban Browaeys <prahal@yahoo.com>
+#  Copyright (c) 2008 Michael Bell <michael.bell@web.de>
+#  Copyright (c) 2008-2009 Bjoern Ricks <bjoern.ricks@googlemail.com>
 #
 #  Redistribution and use is allowed according to the terms of the New
 #  BSD license.
 #
 
 
-if (GLIB2_LIBRARIES AND GLIB2_INCLUDE_DIRS)
+IF (GLIB2_LIBRARIES AND GLIB2_INCLUDE_DIRS )
   # in cache already
-  set(GLIB2_FOUND TRUE)
-else (GLIB2_LIBRARIES AND GLIB2_INCLUDE_DIRS)
-  # use pkg-config to get the directories and then use these values
-  # in the FIND_PATH() and FIND_LIBRARY() calls
-  include(UsePkgConfig)
-
-  ## GLibConfig
-  find_path(GLIBCONFIG_INCLUDE_DIR
-    NAMES
-      glibconfig.h
-    PATHS
-      ${_GLIB2IncDir}
-      /opt/gnome/lib64/glib-2.0/include
-      /opt/gnome/lib/glib-2.0/include
-      /opt/lib/glib-2.0/include
-      /usr/lib64/glib-2.0/include
-      /usr/lib/glib-2.0/include
-      /opt/local/lib/glib-2.0/include
-      /sw/lib/glib-2.0/include
-  )
-  ##
-
-  ## Glib
-  pkgconfig(glib-2.0 _GLIB2IncDir _GLIB2LinkDir _GLIB2LinkFlags _GLIB2Cflags)
+  SET(GLIB2_FOUND TRUE)
+ELSE (GLIB2_LIBRARIES AND GLIB2_INCLUDE_DIRS )
 
-  set(GLIB2_DEFINITIONS ${_GLIB2Cflags})
+  INCLUDE(FindPkgConfig)
 
-  find_path(GLIB2_INCLUDE_DIR
-    NAMES
-      glib.h
-    PATHS
-      ${_GLIB2IncDir}
-      /opt/gnome/include/glib-2.0
-      /usr/include/glib-2.0
-      /usr/local/include/glib-2.0
-      /opt/local/include/glib-2.0
-      /sw/include/glib-2.0
-  )
-
-  find_library(GLIB2_LIBRARY
+  ## Glib
+  IF ( GLIB2_FIND_REQUIRED )
+    SET( _pkgconfig_REQUIRED "REQUIRED" )
+  ELSE ( GLIB2_FIND_REQUIRED )
+    SET( _pkgconfig_REQUIRED "" )
+  ENDIF ( GLIB2_FIND_REQUIRED )
+
+  IF ( GLIB2_MIN_VERSION )
+    PKG_SEARCH_MODULE( GLIB2 ${_pkgconfig_REQUIRED} glib-2.0>=${GLIB2_MIN_VERSION} )
+  ELSE ( GLIB2_MIN_VERSION )
+    PKG_SEARCH_MODULE( GLIB2 ${_pkgconfig_REQUIRED} glib-2.0 )
+  ENDIF ( GLIB2_MIN_VERSION )
+  IF ( PKG_CONFIG_FOUND )
+    IF ( GLIB2_FOUND )
+      SET ( GLIB2_CORE_FOUND TRUE )
+    ELSE ( GLIB2_FOUND )
+      SET ( GLIB2_CORE_FOUND FALSE )
+    ENDIF ( GLIB2_FOUND )
+  ENDIF ( PKG_CONFIG_FOUND )
+
+  # Look for glib2 include dir and libraries w/o pkgconfig
+  IF ( NOT GLIB2_FOUND AND NOT PKG_CONFIG_FOUND )
+    FIND_PATH(
+      _glibconfig_include_DIR
     NAMES
-      glib-2.0
+      glibconfig.h
     PATHS
-      ${_GLIB2LinkDir}
+      /opt/gnome/lib64
       /opt/gnome/lib
-      /usr/lib
-      /usr/local/lib
+      /opt/lib/
       /opt/local/lib
-      /sw/lib
-  )
-
-  set(GLIB2_LIBRARIES ${GLIB2_LIBRARY})
-  set(GLIB2_INCLUDE_DIRS ${GLIB2_INCLUDE_DIR})
-  ##
-
-  ## GModule
-  pkgconfig(gmodule-2.0 _GMODULE2IncDir _GMODULE2LinkDir _GMODULE2LinkFlags _GMODULE2Cflags)
-
-  set(GMODULE2_DEFINITIONS ${_GMODULE2Cflags})
+      /sw/lib/
+      /usr/lib64
+      /usr/lib
+      /usr/local/include
+      ${CMAKE_LIBRARY_PATH}
+    PATH_SUFFIXES
+      glib-2.0/include
+    )
 
-  find_path(GMODULE2_INCLUDE_DIR
-    NAMES
-      gmodule.h
-    PATHS
-      ${_GMODULE2IncDir}
-      /opt/gnome/include/glib-2.0
-      /usr/include/glib-2.0
-      /usr/local/include/glib-2.0
-      /opt/local/include/glib-2.0
-      /sw/include/glib-2.0
-  )
-  find_library(GMODULE2_LIBRARY
+    FIND_PATH(
+      _glib2_include_DIR
     NAMES
-      gmodule-2.0
+      glib.h
     PATHS
-      ${_GMODULE2LinkDir}
-      /opt/gnome/lib
-      /usr/lib
-      /usr/local/lib
-      /opt/local/lib
-      /sw/lib
-  )
-  if (GMODULE2_LIBRARY AND GMODULE2_INCLUDE_DIR)
-    set(GMODULE2_FOUND TRUE)
-  endif (GMODULE2_LIBRARY AND GMODULE2_INCLUDE_DIR)
-  ##
-
-  ## GThread
-  pkgconfig(gthread-2.0 _GTHREAD2IncDir _GTHREAD2LinkDir _GTHREAD2LinkFlags _GTHREAD2Cflags)
+      /opt/gnome/include
+      /opt/local/include
+      /sw/include
+      /usr/include
+      /usr/local/include
+    PATH_SUFFIXES
+      glib-2.0
+    )
 
-  set(GTHREAD2_DEFINITIONS ${_GTHREAD2Cflags})
+    #MESSAGE(STATUS "Glib headers: ${_glib2_include_DIR}")
 
-  find_path(GTHREAD2_INCLUDE_DIR
+    FIND_LIBRARY(
+      _glib2_link_DIR
     NAMES
-      gthread.h
-    PATHS
-      ${_GTHREAD2IncDir}
-      /opt/gnome/include/glib-2.0
-      /usr/include/glib-2.0
-      /usr/local/include/glib-2.0
-      /opt/local/include/glib-2.0
-      /sw/include/glib-2.0
-    PATH_SUFFIXES
+      glib-2.0
       glib
-  )
-  find_library(GTHREAD2_LIBRARY
-    NAMES
-      gthread-2.0
     PATHS
-      ${_GTHREAD2LinkDir}
       /opt/gnome/lib
-      /usr/lib
-      /usr/local/lib
       /opt/local/lib
       /sw/lib
-  )
-
-  if (GTHREAD2_LIBRARY AND GTHREAD2_INCLUDE_DIR)
-    set(GTHREAD2_FOUND TRUE)
-  endif (GTHREAD2_LIBRARY AND GTHREAD2_INCLUDE_DIR)
-  ##
-
-  ## libintl
-  find_path(LIBINTL_INCLUDE_DIR
-    NAMES
-      libintl.h
-    PATHS
-      /opt/gnome/include/glib-2.0
-      /usr/include/glib-2.0
-      /usr/local/include/glib-2.0
-      /opt/local/include/glib-2.0
-      /sw/include/glib-2.0
-  )
-  find_library(LIBINTL_LIBRARY
-    NAMES
-      intl
-    PATHS
-      /opt/gnome/lib
       /usr/lib
       /usr/local/lib
-      /opt/local/lib
-      /sw/lib
-  )
-
-  if (LIBINTL_LIBRARY AND LIBINTL_INCLUDE_DIR)
-    set(LIBINTL_FOUND TRUE)
-  endif (LIBINTL_LIBRARY AND LIBINTL_INCLUDE_DIR)
+    )
+    IF ( _glib2_include_DIR AND _glib2_link_DIR )
+        SET ( _glib2_FOUND TRUE )
+    ENDIF ( _glib2_include_DIR AND _glib2_link_DIR )
+
+
+    IF ( _glib2_FOUND )
+        SET ( GLIB2_INCLUDE_DIRS ${_glib2_include_DIR} ${_glibconfig_include_DIR} )
+        SET ( GLIB2_LIBRARIES ${_glib2_link_DIR} )
+        SET ( GLIB2_CORE_FOUND TRUE )
+    ELSE ( _glib2_FOUND )
+        SET ( GLIB2_CORE_FOUND FALSE )
+    ENDIF ( _glib2_FOUND )
+
+    # Handle dependencies
+    # libintl
+    IF ( NOT LIBINTL_FOUND )
+      FIND_PATH(LIBINTL_INCLUDE_DIR
+      NAMES
+        libintl.h
+      PATHS
+        /opt/gnome/include
+        /opt/local/include
+        /sw/include
+        /usr/include
+        /usr/local/include
+      )
+
+      FIND_LIBRARY(LIBINTL_LIBRARY
+      NAMES
+        intl
+      PATHS
+        /opt/gnome/lib
+        /opt/local/lib
+        /sw/lib
+        /usr/local/lib
+        /usr/lib
+      )
+
+      IF (LIBINTL_LIBRARY AND LIBINTL_INCLUDE_DIR)
+        SET (LIBINTL_FOUND TRUE)
+      ENDIF (LIBINTL_LIBRARY AND LIBINTL_INCLUDE_DIR)
+    ENDIF ( NOT LIBINTL_FOUND )
+
+    # libiconv
+    IF ( NOT LIBICONV_FOUND )
+      FIND_PATH(LIBICONV_INCLUDE_DIR
+      NAMES
+        iconv.h
+      PATHS
+        /opt/gnome/include
+        /opt/local/include
+        /opt/local/include
+        /sw/include
+        /sw/include
+        /usr/local/include
+        /usr/include
+      PATH_SUFFIXES
+        glib-2.0
+      )
+
+      FIND_LIBRARY(LIBICONV_LIBRARY
+      NAMES
+        iconv
+      PATHS
+        /opt/gnome/lib
+        /opt/local/lib
+        /sw/lib
+        /usr/lib
+        /usr/local/lib
+      )
+
+      IF (LIBICONV_LIBRARY AND LIBICONV_INCLUDE_DIR)
+        SET (LIBICONV_FOUND TRUE)
+      ENDIF (LIBICONV_LIBRARY AND LIBICONV_INCLUDE_DIR)
+    ENDIF ( NOT LIBICONV_FOUND )
+
+    IF (LIBINTL_FOUND)
+      SET (GLIB2_LIBRARIES ${GLIB2_LIBRARIES} ${LIBINTL_LIBRARY})
+      SET (GLIB2_INCLUDE_DIRS ${GLIB2_INCLUDE_DIRS} ${LIBINTL_INCLUDE_DIR})
+    ENDIF (LIBINTL_FOUND)
+
+    IF (LIBICONV_FOUND)
+      SET (GLIB2_LIBRARIES ${GLIB2_LIBRARIES} ${LIBICONV_LIBRARY})
+      SET (GLIB2_INCLUDE_DIRS ${GLIB2_INCLUDE_DIRS} ${LIBICONV_INCLUDE_DIR})
+    ENDIF (LIBICONV_FOUND)
+
+  ENDIF ( NOT GLIB2_FOUND AND NOT PKG_CONFIG_FOUND )
   ##
 
-  set(GLIB2_INCLUDE_DIRS
-    ${GLIB_INCLUDE_DIR}
-    ${GLIBCONFIG_INCLUDE_DIR}
-  )
-
-  if (GMODULE2_FOUND)
-    set(GLIB2_LIBRARIES ${GLIB2_LIBRARIES} ${GMODULE2_LIBRARY})
-    set(GLIB2_INCLUDE_DIRS ${GLIB2_INCLUDE_DIRS} ${GMODULE2_INCLUDE_DIR})
-  endif (GMODULE2_FOUND)
-
-  if (GTHREAD2_FOUND)
-    set(GLIB2_LIBRARIES ${GLIB2_LIBRARIES} ${GTHREAD2_LIBRARY})
-    set(GLIB2_INCLUDE_DIRS ${GLIB2_INCLUDE_DIRS} ${GTHREAD2_INCLUDE_DIR})
-  endif (GTHREAD2_FOUND)
-
-  if (LIBINTL_FOUND)
-    set(GLIB2_LIBRARIES ${GLIB2_LIBRARIES} ${LIBINTL_LIBRARY})
-    set(GLIB2_INCLUDE_DIRS ${GLIB2_INCLUDE_DIRS} ${LIBINTL_INCLUDE_DIR})
-  endif (LIBINTL_FOUND)
-
-  if (GLIB2_INCLUDE_DIRS AND GLIB2_LIBRARIES)
-     set(GLIB2_FOUND TRUE)
-  endif (GLIB2_INCLUDE_DIRS AND GLIB2_LIBRARIES)
-
-  if (GLIB2_FOUND)
-    if (NOT GLIB2_FIND_QUIETLY)
-      message(STATUS "Found GLIB2: ${GLIB2_LIBRARIES}")
-    endif (NOT GLIB2_FIND_QUIETLY)
-  else (GLIB2_FOUND)
-    if (GLIB2_FIND_REQUIRED)
-      message(FATAL_ERROR "Could not find GLIB2")
-    endif (GLIB2_FIND_REQUIRED)
-  endif (GLIB2_FOUND)
+  IF (GLIB2_CORE_FOUND AND GLIB2_INCLUDE_DIRS AND GLIB2_LIBRARIES)
+    SET (GLIB2_FOUND TRUE)
+  ENDIF (GLIB2_CORE_FOUND AND GLIB2_INCLUDE_DIRS AND GLIB2_LIBRARIES)
 
-  # show the GLIB2_INCLUDE_DIRS and GLIB2_LIBRARIES variables only in the advanced view
-  mark_as_advanced(GLIB2_INCLUDE_DIRS GLIB2_LIBRARIES)
+  IF (GLIB2_FOUND)
+    IF (NOT GLIB2_FIND_QUIETLY)
+      MESSAGE (STATUS "Found GLib2: ${GLIB2_LIBRARIES} ${GLIB2_INCLUDE_DIRS}")
+    ENDIF (NOT GLIB2_FIND_QUIETLY)
+  ELSE (GLIB2_FOUND)
+    IF (GLIB2_FIND_REQUIRED)
+      MESSAGE (SEND_ERROR "Could not find GLib2")
+    ENDIF (GLIB2_FIND_REQUIRED)
+  ENDIF (GLIB2_FOUND)
 
-endif (GLIB2_LIBRARIES AND GLIB2_INCLUDE_DIRS)
+  # show the GLIB2_INCLUDE_DIRS and GLIB2_LIBRARIES variables only in the advanced view
+  MARK_AS_ADVANCED(GLIB2_INCLUDE_DIRS GLIB2_LIBRARIES)
+  MARK_AS_ADVANCED(LIBICONV_INCLUDE_DIR LIBICONV_LIBRARY)
+  MARK_AS_ADVANCED(LIBINTL_INCLUDE_DIR LIBINTL_LIBRARY)
+
+ENDIF (GLIB2_LIBRARIES AND GLIB2_INCLUDE_DIRS)
+
+IF ( WIN32 )
+    # include libiconv for win32
+    IF ( NOT LIBICONV_FOUND )
+      FIND_PATH(LIBICONV_INCLUDE_DIR iconv.h PATH_SUFFIXES glib-2.0)
+
+      FIND_LIBRARY(LIBICONV_LIBRARY NAMES iconv)
+
+      IF (LIBICONV_LIBRARY AND LIBICONV_INCLUDE_DIR)
+        SET (LIBICONV_FOUND TRUE)
+      ENDIF (LIBICONV_LIBRARY AND LIBICONV_INCLUDE_DIR)
+    ENDIF ( NOT LIBICONV_FOUND )
+    IF (LIBICONV_FOUND)
+      SET (GLIB2_LIBRARIES ${GLIB2_LIBRARIES} ${LIBICONV_LIBRARY})
+      SET (GLIB2_INCLUDE_DIRS ${GLIB2_INCLUDE_DIRS} ${LIBICONV_INCLUDE_DIR})
+    ENDIF (LIBICONV_FOUND)
+ENDIF ( WIN32 )
+
+IF ( GLIB2_FOUND )
+       # Check if system has a newer version of glib
+       # which supports g_regex_match_simple
+       INCLUDE( CheckIncludeFiles )
+       SET( CMAKE_REQUIRED_INCLUDES ${GLIB2_INCLUDE_DIRS} )
+       CHECK_INCLUDE_FILES ( glib/gregex.h HAVE_GLIB_GREGEX_H )
+       CHECK_INCLUDE_FILES ( glib/gchecksum.h HAVE_GLIB_GCHECKSUM_H )
+       # Reset CMAKE_REQUIRED_INCLUDES
+       SET( CMAKE_REQUIRED_INCLUDES "" )
+ENDIF( GLIB2_FOUND )