From 20bd544eb6b28bc13b7249fc8c5db10d25916513 Mon Sep 17 00:00:00 2001 From: Sebastian Schmelzer Date: Thu, 1 Dec 2011 13:04:18 +0100 Subject: let cmake find qxt --- CMakeLists.txt | 19 +++++--- cmake/FindQxt.cmake | 111 +++++++++++++++++++++++++++++++++++++++++++++++ cmake/QxtConfig.cmake | 117 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 242 insertions(+), 5 deletions(-) create mode 100644 cmake/FindQxt.cmake create mode 100644 cmake/QxtConfig.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index bb53f39..8bc7ac6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,6 +2,8 @@ cmake_minimum_required(VERSION 2.8) project(fbgui) +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/") + set(QT_MIN_VERSION "4.7.0") find_package(Qt4 REQUIRED) if (QT4_FOUND) @@ -10,11 +12,14 @@ else(QT4_FOUND) message(FATAL_ERROR "QT4 not found!") endif(QT4_FOUND) -#find_package(Qxt REQUIRED) set(QT_USE_QTNETWORK TRUE) set(QT_USE_QTWEBKIT TRUE) +find_package(Qxt REQUIRED) +SET(QXT_USE_QXTCORE TRUE) + + file(GLOB FBGUI_SOURCES src/fbgui/*.cpp) file(GLOB FBGUI_MOC_HEADERS src/fbgui/*.h src/common/*.h) file(GLOB FBGUI_UIS src/fbgui/*.ui) @@ -28,15 +33,17 @@ include_directories(${CMAKE_CURRENT_BINARY_DIR} ./src/common ./build ${QT_INCLUDES} - /usr/local/Qxt/include/QxtCore + ${QXT_INCLUDE_DIRS} /usr/include/sysfs /usr/include/libusb-1.0) include(${QT_USE_FILE}) add_definitions(${QT_DEFINITIONS}) -link_directories(/usr/local/Qxt/lib /usr/lib - /usr/local/lib) +link_directories( + /usr/lib + /usr/local/lib +) #add_library( # /usr/local/Qxt/lib/libQxtCore.so @@ -50,6 +57,7 @@ QT4_WRAP_CPP(FBGUI_MOC_SOURCES ${FBGUI_MOC_HEADERS}) add_executable(fbgui ${QT_INCLUDES} + ${QXT_INCLUDES} ${FBGUI_SOURCES} ${FBGUI_MOC_SOURCES} ${FBGUI_UI_HEADERS} @@ -57,4 +65,5 @@ add_executable(fbgui target_link_libraries(fbgui ${QT_LIBRARIES} - QxtCore qjson sysfs usb-1.0 customdhcpcd nl) + ${QXT_LIBRARIES} + qjson sysfs usb-1.0 customdhcpcd nl) diff --git a/cmake/FindQxt.cmake b/cmake/FindQxt.cmake new file mode 100644 index 0000000..402fb51 --- /dev/null +++ b/cmake/FindQxt.cmake @@ -0,0 +1,111 @@ +############# +## basic FindQxt.cmake +## This is an *EXTREMELY BASIC* cmake find/config file for +## those times you have a cmake project and wish to use +## libQxt. +## +## It should be noted that at the time of writing, that +## I (mschnee) have an extremely limited understanding of the +## way Find*.cmake files work, but I have attempted to +## emulate what FindQt4.cmake and a few others do. +## +## To enable a specific component, set your QXT_USE_${modname}: +## SET(QXT_USE_QXTCORE TRUE) +## SET(QXT_USE_QXTGUI FALSE) +## Currently available components: +## QxtCore, QxtGui, QxtNetwork, QxtWeb, QxtSql +## Auto-including directories are enabled with INCLUDE_DIRECTORIES(), but +## can be accessed if necessary via ${QXT_INCLUDE_DIRS} +## +## To add the libraries to your build, TARGET_LINK_LIBRARIES(), such as... +## TARGET_LINK_LIBRARIES(YourTargetNameHere ${QXT_LIBRARIES}) +## ...or.. +## TARGET_LINK_LIBRARIES(YourTargetNameHere ${QT_LIBRARIES} ${QXT_LIBRARIES}) +################### TODO: +## The purpose of this cmake file is to find what components +## exist, regardless of how libQxt was build or configured, thus +## it should search/find all possible options. As I am not aware +## that any module requires anything special to be used, adding all +## modules to ${QXT_MODULES} below should be sufficient. +## Eventually, there should be version numbers, but +## I am still too unfamiliar with cmake to determine how to do +## version checks and comparisons. +## At the moment, this cmake returns a failure if you +## try to use a component that doesn't exist. I don't know how to +## set up warnings. +## It would be nice having a FindQxt.cmake and a UseQxt.cmake +## file like done for Qt - one to check for everything in advance + +############## + +###### setup +SET(QXT_MODULES QxtGui QxtWeb QxtZeroConf QxtNetwork QxtSql QxtBerkeley QxtCore) +SET(QXT_FOUND_MODULES) +FOREACH(mod ${QXT_MODULES}) + STRING(TOUPPER ${mod} U_MOD) + SET(QXT_${U_MOD}_INCLUDE_DIR NOTFOUND) + SET(QXT_${U_MOD}_LIB_DEBUG NOTFOUND) + SET(QXT_${U_MOD}_LIB_RELEASE NOTFOUND) + SET(QXT_FOUND_${U_MOD} FALSE) +ENDFOREACH(mod) +SET(QXT_QXTGUI_DEPENDSON QxtCore) +SET(QXT_QXTWEB_DEPENDSON QxtCore QxtNetwork) +SET(QXT_QXTZEROCONF_DEPENDSON QxtCore QxtNetwork) +SET(QXT_QXTNETWORK_DEPENDSON QxtCore) +SET(QXT_QXTQSQL_DEPENDSON QxtCore) +SET(QXT_QXTBERKELEY_DEPENDSON QxtCore) + +FOREACH(mod ${QXT_MODULES}) + STRING(TOUPPER ${mod} U_MOD) + FIND_PATH(QXT_${U_MOD}_INCLUDE_DIR ${mod} + PATH_SUFFIXES ${mod} include/${mod} Qxt/include/${mod} include/Qxt/${mod} include/qxt/${mod} + PATHS + ~/Library/Frameworks/ + /Library/Frameworks/ + /sw/ + /usr/local/ + /usr + /opt/local/ + /opt/csw + /opt + "C:\\" + "C:\\Program Files\\" + "C:\\Program Files(x86)\\" + NO_DEFAULT_PATH + ) + FIND_LIBRARY(QXT_${U_MOD}_LIB_RELEASE NAME ${mod} + PATH_SUFFIXES Qxt/lib64 Qxt/lib lib64 lib qxt/lib64 qxt/lib + PATHS + /sw + /usr/local + /usr + /opt/local + /opt/csw + /opt + "C:\\" + "C:\\Program Files" + "C:\\Program Files(x86)" + NO_DEFAULT_PATH + ) + FIND_LIBRARY(QXT_${U_MOD}_LIB_DEBUG NAME ${mod}d + PATH_SUFFIXES Qxt/lib64 Qxt/lib lib64 lib qxt/lib64 qxt/lib + PATHS + /sw + /usr/local + /usr + /opt/local + /opt/csw + /opt + "C:\\" + "C:\\Program Files" + "C:\\Program Files(x86)" + NO_DEFAULT_PATH + ) + IF (QXT_${U_MOD}_LIB_RELEASE) + SET(QXT_FOUND_MODULES "${QXT_FOUND_MODULES} ${mod}") + ENDIF (QXT_${U_MOD}_LIB_RELEASE) + + IF (QXT_${U_MOD}_LIB_DEBUG) + SET(QXT_FOUND_MODULES "${QXT_FOUND_MODULES} ${mod}") + ENDIF (QXT_${U_MOD}_LIB_DEBUG) +ENDFOREACH(mod) diff --git a/cmake/QxtConfig.cmake b/cmake/QxtConfig.cmake new file mode 100644 index 0000000..d816285 --- /dev/null +++ b/cmake/QxtConfig.cmake @@ -0,0 +1,117 @@ +## +## It should be noted that at the time of writing, that +## I (mschnee) have an extremely limited understanding of the +## way Find*.cmake files work, but I have attempted to +## emulate what FindQt4.cmake and a few others do. +## +## To enable a specific component, set your QXT_USE_${modname}: +## SET(QXT_USE_QXTCORE TRUE) +## SET(QXT_USE_QXTGUI FALSE) +## Currently available components: +## QxtCore, QxtGui, QxtNetwork, QxtWeb, QxtSql +## Auto-including directories are enabled with INCLUDE_DIRECTORIES(), but +## can be accessed if necessary via ${QXT_INCLUDE_DIRS} +## +## To add the libraries to your build, TARGET_LINK_LIBRARIES(), such as... +## TARGET_LINK_LIBRARIES(YourTargetNameHere ${QXT_LIBRARIES}) +## ...or.. +## TARGET_LINK_LIBRARIES(YourTargetNameHere ${QT_LIBRARIES} ${QXT_LIBRARIES}) +################### TODO: +## The purpose of this cmake file is to find what components +## exist, regardless of how libQxt was build or configured, thus +## it should search/find all possible options. As I am not aware +## that any module requires anything special to be used, adding all +## modules to ${QXT_MODULES} below should be sufficient. +## Eventually, there should be version numbers, but +## I am still too unfamiliar with cmake to determine how to do +## version checks and comparisons. +## At the moment, this cmake returns a failure if you +## try to use a component that doesn't exist. I don't know how to +## set up warnings. +## It would be nice having a FindQxt.cmake and a UseQxt.cmake +## file like done for Qt - one to check for everything in advance + +############## + +###### setup .... if everything depends on core... right? +SET(QXT_MODULES QxtGui QxtNetwork QxtWork QxtSql QxtCore) +FOREACH(mod ${QXT_MODULES}) + STRING(TOUPPER ${mod} U_MOD) + SET(QXT_${U_MOD}_INCLUDE_DIR NOTFOUND) + SET(QXT_${U_MOD}_LIB_DEBUG NOTFOUND) + SET(QXT_${U_MOD}_LIB_RELEASE NOTFOUND) + SET(QXT_FOUND_${U_MOD} FALSE) +ENDFOREACH(mod) +SET(QXT_QXTGUI_DEPENDSON QxtCore) +SET(QXT_QXTNETWORK_DEPENDSON QxtCore) +SET(QXT_QXTWEB_DEPENDSON QxtCore) +SET(QXT_QXTQSQL_DEPENDSON QxtCore) + +FOREACH(mod ${QXT_MODULES}) + STRING(TOUPPER ${mod} U_MOD) + FIND_PATH(QXT_${U_MOD}_INCLUDE_DIR ${mod} + /usr/Qxt/include/${mod} + /usr/local/Qxt/include/${mod} + C:\\libQxt\\include\\${mod} + NO_DEFAULT_PATH + ) + FIND_LIBRARY(QXT_${U_MOD}_LIB_RELEASE NAME ${mod} + PATHS + /usr/Qxt/lib + /usr/local/Qxt/lib + C:\\libQxt\\lib + NO_DEFAULT_PATH + ) + FIND_LIBRARY(QXT_${U_MOD}_LIB_DEBUG NAME ${mod}d + PATHS + /usr/Qxt/lib + /usr/local/Qxt/lib + C:\\libQxt\\lib + NO_DEFAULT_PATH + ) + MESSAGE( "Found lib..." ${QXT_${U_MOD}_LIB_RELEASE} ) +ENDFOREACH(mod) + +FOREACH(mod ${QXT_MODULES}) + STRING(TOUPPER ${mod} U_MOD) + IF(QXT_${U_MOD}_INCLUDE_DIR AND QXT_${U_MOD}_LIB_RELEASE) + SET(QXT_FOUND_${U_MOD} TRUE) + ENDIF(QXT_${U_MOD}_INCLUDE_DIR AND QXT_${U_MOD}_LIB_RELEASE) +ENDFOREACH(mod) + + +##### find and include +# To use a Qxt Library.... +# SET(QXT_FIND_COMPONENTS QxtCore, QxtGui) +# ...and this will do the rest +IF( QXT_FIND_COMPONENTS ) + FOREACH( component ${QXT_FIND_COMPONENTS} ) + STRING( TOUPPER ${component} _COMPONENT ) + SET(QXT_USE_${_COMPONENT}_COMPONENT TRUE) + ENDFOREACH( component ) +ENDIF( QXT_FIND_COMPONENTS ) + +SET(QXT_LIBRARIES "") +SET(QXT_INCLUDE_DIRS "") + +# like FindQt4.cmake, in order of dependence +FOREACH( module ${QXT_MODULES} ) + STRING(TOUPPER ${module} U_MOD) + IF(QXT_USE_${U_MOD} OR QXT_DEPENDS_${U_MOD}) + MESSAGE("Searching for ${module}") + IF(QXT_FOUND_${U_MOD}) + STRING(REPLACE "QXT" "" qxt_module_def "${U_MOD}") + ADD_DEFINITIONS(-DQXT_${qxt_module_def}_LIB) + SET(QXT_INCLUDE_DIRS ${QXT_INCLUDE_DIRS} ${QXT_${U_MOD}_INCLUDE_DIR}) + INCLUDE_DIRECTORIES(${QXT_${U_MOD}_INCLUDE_DIR}) + SET(QXT_LIBRARIES ${QXT_LIBRARIES} ${QXT_${U_MOD}_LIB_RELEASE}) + ELSE(QXT_FOUND_${U_MOD}) + MESSAGE("Could not find Qxt Module ${module}") + RETURN() + ENDIF(QXT_FOUND_${U_MOD}) + FOREACH(dep QXT_${U_MOD}_DEPENDSON) + SET(QXT_DEPENDS_${dep} TRUE) + ENDFOREACH(dep) + ENDIF(QXT_USE_${U_MOD} OR QXT_DEPENDS_${U_MOD}) +ENDFOREACH(module) +MESSAGE( "Including QxtLibraries..." ${QXT_LIBRARIES} ) -- cgit v1.2.3-55-g7522