Hello,

On 03/07/13 20:21, Brad King wrote:
> The open request's discussion identified some concerns about the
> SelectLibraryConfigurations module, so please start another thread
> to raise the concerns here (or respond to this message and change the
> subject line).


I was discussing with Brad about using SelectLibraryConfigurations in
FindGTK2.cmake, but there are a couple of things that I don't like in
this module:


SelectLibraryConfigurations module currently cache and mark as advanced
the variable ${basename}_LIBRARY.
${basename}_LIBRARY_RELEASE and ${basename}_LIBRARY_DEBUG are usually
cached, because they often come from find_library().
${basename}_LIBRARY on the other hand is always of type
"optimized;${${basename}_LIBRARY_RELEASE};debug;${${basename}_LIBRARY_DEBUG}"
or just "${basename}_LIBRARY_RELEASE" or "${basename}_LIBRARY_DEBUG" if
only one version of the library is not found, if both have the same
value, or if configuration types are not supported.


I believe that caching and marking as advanced just
${basename}_LIBRARY_RELEASE and ${basename}_LIBRARY_DEBUG is enough,
just by modifying these two variables, the user has enough control on
finding the library, and having 3 variables is IMO redundant and confusing.
So, is there a reason why ${basename}_LIBRARY is cached?


Another issue is that if one of the libraries (_DEBUG or _RELEASE) is
not set, the value is set to the value of the other one.
FindQt4, from which the macro is extracted, sets the values to
XXX_LIBRARY_{DEBUG,RELEASE}-NOTFOUND instead.
In both cases the XXX_LIBRARY is correct, but IMO using NOTFOUND makes
it easier to understand which one is missing.


I tried to fix these issues, you can find the patches attached.


Regards,
 Daniele
>From bdc46bb45b395e0400302e36487dfbe81db69820 Mon Sep 17 00:00:00 2001
From: "Daniele E. Domenichelli" <daniele.domeniche...@iit.it>
Date: Mon, 8 Jul 2013 14:37:23 +0200
Subject: [PATCH 1/2] SelectLibraryConfigurations: Do not cache the _LIBRARY
 variable

---
 Modules/SelectLibraryConfigurations.cmake |    6 +-----
 1 file changed, 1 insertion(+), 5 deletions(-)

diff --git a/Modules/SelectLibraryConfigurations.cmake b/Modules/SelectLibraryConfigurations.cmake
index 5bca064..f475d87 100644
--- a/Modules/SelectLibraryConfigurations.cmake
+++ b/Modules/SelectLibraryConfigurations.cmake
@@ -73,15 +73,11 @@ macro( select_library_configurations basename )
         endif()
     endif()
 
-    set( ${basename}_LIBRARY ${${basename}_LIBRARY} CACHE FILEPATH
-        "The ${basename} library" )
-
     if( ${basename}_LIBRARY )
         set( ${basename}_FOUND TRUE )
     endif()
 
-    mark_as_advanced( ${basename}_LIBRARY
-        ${basename}_LIBRARY_RELEASE
+    mark_as_advanced( ${basename}_LIBRARY_RELEASE
         ${basename}_LIBRARY_DEBUG
     )
 endmacro()
-- 
1.7.10.4

>From cb9a2c622b21edb18e1d13db73c4d53e244a3bba Mon Sep 17 00:00:00 2001
From: "Daniele E. Domenichelli" <daniele.domeniche...@iit.it>
Date: Mon, 8 Jul 2013 17:37:18 +0200
Subject: [PATCH 2/2] SelectLibraryConfigurations: Use -NOTFOUND instead of
 copying the vars

---
 Modules/SelectLibraryConfigurations.cmake |   58 ++++++++++++-----------------
 1 file changed, 23 insertions(+), 35 deletions(-)

diff --git a/Modules/SelectLibraryConfigurations.cmake b/Modules/SelectLibraryConfigurations.cmake
index f475d87..eebaf90 100644
--- a/Modules/SelectLibraryConfigurations.cmake
+++ b/Modules/SelectLibraryConfigurations.cmake
@@ -31,48 +31,36 @@
 # This macro was adapted from the FindQt4 CMake module and is maintained by Will
 # Dicharry <wdicha...@stellarscience.com>.
 
-# Utility macro to check if one variable exists while another doesn't, and set
-# one that doesn't exist to the one that exists.
-macro( _set_library_name basename GOOD BAD )
-    if( ${basename}_LIBRARY_${GOOD} AND NOT ${basename}_LIBRARY_${BAD} )
-        set( ${basename}_LIBRARY_${BAD} ${${basename}_LIBRARY_${GOOD}} )
-        set( ${basename}_LIBRARY ${${basename}_LIBRARY_${GOOD}} )
-        set( ${basename}_LIBRARIES ${${basename}_LIBRARY_${GOOD}} )
-    endif()
-endmacro()
-
 macro( select_library_configurations basename )
-    # if only the release version was found, set the debug to be the release
-    # version.
-    _set_library_name( ${basename} RELEASE DEBUG )
-    # if only the debug version was found, set the release value to be the
-    # debug value.
-    _set_library_name( ${basename} DEBUG RELEASE )
-
-    # Set a default case, which will come into effect if
-    # -no build type is set and the generator only supports one build type
-    #  at a time (i.e. CMAKE_CONFIGURATION_TYPES is false)
-    # -${basename}_LIBRARY_DEBUG and ${basename}_LIBRARY_RELEASE are the same
-    # -${basename}_LIBRARY_DEBUG and ${basename}_LIBRARY_RELEASE are both empty
-    set( ${basename}_LIBRARY ${${basename}_LIBRARY_RELEASE} )
-    set( ${basename}_LIBRARIES ${${basename}_LIBRARY_RELEASE} )
+    if(NOT ${basename}_LIBRARY_RELEASE)
+        set(${basename}_LIBRARY_RELEASE "${basename}_LIBRARY_RELEASE-NOTFOUND" CACHE FILEPATH "Path to a library.")
+    endif()
+    if(NOT ${basename}_LIBRARY_DEBUG)
+        set(${basename}_LIBRARY_DEBUG "${basename}_LIBRARY_DEBUG-NOTFOUND" CACHE FILEPATH "Path to a library.")
+    endif()
 
     if( ${basename}_LIBRARY_DEBUG AND ${basename}_LIBRARY_RELEASE AND
-           NOT ${basename}_LIBRARY_DEBUG STREQUAL ${basename}_LIBRARY_RELEASE )
+           NOT ${basename}_LIBRARY_DEBUG STREQUAL ${basename}_LIBRARY_RELEASE AND
+           ( CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE ) )
         # if the generator supports configuration types or CMAKE_BUILD_TYPE
         # is set, then set optimized and debug options.
-        if( CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE )
-            set( ${basename}_LIBRARY "" )
-            foreach( _libname IN LISTS ${basename}_LIBRARY_RELEASE )
-                list( APPEND ${basename}_LIBRARY optimized "${_libname}" )
-            endforeach()
-            foreach( _libname IN LISTS ${basename}_LIBRARY_DEBUG )
-                list( APPEND ${basename}_LIBRARY debug "${_libname}" )
-            endforeach()
-            set( ${basename}_LIBRARIES "${${basename}_LIBRARY}" )
-        endif()
+        set( ${basename}_LIBRARY "" )
+        foreach( _libname IN LISTS ${basename}_LIBRARY_RELEASE )
+            list( APPEND ${basename}_LIBRARY optimized "${_libname}" )
+        endforeach()
+        foreach( _libname IN LISTS ${basename}_LIBRARY_DEBUG )
+            list( APPEND ${basename}_LIBRARY debug "${_libname}" )
+        endforeach()
+    elseif( ${basename}_LIBRARY_RELEASE )
+        set( ${basename}_LIBRARY ${${basename}_LIBRARY_RELEASE} )
+    elseif( ${basename}_LIBRARY_DEBUG )
+        set( ${basename}_LIBRARY ${${basename}_LIBRARY_DEBUG} )
+    else()
+        set( ${basename}_LIBRARY "${basename}_LIBRARY-NOTFOUND")
     endif()
 
+    set( ${basename}_LIBRARIES "${${basename}_LIBRARY}" )
+
     if( ${basename}_LIBRARY )
         set( ${basename}_FOUND TRUE )
     endif()
-- 
1.7.10.4

--

Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/cgi-bin/mailman/listinfo/cmake-developers

Reply via email to