From f211ea47bea073761ce7afcaab4f4369262b76cb Mon Sep 17 00:00:00 2001
From: Julien Malik <julien.malik@c-s.fr>
Date: Fri, 27 Jul 2012 15:40:18 +0200
Subject: [PATCH] COMP: support external FLTK 1.3 on windows

---
 CMake/FindFLTK.cmake   | 64 +++++++++++++++++++++++++++++-------------
 CMake/ImportFLTK.cmake | 15 ++++++++--
 2 files changed, 57 insertions(+), 22 deletions(-)

diff --git a/CMake/FindFLTK.cmake b/CMake/FindFLTK.cmake
index 35eb63abb6..1bb6314f31 100644
--- a/CMake/FindFLTK.cmake
+++ b/CMake/FindFLTK.cmake
@@ -171,7 +171,7 @@ IF(FLTK_BUILT_WITH_CMAKE) # FLTK was build using CMak
                FL FLTK_USE_SYSTEM_ZLIB
                )
         
-  ELSE (FLUID_COMMAND)  
+  ELSE (FLUID_COMMAND)
     # If fluid command is not available we try to use the 1.3.0 version  
      
     # Create the version string
@@ -179,26 +179,52 @@ IF(FLTK_BUILT_WITH_CMAKE) # FLTK was build using CMak
       
     # Fluid executable
     SET(FLTK_FLUID_EXECUTABLE ${FLTK_FLUID_EXECUTABLE} CACHE FILEPATH "Fluid executable")
-         
-    SET(FLTK_BASE_LIBRARY ${FLTK_LIB_DIR}/libfltk.so)
-    SET(FLTK_GL_LIBRARY ${FLTK_LIB_DIR}/libfltk_gl.so)
-    SET(FLTK_FORMS_LIBRARY ${FLTK_LIB_DIR}/libfltk_forms.so)
-    SET(FLTK_IMAGES_LIBRARY ${FLTK_LIB_DIR}/libfltk_images.so)
+
+    # Using the fltk shared lib ion a static build does not work (undefined symbol)
+    IF (BUILD_SHARED_LIBS)
+        FIND_LIBRARY(FLTK_BASE_LIBRARY
+                     NAMES fltkdll fltkdlld fltk
+                     PATHS ${FLTK_LIB_DIR})
+        FIND_LIBRARY(FLTK_GL_LIBRARY
+                     NAMES fltkgldll fltkgldlld fltk_gl
+                     PATHS ${FLTK_LIB_DIR})
+        FIND_LIBRARY(FLTK_IMAGES_LIBRARY
+                     NAMES fltkimagesdll fltkimagesdlld fltk_images
+                     PATHS ${FLTK_LIB_DIR})
+        FIND_LIBRARY(FLTK_FORMS_LIBRARY
+                     NAMES fltkformsdll fltkformsdlld fltk_forms
+                     PATHS ${FLTK_LIB_DIR})
+    ELSE(BUILD_SHARED_LIBS)
+        FIND_LIBRARY(FLTK_BASE_LIBRARY
+                     NAMES fltk fltkd
+                     PATHS ${FLTK_LIB_DIR})
+        FIND_LIBRARY(FLTK_GL_LIBRARY
+                     NAMES fltkgl fltkgld fltk_gl
+                     PATHS ${FLTK_LIB_DIR})
+        FIND_LIBRARY(FLTK_IMAGES_LIBRARY
+                     NAMES fltkimages fltkimagesd fltk_images
+                     PATHS ${FLTK_LIB_DIR})
+        FIND_LIBRARY(FLTK_FORMS_LIBRARY
+                     NAMES fltkforms fltkformsd fltk_forms
+                     PATHS ${FLTK_LIB_DIR})
+    ENDIF(BUILD_SHARED_LIBS)
 
   ENDIF (FLUID_COMMAND)
-    
-  SET(FLTK_IMAGES_LIBS "")
-  IF(FLFLTK_USE_SYSTEM_JPEG)
-    SET(FLTK_IMAGES_LIBS ${FLTK_IMAGES_LIBS} fltk_jpeg)
-  ENDIF(FLFLTK_USE_SYSTEM_JPEG)
-  IF(FLFLTK_USE_SYSTEM_PNG)
-    SET(FLTK_IMAGES_LIBS ${FLTK_IMAGES_LIBS} fltk_png)
-  ENDIF(FLFLTK_USE_SYSTEM_PNG)
-  IF(FLFLTK_USE_SYSTEM_ZLIB)
-    SET(FLTK_IMAGES_LIBS ${FLTK_IMAGES_LIBS} fltk_zlib)
-  ENDIF(FLFLTK_USE_SYSTEM_ZLIB)
-  SET(FLTK_IMAGES_LIBS "${FLTK_IMAGES_LIBS}" CACHE INTERNAL
-      "Extra libraries for fltk_images library.")
+
+# Disable support for FLTK built with internal version of jpeg/png/zlib
+# Those variable were not used further anyhow.
+#  SET(FLTK_IMAGES_LIBS "")
+#  IF(FLFLTK_USE_SYSTEM_JPEG)
+#    SET(FLTK_IMAGES_LIBS ${FLTK_IMAGES_LIBS} fltk_jpeg)
+#  ENDIF(FLFLTK_USE_SYSTEM_JPEG)
+#  IF(FLFLTK_USE_SYSTEM_PNG)
+#    SET(FLTK_IMAGES_LIBS ${FLTK_IMAGES_LIBS} fltk_png)
+#  ENDIF(FLFLTK_USE_SYSTEM_PNG)
+#  IF(FLFLTK_USE_SYSTEM_ZLIB)
+#    SET(FLTK_IMAGES_LIBS ${FLTK_IMAGES_LIBS} fltk_zlib)
+#  ENDIF(FLFLTK_USE_SYSTEM_ZLIB)
+#  SET(FLTK_IMAGES_LIBS "${FLTK_IMAGES_LIBS}" CACHE INTERNAL
+#      "Extra libraries for fltk_images library.")
 
 ELSE(FLTK_BUILT_WITH_CMAKE) # FLTK was not build using CMake
 
diff --git a/CMake/ImportFLTK.cmake b/CMake/ImportFLTK.cmake
index cdb5ce42ca..0e2aad4db8 100644
--- a/CMake/ImportFLTK.cmake
+++ b/CMake/ImportFLTK.cmake
@@ -43,7 +43,16 @@ IF(OTB_USE_VISU_GUI)
           
           # Only if we used a FLTK 1.3.0 because in FLTK 1.1.>=9 is already done
           IF(FLTK_USE_FILE)
-            INCLUDE(${FLTK_USE_FILE})
+            INCLUDE_DIRECTORIES(${FLTK_INCLUDE_DIR})
+            
+            # UseFLTK is buggy on windows, so we do not import it
+            # The definition of FLTK_EXE_LINKER_FLAGS in FLTKConfig.cmake
+            # is not valid and we end up with
+            # CMAKE_EXE_LINKER_FLAGS = " /STACK:10000000 /machine:X86 ; /STACK:10000000 /machine:X86"
+            # The ";" in the middle creates link error :
+            # impossible d'ouvrir le fichier en entrΘe ';.obj'
+            
+            # INCLUDE(${FLTK_USE_FILE})
           ENDIF(FLTK_USE_FILE)
           
         ELSE(OTB_USE_EXTERNAL_FLTK)
@@ -62,8 +71,8 @@ IF(OTB_USE_VISU_GUI)
 		  
         ENDIF(OTB_USE_EXTERNAL_FLTK)
 
-        SET(OTB_VISU_GUI_LIBRARIES "${FLTK_LIBRARIES};${OPENGL_LIBRARIES};${FLTK_PLATFORM_DEPENDENT_LIBS}")
-        
+#        SET(OTB_VISU_GUI_LIBRARIES "${FLTK_LIBRARIES};${OPENGL_LIBRARIES};${FLTK_PLATFORM_DEPENDENT_LIBS}")
+        SET(OTB_VISU_GUI_LIBRARIES "${FLTK_LIBRARIES}")
         IF(APPLE)
           SET(OTB_VISU_GUI_LIBRARIES "${OTB_VISU_GUI_LIBRARIES};-Wl,-dylib_file,/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib:/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib")
         ENDIF(APPLE)
-- 
GitLab