FindLibraryWithDebug.cmake 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  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. # Copyright (c) 2007, Christian Ehrlicher, <ch.ehrlicher@gmx.de>
  8. # Redistribution and use is allowed according to the terms of the BSD license.
  9. # For details see the accompanying COPYING-CMAKE-SCRIPTS file.
  10. MACRO(FIND_LIBRARY_WITH_DEBUG var_name win32_dbg_postfix_name dgb_postfix libname)
  11. IF(NOT "${win32_dbg_postfix_name}" STREQUAL "WIN32_DEBUG_POSTFIX")
  12. # no WIN32_DEBUG_POSTFIX -> simply pass all arguments to FIND_LIBRARY
  13. FIND_LIBRARY(${var_name}
  14. ${win32_dbg_postfix_name}
  15. ${dgb_postfix}
  16. ${libname}
  17. ${ARGN}
  18. )
  19. ELSE(NOT "${win32_dbg_postfix_name}" STREQUAL "WIN32_DEBUG_POSTFIX")
  20. IF(NOT WIN32)
  21. # on non-win32 we don't need to take care about WIN32_DEBUG_POSTFIX
  22. FIND_LIBRARY(${var_name} ${libname} ${ARGN})
  23. ELSE(NOT WIN32)
  24. # 1. get all possible libnames
  25. SET(args ${ARGN})
  26. SET(newargs "")
  27. SET(libnames_release "")
  28. SET(libnames_debug "")
  29. LIST(LENGTH args listCount)
  30. IF("${libname}" STREQUAL "NAMES")
  31. SET(append_rest 0)
  32. LIST(APPEND args " ")
  33. FOREACH(i RANGE ${listCount})
  34. LIST(GET args ${i} val)
  35. IF(append_rest)
  36. LIST(APPEND newargs ${val})
  37. ELSE(append_rest)
  38. IF("${val}" STREQUAL "PATHS")
  39. LIST(APPEND newargs ${val})
  40. SET(append_rest 1)
  41. ELSE("${val}" STREQUAL "PATHS")
  42. LIST(APPEND libnames_release "${val}")
  43. LIST(APPEND libnames_debug "${val}${dgb_postfix}")
  44. ENDIF("${val}" STREQUAL "PATHS")
  45. ENDIF(append_rest)
  46. ENDFOREACH(i)
  47. ELSE("${libname}" STREQUAL "NAMES")
  48. # just one name
  49. LIST(APPEND libnames_release "${libname}")
  50. LIST(APPEND libnames_debug "${libname}${dgb_postfix}")
  51. SET(newargs ${args})
  52. ENDIF("${libname}" STREQUAL "NAMES")
  53. # search the release lib
  54. FIND_LIBRARY(${var_name}_RELEASE
  55. NAMES ${libnames_release}
  56. ${newargs}
  57. )
  58. # search the debug lib
  59. FIND_LIBRARY(${var_name}_DEBUG
  60. NAMES ${libnames_debug}
  61. ${newargs}
  62. )
  63. IF(${var_name}_RELEASE AND ${var_name}_DEBUG)
  64. # both libs found
  65. SET(${var_name} optimized ${${var_name}_RELEASE}
  66. debug ${${var_name}_DEBUG})
  67. ELSE(${var_name}_RELEASE AND ${var_name}_DEBUG)
  68. IF(${var_name}_RELEASE)
  69. # only release found
  70. SET(${var_name} ${${var_name}_RELEASE})
  71. ELSE(${var_name}_RELEASE)
  72. # only debug (or nothing) found
  73. SET(${var_name} ${${var_name}_DEBUG})
  74. ENDIF(${var_name}_RELEASE)
  75. ENDIF(${var_name}_RELEASE AND ${var_name}_DEBUG)
  76. MARK_AS_ADVANCED(${var_name}_RELEASE)
  77. MARK_AS_ADVANCED(${var_name}_DEBUG)
  78. ENDIF(NOT WIN32)
  79. ENDIF(NOT "${win32_dbg_postfix_name}" STREQUAL "WIN32_DEBUG_POSTFIX")
  80. ENDMACRO(FIND_LIBRARY_WITH_DEBUG)