aboutsummaryrefslogtreecommitdiff
path: root/modules/FindLibraryEx.cmake
blob: aee3bf9e38c05154515c7715454e6fe405749774 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#
#  FIND_LIBRARY_EX - enhanced FIND_LIBRARY to allow the search for an
#                    optional debug library with a WIN32_DEBUG_POSTFIX similar
#                    to CMAKE_DEBUG_POSTFIX when creating a shared lib
#                    it has to be the second and third argument
#
# Copyright (c) 2007, Christian Ehrlicher, <ch.ehrlicher@gmx.de>
# Redistribution and use is allowed according to the terms of the BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.

MACRO(FIND_LIBRARY_EX var_name win32_dbg_postfix_name dgb_postfix libname)

  IF(NOT ${win32_dbg_postfix_name} STREQUAL "WIN32_DEBUG_POSTFIX")

    # no WIN32_DEBUG_POSTFIX -> simply pass all arguments to FIND_LIBRARY
    FIND_LIBRARY(${var_name}
                 ${win32_dbg_postfix_name}
                 ${dgb_postfix}
                 ${libname}
                 ${ARGN}
    )

  ELSE(NOT ${win32_dbg_postfix_name} STREQUAL "WIN32_DEBUG_POSTFIX")

   IF(NOT WIN32)
     # on non-win32 we don't need to take care about WIN32_DEBUG_POSTFIX

     FIND_LIBRARY(${var_name} ${libname} ${ARGN})

   ELSE(NOT WIN32)

     # 1. get all possible libnames
     SET(args ${ARGN})
     SET(libnames_release "")
     SET(libnames_debug "")

     LIST(LENGTH args listCount)

     IF("${libname}" STREQUAL "NAMES")
       SET(append_rest 0)
       LIST(APPEND args " ")

       FOREACH(i RANGE ${listCount})
         LIST(GET args ${i} val)

         IF(append_rest)
           LIST(APPEND newargs ${val})
         ELSE(append_rest)
           IF("${val}" STREQUAL "PATHS")
             LIST(APPEND newargs ${val})
             SET(append_rest 1)
           ELSE("${val}" STREQUAL "PATHS")
             LIST(APPEND libnames_release "${val}")
             LIST(APPEND libnames_debug   "${val}${dgb_postfix}")
           ENDIF("${val}" STREQUAL "PATHS")
         ENDIF(append_rest)

       ENDFOREACH(i)

     ELSE("${libname}" STREQUAL "NAMES")

       # just one name
       LIST(APPEND libnames_release "${libname}")
       LIST(APPEND libnames_debug   "${libname}${dgb_postfix}")

       SET(newargs ${args})

     ENDIF("${libname}" STREQUAL "NAMES")
     
     # search the release lib
     FIND_LIBRARY(${var_name}_RELEASE
                  NAMES ${libnames_release}
                  ${newargs}
     )

     # search the debug lib
     FIND_LIBRARY(${var_name}_DEBUG
                  NAMES ${libnames_debug}
                  ${newargs}
     )

     IF(${var_name}_RELEASE AND ${var_name}_DEBUG)

       # both libs found
       SET(${var_name} optimized ${${var_name}_RELEASE}
                       debug     ${${var_name}_DEBUG})

     ELSE(${var_name}_RELEASE AND ${var_name}_DEBUG)

       IF(${var_name}_RELEASE)

         # only release found
         SET(${var_name} ${${var_name}_RELEASE})

       ELSE(${var_name}_RELEASE)

         # only debug (or nothing) found
         SET(${var_name} ${${var_name}_DEBUG})

       ENDIF(${var_name}_RELEASE)
       
     ENDIF(${var_name}_RELEASE AND ${var_name}_DEBUG)

     MARK_AS_ADVANCED(${var_name}_RELEASE)
     MARK_AS_ADVANCED(${var_name}_DEBUG)

   ENDIF(NOT WIN32)

  ENDIF(NOT ${win32_dbg_postfix_name} STREQUAL "WIN32_DEBUG_POSTFIX")

ENDMACRO(FIND_LIBRARY_EX)