1#
2#  FIND_LIBRARY_WITH_DEBUG
3#  -> enhanced FIND_LIBRARY to allow the search for an
4#     optional debug library with a WIN32_DEBUG_POSTFIX similar
5#     to CMAKE_DEBUG_POSTFIX when creating a shared lib
6#     it has to be the second and third argument
7
8# SPDX-FileCopyrightText: 2007 Christian Ehrlicher <ch.ehrlicher@gmx.de>
9# SPDX-License-Identifier: BSD-3-Clause
10
11MACRO(FIND_LIBRARY_WITH_DEBUG var_name win32_dbg_postfix_name dgb_postfix libname)
12
13  IF(NOT "${win32_dbg_postfix_name}" STREQUAL "WIN32_DEBUG_POSTFIX")
14
15     # no WIN32_DEBUG_POSTFIX -> simply pass all arguments to FIND_LIBRARY
16     FIND_LIBRARY(${var_name}
17                  ${win32_dbg_postfix_name}
18                  ${dgb_postfix}
19                  ${libname}
20                  ${ARGN}
21     )
22
23  ELSE(NOT "${win32_dbg_postfix_name}" STREQUAL "WIN32_DEBUG_POSTFIX")
24
25    IF(NOT WIN32)
26      # on non-win32 we don't need to take care about WIN32_DEBUG_POSTFIX
27
28      FIND_LIBRARY(${var_name} ${libname} ${ARGN})
29
30    ELSE(NOT WIN32)
31
32      # 1. get all possible libnames
33      SET(args ${ARGN})
34      SET(newargs "")
35      SET(libnames_release "")
36      SET(libnames_debug "")
37
38      LIST(LENGTH args listCount)
39
40      IF("${libname}" STREQUAL "NAMES")
41        SET(append_rest 0)
42        LIST(APPEND args " ")
43
44        FOREACH(i RANGE ${listCount})
45          LIST(GET args ${i} val)
46
47          IF(append_rest)
48            LIST(APPEND newargs ${val})
49          ELSE(append_rest)
50            IF("${val}" STREQUAL "PATHS")
51              LIST(APPEND newargs ${val})
52              SET(append_rest 1)
53            ELSE("${val}" STREQUAL "PATHS")
54              LIST(APPEND libnames_release "${val}")
55              LIST(APPEND libnames_debug   "${val}${dgb_postfix}")
56            ENDIF("${val}" STREQUAL "PATHS")
57          ENDIF(append_rest)
58
59        ENDFOREACH(i)
60
61      ELSE("${libname}" STREQUAL "NAMES")
62
63        # just one name
64        LIST(APPEND libnames_release "${libname}")
65        LIST(APPEND libnames_debug   "${libname}${dgb_postfix}")
66
67        SET(newargs ${args})
68
69      ENDIF("${libname}" STREQUAL "NAMES")
70
71      # search the release lib
72      FIND_LIBRARY(${var_name}_RELEASE
73                   NAMES ${libnames_release}
74                   ${newargs}
75      )
76
77      # search the debug lib
78      FIND_LIBRARY(${var_name}_DEBUG
79                   NAMES ${libnames_debug}
80                   ${newargs}
81      )
82
83      IF(${var_name}_RELEASE AND ${var_name}_DEBUG)
84
85        # both libs found
86        SET(${var_name} optimized ${${var_name}_RELEASE}
87                        debug     ${${var_name}_DEBUG})
88
89      ELSE(${var_name}_RELEASE AND ${var_name}_DEBUG)
90
91        IF(${var_name}_RELEASE)
92
93          # only release found
94          SET(${var_name} ${${var_name}_RELEASE})
95
96        ELSE(${var_name}_RELEASE)
97
98          # only debug (or nothing) found
99          SET(${var_name} ${${var_name}_DEBUG})
100
101        ENDIF(${var_name}_RELEASE)
102
103      ENDIF(${var_name}_RELEASE AND ${var_name}_DEBUG)
104
105      MARK_AS_ADVANCED(${var_name}_RELEASE)
106      MARK_AS_ADVANCED(${var_name}_DEBUG)
107
108    ENDIF(NOT WIN32)
109
110  ENDIF(NOT "${win32_dbg_postfix_name}" STREQUAL "WIN32_DEBUG_POSTFIX")
111
112ENDMACRO(FIND_LIBRARY_WITH_DEBUG)
113