From 9905abd1507046e56c002274103c41d4c83381a3 Mon Sep 17 00:00:00 2001 From: "Daniele E. Domenichelli" Date: Mon, 5 Aug 2013 10:57:18 +0200 Subject: [PATCH] FindGTK2: Create targets for each library Methods: * _GTK2_ADJUST_LIB_VARS * _GTK2_ADD_TARGET_DEPENDS_INTERNAL * _GTK2_ADD_TARGET_DEPENDS are strongly inspired by FindQt4.cmake --- Modules/FindGTK2.cmake | 150 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 147 insertions(+), 3 deletions(-) diff --git a/Modules/FindGTK2.cmake b/Modules/FindGTK2.cmake index d3f037aef..e36a87409 100644 --- a/Modules/FindGTK2.cmake +++ b/Modules/FindGTK2.cmake @@ -78,6 +78,7 @@ # * Remove GTK2_SKIP_MARK_AS_ADVANCED option, as now the variables are # marked as advanced by SelectLibraryConfigurations # * Detect gmodule, pangoft2 and pangoxft libraries +# * Create targets for each library. # Version 1.4 (10/4/2012) (CMake 2.8.10) # * 12596: Missing paths for FindGTK2 on NetBSD # * 12049: Fixed detection of GTK include files in the lib folder on @@ -383,6 +384,89 @@ function(_GTK2_FIND_LIBRARY _var _lib _expand_vc _append_version) endfunction() +#============================================================= +# _GTK2_ADJUST_LIB_VARS +# Internal function to create targets for GTK2 +# _var = target to create (GTK_ is removed) +#============================================================= +function(_GTK2_ADJUST_LIB_VARS _var) + if(GTK2_DEBUG) + message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}] " + "_GTK2_ADJUST_LIB_VARS( ${_var} )") + endif() + + string(REGEX REPLACE "GTK2_" "" _basename "${_var}") + string(TOLOWER "${_basename}" _basename) + + if(${_var}_FOUND AND NOT TARGET GTK2::${_basename}) + add_library(GTK2::${_basename} UNKNOWN IMPORTED) + + if(${_var}_LIBRARY_RELEASE) + set_property(TARGET GTK2::${_basename} APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) + set_property(TARGET GTK2::${_basename} PROPERTY IMPORTED_LOCATION_RELEASE "${${_var}_LIBRARY_RELEASE}" ) + endif() + + if(${_var}_LIBRARY_DEBUG) + set_property(TARGET GTK2::${_basename} APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG) + set_property(TARGET GTK2::${_basename} PROPERTY IMPORTED_LOCATION_DEBUG "${${_var}_LIBRARY_DEBUG}" ) + endif() + + if(${_var}_INCLUDE_DIR) + set_property(TARGET GTK2::${_basename} APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${${_var}_INCLUDE_DIR}") + endif() + + if(${_var}CONFIG_INCLUDE_DIR) + set_property(TARGET GTK2::${_basename} APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${${_var}CONFIG_INCLUDE_DIR}") + endif() + + set_property(TARGET GTK2::${_basename} PROPERTY INTERFACE_COMPILE_DEFINITIONS "${GTK2_DEFINITIONS}") + + if(GTK2_USE_IMPORTED_TARGETS) + set(${_var}_LIBRARY GTK2::${_basename} PARENT_SCOPE) + endif() + endif() +endfunction() + +function(_GTK2_ADD_TARGET_DEPENDS_INTERNAL _var _property) + if(GTK2_DEBUG) + message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}] " + "_GTK2_ADD_TARGET_DEPENDS_INTERNAL( ${_var} ${_property} )") + endif() + + string(REGEX REPLACE "GTK2_" "" _basename "${_var}") + string(TOLOWER "${_basename}" _basename) + + if (TARGET GTK2::${_basename}) + foreach(_depend ${ARGN}) + set(_valid_depends) + if (TARGET GTK2::${_depend}) + list(APPEND _valid_depends GTK2::${_depend}) + endif() + if (_valid_depends) + set_property(TARGET GTK2::${_basename} APPEND PROPERTY ${_property} "${_valid_depends}") + endif() + set(_valid_depends) + endforeach() + endif() +endfunction() + +function(_GTK2_ADD_TARGET_DEPENDS _var) + if(GTK2_DEBUG) + message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}] " + "_GTK2_ADD_TARGET_DEPENDS( ${_var} )") + endif() + + string(REGEX REPLACE "GTK2_" "" _basename "${_var}") + string(TOLOWER "${_basename}" _basename) + + get_target_property(_configs GTK2::${_basename} IMPORTED_CONFIGURATIONS) + _GTK2_ADD_TARGET_DEPENDS_INTERNAL(${_var} INTERFACE_LINK_LIBRARIES ${ARGN}) + foreach(_config ${_configs}) + _GTK2_ADD_TARGET_DEPENDS_INTERNAL(${_var} IMPORTED_LINK_INTERFACE_LIBRARIES_${_config} ${ARGN}) + endforeach() +endfunction() + + #============================================================= # @@ -474,94 +558,154 @@ list(APPEND GTK2_LIBRARIES ${FREETYPE_LIBRARIES}) foreach(_GTK2_component ${GTK2_FIND_COMPONENTS}) if(_GTK2_component STREQUAL "gtk") _GTK2_FIND_INCLUDE_DIR(GTK2_GTK gtk/gtk.h) - if(UNIX) _GTK2_FIND_LIBRARY (GTK2_GTK gtk-x11 false true) - _GTK2_FIND_LIBRARY (GTK2_GDK gdk-x11 false true) else() _GTK2_FIND_LIBRARY (GTK2_GTK gtk-win32 false true) - _GTK2_FIND_LIBRARY (GTK2_GDK gdk-win32 false true) endif() + _GTK2_ADJUST_LIB_VARS (GTK2_GTK) _GTK2_FIND_INCLUDE_DIR(GTK2_GDK gdk/gdk.h) _GTK2_FIND_INCLUDE_DIR(GTK2_GDKCONFIG gdkconfig.h) + if(UNIX) + _GTK2_FIND_LIBRARY (GTK2_GDK gdk-x11 false true) + else() + _GTK2_FIND_LIBRARY (GTK2_GDK gdk-win32 false true) + endif() + _GTK2_ADJUST_LIB_VARS (GTK2_GDK) _GTK2_FIND_INCLUDE_DIR(GTK2_CAIRO cairo.h) _GTK2_FIND_LIBRARY (GTK2_CAIRO cairo false false) + _GTK2_ADJUST_LIB_VARS (GTK2_CAIRO) _GTK2_FIND_INCLUDE_DIR(GTK2_FONTCONFIG fontconfig/fontconfig.h) _GTK2_FIND_INCLUDE_DIR(GTK2_PANGO pango/pango.h) _GTK2_FIND_LIBRARY (GTK2_PANGO pango false true) + _GTK2_ADJUST_LIB_VARS (GTK2_PANGO) _GTK2_FIND_LIBRARY (GTK2_PANGOCAIRO pangocairo false true) + _GTK2_ADJUST_LIB_VARS (GTK2_PANGOCAIRO) _GTK2_FIND_LIBRARY (GTK2_PANGOFT2 pangoft2 false true) + _GTK2_ADJUST_LIB_VARS (GTK2_PANGOFT2) _GTK2_FIND_LIBRARY (GTK2_PANGOXFT pangoxft false true) + _GTK2_ADJUST_LIB_VARS (GTK2_PANGOXFT) _GTK2_FIND_INCLUDE_DIR(GTK2_GDK_PIXBUF gdk-pixbuf/gdk-pixbuf.h) _GTK2_FIND_LIBRARY (GTK2_GDK_PIXBUF gdk_pixbuf false true) + _GTK2_ADJUST_LIB_VARS (GTK2_GDK_PIXBUF) _GTK2_FIND_LIBRARY (GTK2_GTHREAD gthread false true) + _GTK2_ADJUST_LIB_VARS (GTK2_GTHREAD) _GTK2_FIND_LIBRARY (GTK2_GMODULE gmodule false true) + _GTK2_ADJUST_LIB_VARS (GTK2_MODULE) _GTK2_FIND_LIBRARY (GTK2_GIO gio false true) + _GTK2_ADJUST_LIB_VARS (GTK2_GIO) _GTK2_FIND_INCLUDE_DIR(GTK2_ATK atk/atk.h) _GTK2_FIND_LIBRARY (GTK2_ATK atk false true) + _GTK2_ADJUST_LIB_VARS (GTK2_ATK) _GTK2_FIND_INCLUDE_DIR(GTK2_GOBJECT glib-object.h) _GTK2_FIND_LIBRARY (GTK2_GOBJECT gobject false true) + _GTK2_ADJUST_LIB_VARS (GTK2_GOBJECT) _GTK2_FIND_INCLUDE_DIR(GTK2_GLIB glib.h) _GTK2_FIND_INCLUDE_DIR(GTK2_GLIBCONFIG glibconfig.h) _GTK2_FIND_LIBRARY (GTK2_GLIB glib false true) + _GTK2_ADJUST_LIB_VARS (GTK2_GLIB) + + #_GTK2_ADD_TARGET_DEPENDS(GTK2_GOBJECT glib) + _GTK2_ADD_TARGET_DEPENDS(GTK2_GOBJECT glib) + _GTK2_ADD_TARGET_DEPENDS(GTK2_ATK gobject glib) + _GTK2_ADD_TARGET_DEPENDS(GTK2_GIO gobject glib) + _GTK2_ADD_TARGET_DEPENDS(GTK2_GTHREAD glib) + _GTK2_ADD_TARGET_DEPENDS(GTK2_GMODULE glib) + _GTK2_ADD_TARGET_DEPENDS(GTK2_GDK_PIXBUF gobject glib) + #_GTK2_ADD_TARGET_DEPENDS(GTK2_CAIRO) + set_property(TARGET GTK2::cairo APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${FREETYPE_INCLUDE_DIRS}") + set_property(TARGET GTK2::cairo APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${GTK2_FONTCONFIG_INCLUDE_DIRS}") + _GTK2_ADD_TARGET_DEPENDS(GTK2_PANGO gobject glib) + _GTK2_ADD_TARGET_DEPENDS(GTK2_PANGOCAIRO pango cairo gobject glib) + _GTK2_ADD_TARGET_DEPENDS(GTK2_GDK pangocairo pango cairo gdk_pixbuf gobject glib) + _GTK2_ADD_TARGET_DEPENDS(GTK2_GTK gdk atk gio pangoft2 pangocairo pango cairo gdk_pixbuf gthread gobject glib) elseif(_GTK2_component STREQUAL "gtkmm") _GTK2_FIND_INCLUDE_DIR(GTK2_GTKMM gtkmm.h) _GTK2_FIND_INCLUDE_DIR(GTK2_GTKMMCONFIG gtkmmconfig.h) _GTK2_FIND_LIBRARY (GTK2_GTKMM gtkmm true true) + _GTK2_ADJUST_LIB_VARS (GTK2_GTKMM) _GTK2_FIND_INCLUDE_DIR(GTK2_GDKMM gdkmm.h) _GTK2_FIND_INCLUDE_DIR(GTK2_GDKMMCONFIG gdkmmconfig.h) _GTK2_FIND_LIBRARY (GTK2_GDKMM gdkmm true true) + _GTK2_ADJUST_LIB_VARS (GTK2_GDKMM) _GTK2_FIND_INCLUDE_DIR(GTK2_PANGOMM pangomm.h) _GTK2_FIND_INCLUDE_DIR(GTK2_PANGOMMCONFIG pangommconfig.h) _GTK2_FIND_LIBRARY (GTK2_PANGOMM pangomm true true) + _GTK2_ADJUST_LIB_VARS (GTK2_PANGOMM) _GTK2_FIND_INCLUDE_DIR(GTK2_CAIROMM cairomm/cairomm.h) _GTK2_FIND_INCLUDE_DIR(GTK2_CAIROMMCONFIG cairommconfig.h) _GTK2_FIND_LIBRARY (GTK2_CAIROMM cairomm true true) + _GTK2_ADJUST_LIB_VARS (GTK2_CAIROMM) _GTK2_FIND_INCLUDE_DIR(GTK2_GIOMM giomm.h) _GTK2_FIND_INCLUDE_DIR(GTK2_GIOMMCONFIG giommconfig.h) _GTK2_FIND_LIBRARY (GTK2_GIOMM giomm true true) + _GTK2_ADJUST_LIB_VARS (GTK2_GIOMM) _GTK2_FIND_INCLUDE_DIR(GTK2_ATKMM atkmm.h) _GTK2_FIND_LIBRARY (GTK2_ATKMM atkmm true true) + _GTK2_ADJUST_LIB_VARS (GTK2_ATKMM) _GTK2_FIND_INCLUDE_DIR(GTK2_GLIBMM glibmm.h) _GTK2_FIND_INCLUDE_DIR(GTK2_GLIBMMCONFIG glibmmconfig.h) _GTK2_FIND_LIBRARY (GTK2_GLIBMM glibmm true true) + _GTK2_ADJUST_LIB_VARS (GTK2_GLIBMM) _GTK2_FIND_INCLUDE_DIR(GTK2_SIGC++ sigc++/sigc++.h) _GTK2_FIND_INCLUDE_DIR(GTK2_SIGC++CONFIG sigc++config.h) _GTK2_FIND_LIBRARY (GTK2_SIGC++ sigc true true) + _GTK2_ADJUST_LIB_VARS (GTK2_SIGC++) + + #_GTK2_ADD_TARGET_DEPENDS(GTK2_SIGC++) + _GTK2_ADD_TARGET_DEPENDS(GTK2_GLIBMM gobject sigc glib) + _GTK2_ADD_TARGET_DEPENDS(GTK2_GIOMM gio glibmm gobject sigc glib) + _GTK2_ADD_TARGET_DEPENDS(GTK2_ATKMM atk glibmm gobject sigc glib) + _GTK2_ADD_TARGET_DEPENDS(GTK2_CAIROMM cairo sigc++) + _GTK2_ADD_TARGET_DEPENDS(GTK2_PANGOMM glibmm cairomm pangocairo sigc++ pango cairo gobject glib) + _GTK2_ADD_TARGET_DEPENDS(GTK2_GDKMM giomm pangomm gtk glibmm cairomm sigc++ gdk atk gio pangoft2 pangocairo gdk_pixbuf cairo pango gobject glib) + set_property(TARGET GTK2::gtkmm APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${FREETYPE_INCLUDE_DIRS}") + set_property(TARGET GTK2::gtkmm APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${GTK2_FONTCONFIG_INCLUDE_DIRS}") + _GTK2_ADD_TARGET_DEPENDS(GTK2_GTKMM atkmm gdkmm giomm pangomm gtk glibmm cairomm sigc++ gdk atk gio pangoft2 pangocairo gdk_pixbuf cairo pango gthread gobject glib) + set_property(TARGET GTK2::gtkmm APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${FREETYPE_INCLUDE_DIRS}") + set_property(TARGET GTK2::gtkmm APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${GTK2_FONTCONFIG_INCLUDE_DIRS}") elseif(_GTK2_component STREQUAL "glade") _GTK2_FIND_INCLUDE_DIR(GTK2_GLADE glade/glade.h) _GTK2_FIND_LIBRARY (GTK2_GLADE glade false true) + _GTK2_ADJUST_LIB_VARS (GTK2_GLADE) + _GTK2_ADD_TARGET_DEPENDS(GTK2_GLADE gtk gdk atk gio pangoft2 pangocairo gdk_pixbuf cairo pango gobject glib) + set_property(TARGET GTK2::glade APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${FREETYPE_INCLUDE_DIRS}") + set_property(TARGET GTK2::glade APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${GTK2_FONTCONFIG_INCLUDE_DIRS}") elseif(_GTK2_component STREQUAL "glademm") _GTK2_FIND_INCLUDE_DIR(GTK2_GLADEMM libglademm.h) _GTK2_FIND_INCLUDE_DIR(GTK2_GLADEMMCONFIG libglademmconfig.h) _GTK2_FIND_LIBRARY (GTK2_GLADEMM glademm true true) + _GTK2_ADJUST_LIB_VARS (GTK2_GLADEMM) + _GTK2_ADD_TARGET_DEPENDS(GLADEMM gtkmm glade atkmm gdkmm giomm pangomm glibmm cairomm sigc++ gtk gdk atk gio pangoft pangocairo gdk_pixbuf cairo pango gthread gobject glib) + set_property(TARGET GTK2::glademm APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${FREETYPE_INCLUDE_DIRS}") + set_property(TARGET GTK2::glademm APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${GTK2_FONTCONFIG_INCLUDE_DIRS}") else() message(FATAL_ERROR "Unknown GTK2 component ${_component}")