[Kde-bindings] FindQwt.cmake needs love

Pau Garcia i Quiles pgquiles at elpauer.org
Wed Jun 20 06:50:43 UTC 2007


Quoting Pau Garcia i Quiles <pgquiles at elpauer.org>:

> Quoting Caleb Tennis <caleb at aei-tech.com>:
>
>> This is a note somewhat to myself to take a look at this, but if
>> someone else wants
>> to fix this in the meantime, please do so.
>>
>> FindQwt.cmake does a good job, but it will happily find old Qwt
>> versions that are
>> built against Qt3, and that causes a failure when kalyptus does its magic.
>>
>> The easiest fix would be to find the headers and make sure that the
>> Qwt version is
>> at least 5.0.0, but even then it's possible to build Qwt against Qt3
>>  so some more
>> magical foo needs to be done.
>
> I have my own FindQwt5.cmake at work. I am at home now but I will
> submit it tomorrow. It is pretty generic, so it will probably be OK
> for KDE.

Here comes my FindQwt5.cmake. It checks if Qwt > 5 and on Unix it  
checks if Qwt was built against Qt3 or Qt4 (it will report both of  
them, in Qwt5-Qt3_LIBRARY and in Qwt5-Qt4_LIBRARY). On Windows it  
assumes Qwt was compiled against Qt4.



-- 
Pau Garcia i Quiles
http://www.elpauer.org
(Due to the amount of work, I usually need 10 days to answer)
-------------- next part --------------
# Find the Qwt 5.x includes and library, either the version linked to Qt3 or the version linked to Qt4
#
# On Windows it makes these assumptions:
#    - the Qwt DLL is where the other DLLs for Qt are (QT_DIR\bin) or in the path
#    - the Qwt .h files are in QT_DIR\include\Qwt or in the path
#    - the Qwt .lib is where the other LIBs for Qt are (QT_DIR\lib) or in the path
#
# Qwt5_INCLUDE_DIR - where to find qwt.h if Qwt
# Qwt5-Qt4_LIBRARY - The Qwt5 library linked against Qt4 (if it exists)
# Qwt5-Qt3_LIBRARY - The Qwt5 library linked against Qt4 (if it exists)
# Qwt5-Qt4_FOUND   - Qwt5 was found and uses Qt4
# Qwt5-Qt3_FOUND   - Qwt5 was found and uses Qt3
# Qwt5_FOUND - Set to TRUE if Qwt5 was found (linked either to Qt3 or Qt4)

# Copyright (c) 2007, Pau Garcia i Quiles, <pgquiles at elpauer.org>
#
# Redistribution and use is allowed according to the terms of the BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.

# Condition is "(A OR B) AND C", CMake does not support parentheses but it evaluates left to right
IF(Qwt5-Qt4_LIBRARY OR Qwt5-Qt3_LIBRARY AND Qwt5_INCLUDE_DIR)
    SET(Qwt5_FIND_QUIETLY TRUE)
ENDIF(Qwt5-Qt4_LIBRARY OR Qwt5-Qt3_LIBRARY AND Qwt5_INCLUDE_DIR)

FIND_PACKAGE( Qt4 REQUIRED QUIET )

IF( QT4_FOUND )
	# Is Qwt5 installed? Look for header files
	FIND_PATH( Qwt5_INCLUDE_DIR qwt.h PATHS ${QT_INCLUDE_DIR} PATH_SUFFIXES qwt qwt5 qwt-qt4 qwt5-qt4 qwt-qt3 qwt5-qt3 include qwt/include qwt5/include qwt-qt4/include qwt5-qt4/include qwt-qt3/include qwt5-qt3/include ENV PATH)
	
	# Find Qwt version
	IF( Qwt5_INCLUDE_DIR )
		FILE( READ ${Qwt5_INCLUDE_DIR}/qwt_global.h QWT_GLOBAL_H )
		STRING( REGEX MATCH "#define *QWT_VERSION *(0x05*)" QWT_IS_VERSION_5 ${QWT_GLOBAL_H})
		
		IF( QWT_IS_VERSION_5 )
		STRING(REGEX REPLACE ".*#define[\\t\\ ]+QWT_VERSION_STR[\\t\\ ]+\"([0-9]+\\.[0-9]+\\.[0-9]+)\".*" "\\1" Qwt_VERSION "${QWT_GLOBAL_H}")

		# Find Qwt5 library linked to Qt4
		FIND_LIBRARY( Qwt5-Qt4_TENTATIVE_LIBRARY NAMES qwt5-qt4 qwt-qt4 qwt5 qwt )
		IF( UNIX AND NOT CYGWIN)
			IF( Qwt5-Qt4_TENTATIVE_LIBRARY )
				#MESSAGE("Qwt5-Qt4_TENTATIVE_LIBRARY = ${Qwt5-Qt4_TENTATIVE_LIBRARY}")
				EXECUTE_PROCESS( COMMAND "ldd" ${Qwt5-Qt4_TENTATIVE_LIBRARY} OUTPUT_VARIABLE Qwt-Qt4_LIBRARIES_LINKED_TO )
				STRING( REGEX MATCH "QtCore" Qwt5_IS_LINKED_TO_Qt4 ${Qwt-Qt4_LIBRARIES_LINKED_TO})
				IF( Qwt5_IS_LINKED_TO_Qt4 )
					SET( Qwt5-Qt4_LIBRARY ${Qwt5-Qt4_TENTATIVE_LIBRARY} )
					SET( Qwt5-Qt4_FOUND TRUE )
					IF (NOT Qwt5_FIND_QUIETLY)
						MESSAGE( STATUS "Found Qwt version ${Qwt_VERSION} linked to Qt4" )
					ENDIF (NOT Qwt5_FIND_QUIETLY)
				ENDIF( Qwt5_IS_LINKED_TO_Qt4 )
			ENDIF( Qwt5-Qt4_TENTATIVE_LIBRARY )
		ELSE( UNIX AND NOT CYGWIN)
		# Assumes qwt.dll is in the Qt dir
			SET( Qwt5-Qt4_LIBRARY ${Qwt5-Qt4_TENTATIVE_LIBRARY} )
			SET( Qwt5-Qt4_FOUND TRUE )
			IF (NOT Qwt5_FIND_QUIETLY)
				MESSAGE( STATUS "Found Qwt version ${Qwt_VERSION} linked to Qt4" )
			ENDIF (NOT Qwt5_FIND_QUIETLY)
		ENDIF( UNIX AND NOT CYGWIN)
		
		
		# Find Qwt5 library linked to Qt3
		FIND_LIBRARY( Qwt5-Qt3_TENTATIVE_LIBRARY NAMES qwt-qt3 qwt qwt5-qt3 qwt5 )
		IF( UNIX AND NOT CYGWIN)
			IF( Qwt5-Qt3_TENTATIVE_LIBRARY )
				#MESSAGE("Qwt5-Qt3_TENTATIVE_LIBRARY = ${Qwt5-Qt3_TENTATIVE_LIBRARY}")
				EXECUTE_PROCESS( COMMAND "ldd" ${Qwt5-Qt3_TENTATIVE_LIBRARY} OUTPUT_VARIABLE Qwt-Qt3_LIBRARIES_LINKED_TO )
				STRING( REGEX MATCH "qt-mt" Qwt5_IS_LINKED_TO_Qt3 ${Qwt-Qt3_LIBRARIES_LINKED_TO})
				IF( Qwt5_IS_LINKED_TO_Qt3 )
					SET( Qwt5-Qt3_LIBRARY ${Qwt5-Qt3_TENTATIVE_LIBRARY} )
					SET( Qwt5-Qt3_FOUND TRUE )
					IF (NOT Qwt5_FIND_QUIETLY)
						MESSAGE( STATUS "Found Qwt version ${Qwt_VERSION} linked to Qt3" )
					ENDIF (NOT Qwt5_FIND_QUIETLY)
				ENDIF( Qwt5_IS_LINKED_TO_Qt3 )
			ENDIF( Qwt5-Qt3_TENTATIVE_LIBRARY )
		ELSE( UNIX AND NOT CYGWIN)
			SET( Qwt5-Qt3_LIBRARY ${Qwt5-Qt3_TENTATIVE_LIBRARY} )
			SET( Qwt5-Qt3_FOUND TRUE )
			IF (NOT Qwt5_FIND_QUIETLY)
				MESSAGE( STATUS "Found Qwt version ${Qwt_VERSION} linked to Qt3" )
			ENDIF (NOT Qwt5_FIND_QUIETLY)
		ENDIF( UNIX AND NOT CYGWIN)
		
		ENDIF( QWT_IS_VERSION_5 )
		
		IF( Qwt5-Qt4_FOUND OR Qwt5-Qt3_FOUND )
			SET( Qwt5_FOUND TRUE )
		ENDIF( Qwt5-Qt4_FOUND OR Qwt5-Qt3_FOUND )
		
		MARK_AS_ADVANCED( Qwt5_INCLUDE_DIR Qwt5-Qt4_LIBRARY Qwt5-Qt3_LIBRARY )
	ENDIF( Qwt5_INCLUDE_DIR )

   	IF (NOT Qwt5_FOUND AND Qwt5_FIND_REQUIRED)
      		MESSAGE(FATAL_ERROR "Could not find Qwt 5.x")
   	ENDIF (NOT Qwt5_FOUND AND Qwt5_FIND_REQUIRED)

ENDIF( QT4_FOUND )


More information about the Kde-bindings mailing list