On 2010-07-17 Bruno Postle <[email protected]> wrote:
[...]
> Actually, since you already added a pkgconfig file to libpano13, it  
> would be nicer if the Hugin cmake setup just checked for the right  
> libpano13.

Hello,

because pkg-config does not seem to required/available on WIN32 I have
gone for pulling the version string from pano13/version.h instead.

Patch attached.

cu andreas
--- hugin-2010.2.0+dfsg~beta1.orig/CMakeLists.txt
+++ hugin-2010.2.0+dfsg~beta1/CMakeLists.txt
@@ -209,7 +209,7 @@ ENDIF(GLEW_FOUND)
 ## Panotools
 ##
 
-FIND_PACKAGE(PANO13)
+FIND_PACKAGE(PANO13 2.9.17 REQUIRED)
 
 IF(PANO13_FOUND)
   SET(PANO_LIBRARIES ${PANO13_LIBRARIES})
--- hugin-2010.2.0+dfsg~beta1.orig/CMakeModules/FindPANO13.cmake
+++ hugin-2010.2.0+dfsg~beta1/CMakeModules/FindPANO13.cmake
@@ -32,16 +32,56 @@ FIND_LIBRARY(PANO13_LIBRARIES
 
 IF(PANO13_INCLUDE_DIR)
   IF(PANO13_LIBRARIES)
-    SET( PANO13_FOUND "YES" )
-    FIND_LIBRARY( PANO13_DEBUG_LIBRARIES
-      NAMES Panotools pano13d pano13
-      PATHS /usr/lib /usr/local/lib 
-            "${PANO13_INCLUDE_DIR}/pano13/Debug LIB CMD"
-            "${PANO13_INCLUDE_DIR}/pano13/Debug CMD/Win32"
-            ${PANO13_INCLUDE_DIR}/pano13/Debug
-            ${SOURCE_BASE_DIR}/pano13/lib
-            ${SOURCE_BASE_DIR}/pano13
-    )
+    FILE(STRINGS "${PANO13_INCLUDE_DIR}/pano13/version.h" PANO13_VERSION_H REGEX "#define VERSION")
+    STRING(REGEX REPLACE ".*#define +VERSION +\"([.0-9]+).*" "\\1" PANO13_VERSION "${PANO13_VERSION_H}")
+    STRING(REGEX REPLACE "([^.]+)\\.([^.]+)\\.([^.]+)" "\\1" PANO13_VERSION_MAJOR "${PANO13_VERSION}")
+    STRING(REGEX REPLACE "([^.]+)\\.([^.]+)\\.([^.]+)" "\\2" PANO13_VERSION_MINOR "${PANO13_VERSION}")
+    STRING(REGEX REPLACE "([^.]+)\\.([^.]+)\\.([^.]+)" "\\3" PANO13_VERSION_PATCH "${PANO13_VERSION}")
+    # version comparison stuff. Very ugly for multiple reasons:
+    # + VERSION_GREATER is not available in cmake 2.6.0.
+    # + cmake does not allow combining AND with OR like in e.g.
+    #   "if(2 LESS 3 AND (3 LESS 4 OR 5 LESS 6))".
+    # + At least cmake 2.6.0 does not set PANO13_FIND_VERSION_* to 0 by default.
+    IF(NOT DEFINED PANO13_FIND_VERSION_MAJOR OR "${PANO13_VERSION_MAJOR}" GREATER "${PANO13_FIND_VERSION_MAJOR}")
+      SET( PANO13_FOUND "YES" )
+    ELSEIF("${PANO13_VERSION_MAJOR}" EQUAL "${PANO13_FIND_VERSION_MAJOR}")
+      IF(NOT DEFINED PANO13_FIND_VERSION_MINOR OR "${PANO13_VERSION_MINOR}" GREATER "${PANO13_FIND_VERSION_MINOR}")
+        SET( PANO13_FOUND "YES" )
+      ELSEIF("${PANO13_VERSION_MINOR}" EQUAL "${PANO13_FIND_VERSION_MINOR}")
+        IF(NOT DEFINED PANO13_FIND_VERSION_PATCH OR NOT "${PANO13_VERSION_PATCH}" LESS "${PANO13_FIND_VERSION_PATCH}")
+          SET( PANO13_FOUND "YES" )
+        ENDIF()
+      ENDIF()
+    ENDIF()
   ENDIF(PANO13_LIBRARIES)
 ENDIF(PANO13_INCLUDE_DIR)
 
+IF(PANO13_FOUND)
+  SET( PANO13_VERSION_COUNT 3)
+  IF(NOT PANO13_FIND_QUIETLY)
+    MESSAGE(STATUS "libpano13 version: ${PANO13_VERSION} major ${PANO13_VERSION_MAJOR} minor ${PANO13_VERSION_MINOR} patch ${PANO13_VERSION_PATCH}")
+  ENDIF(NOT PANO13_FIND_QUIETLY)
+  FIND_LIBRARY( PANO13_DEBUG_LIBRARIES
+    NAMES Panotools pano13d pano13
+    PATHS /usr/lib /usr/local/lib 
+	  "${PANO13_INCLUDE_DIR}/pano13/Debug LIB CMD"
+	  "${PANO13_INCLUDE_DIR}/pano13/Debug CMD/Win32"
+	  ${PANO13_INCLUDE_DIR}/pano13/Debug
+	  ${SOURCE_BASE_DIR}/pano13/lib
+	  ${SOURCE_BASE_DIR}/pano13
+  )
+ELSE(PANO13_FOUND)
+  IF(PANO13_FIND_REQUIRED)
+    IF(PANO13_VERSION)
+      MESSAGE(FATAL_ERROR "libpano13 version: ${PANO13_FIND_VERSION} required, ${PANO13_VERSION} found")
+    ELSE(PANO13_VERSION)
+      MESSAGE(FATAL_ERROR "libpano13 not found")
+    ENDIF(PANO13_VERSION)
+  ELSE(PANO13_FIND_REQUIRED)
+    IF(PANO13_VERSION)
+      MESSAGE(STATUS "libpano13 version: ${PANO13_FIND_VERSION} required, ${PANO13_VERSION} found")
+    ELSE(PANO13_VERSION)
+      MESSAGE(STATUS "libpano13 not found")
+    ENDIF(PANO13_VERSION)
+  ENDIF(PANO13_FIND_REQUIRED)
+ENDIF(PANO13_FOUND)

Attachment: signature.asc
Description: Digital signature

Reply via email to