[CMake] patch : Qt Static on windows
John Biddiscombe
biddisco at cscs.ch
Fri May 12 12:35:21 EDT 2006
Clinton
> How about checking the .prl file for whether Qt is built as shared
> libraries or not. That file holds valuable information about the Qt
> configuration.
Excellent. Done.
...
FILE(READ ${QT_LIBRARY_DIR}/QtCore.prl QT_CORE_PRL)
IF(${QT_CORE_PRL} MATCHES "static")
...
the prl file does not exist on linux, do we need to bother checking for
another one if it's not win32?
> The real thing your patch does is not set QT_DLL if it is a static Qt
> library. That is all that should be necessary.
OK.
> Grepping through the public Qt headers, QT_GUI_LIB is found in only one
> header file. It should always be set if using the QtGui library, so
> that some features that combine QtGui and QtSql can be used.
> The other QT_*_LIB defines are probably bogus, and should probably be
> removed entirely.
Good.
In fact in the 4.1.2 that I built yesterday even QT_GUI_LIB seems to
exist only in one place related to testing.
I've removed all trace of them and done a couple of test builds. All ok
so far.
Attached is patch of reduced size.
JB
-------------- next part --------------
Index: Modules/FindQt4.cmake
===================================================================
RCS file: /cvsroot/CMake/CMake/Modules/FindQt4.cmake,v
retrieving revision 1.30
diff -u -r1.30 FindQt4.cmake
--- Modules/FindQt4.cmake 11 May 2006 14:41:42 -0000 1.30
+++ Modules/FindQt4.cmake 12 May 2006 16:33:30 -0000
@@ -165,12 +165,6 @@
SET(QT_USE_FILE ${CMAKE_ROOT}/Modules/UseQt4.cmake)
-SET( QT_DEFINITIONS "")
-
-IF (WIN32)
- SET(QT_DEFINITIONS -DQT_DLL)
-ENDIF(WIN32)
-
# check for qmake
FIND_PROGRAM(QT_QMAKE_EXECUTABLE NAMES qmake qmake-qt4 PATHS
"[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\4.0.0;InstallDir]/bin"
@@ -854,7 +848,23 @@
SET(QT_QTCORE_LIBRARY ${QT_QTCORE_LIBRARY} ${CMAKE_THREAD_LIBS_INIT})
ENDIF(UNIX)
-
+ #######################################
+ #
+ # if Qt Static build on windows,
+ #
+ #######################################
+ IF (WIN32)
+ # if Qt was built as a static lib then don't set QT_DLL flag
+ IF(EXISTS ${QT_LIBRARY_DIR}/QtCore.prl)
+ FILE(READ ${QT_LIBRARY_DIR}/QtCore.prl QT_CORE_PRL)
+ IF(${QT_CORE_PRL} MATCHES "static")
+ SET(QT_STATIC 1)
+ ELSE(${QT_CORE_PRL} MATCHES "static")
+ SET(QT_DEFINITIONS ${QT_DEFINITIONS} -DQT_DLL)
+ ENDIF(${QT_CORE_PRL} MATCHES "static")
+ ENDIF(EXISTS ${QT_LIBRARY_DIR}/QtCore.prl)
+ ENDIF(WIN32)
+
#######################################
#
# compatibility settings
Index: Modules/UseQt4.cmake
===================================================================
RCS file: /cvsroot/CMake/CMake/Modules/UseQt4.cmake,v
retrieving revision 1.4
diff -u -r1.4 UseQt4.cmake
--- Modules/UseQt4.cmake 27 Apr 2006 19:07:23 -0000 1.4
+++ Modules/UseQt4.cmake 12 May 2006 16:26:14 -0000
@@ -13,7 +13,6 @@
IF (NOT QT_DONT_USE_QTCORE)
IF (QT_QTCORE_FOUND)
INCLUDE_DIRECTORIES(${QT_QTCORE_INCLUDE_DIR})
- ADD_DEFINITIONS(-DQT_CORE_LIB)
IF (CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE)
SET(QT_LIBRARIES ${QT_LIBRARIES}
optimized "${QT_QTCORE_LIBRARY}"
@@ -35,7 +34,6 @@
IF (NOT QT_DONT_USE_QTGUI)
IF (QT_QTGUI_FOUND)
INCLUDE_DIRECTORIES(${QT_QTGUI_INCLUDE_DIR})
- ADD_DEFINITIONS(-DQT_GUI_LIB)
IF (CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE)
SET(QT_LIBRARIES ${QT_LIBRARIES}
optimized "${QT_QTGUI_LIBRARY}"
@@ -57,7 +55,6 @@
IF (QT_USE_QT3SUPPORT)
IF (QT_QT3SUPPORT_FOUND)
INCLUDE_DIRECTORIES(${QT_QT3SUPPORT_INCLUDE_DIR})
- ADD_DEFINITIONS(-DQT3_SUPPORT)
IF (CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE)
SET(QT_LIBRARIES ${QT_LIBRARIES}
optimized "${QT_QT3SUPPORT_LIBRARY}"
@@ -135,7 +132,6 @@
IF (QT_USE_QTNETWORK)
IF (QT_QTNETWORK_FOUND)
INCLUDE_DIRECTORIES(${QT_QTNETWORK_INCLUDE_DIR})
- ADD_DEFINITIONS(-DQT_NETWORK_LIB)
IF (CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE)
SET(QT_LIBRARIES ${QT_LIBRARIES}
optimized "${QT_QTNETWORK_LIBRARY}"
@@ -168,7 +164,6 @@
IF (QT_USE_QTOPENGL)
IF (QT_QTOPENGL_FOUND)
INCLUDE_DIRECTORIES(${QT_QTOPENGL_INCLUDE_DIR})
- ADD_DEFINITIONS(-DQT_OPENGL_LIB)
IF (CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE)
SET(QT_LIBRARIES ${QT_LIBRARIES}
optimized "${QT_QTOPENGL_LIBRARY}"
@@ -185,7 +180,6 @@
IF (QT_USE_QTSQL)
IF (QT_QTSQL_FOUND)
INCLUDE_DIRECTORIES(${QT_QTSQL_INCLUDE_DIR})
- ADD_DEFINITIONS(-DQT_SQL_LIB)
IF (CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE)
SET(QT_LIBRARIES ${QT_LIBRARIES}
optimized "${QT_QTSQL_LIBRARY}"
@@ -202,7 +196,6 @@
IF (QT_USE_QTXML)
IF (QT_QTXML_FOUND)
INCLUDE_DIRECTORIES(${QT_QTXML_INCLUDE_DIR})
- ADD_DEFINITIONS(-DQT_XML_LIB)
IF (CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE)
SET(QT_LIBRARIES ${QT_LIBRARIES}
optimized "${QT_QTXML_LIBRARY}"
More information about the CMake
mailing list