diff --git a/CMakeLists.txt b/CMakeLists.txt index 62817ba0617c5fb50277cf7535368274ed9bd2dd..089d20a50aa4215d8d9d62b986fab3b80b70158c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -46,7 +46,16 @@ include_directories(${WCCL_SOURCE_DIR}) set(LIBWCCL_VERSION "${ver_major}.${ver_minor}.${ver_patch}") -find_package(Boost 1.41 REQUIRED COMPONENTS program_options filesystem regex) +find_package(Boost 1.41 REQUIRED COMPONENTS program_options system filesystem regex) + +if(MSVC OR BORLAND) +# Use the auto-linking feature, don't try to add libraries yourself: + set(Boost_LIBRARIES "") +# Note the default is to link static libs and it is left like that here. +# You can make it link to DLL by defining BOOST_#module#_DYN_LINK +# in C++ source file or somewhere in CMake file, e.g. +# add_definitions( -DBOOST_FILESYSTEM_DYN_LINK ) +endif(MSVC OR BORLAND) add_subdirectory(libwccl) add_subdirectory(wcclparser) diff --git a/CMakeScripts/FindGlib.cmake b/CMakeScripts/FindGlib.cmake new file mode 100644 index 0000000000000000000000000000000000000000..d3547d51d90f5126d486702a9cff1957f1ea07af --- /dev/null +++ b/CMakeScripts/FindGlib.cmake @@ -0,0 +1,39 @@ +# - Try to find Glib-2.0 (with gobject) +# Once done, this will define +# +# Glib_FOUND - system has Glib +# Glib_INCLUDE_DIRS - the Glib include directories +# Glib_LIBRARIES - link these to use Glib + +include(LibFindMacros) + +# Use pkg-config to get hints about paths +libfind_pkg_check_modules(Glib_PKGCONF glib-2.0) + +# Main include dir +find_path(Glib_INCLUDE_DIR + NAMES glib.h + PATHS ${Glib_PKGCONF_INCLUDE_DIRS} + PATH_SUFFIXES glib-2.0 +) + +# Glib-related libraries also use a separate config header, which is in lib dir +find_path(GlibConfig_INCLUDE_DIR + NAMES glibconfig.h + PATHS ${Glib_PKGCONF_INCLUDE_DIRS} /usr + PATH_SUFFIXES lib/glib-2.0/include +) + +# Finally the library itself +find_library(Glib_LIBRARY + NAMES glib-2.0 + PATHS ${Glib_PKGCONF_LIBRARY_DIRS} +) + +# Set the include dir variables and the libraries and let libfind_process do the rest. +# NOTE: Singular variables for this library, plural for libraries this this lib depends on. +set(Glib_PROCESS_INCLUDES Glib_INCLUDE_DIR GlibConfig_INCLUDE_DIR) +set(Glib_PROCESS_LIBS Glib_LIBRARY) +libfind_process(Glib) + + diff --git a/CMakeScripts/FindGlibmm.cmake b/CMakeScripts/FindGlibmm.cmake new file mode 100644 index 0000000000000000000000000000000000000000..1615bc283e30d7e15c73585ebbd879c60668557f --- /dev/null +++ b/CMakeScripts/FindGlibmm.cmake @@ -0,0 +1,38 @@ +# - Try to find Glibmm-2.4 +# Once done, this will define +# +# Glibmm_FOUND - system has Glibmm +# Glibmm_INCLUDE_DIRS - the Glibmm include directories +# Glibmm_LIBRARIES - link these to use Glibmm + +include(LibFindMacros) + +# Dependencies +libfind_package(Glibmm Glib) +libfind_package(Glibmm SigC++) + +# Use pkg-config to get hints about paths +libfind_pkg_check_modules(Glibmm_PKGCONF glibmm-2.4) + +# Main include dir +find_path(Glibmm_INCLUDE_DIR + NAMES glibmm/main.h + PATHS ${Glibmm_PKGCONF_INCLUDE_DIRS} + PATH_SUFFIXES glibmm-2.4 +) + +# Glib-related libraries also use a separate config header, which is in lib dir +find_path(GlibmmConfig_INCLUDE_DIR + NAMES glibmmconfig.h + PATHS ${Glibmm_PKGCONF_INCLUDE_DIRS} /usr + PATH_SUFFIXES lib/glibmm-2.4/include +) + +libfind_library(Glibmm glibmm 2.4) + +# Set the include dir variables and the libraries and let libfind_process do the rest. +# NOTE: Singular variables for this library, plural for libraries this this lib depends on. +set(Glibmm_PROCESS_INCLUDES Glibmm_INCLUDE_DIR GlibmmConfig_INCLUDE_DIR Glib_INCLUDE_DIRS SigC++_INCLUDE_DIRS) +set(Glibmm_PROCESS_LIBS Glibmm_LIBRARY Glib_LIBRARIES SigC++_LIBRARIES) +libfind_process(Glibmm) + diff --git a/CMakeScripts/FindLibXML++.cmake b/CMakeScripts/FindLibXML++.cmake new file mode 100644 index 0000000000000000000000000000000000000000..d5ff78a69148d5145bf04701e5733f9589f77511 --- /dev/null +++ b/CMakeScripts/FindLibXML++.cmake @@ -0,0 +1,41 @@ +# - Try to find LibXML++ 2.6 +# Once done, this will define +# +# LibXML++_FOUND - system has LibXML++ +# LibXML++_INCLUDE_DIRS - the LibXML++ include directories +# LibXML++_LIBRARIES - link these to use LibXML++ + +include(LibFindMacros) + +# Dependencies +libfind_package(LibXML++ LibXML2) +libfind_package(LibXML++ Glibmm) + +# Use pkg-config to get hints about paths +libfind_pkg_check_modules(LibXML++_PKGCONF libxml++-2.6) + +# Main include dir +find_path(LibXML++_INCLUDE_DIR + NAMES libxml++/libxml++.h + PATHS ${LibXML++_PKGCONF_INCLUDE_DIRS} + PATH_SUFFIXES libxml++-2.6 +) + +# Glib-related libraries also use a separate config header, which is in lib dir +find_path(LibXML++Config_INCLUDE_DIR + NAMES libxml++config.h + PATHS ${LibXML++_PKGCONF_INCLUDE_DIRS} /usr + PATH_SUFFIXES lib/libxml++-2.6/include +) + +# Finally the library itself +find_library(LibXML++_LIBRARY + NAMES xml++-2.6 + PATHS ${LibXML++_PKGCONF_LIBRARY_DIRS} +) + +# Set the include dir variables and the libraries and let libfind_process do the rest. +# NOTE: Singular variables for this library, plural for libraries this this lib depends on. +set(LibXML++_PROCESS_INCLUDES LibXML++_INCLUDE_DIR LibXML++Config_INCLUDE_DIR LibXML2_INCLUDE_DIRS Glibmm_INCLUDE_DIRS) +set(LibXML++_PROCESS_LIBS LibXML++_LIBRARY LibXML2_LIBRARIES Glibmm_LIBRARIES) +libfind_process(LibXML++) diff --git a/CMakeScripts/FindLibXML2.cmake b/CMakeScripts/FindLibXML2.cmake new file mode 100644 index 0000000000000000000000000000000000000000..013b27880864bad8a4cc0fbe5d087c7759d38aff --- /dev/null +++ b/CMakeScripts/FindLibXML2.cmake @@ -0,0 +1,90 @@ +# - Try to find libxml2 +# Once done this will define +# +# LibXML2_FOUND - system has xml2 +# LibXML2_INCLUDE_DIRS - the xml2 include directory +# LibXML2_LIBRARIES - Link these to use xml2 +# LibXML2_DEFINITIONS - Compiler switches required for using xml2 +# +# Copyright (c) 2008 Andreas Schneider <mail@cynapses.org> +# Modified for other libraries by Lasse Kärkkäinen <tronic> +# +# Redistribution and use is allowed according to the terms of the New +# BSD license. +# For details see the accompanying COPYING-CMAKE-SCRIPTS file. +# + + +if (LibXML2_LIBRARIES AND LibXML2_INCLUDE_DIRS) + # in cache already + set(LibXML2_FOUND TRUE) +else (LibXML2_LIBRARIES AND LibXML2_INCLUDE_DIRS) + # use pkg-config to get the directories and then use these values + # in the FIND_PATH() and FIND_LIBRARY() calls + if (${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 4) + include(UsePkgConfig) + pkgconfig(libxml-2.0 _LibXML2_INCLUDEDIR _LibXML2_LIBDIR _LibXML2_LDFLAGS _LibXML2_CFLAGS) + else (${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 4) + find_package(PkgConfig) + if (PKG_CONFIG_FOUND) + pkg_check_modules(_LIBXML2 libxml-2.0) + endif (PKG_CONFIG_FOUND) + endif (${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 4) + find_path(LibXML2_INCLUDE_DIR + NAMES + libxml/xpath.h + PATHS + ${_LibXML2_INCLUDEDIR} + /usr/include + /usr/local/include + /opt/local/include + /sw/include + PATH_SUFFIXES + libxml2 + ) + + find_library(LibXML2_LIBRARY + NAMES + xml2 + PATHS + ${_LibXML2_LIBDIR} + /usr/lib + /usr/local/lib + /opt/local/lib + /sw/lib + ) + + if (LibXML2_LIBRARY) + set(LibXML2_FOUND TRUE) + endif (LibXML2_LIBRARY) + + set(LibXML2_INCLUDE_DIRS + ${LibXML2_INCLUDE_DIR} + ) + + if (LibXML2_FOUND) + set(LibXML2_LIBRARIES + ${LibXML2_LIBRARIES} + ${LibXML2_LIBRARY} + ) + endif (LibXML2_FOUND) + + if (LibXML2_INCLUDE_DIRS AND LibXML2_LIBRARIES) + set(LibXML2_FOUND TRUE) + endif (LibXML2_INCLUDE_DIRS AND LibXML2_LIBRARIES) + + if (LibXML2_FOUND) + if (NOT LibXML2_FIND_QUIETLY) + message(STATUS "Found libxml2: ${LibXML2_LIBRARY}") + endif (NOT LibXML2_FIND_QUIETLY) + else (LibXML2_FOUND) + if (LibXML2_FIND_REQUIRED) + message(FATAL_ERROR "Could not find libxml2") + endif (LibXML2_FIND_REQUIRED) + endif (LibXML2_FOUND) + + # show the LibXML2_INCLUDE_DIRS and LibXML2_LIBRARIES variables only in the advanced view + mark_as_advanced(LibXML2_INCLUDE_DIRS LibXML2_LIBRARIES) + +endif (LibXML2_LIBRARIES AND LibXML2_INCLUDE_DIRS) + diff --git a/CMakeScripts/FindSigC++.cmake b/CMakeScripts/FindSigC++.cmake new file mode 100644 index 0000000000000000000000000000000000000000..7d34d9ecfd8a5b872fb0ee41d9dada49c21fbea8 --- /dev/null +++ b/CMakeScripts/FindSigC++.cmake @@ -0,0 +1,34 @@ +# - Try to find SigC++-2.0 +# Once done, this will define +# +# SigC++_FOUND - system has SigC++ +# SigC++_INCLUDE_DIRS - the SigC++ include directories +# SigC++_LIBRARIES - link these to use SigC++ + +include(LibFindMacros) + +# Use pkg-config to get hints about paths +libfind_pkg_check_modules(SigC++_PKGCONF sigc++-2.0) + +# Main include dir +find_path(SigC++_INCLUDE_DIR + NAMES sigc++/sigc++.h + PATHS ${SigC++_PKGCONF_INCLUDE_DIRS} + PATH_SUFFIXES sigc++-2.0 +) + +# Glib-related libraries also use a separate config header, which is in lib dir +find_path(SigC++Config_INCLUDE_DIR + NAMES sigc++config.h + PATHS ${SigC++_PKGCONF_INCLUDE_DIRS} /usr + PATH_SUFFIXES lib/sigc++-2.0/include +) + +libfind_library(SigC++ sigc 2.0) + +# Set the include dir variables and the libraries and let libfind_process do the rest. +# NOTE: Singular variables for this library, plural for libraries this this lib depends on. +set(SigC++_PROCESS_INCLUDES SigC++_INCLUDE_DIR SigC++Config_INCLUDE_DIR) +set(SigC++_PROCESS_LIBS SigC++_LIBRARY) +libfind_process(SigC++) + diff --git a/CMakeScripts/LibFindMacros.cmake b/CMakeScripts/LibFindMacros.cmake new file mode 100644 index 0000000000000000000000000000000000000000..69975c51be3f9c5e0ff372a4424f8de3b580ee88 --- /dev/null +++ b/CMakeScripts/LibFindMacros.cmake @@ -0,0 +1,99 @@ +# Works the same as find_package, but forwards the "REQUIRED" and "QUIET" arguments +# used for the current package. For this to work, the first parameter must be the +# prefix of the current package, then the prefix of the new package etc, which are +# passed to find_package. +macro (libfind_package PREFIX) + set (LIBFIND_PACKAGE_ARGS ${ARGN}) + if (${PREFIX}_FIND_QUIETLY) + set (LIBFIND_PACKAGE_ARGS ${LIBFIND_PACKAGE_ARGS} QUIET) + endif (${PREFIX}_FIND_QUIETLY) + if (${PREFIX}_FIND_REQUIRED) + set (LIBFIND_PACKAGE_ARGS ${LIBFIND_PACKAGE_ARGS} REQUIRED) + endif (${PREFIX}_FIND_REQUIRED) + find_package(${LIBFIND_PACKAGE_ARGS}) +endmacro (libfind_package) + +# CMake developers made the UsePkgConfig system deprecated in the same release (2.6) +# where they added pkg_check_modules. Consequently I need to support both in my scripts +# to avoid those deprecated warnings. Here's a helper that does just that. +# Works identically to pkg_check_modules, except that no checks are needed prior to use. +macro (libfind_pkg_check_modules PREFIX PKGNAME) + if (${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 4) + include(UsePkgConfig) + pkgconfig(${PKGNAME} ${PREFIX}_INCLUDE_DIRS ${PREFIX}_LIBRARY_DIRS ${PREFIX}_LDFLAGS ${PREFIX}_CFLAGS) + else (${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 4) + find_package(PkgConfig) + if (PKG_CONFIG_FOUND) + pkg_check_modules(${PREFIX} ${PKGNAME}) + endif (PKG_CONFIG_FOUND) + endif (${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 4) +endmacro (libfind_pkg_check_modules) + +# Do the final processing once the paths have been detected. +# If include dirs are needed, ${PREFIX}_PROCESS_INCLUDES should be set to contain +# all the variables, each of which contain one include directory. +# Ditto for ${PREFIX}_PROCESS_LIBS and library files. +# Will set ${PREFIX}_FOUND, ${PREFIX}_INCLUDE_DIRS and ${PREFIX}_LIBRARIES. +# Also handles errors in case library detection was required, etc. +macro (libfind_process PREFIX) + # Skip processing if already processed during this run + if (NOT ${PREFIX}_FOUND) + # Start with the assumption that the library was found + set (${PREFIX}_FOUND TRUE) + + # Process all includes and set _FOUND to false if any are missing + foreach (i ${${PREFIX}_PROCESS_INCLUDES}) + if (${i}) + set (${PREFIX}_INCLUDE_DIRS ${${PREFIX}_INCLUDE_DIRS} ${${i}}) + mark_as_advanced(${i}) + else (${i}) + set (${PREFIX}_FOUND FALSE) + endif (${i}) + endforeach (i) + + # Process all libraries and set _FOUND to false if any are missing + foreach (i ${${PREFIX}_PROCESS_LIBS}) + if (${i}) + set (${PREFIX}_LIBRARIES ${${PREFIX}_LIBRARIES} ${${i}}) + mark_as_advanced(${i}) + else (${i}) + set (${PREFIX}_FOUND FALSE) + endif (${i}) + endforeach (i) + + # Print message and/or exit on fatal error + if (${PREFIX}_FOUND) + if (NOT ${PREFIX}_FIND_QUIETLY) + message (STATUS "Found ${PREFIX} ${${PREFIX}_VERSION}") + endif (NOT ${PREFIX}_FIND_QUIETLY) + else (${PREFIX}_FOUND) + if (${PREFIX}_FIND_REQUIRED) + foreach (i ${${PREFIX}_PROCESS_INCLUDES} ${${PREFIX}_PROCESS_LIBS}) + message("${i}=${${i}}") + endforeach (i) + message (FATAL_ERROR "Required library ${PREFIX} NOT FOUND.\nInstall the library (dev version) and try again. If the library is already installed, use ccmake to set the missing variables manually.") + endif (${PREFIX}_FIND_REQUIRED) + endif (${PREFIX}_FOUND) + endif (NOT ${PREFIX}_FOUND) +endmacro (libfind_process) + +macro(libfind_library PREFIX basename) + set(TMP "") + if(MSVC80) + set(TMP -vc80) + endif(MSVC80) + if(MSVC90) + set(TMP -vc90) + endif(MSVC90) + set(${PREFIX}_LIBNAMES ${basename}${TMP}) + if(${ARGC} GREATER 2) + set(${PREFIX}_LIBNAMES ${basename}${TMP}-${ARGV2}) + string(REGEX REPLACE "\\." "_" TMP ${${PREFIX}_LIBNAMES}) + set(${PREFIX}_LIBNAMES ${${PREFIX}_LIBNAMES} ${TMP}) + endif(${ARGC} GREATER 2) + find_library(${PREFIX}_LIBRARY + NAMES ${${PREFIX}_LIBNAMES} + PATHS ${${PREFIX}_PKGCONF_LIBRARY_DIRS} + ) +endmacro(libfind_library) + diff --git a/wcclparser/CMakeLists.txt b/wcclparser/CMakeLists.txt index 49180955e2167c8cd422a150971f211aa4b59dd5..822e7f2ac6c301b1d1d107efe0dc8585049a1495 100644 --- a/wcclparser/CMakeLists.txt +++ b/wcclparser/CMakeLists.txt @@ -7,6 +7,11 @@ if (Libedit_FOUND) set(LIBS ${LIBS} ${Libedit_LIBRARIES}) endif (Libedit_FOUND) +find_package(LibXML++ REQUIRED) +include_directories(${LibXML++_INCLUDE_DIRS}) +link_directories(${LibXML++_LIBRARY_DIRS}) +set(LIBS ${LIBS} ${LibXML++_LIBRARIES}) + include_directories( ${CMAKE_SOURCE_DIR} ) add_definitions(-DLIBWCCL_WCCLPARSER_DATA_DIR="${PROJECT_SOURCE_DIR}/")