cmake string(FIND) examples

ornladios/ADIOS2 cmake/FindDataSpaces.cmake :77

STRING(FIND ${LOOP_VAR} "-u" DEL_FLG)

ornladios/ADIOS2 cmake/FindDataSpaces.cmake :79

STRING(FIND ${LOOP_VAR} "/" HINT_FLG)

ornladios/ADIOS2 cmake/FindDataSpaces.cmake :85

STRING(FIND ${LOOP_VAR} "stdc++" CPP_FLG)

assimp/assimp cmake-modules/HunterGate.cmake :437

string(FIND "${HUNTER_GATE_ROOT}" " " _contain_spaces)

assimp/assimp contrib/android-cmake/android.toolchain.cmake :428

string( FIND " abcdefghijklmnopqastuvwxyz" "${CMAKE_MATCH_2}" __ndkReleaseLetterNum )

assimp/assimp contrib/draco/cmake/draco_helpers.cmake :115

string(FIND "${str}" ";" semicolon_pos)

mono/boringssl util/android-cmake/android.toolchain.cmake :428

string( FIND " abcdefghijklmnopqastuvwxyz" "${CMAKE_MATCH_2}" __ndkReleaseLetterNum )

civetweb/civetweb cmake/FindWinSock.cmake :52

string(FIND "${ERR}" "End of search list." END)

eranif/codelite CMakeLists.txt :396

string(FIND ${LIBSSH_INCLUDE_DIR} "NOTFOUND" LIBSSH_NOT_FOUND_POS)

eranif/codelite cmake/Modules/OSXInstall.cmake :16

string(FIND ${WX_LIBSOUTPUT} "-l" minusElPos REVERSE)

eranif/codelite cmake/Modules/UtilsHelper.cmake :87

string(FIND ${_DISTRO_ID} "debian" POS)

eranif/codelite cmake/Modules/UtilsHelper.cmake :192

string(FIND "${_OS_NAME}" "MSYS" POS)

mono/corefx src/Native/Unix/CMakeLists.txt :72

string(FIND "$ENV{DEBUG_SANITIZERS}" "asan" __ASAN_POS)

google/draco cmake/draco_helpers.cmake :114

string(FIND "${str}" "\"" open_quote_pos)

google/draco cmake/draco_helpers.cmake :115

string(FIND "${str}" ";" semicolon_pos)

ElmerCSC/elmerfem ElmerGUI/CMakeLists.txt :94

string(FIND "${QWT_LIBRARY}" "-qt5" QWT_QT_OUT)

embree/embree CMakeLists.txt :282

string(FIND "${CONFIGURATION_TYPES}" "${CMAKE_BUILD_TYPE}" MATCHED_CONFIG)

Exiv2/exiv2 cmake/packaging.cmake :92

string(FIND "${PROJECT_VERSION_TWEAK}" 0 PREVIEW_RELEASE ) # 0.27.3.10 => RC1 Preview

Exiv2/exiv2 cmake/packaging.cmake :93

string(FIND "${PROJECT_VERSION_TWEAK}" 9 NOT_FOR_RELEASE ) # 0.27.3.19 => RC1 Not for release

facebook/folly CMake/FollyFunctions.cmake :121

string(FIND "${filePath}" "/" rIdx REVERSE)

facebook/folly CMake/FollyFunctions.cmake :153

string(FIND "${filePath}" "/" rIdx REVERSE)

fontforge/fontforge cmake/backports/3.15.7/FindPython/Support.cmake :1052

string(FIND "${_${_PYTHON_PREFIX}_CONFIGDIR}" "${CMAKE_LIBRARY_ARCHITECTURE}" _${_PYTHON_PREFIX}_RESULT)

FreeCAD/FreeCAD cMake/FreeCadMacros.cmake :322

STRING(FIND "${LINE}" "Name: " NAME_STRING_LOCATION)

FreeCAD/FreeCAD cMake/FreeCadMacros.cmake :323

STRING(FIND "${LINE}" "Location: " LOCATION_STRING_LOCATION)

FreeCAD/FreeCAD cMake/FreeCAD_Helpers/SetupSalomeSMESH.cmake :100

string(FIND "${TMPTXT}" "#define MED_HAVE_MPI" matchres)

FreeRDP/FreeRDP CMakeCPack.cmake :63

string(FIND ${CMAKE_MSVC_RUNTIME_LIBRARY} "DLL" IS_SHARED)

FreeRDP/FreeRDP include/CMakeLists.txt :69

  string(REGEX MATCH "^SETTINGS_DEPRECATED\\(ALIGN64[ \t ]+INT16[ \t ]+" IS_INT16 "${TRIMMED_KEY}")
  string(REGEX MATCH "^SETTINGS_DEPRECATED\\(ALIGN64[ \t ]+UINT16[ \t ]+" IS_UINT16 "${TRIMMED_KEY}")
  string(REGEX MATCH "^SETTINGS_DEPRECATED\\(ALIGN64[ \t ]+INT32[ \t ]+" IS_INT32 "${TRIMMED_KEY}")
  string(REGEX MATCH "^SETTINGS_DEPRECATED\\(ALIGN64[ \t ]+UINT32[ \t ]+" IS_UINT32 "${TRIMMED_KEY}")
  string(REGEX MATCH "^SETTINGS_DEPRECATED\\(ALIGN64[ \t ]+INT64[ \t ]+" IS_INT64 "${TRIMMED_KEY}")
  string(REGEX MATCH "^SETTINGS_DEPRECATED\\(ALIGN64[ \t ]+UINT64[ \t ]+" IS_UINT64 "${TRIMMED_KEY}")
  string(REGEX MATCH "^SETTINGS_DEPRECATED\\(ALIGN64[ \t ]+(char|CHAR)[ \t ]*\\*[ \t ]+" IS_STRING "${TRIMMED_KEY}")

  string(REGEX REPLACE ".+/\\*" "" index "${TRIMMED_KEY}")
  string(REGEX REPLACE "[ \t/\\*]" "" index "${index}")

  if(index MATCHES "^[0-9]+$")
    string(REGEX REPLACE "^SETTINGS_DEPRECATED\\(ALIGN64[ \t ]+[a-zA-Z0-9_\\*]+[ \t ]+" "" VALUE ${TRIMMED_KEY})
    string(STRIP "${VALUE}" VALUE)
    string(FIND "${VALUE}" ")" SEMICOLON)
    string(SUBSTRING "${VALUE}" 0 ${SEMICOLON} KEY_VALUE)

    if(IS_BOOL)
      set(KEY_VALUE "FreeRDP_${KEY_VALUE} = ${index}")
      list(APPEND SETTINGS_KEYS_BOOL ${KEY_VALUE})
    elseif(IS_INT16)
      set(KEY_VALUE "FreeRDP_${KEY_VALUE} = ${index}")
      list(APPEND SETTINGS_KEYS_INT16 ${KEY_VALUE})
    elseif(IS_UINT16)
      set(KEY_VALUE "FreeRDP_${KEY_VALUE} = ${index}")
      list(APPEND SETTINGS_KEYS_UINT16 ${KEY_VALUE})
    elseif(IS_INT32)
      set(KEY_VALUE "FreeRDP_${KEY_VALUE} = ${index}")
      list(APPEND SETTINGS_KEYS_INT32 ${KEY_VALUE})
    elseif(IS_UINT32)
      set(KEY_VALUE "FreeRDP_${KEY_VALUE} = ${index}")
      list(APPEND SETTINGS_KEYS_UINT32 ${KEY_VALUE})
    elseif(IS_INT64)
      set(KEY_VALUE "FreeRDP_${KEY_VALUE} = ${index}")
      list(APPEND SETTINGS_KEYS_INT64 ${KEY_VALUE})
    elseif(IS_UINT64)
      set(KEY_VALUE "FreeRDP_${KEY_VALUE} = ${index}")
      list(APPEND SETTINGS_KEYS_UINT64 ${KEY_VALUE})
    elseif(IS_STRING)
      string(SUBSTRING "${VALUE}" 0 ${SEMICOLON} KEY_VALUE)
      set(KEY_VALUE "FreeRDP_${KEY_VALUE} = ${index}")
      list(APPEND SETTINGS_KEYS_STRING ${KEY_VALUE})
    else()
      set(KEY_VALUE "FreeRDP_${KEY_VALUE} = ${index}")
      list(APPEND SETTINGS_KEYS_POINTER ${KEY_VALUE})
    endif()
  endif()
endforeach()

list(APPEND SETTINGS_KEYS_BOOL "FreeRDP_BOOL_UNUSED = -1")
list(APPEND SETTINGS_KEYS_INT16 "FreeRDP_INT16_UNUSED = -1")
list(APPEND SETTINGS_KEYS_UINT16 "FreeRDP_UINT16_UNUSED = -1")
list(APPEND SETTINGS_KEYS_INT32 "FreeRDP_INT32_UNUSED = -1")
list(APPEND SETTINGS_KEYS_UINT32 "FreeRDP_UINT32_UNUSED = -1")
list(APPEND SETTINGS_KEYS_INT64 "FreeRDP_INT64_UNUSED = -1")
list(APPEND SETTINGS_KEYS_UINT64 "FreeRDP_UINT64_UNUSED = -1")
list(APPEND SETTINGS_KEYS_STRING "FreeRDP_STRING_UNUSED = -1")
list(APPEND SETTINGS_KEYS_POINTER "FreeRDP_POINTER_UNUSED = -1")

string(REPLACE ";" ",\n\t" SETTINGS_KEYS_BOOL "${SETTINGS_KEYS_BOOL}")
string(REPLACE ";" ",\n\t" SETTINGS_KEYS_INT16 "${SETTINGS_KEYS_INT16}")
string(REPLACE ";" ",\n\t" SETTINGS_KEYS_UINT16 "${SETTINGS_KEYS_UINT16}")
string(REPLACE ";" ",\n\t" SETTINGS_KEYS_INT32 "${SETTINGS_KEYS_INT32}")
string(REPLACE ";" ",\n\t" SETTINGS_KEYS_UINT32 "${SETTINGS_KEYS_UINT32}")
string(REPLACE ";" ",\n\t" SETTINGS_KEYS_INT64 "${SETTINGS_KEYS_INT64}")
string(REPLACE ";" ",\n\t" SETTINGS_KEYS_UINT64 "${SETTINGS_KEYS_UINT64}")
string(REPLACE ";" ",\n\t" SETTINGS_KEYS_STRING "${SETTINGS_KEYS_STRING}")
string(REPLACE ";" ",\n\t" SETTINGS_KEYS_POINTER "${SETTINGS_KEYS_POINTER}")

cleaning_configure_file(
  ${CMAKE_CURRENT_SOURCE_DIR}/config/settings_keys.h.in ${CMAKE_CURRENT_BINARY_DIR}/freerdp/settings_keys.h
)

file(GLOB_RECURSE PUBLIC_COMMON_HEADERS LIST_DIRECTORIES false "freerdp/*.h")
file(GLOB_RECURSE PUBLIC_COMMON_BIN_HEADERS LIST_DIRECTORIES false "${CMAKE_CURRENT_BINARY_DIR}/freerdp/*.h")
list(SORT PUBLIC_COMMON_HEADERS)

if(WITH_SERVER)
  set(PUBLIC_SERVER_HEADERS ${PUBLIC_COMMON_HEADERS})
  list(FILTER PUBLIC_SERVER_HEADERS INCLUDE REGEX ".*freerdp/server.*")

  set(PUBLIC_PROXY_HEADERS ${PUBLIC_SERVER_HEADERS})
  list(FILTER PUBLIC_SERVER_HEADERS EXCLUDE REGEX ".*freerdp/server/proxy.*")
  list(FILTER PUBLIC_PROXY_HEADERS INCLUDE REGEX ".*freerdp/server/proxy.*")
  if(WITH_SERVER)
    set_property(TARGET freerdp-server APPEND PROPERTY SOURCES ${PUBLIC_SERVER_HEADERS})
  endif()
  if(WITH_PROXY)
    set_property(TARGET freerdp-server-proxy APPEND PROPERTY SOURCES ${PUBLIC_PROXY_HEADERS})
  endif()
endif()

if(WITH_CLIENT_COMMON)
  set(PUBLIC_CLIENT_HEADERS ${PUBLIC_COMMON_HEADERS})
  list(FILTER PUBLIC_CLIENT_HEADERS INCLUDE REGEX ".*freerdp/client.*")
  set_property(TARGET freerdp-client APPEND PROPERTY SOURCES ${PUBLIC_CLIENT_HEADERS})
endif()

if(WITH_SERVER)
  list(FILTER PUBLIC_COMMON_HEADERS EXCLUDE REGEX ".*freerdp/server.*")
endif()

list(FILTER PUBLIC_COMMON_HEADERS EXCLUDE REGEX ".*freerdp/client.*")
list(APPEND PUBLIC_COMMON_HEADERS ${PUBLIC_COMMON_BIN_HEADERS})
set_property(TARGET freerdp APPEND PROPERTY SOURCES ${PUBLIC_COMMON_HEADERS})

add_library(freerdp-headers INTERFACE)
target_sources(freerdp-headers INTERFACE ${PUBLIC_COMMON_HEADERS})

install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/freerdp DESTINATION ${FREERDP_INCLUDE_DIR} FILES_MATCHING PATTERN "*.h")

install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/freerdp DESTINATION ${FREERDP_INCLUDE_DIR} FILES_MATCHING PATTERN "*.h")

FreeRDP/FreeRDP include/CMakeLists.txt :70

  string(REGEX MATCH "^SETTINGS_DEPRECATED\\(ALIGN64[ \t ]+UINT16[ \t ]+" IS_UINT16 "${TRIMMED_KEY}")
  string(REGEX MATCH "^SETTINGS_DEPRECATED\\(ALIGN64[ \t ]+INT32[ \t ]+" IS_INT32 "${TRIMMED_KEY}")
  string(REGEX MATCH "^SETTINGS_DEPRECATED\\(ALIGN64[ \t ]+UINT32[ \t ]+" IS_UINT32 "${TRIMMED_KEY}")
  string(REGEX MATCH "^SETTINGS_DEPRECATED\\(ALIGN64[ \t ]+INT64[ \t ]+" IS_INT64 "${TRIMMED_KEY}")
  string(REGEX MATCH "^SETTINGS_DEPRECATED\\(ALIGN64[ \t ]+UINT64[ \t ]+" IS_UINT64 "${TRIMMED_KEY}")
  string(REGEX MATCH "^SETTINGS_DEPRECATED\\(ALIGN64[ \t ]+(char|CHAR)[ \t ]*\\*[ \t ]+" IS_STRING "${TRIMMED_KEY}")

  string(REGEX REPLACE ".+/\\*" "" index "${TRIMMED_KEY}")
  string(REGEX REPLACE "[ \t/\\*]" "" index "${index}")

  if(index MATCHES "^[0-9]+$")
    string(REGEX REPLACE "^SETTINGS_DEPRECATED\\(ALIGN64[ \t ]+[a-zA-Z0-9_\\*]+[ \t ]+" "" VALUE ${TRIMMED_KEY})
    string(STRIP "${VALUE}" VALUE)
    string(FIND "${VALUE}" ")" SEMICOLON)
    string(SUBSTRING "${VALUE}" 0 ${SEMICOLON} KEY_VALUE)

    if(IS_BOOL)
      set(KEY_VALUE "FreeRDP_${KEY_VALUE} = ${index}")
      list(APPEND SETTINGS_KEYS_BOOL ${KEY_VALUE})
    elseif(IS_INT16)
      set(KEY_VALUE "FreeRDP_${KEY_VALUE} = ${index}")
      list(APPEND SETTINGS_KEYS_INT16 ${KEY_VALUE})
    elseif(IS_UINT16)
      set(KEY_VALUE "FreeRDP_${KEY_VALUE} = ${index}")
      list(APPEND SETTINGS_KEYS_UINT16 ${KEY_VALUE})
    elseif(IS_INT32)
      set(KEY_VALUE "FreeRDP_${KEY_VALUE} = ${index}")
      list(APPEND SETTINGS_KEYS_INT32 ${KEY_VALUE})
    elseif(IS_UINT32)
      set(KEY_VALUE "FreeRDP_${KEY_VALUE} = ${index}")
      list(APPEND SETTINGS_KEYS_UINT32 ${KEY_VALUE})
    elseif(IS_INT64)
      set(KEY_VALUE "FreeRDP_${KEY_VALUE} = ${index}")
      list(APPEND SETTINGS_KEYS_INT64 ${KEY_VALUE})
    elseif(IS_UINT64)
      set(KEY_VALUE "FreeRDP_${KEY_VALUE} = ${index}")
      list(APPEND SETTINGS_KEYS_UINT64 ${KEY_VALUE})
    elseif(IS_STRING)
      string(SUBSTRING "${VALUE}" 0 ${SEMICOLON} KEY_VALUE)
      set(KEY_VALUE "FreeRDP_${KEY_VALUE} = ${index}")
      list(APPEND SETTINGS_KEYS_STRING ${KEY_VALUE})
    else()
      set(KEY_VALUE "FreeRDP_${KEY_VALUE} = ${index}")
      list(APPEND SETTINGS_KEYS_POINTER ${KEY_VALUE})
    endif()
  endif()
endforeach()

list(APPEND SETTINGS_KEYS_BOOL "FreeRDP_BOOL_UNUSED = -1")
list(APPEND SETTINGS_KEYS_INT16 "FreeRDP_INT16_UNUSED = -1")
list(APPEND SETTINGS_KEYS_UINT16 "FreeRDP_UINT16_UNUSED = -1")
list(APPEND SETTINGS_KEYS_INT32 "FreeRDP_INT32_UNUSED = -1")
list(APPEND SETTINGS_KEYS_UINT32 "FreeRDP_UINT32_UNUSED = -1")
list(APPEND SETTINGS_KEYS_INT64 "FreeRDP_INT64_UNUSED = -1")
list(APPEND SETTINGS_KEYS_UINT64 "FreeRDP_UINT64_UNUSED = -1")
list(APPEND SETTINGS_KEYS_STRING "FreeRDP_STRING_UNUSED = -1")
list(APPEND SETTINGS_KEYS_POINTER "FreeRDP_POINTER_UNUSED = -1")

string(REPLACE ";" ",\n\t" SETTINGS_KEYS_BOOL "${SETTINGS_KEYS_BOOL}")
string(REPLACE ";" ",\n\t" SETTINGS_KEYS_INT16 "${SETTINGS_KEYS_INT16}")
string(REPLACE ";" ",\n\t" SETTINGS_KEYS_UINT16 "${SETTINGS_KEYS_UINT16}")
string(REPLACE ";" ",\n\t" SETTINGS_KEYS_INT32 "${SETTINGS_KEYS_INT32}")
string(REPLACE ";" ",\n\t" SETTINGS_KEYS_UINT32 "${SETTINGS_KEYS_UINT32}")
string(REPLACE ";" ",\n\t" SETTINGS_KEYS_INT64 "${SETTINGS_KEYS_INT64}")
string(REPLACE ";" ",\n\t" SETTINGS_KEYS_UINT64 "${SETTINGS_KEYS_UINT64}")
string(REPLACE ";" ",\n\t" SETTINGS_KEYS_STRING "${SETTINGS_KEYS_STRING}")
string(REPLACE ";" ",\n\t" SETTINGS_KEYS_POINTER "${SETTINGS_KEYS_POINTER}")

cleaning_configure_file(
  ${CMAKE_CURRENT_SOURCE_DIR}/config/settings_keys.h.in ${CMAKE_CURRENT_BINARY_DIR}/freerdp/settings_keys.h
)

file(GLOB_RECURSE PUBLIC_COMMON_HEADERS LIST_DIRECTORIES false "freerdp/*.h")
file(GLOB_RECURSE PUBLIC_COMMON_BIN_HEADERS LIST_DIRECTORIES false "${CMAKE_CURRENT_BINARY_DIR}/freerdp/*.h")
list(SORT PUBLIC_COMMON_HEADERS)

if(WITH_SERVER)
  set(PUBLIC_SERVER_HEADERS ${PUBLIC_COMMON_HEADERS})
  list(FILTER PUBLIC_SERVER_HEADERS INCLUDE REGEX ".*freerdp/server.*")

  set(PUBLIC_PROXY_HEADERS ${PUBLIC_SERVER_HEADERS})
  list(FILTER PUBLIC_SERVER_HEADERS EXCLUDE REGEX ".*freerdp/server/proxy.*")
  list(FILTER PUBLIC_PROXY_HEADERS INCLUDE REGEX ".*freerdp/server/proxy.*")
  if(WITH_SERVER)
    set_property(TARGET freerdp-server APPEND PROPERTY SOURCES ${PUBLIC_SERVER_HEADERS})
  endif()
  if(WITH_PROXY)
    set_property(TARGET freerdp-server-proxy APPEND PROPERTY SOURCES ${PUBLIC_PROXY_HEADERS})
  endif()
endif()

if(WITH_CLIENT_COMMON)
  set(PUBLIC_CLIENT_HEADERS ${PUBLIC_COMMON_HEADERS})
  list(FILTER PUBLIC_CLIENT_HEADERS INCLUDE REGEX ".*freerdp/client.*")
  set_property(TARGET freerdp-client APPEND PROPERTY SOURCES ${PUBLIC_CLIENT_HEADERS})
endif()

if(WITH_SERVER)
  list(FILTER PUBLIC_COMMON_HEADERS EXCLUDE REGEX ".*freerdp/server.*")
endif()

list(FILTER PUBLIC_COMMON_HEADERS EXCLUDE REGEX ".*freerdp/client.*")
list(APPEND PUBLIC_COMMON_HEADERS ${PUBLIC_COMMON_BIN_HEADERS})
set_property(TARGET freerdp APPEND PROPERTY SOURCES ${PUBLIC_COMMON_HEADERS})

add_library(freerdp-headers INTERFACE)
target_sources(freerdp-headers INTERFACE ${PUBLIC_COMMON_HEADERS})

install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/freerdp DESTINATION ${FREERDP_INCLUDE_DIR} FILES_MATCHING PATTERN "*.h")

install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/freerdp DESTINATION ${FREERDP_INCLUDE_DIR} FILES_MATCHING PATTERN "*.h")

FreeRDP/FreeRDP include/CMakeLists.txt :72

  string(REGEX MATCH "^SETTINGS_DEPRECATED\\(ALIGN64[ \t ]+UINT32[ \t ]+" IS_UINT32 "${TRIMMED_KEY}")
  string(REGEX MATCH "^SETTINGS_DEPRECATED\\(ALIGN64[ \t ]+INT64[ \t ]+" IS_INT64 "${TRIMMED_KEY}")
  string(REGEX MATCH "^SETTINGS_DEPRECATED\\(ALIGN64[ \t ]+UINT64[ \t ]+" IS_UINT64 "${TRIMMED_KEY}")
  string(REGEX MATCH "^SETTINGS_DEPRECATED\\(ALIGN64[ \t ]+(char|CHAR)[ \t ]*\\*[ \t ]+" IS_STRING "${TRIMMED_KEY}")

  string(REGEX REPLACE ".+/\\*" "" index "${TRIMMED_KEY}")
  string(REGEX REPLACE "[ \t/\\*]" "" index "${index}")

  if(index MATCHES "^[0-9]+$")
    string(REGEX REPLACE "^SETTINGS_DEPRECATED\\(ALIGN64[ \t ]+[a-zA-Z0-9_\\*]+[ \t ]+" "" VALUE ${TRIMMED_KEY})
    string(STRIP "${VALUE}" VALUE)
    string(FIND "${VALUE}" ")" SEMICOLON)
    string(SUBSTRING "${VALUE}" 0 ${SEMICOLON} KEY_VALUE)

    if(IS_BOOL)
      set(KEY_VALUE "FreeRDP_${KEY_VALUE} = ${index}")
      list(APPEND SETTINGS_KEYS_BOOL ${KEY_VALUE})
    elseif(IS_INT16)
      set(KEY_VALUE "FreeRDP_${KEY_VALUE} = ${index}")
      list(APPEND SETTINGS_KEYS_INT16 ${KEY_VALUE})
    elseif(IS_UINT16)
      set(KEY_VALUE "FreeRDP_${KEY_VALUE} = ${index}")
      list(APPEND SETTINGS_KEYS_UINT16 ${KEY_VALUE})
    elseif(IS_INT32)
      set(KEY_VALUE "FreeRDP_${KEY_VALUE} = ${index}")
      list(APPEND SETTINGS_KEYS_INT32 ${KEY_VALUE})
    elseif(IS_UINT32)
      set(KEY_VALUE "FreeRDP_${KEY_VALUE} = ${index}")
      list(APPEND SETTINGS_KEYS_UINT32 ${KEY_VALUE})
    elseif(IS_INT64)
      set(KEY_VALUE "FreeRDP_${KEY_VALUE} = ${index}")
      list(APPEND SETTINGS_KEYS_INT64 ${KEY_VALUE})
    elseif(IS_UINT64)
      set(KEY_VALUE "FreeRDP_${KEY_VALUE} = ${index}")
      list(APPEND SETTINGS_KEYS_UINT64 ${KEY_VALUE})
    elseif(IS_STRING)
      string(SUBSTRING "${VALUE}" 0 ${SEMICOLON} KEY_VALUE)
      set(KEY_VALUE "FreeRDP_${KEY_VALUE} = ${index}")
      list(APPEND SETTINGS_KEYS_STRING ${KEY_VALUE})
    else()
      set(KEY_VALUE "FreeRDP_${KEY_VALUE} = ${index}")
      list(APPEND SETTINGS_KEYS_POINTER ${KEY_VALUE})
    endif()
  endif()
endforeach()

list(APPEND SETTINGS_KEYS_BOOL "FreeRDP_BOOL_UNUSED = -1")
list(APPEND SETTINGS_KEYS_INT16 "FreeRDP_INT16_UNUSED = -1")
list(APPEND SETTINGS_KEYS_UINT16 "FreeRDP_UINT16_UNUSED = -1")
list(APPEND SETTINGS_KEYS_INT32 "FreeRDP_INT32_UNUSED = -1")
list(APPEND SETTINGS_KEYS_UINT32 "FreeRDP_UINT32_UNUSED = -1")
list(APPEND SETTINGS_KEYS_INT64 "FreeRDP_INT64_UNUSED = -1")
list(APPEND SETTINGS_KEYS_UINT64 "FreeRDP_UINT64_UNUSED = -1")
list(APPEND SETTINGS_KEYS_STRING "FreeRDP_STRING_UNUSED = -1")
list(APPEND SETTINGS_KEYS_POINTER "FreeRDP_POINTER_UNUSED = -1")

string(REPLACE ";" ",\n\t" SETTINGS_KEYS_BOOL "${SETTINGS_KEYS_BOOL}")
string(REPLACE ";" ",\n\t" SETTINGS_KEYS_INT16 "${SETTINGS_KEYS_INT16}")
string(REPLACE ";" ",\n\t" SETTINGS_KEYS_UINT16 "${SETTINGS_KEYS_UINT16}")
string(REPLACE ";" ",\n\t" SETTINGS_KEYS_INT32 "${SETTINGS_KEYS_INT32}")
string(REPLACE ";" ",\n\t" SETTINGS_KEYS_UINT32 "${SETTINGS_KEYS_UINT32}")
string(REPLACE ";" ",\n\t" SETTINGS_KEYS_INT64 "${SETTINGS_KEYS_INT64}")
string(REPLACE ";" ",\n\t" SETTINGS_KEYS_UINT64 "${SETTINGS_KEYS_UINT64}")
string(REPLACE ";" ",\n\t" SETTINGS_KEYS_STRING "${SETTINGS_KEYS_STRING}")
string(REPLACE ";" ",\n\t" SETTINGS_KEYS_POINTER "${SETTINGS_KEYS_POINTER}")

cleaning_configure_file(
  ${CMAKE_CURRENT_SOURCE_DIR}/config/settings_keys.h.in ${CMAKE_CURRENT_BINARY_DIR}/freerdp/settings_keys.h
)

file(GLOB_RECURSE PUBLIC_COMMON_HEADERS LIST_DIRECTORIES false "freerdp/*.h")
file(GLOB_RECURSE PUBLIC_COMMON_BIN_HEADERS LIST_DIRECTORIES false "${CMAKE_CURRENT_BINARY_DIR}/freerdp/*.h")
list(SORT PUBLIC_COMMON_HEADERS)

if(WITH_SERVER)
  set(PUBLIC_SERVER_HEADERS ${PUBLIC_COMMON_HEADERS})
  list(FILTER PUBLIC_SERVER_HEADERS INCLUDE REGEX ".*freerdp/server.*")

  set(PUBLIC_PROXY_HEADERS ${PUBLIC_SERVER_HEADERS})
  list(FILTER PUBLIC_SERVER_HEADERS EXCLUDE REGEX ".*freerdp/server/proxy.*")
  list(FILTER PUBLIC_PROXY_HEADERS INCLUDE REGEX ".*freerdp/server/proxy.*")
  if(WITH_SERVER)
    set_property(TARGET freerdp-server APPEND PROPERTY SOURCES ${PUBLIC_SERVER_HEADERS})
  endif()
  if(WITH_PROXY)
    set_property(TARGET freerdp-server-proxy APPEND PROPERTY SOURCES ${PUBLIC_PROXY_HEADERS})
  endif()
endif()

if(WITH_CLIENT_COMMON)
  set(PUBLIC_CLIENT_HEADERS ${PUBLIC_COMMON_HEADERS})
  list(FILTER PUBLIC_CLIENT_HEADERS INCLUDE REGEX ".*freerdp/client.*")
  set_property(TARGET freerdp-client APPEND PROPERTY SOURCES ${PUBLIC_CLIENT_HEADERS})
endif()

if(WITH_SERVER)
  list(FILTER PUBLIC_COMMON_HEADERS EXCLUDE REGEX ".*freerdp/server.*")
endif()

list(FILTER PUBLIC_COMMON_HEADERS EXCLUDE REGEX ".*freerdp/client.*")
list(APPEND PUBLIC_COMMON_HEADERS ${PUBLIC_COMMON_BIN_HEADERS})
set_property(TARGET freerdp APPEND PROPERTY SOURCES ${PUBLIC_COMMON_HEADERS})

add_library(freerdp-headers INTERFACE)
target_sources(freerdp-headers INTERFACE ${PUBLIC_COMMON_HEADERS})

install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/freerdp DESTINATION ${FREERDP_INCLUDE_DIR} FILES_MATCHING PATTERN "*.h")

install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/freerdp DESTINATION ${FREERDP_INCLUDE_DIR} FILES_MATCHING PATTERN "*.h")

FreeRDP/FreeRDP include/CMakeLists.txt :73

  string(REGEX MATCH "^SETTINGS_DEPRECATED\\(ALIGN64[ \t ]+INT64[ \t ]+" IS_INT64 "${TRIMMED_KEY}")
  string(REGEX MATCH "^SETTINGS_DEPRECATED\\(ALIGN64[ \t ]+UINT64[ \t ]+" IS_UINT64 "${TRIMMED_KEY}")
  string(REGEX MATCH "^SETTINGS_DEPRECATED\\(ALIGN64[ \t ]+(char|CHAR)[ \t ]*\\*[ \t ]+" IS_STRING "${TRIMMED_KEY}")

  string(REGEX REPLACE ".+/\\*" "" index "${TRIMMED_KEY}")
  string(REGEX REPLACE "[ \t/\\*]" "" index "${index}")

  if(index MATCHES "^[0-9]+$")
    string(REGEX REPLACE "^SETTINGS_DEPRECATED\\(ALIGN64[ \t ]+[a-zA-Z0-9_\\*]+[ \t ]+" "" VALUE ${TRIMMED_KEY})
    string(STRIP "${VALUE}" VALUE)
    string(FIND "${VALUE}" ")" SEMICOLON)
    string(SUBSTRING "${VALUE}" 0 ${SEMICOLON} KEY_VALUE)

    if(IS_BOOL)
      set(KEY_VALUE "FreeRDP_${KEY_VALUE} = ${index}")
      list(APPEND SETTINGS_KEYS_BOOL ${KEY_VALUE})
    elseif(IS_INT16)
      set(KEY_VALUE "FreeRDP_${KEY_VALUE} = ${index}")
      list(APPEND SETTINGS_KEYS_INT16 ${KEY_VALUE})
    elseif(IS_UINT16)
      set(KEY_VALUE "FreeRDP_${KEY_VALUE} = ${index}")
      list(APPEND SETTINGS_KEYS_UINT16 ${KEY_VALUE})
    elseif(IS_INT32)
      set(KEY_VALUE "FreeRDP_${KEY_VALUE} = ${index}")
      list(APPEND SETTINGS_KEYS_INT32 ${KEY_VALUE})
    elseif(IS_UINT32)
      set(KEY_VALUE "FreeRDP_${KEY_VALUE} = ${index}")
      list(APPEND SETTINGS_KEYS_UINT32 ${KEY_VALUE})
    elseif(IS_INT64)
      set(KEY_VALUE "FreeRDP_${KEY_VALUE} = ${index}")
      list(APPEND SETTINGS_KEYS_INT64 ${KEY_VALUE})
    elseif(IS_UINT64)
      set(KEY_VALUE "FreeRDP_${KEY_VALUE} = ${index}")
      list(APPEND SETTINGS_KEYS_UINT64 ${KEY_VALUE})
    elseif(IS_STRING)
      string(SUBSTRING "${VALUE}" 0 ${SEMICOLON} KEY_VALUE)
      set(KEY_VALUE "FreeRDP_${KEY_VALUE} = ${index}")
      list(APPEND SETTINGS_KEYS_STRING ${KEY_VALUE})
    else()
      set(KEY_VALUE "FreeRDP_${KEY_VALUE} = ${index}")
      list(APPEND SETTINGS_KEYS_POINTER ${KEY_VALUE})
    endif()
  endif()
endforeach()

list(APPEND SETTINGS_KEYS_BOOL "FreeRDP_BOOL_UNUSED = -1")
list(APPEND SETTINGS_KEYS_INT16 "FreeRDP_INT16_UNUSED = -1")
list(APPEND SETTINGS_KEYS_UINT16 "FreeRDP_UINT16_UNUSED = -1")
list(APPEND SETTINGS_KEYS_INT32 "FreeRDP_INT32_UNUSED = -1")
list(APPEND SETTINGS_KEYS_UINT32 "FreeRDP_UINT32_UNUSED = -1")
list(APPEND SETTINGS_KEYS_INT64 "FreeRDP_INT64_UNUSED = -1")
list(APPEND SETTINGS_KEYS_UINT64 "FreeRDP_UINT64_UNUSED = -1")
list(APPEND SETTINGS_KEYS_STRING "FreeRDP_STRING_UNUSED = -1")
list(APPEND SETTINGS_KEYS_POINTER "FreeRDP_POINTER_UNUSED = -1")

string(REPLACE ";" ",\n\t" SETTINGS_KEYS_BOOL "${SETTINGS_KEYS_BOOL}")
string(REPLACE ";" ",\n\t" SETTINGS_KEYS_INT16 "${SETTINGS_KEYS_INT16}")
string(REPLACE ";" ",\n\t" SETTINGS_KEYS_UINT16 "${SETTINGS_KEYS_UINT16}")
string(REPLACE ";" ",\n\t" SETTINGS_KEYS_INT32 "${SETTINGS_KEYS_INT32}")
string(REPLACE ";" ",\n\t" SETTINGS_KEYS_UINT32 "${SETTINGS_KEYS_UINT32}")
string(REPLACE ";" ",\n\t" SETTINGS_KEYS_INT64 "${SETTINGS_KEYS_INT64}")
string(REPLACE ";" ",\n\t" SETTINGS_KEYS_UINT64 "${SETTINGS_KEYS_UINT64}")
string(REPLACE ";" ",\n\t" SETTINGS_KEYS_STRING "${SETTINGS_KEYS_STRING}")
string(REPLACE ";" ",\n\t" SETTINGS_KEYS_POINTER "${SETTINGS_KEYS_POINTER}")

cleaning_configure_file(
  ${CMAKE_CURRENT_SOURCE_DIR}/config/settings_keys.h.in ${CMAKE_CURRENT_BINARY_DIR}/freerdp/settings_keys.h
)

file(GLOB_RECURSE PUBLIC_COMMON_HEADERS LIST_DIRECTORIES false "freerdp/*.h")
file(GLOB_RECURSE PUBLIC_COMMON_BIN_HEADERS LIST_DIRECTORIES false "${CMAKE_CURRENT_BINARY_DIR}/freerdp/*.h")
list(SORT PUBLIC_COMMON_HEADERS)

if(WITH_SERVER)
  set(PUBLIC_SERVER_HEADERS ${PUBLIC_COMMON_HEADERS})
  list(FILTER PUBLIC_SERVER_HEADERS INCLUDE REGEX ".*freerdp/server.*")

  set(PUBLIC_PROXY_HEADERS ${PUBLIC_SERVER_HEADERS})
  list(FILTER PUBLIC_SERVER_HEADERS EXCLUDE REGEX ".*freerdp/server/proxy.*")
  list(FILTER PUBLIC_PROXY_HEADERS INCLUDE REGEX ".*freerdp/server/proxy.*")
  if(WITH_SERVER)
    set_property(TARGET freerdp-server APPEND PROPERTY SOURCES ${PUBLIC_SERVER_HEADERS})
  endif()
  if(WITH_PROXY)
    set_property(TARGET freerdp-server-proxy APPEND PROPERTY SOURCES ${PUBLIC_PROXY_HEADERS})
  endif()
endif()

if(WITH_CLIENT_COMMON)
  set(PUBLIC_CLIENT_HEADERS ${PUBLIC_COMMON_HEADERS})
  list(FILTER PUBLIC_CLIENT_HEADERS INCLUDE REGEX ".*freerdp/client.*")
  set_property(TARGET freerdp-client APPEND PROPERTY SOURCES ${PUBLIC_CLIENT_HEADERS})
endif()

if(WITH_SERVER)
  list(FILTER PUBLIC_COMMON_HEADERS EXCLUDE REGEX ".*freerdp/server.*")
endif()

list(FILTER PUBLIC_COMMON_HEADERS EXCLUDE REGEX ".*freerdp/client.*")
list(APPEND PUBLIC_COMMON_HEADERS ${PUBLIC_COMMON_BIN_HEADERS})
set_property(TARGET freerdp APPEND PROPERTY SOURCES ${PUBLIC_COMMON_HEADERS})

add_library(freerdp-headers INTERFACE)
target_sources(freerdp-headers INTERFACE ${PUBLIC_COMMON_HEADERS})

install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/freerdp DESTINATION ${FREERDP_INCLUDE_DIR} FILES_MATCHING PATTERN "*.h")

install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/freerdp DESTINATION ${FREERDP_INCLUDE_DIR} FILES_MATCHING PATTERN "*.h")

FreeRDP/FreeRDP include/CMakeLists.txt :74

  string(REGEX MATCH "^SETTINGS_DEPRECATED\\(ALIGN64[ \t ]+UINT64[ \t ]+" IS_UINT64 "${TRIMMED_KEY}")
  string(REGEX MATCH "^SETTINGS_DEPRECATED\\(ALIGN64[ \t ]+(char|CHAR)[ \t ]*\\*[ \t ]+" IS_STRING "${TRIMMED_KEY}")

  string(REGEX REPLACE ".+/\\*" "" index "${TRIMMED_KEY}")
  string(REGEX REPLACE "[ \t/\\*]" "" index "${index}")

  if(index MATCHES "^[0-9]+$")
    string(REGEX REPLACE "^SETTINGS_DEPRECATED\\(ALIGN64[ \t ]+[a-zA-Z0-9_\\*]+[ \t ]+" "" VALUE ${TRIMMED_KEY})
    string(STRIP "${VALUE}" VALUE)
    string(FIND "${VALUE}" ")" SEMICOLON)
    string(SUBSTRING "${VALUE}" 0 ${SEMICOLON} KEY_VALUE)

    if(IS_BOOL)
      set(KEY_VALUE "FreeRDP_${KEY_VALUE} = ${index}")
      list(APPEND SETTINGS_KEYS_BOOL ${KEY_VALUE})
    elseif(IS_INT16)
      set(KEY_VALUE "FreeRDP_${KEY_VALUE} = ${index}")
      list(APPEND SETTINGS_KEYS_INT16 ${KEY_VALUE})
    elseif(IS_UINT16)
      set(KEY_VALUE "FreeRDP_${KEY_VALUE} = ${index}")
      list(APPEND SETTINGS_KEYS_UINT16 ${KEY_VALUE})
    elseif(IS_INT32)
      set(KEY_VALUE "FreeRDP_${KEY_VALUE} = ${index}")
      list(APPEND SETTINGS_KEYS_INT32 ${KEY_VALUE})
    elseif(IS_UINT32)
      set(KEY_VALUE "FreeRDP_${KEY_VALUE} = ${index}")
      list(APPEND SETTINGS_KEYS_UINT32 ${KEY_VALUE})
    elseif(IS_INT64)
      set(KEY_VALUE "FreeRDP_${KEY_VALUE} = ${index}")
      list(APPEND SETTINGS_KEYS_INT64 ${KEY_VALUE})
    elseif(IS_UINT64)
      set(KEY_VALUE "FreeRDP_${KEY_VALUE} = ${index}")
      list(APPEND SETTINGS_KEYS_UINT64 ${KEY_VALUE})
    elseif(IS_STRING)
      string(SUBSTRING "${VALUE}" 0 ${SEMICOLON} KEY_VALUE)
      set(KEY_VALUE "FreeRDP_${KEY_VALUE} = ${index}")
      list(APPEND SETTINGS_KEYS_STRING ${KEY_VALUE})
    else()
      set(KEY_VALUE "FreeRDP_${KEY_VALUE} = ${index}")
      list(APPEND SETTINGS_KEYS_POINTER ${KEY_VALUE})
    endif()
  endif()
endforeach()

list(APPEND SETTINGS_KEYS_BOOL "FreeRDP_BOOL_UNUSED = -1")
list(APPEND SETTINGS_KEYS_INT16 "FreeRDP_INT16_UNUSED = -1")
list(APPEND SETTINGS_KEYS_UINT16 "FreeRDP_UINT16_UNUSED = -1")
list(APPEND SETTINGS_KEYS_INT32 "FreeRDP_INT32_UNUSED = -1")
list(APPEND SETTINGS_KEYS_UINT32 "FreeRDP_UINT32_UNUSED = -1")
list(APPEND SETTINGS_KEYS_INT64 "FreeRDP_INT64_UNUSED = -1")
list(APPEND SETTINGS_KEYS_UINT64 "FreeRDP_UINT64_UNUSED = -1")
list(APPEND SETTINGS_KEYS_STRING "FreeRDP_STRING_UNUSED = -1")
list(APPEND SETTINGS_KEYS_POINTER "FreeRDP_POINTER_UNUSED = -1")

string(REPLACE ";" ",\n\t" SETTINGS_KEYS_BOOL "${SETTINGS_KEYS_BOOL}")
string(REPLACE ";" ",\n\t" SETTINGS_KEYS_INT16 "${SETTINGS_KEYS_INT16}")
string(REPLACE ";" ",\n\t" SETTINGS_KEYS_UINT16 "${SETTINGS_KEYS_UINT16}")
string(REPLACE ";" ",\n\t" SETTINGS_KEYS_INT32 "${SETTINGS_KEYS_INT32}")
string(REPLACE ";" ",\n\t" SETTINGS_KEYS_UINT32 "${SETTINGS_KEYS_UINT32}")
string(REPLACE ";" ",\n\t" SETTINGS_KEYS_INT64 "${SETTINGS_KEYS_INT64}")
string(REPLACE ";" ",\n\t" SETTINGS_KEYS_UINT64 "${SETTINGS_KEYS_UINT64}")
string(REPLACE ";" ",\n\t" SETTINGS_KEYS_STRING "${SETTINGS_KEYS_STRING}")
string(REPLACE ";" ",\n\t" SETTINGS_KEYS_POINTER "${SETTINGS_KEYS_POINTER}")

cleaning_configure_file(
  ${CMAKE_CURRENT_SOURCE_DIR}/config/settings_keys.h.in ${CMAKE_CURRENT_BINARY_DIR}/freerdp/settings_keys.h
)

file(GLOB_RECURSE PUBLIC_COMMON_HEADERS LIST_DIRECTORIES false "freerdp/*.h")
file(GLOB_RECURSE PUBLIC_COMMON_BIN_HEADERS LIST_DIRECTORIES false "${CMAKE_CURRENT_BINARY_DIR}/freerdp/*.h")
list(SORT PUBLIC_COMMON_HEADERS)

if(WITH_SERVER)
  set(PUBLIC_SERVER_HEADERS ${PUBLIC_COMMON_HEADERS})
  list(FILTER PUBLIC_SERVER_HEADERS INCLUDE REGEX ".*freerdp/server.*")

  set(PUBLIC_PROXY_HEADERS ${PUBLIC_SERVER_HEADERS})
  list(FILTER PUBLIC_SERVER_HEADERS EXCLUDE REGEX ".*freerdp/server/proxy.*")
  list(FILTER PUBLIC_PROXY_HEADERS INCLUDE REGEX ".*freerdp/server/proxy.*")
  if(WITH_SERVER)
    set_property(TARGET freerdp-server APPEND PROPERTY SOURCES ${PUBLIC_SERVER_HEADERS})
  endif()
  if(WITH_PROXY)
    set_property(TARGET freerdp-server-proxy APPEND PROPERTY SOURCES ${PUBLIC_PROXY_HEADERS})
  endif()
endif()

if(WITH_CLIENT_COMMON)
  set(PUBLIC_CLIENT_HEADERS ${PUBLIC_COMMON_HEADERS})
  list(FILTER PUBLIC_CLIENT_HEADERS INCLUDE REGEX ".*freerdp/client.*")
  set_property(TARGET freerdp-client APPEND PROPERTY SOURCES ${PUBLIC_CLIENT_HEADERS})
endif()

if(WITH_SERVER)
  list(FILTER PUBLIC_COMMON_HEADERS EXCLUDE REGEX ".*freerdp/server.*")
endif()

list(FILTER PUBLIC_COMMON_HEADERS EXCLUDE REGEX ".*freerdp/client.*")
list(APPEND PUBLIC_COMMON_HEADERS ${PUBLIC_COMMON_BIN_HEADERS})
set_property(TARGET freerdp APPEND PROPERTY SOURCES ${PUBLIC_COMMON_HEADERS})

add_library(freerdp-headers INTERFACE)
target_sources(freerdp-headers INTERFACE ${PUBLIC_COMMON_HEADERS})

install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/freerdp DESTINATION ${FREERDP_INCLUDE_DIR} FILES_MATCHING PATTERN "*.h")

install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/freerdp DESTINATION ${FREERDP_INCLUDE_DIR} FILES_MATCHING PATTERN "*.h")

FreeRDP/FreeRDP include/CMakeLists.txt :75

  string(REGEX MATCH "^SETTINGS_DEPRECATED\\(ALIGN64[ \t ]+(char|CHAR)[ \t ]*\\*[ \t ]+" IS_STRING "${TRIMMED_KEY}")

  string(REGEX REPLACE ".+/\\*" "" index "${TRIMMED_KEY}")
  string(REGEX REPLACE "[ \t/\\*]" "" index "${index}")

  if(index MATCHES "^[0-9]+$")
    string(REGEX REPLACE "^SETTINGS_DEPRECATED\\(ALIGN64[ \t ]+[a-zA-Z0-9_\\*]+[ \t ]+" "" VALUE ${TRIMMED_KEY})
    string(STRIP "${VALUE}" VALUE)
    string(FIND "${VALUE}" ")" SEMICOLON)
    string(SUBSTRING "${VALUE}" 0 ${SEMICOLON} KEY_VALUE)

    if(IS_BOOL)
      set(KEY_VALUE "FreeRDP_${KEY_VALUE} = ${index}")
      list(APPEND SETTINGS_KEYS_BOOL ${KEY_VALUE})
    elseif(IS_INT16)
      set(KEY_VALUE "FreeRDP_${KEY_VALUE} = ${index}")
      list(APPEND SETTINGS_KEYS_INT16 ${KEY_VALUE})
    elseif(IS_UINT16)
      set(KEY_VALUE "FreeRDP_${KEY_VALUE} = ${index}")
      list(APPEND SETTINGS_KEYS_UINT16 ${KEY_VALUE})
    elseif(IS_INT32)
      set(KEY_VALUE "FreeRDP_${KEY_VALUE} = ${index}")
      list(APPEND SETTINGS_KEYS_INT32 ${KEY_VALUE})
    elseif(IS_UINT32)
      set(KEY_VALUE "FreeRDP_${KEY_VALUE} = ${index}")
      list(APPEND SETTINGS_KEYS_UINT32 ${KEY_VALUE})
    elseif(IS_INT64)
      set(KEY_VALUE "FreeRDP_${KEY_VALUE} = ${index}")
      list(APPEND SETTINGS_KEYS_INT64 ${KEY_VALUE})
    elseif(IS_UINT64)
      set(KEY_VALUE "FreeRDP_${KEY_VALUE} = ${index}")
      list(APPEND SETTINGS_KEYS_UINT64 ${KEY_VALUE})
    elseif(IS_STRING)
      string(SUBSTRING "${VALUE}" 0 ${SEMICOLON} KEY_VALUE)
      set(KEY_VALUE "FreeRDP_${KEY_VALUE} = ${index}")
      list(APPEND SETTINGS_KEYS_STRING ${KEY_VALUE})
    else()
      set(KEY_VALUE "FreeRDP_${KEY_VALUE} = ${index}")
      list(APPEND SETTINGS_KEYS_POINTER ${KEY_VALUE})
    endif()
  endif()
endforeach()

list(APPEND SETTINGS_KEYS_BOOL "FreeRDP_BOOL_UNUSED = -1")
list(APPEND SETTINGS_KEYS_INT16 "FreeRDP_INT16_UNUSED = -1")
list(APPEND SETTINGS_KEYS_UINT16 "FreeRDP_UINT16_UNUSED = -1")
list(APPEND SETTINGS_KEYS_INT32 "FreeRDP_INT32_UNUSED = -1")
list(APPEND SETTINGS_KEYS_UINT32 "FreeRDP_UINT32_UNUSED = -1")
list(APPEND SETTINGS_KEYS_INT64 "FreeRDP_INT64_UNUSED = -1")
list(APPEND SETTINGS_KEYS_UINT64 "FreeRDP_UINT64_UNUSED = -1")
list(APPEND SETTINGS_KEYS_STRING "FreeRDP_STRING_UNUSED = -1")
list(APPEND SETTINGS_KEYS_POINTER "FreeRDP_POINTER_UNUSED = -1")

string(REPLACE ";" ",\n\t" SETTINGS_KEYS_BOOL "${SETTINGS_KEYS_BOOL}")
string(REPLACE ";" ",\n\t" SETTINGS_KEYS_INT16 "${SETTINGS_KEYS_INT16}")
string(REPLACE ";" ",\n\t" SETTINGS_KEYS_UINT16 "${SETTINGS_KEYS_UINT16}")
string(REPLACE ";" ",\n\t" SETTINGS_KEYS_INT32 "${SETTINGS_KEYS_INT32}")
string(REPLACE ";" ",\n\t" SETTINGS_KEYS_UINT32 "${SETTINGS_KEYS_UINT32}")
string(REPLACE ";" ",\n\t" SETTINGS_KEYS_INT64 "${SETTINGS_KEYS_INT64}")
string(REPLACE ";" ",\n\t" SETTINGS_KEYS_UINT64 "${SETTINGS_KEYS_UINT64}")
string(REPLACE ";" ",\n\t" SETTINGS_KEYS_STRING "${SETTINGS_KEYS_STRING}")
string(REPLACE ";" ",\n\t" SETTINGS_KEYS_POINTER "${SETTINGS_KEYS_POINTER}")

cleaning_configure_file(
  ${CMAKE_CURRENT_SOURCE_DIR}/config/settings_keys.h.in ${CMAKE_CURRENT_BINARY_DIR}/freerdp/settings_keys.h
)

file(GLOB_RECURSE PUBLIC_COMMON_HEADERS LIST_DIRECTORIES false "freerdp/*.h")
file(GLOB_RECURSE PUBLIC_COMMON_BIN_HEADERS LIST_DIRECTORIES false "${CMAKE_CURRENT_BINARY_DIR}/freerdp/*.h")
list(SORT PUBLIC_COMMON_HEADERS)

if(WITH_SERVER)
  set(PUBLIC_SERVER_HEADERS ${PUBLIC_COMMON_HEADERS})
  list(FILTER PUBLIC_SERVER_HEADERS INCLUDE REGEX ".*freerdp/server.*")

  set(PUBLIC_PROXY_HEADERS ${PUBLIC_SERVER_HEADERS})
  list(FILTER PUBLIC_SERVER_HEADERS EXCLUDE REGEX ".*freerdp/server/proxy.*")
  list(FILTER PUBLIC_PROXY_HEADERS INCLUDE REGEX ".*freerdp/server/proxy.*")
  if(WITH_SERVER)
    set_property(TARGET freerdp-server APPEND PROPERTY SOURCES ${PUBLIC_SERVER_HEADERS})
  endif()
  if(WITH_PROXY)
    set_property(TARGET freerdp-server-proxy APPEND PROPERTY SOURCES ${PUBLIC_PROXY_HEADERS})
  endif()
endif()

if(WITH_CLIENT_COMMON)
  set(PUBLIC_CLIENT_HEADERS ${PUBLIC_COMMON_HEADERS})
  list(FILTER PUBLIC_CLIENT_HEADERS INCLUDE REGEX ".*freerdp/client.*")
  set_property(TARGET freerdp-client APPEND PROPERTY SOURCES ${PUBLIC_CLIENT_HEADERS})
endif()

if(WITH_SERVER)
  list(FILTER PUBLIC_COMMON_HEADERS EXCLUDE REGEX ".*freerdp/server.*")
endif()

list(FILTER PUBLIC_COMMON_HEADERS EXCLUDE REGEX ".*freerdp/client.*")
list(APPEND PUBLIC_COMMON_HEADERS ${PUBLIC_COMMON_BIN_HEADERS})
set_property(TARGET freerdp APPEND PROPERTY SOURCES ${PUBLIC_COMMON_HEADERS})

add_library(freerdp-headers INTERFACE)
target_sources(freerdp-headers INTERFACE ${PUBLIC_COMMON_HEADERS})

install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/freerdp DESTINATION ${FREERDP_INCLUDE_DIR} FILES_MATCHING PATTERN "*.h")

install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/freerdp DESTINATION ${FREERDP_INCLUDE_DIR} FILES_MATCHING PATTERN "*.h")

OSGeo/gdal cmake/helpers/GdalGenerateConfig.cmake :163

string(FIND "${_lib_name}" "${_suffix}" _pos REVERSE)

OSGeo/gdal cmake/modules/Ccache.cmake :65

string(FIND "${CCACHE_SLOPPINESS}" "pch_defines" fpch_defines_found_index)

OSGeo/gdal cmake/modules/Ccache.cmake :68

string(FIND "${CCACHE_SLOPPINESS}" "include_file_ctime" include_file_ctime_found_index)

gnuradio/gnuradio cmake/Modules/CMakeOverloads.cmake :42

string(FIND ${inc_dir_abs} ${PROJECT_SOURCE_DIR} IS_IN_SOURCE)

gnuradio/gnuradio cmake/Modules/GrMiscUtils.cmake :43

string(FIND "${CMAKE_CXX_FLAGS}" "${flag}" flag_dup)

HDFGroup/hdf4 config/cmake/runTest.cmake :106

string (FIND "${TEST_STREAM}" "no version information available" TEST_FIND_RESULT)

HDFGroup/hdf4 config/cmake/runTest.cmake :141

string (FIND "${TEST_STREAM}" "_pmi_alps" TEST_FIND_RESULT)

HDFGroup/hdf4 config/cmake/runTest.cmake :146

string (FIND "${TEST_STREAM}" "ulimit -s" TEST_FIND_RESULT)

HDFGroup/hdf4 config/cmake/runTest.cmake :151

string (FIND "${TEST_STREAM}" "no version information available" TEST_FIND_RESULT)

HDFGroup/hdf5 CMakeVOL.cmake :49

      string (REGEX MATCH "^[ \t]*set_tests_properties\\([ \t]*[\r\n]?" match_string "${line}")
      if (NOT "${match_string}" STREQUAL "")
        string (REGEX REPLACE "^[ \t]*set_tests_properties\\([ \t]*[\r\n]?" "" stripped_line "${line}")
      endif ()
      string (REGEX MATCH "^[ \t]*.\\{test\\}[ \t]*[\r\n]?" match_string "${line}")
      if (NOT "${match_string}" STREQUAL "")
        string (REGEX REPLACE "^[ \t]*.\\{[A-Za-z]*\\}[ \t]*[\r\n]?" "" stripped_line "${line}")
      endif ()
      string (REGEX MATCH "^[ \t]*PROPERTIES[ \t]*[\r\n]?" match_string "${line}")
      if (NOT "${match_string}" STREQUAL "")
        string (REGEX REPLACE "^[ \t]*PROPERTIES[ \t]*[\r\n]?" "" stripped_line "${line}")
      endif ()
      string (REGEX MATCH "^[ \t]*ENVIRONMENT[ \t]*.*[\r\n]?" match_string "${line}")
      if (NOT "${match_string}" STREQUAL "")
        string (REGEX REPLACE "^[ \t]*ENVIRONMENT[ \t]*.*[\r\n]?" "" stripped_line "${line}")
      endif ()
      file (APPEND "${source_dir}/tests/CMakeLists.txt" "${stripped_line}\n")
    endforeach ()
  endif ()
endfunction ()

set (HDF5_VOL_ALLOW_EXTERNAL "NO" CACHE STRING "Allow building of external HDF5 VOL connectors with FetchContent")
set_property (CACHE HDF5_VOL_ALLOW_EXTERNAL PROPERTY STRINGS NO GIT LOCAL_DIR)
mark_as_advanced (HDF5_VOL_ALLOW_EXTERNAL)
if (HDF5_VOL_ALLOW_EXTERNAL MATCHES "GIT" OR HDF5_VOL_ALLOW_EXTERNAL MATCHES "LOCAL_DIR")
  # For compatibility, set some variables that projects would
  # typically look for after calling find_package(HDF5)
  set (HDF5_FOUND 1)
  set (HDF5_LIBRARIES "${HDF5_LIBSH_TARGET};${LINK_LIBS};${LINK_COMP_LIBS};$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:MPI::MPI_C>")
  set (HDF5_INCLUDE_DIRS "${HDF5_SRC_INCLUDE_DIRS};${HDF5_SRC_BINARY_DIR};$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_INCLUDE_DIRS}>")
  set (HDF5_IS_PARALLEL ${H5_HAVE_PARALLEL})
  set (HDF5_VERSION ${HDF5_PACKAGE_VERSION})

  set (HDF5_C_LIBRARIES "${HDF5_LIBRARIES}")

  if (HDF5_BUILD_HL_LIB)
    set (HDF5_C_HL_LIBRARIES "${HDF5_HL_LIBSH_TARGET}")
  endif()

  set (HDF5_MAX_EXTERNAL_VOLS 10)
  set (HDF5_EXTERNAL_VOL_TARGETS "")

  foreach (vol_idx RANGE 1 ${HDF5_MAX_EXTERNAL_VOLS})
    # Generate fixed-width index number prepended with 0s
    # so VOL sources come in order from 1 - HDF5_MAX_EXTERNAL_VOLS
    set (vol_idx_num_digits 2) # Based on HDF5_MAX_EXTERNAL_VOLS
    set (vol_idx_fixed "${vol_idx}")
    string (LENGTH "${vol_idx_fixed}" vol_idx_len)
    while (vol_idx_len LESS vol_idx_num_digits)
      string (PREPEND vol_idx_fixed "0")
      math (EXPR vol_idx_len "${vol_idx_len}+1")
    endwhile ()

    if (HDF5_VOL_ALLOW_EXTERNAL MATCHES "GIT")
      set (HDF5_VOL_URL${vol_idx_fixed} "" CACHE STRING "Git repository URL of an external HDF5 VOL connector to build")
      mark_as_advanced (HDF5_VOL_URL${vol_idx_fixed})
      set (HDF5_VOL_SOURCE "${HDF5_VOL_URL${vol_idx_fixed}}")
    elseif(HDF5_VOL_ALLOW_EXTERNAL MATCHES "LOCAL_DIR")
      set (HDF5_VOL_PATH${vol_idx_fixed} "" CACHE STRING "Path to the source directory of an external HDF5 VOL connector to build")
      mark_as_advanced (HDF5_VOL_PATH${vol_idx_fixed})
      set (HDF5_VOL_SOURCE "${HDF5_VOL_PATH${vol_idx_fixed}}")
    endif()

    if (NOT "${HDF5_VOL_SOURCE}" STREQUAL "")
      # Deal with trailing slash in path for LOCAL_DIR case
      if (HDF5_VOL_ALLOW_EXTERNAL MATCHES "LOCAL_DIR")
        # Erase trailing slash
        string (REGEX REPLACE "/$" "" HDF5_VOL_SOURCE ${HDF5_VOL_SOURCE})
      endif()

      # Extract the name of the VOL connector
      string (FIND "${HDF5_VOL_SOURCE}" "/" hdf5_vol_name_pos REVERSE)
      if (hdf5_vol_name_pos EQUAL -1)
        if (HDF5_VOL_ALLOW_EXTERNAL MATCHES "GIT")
          message (SEND_ERROR "Invalid URL '${HDF5_VOL_SOURCE}' specified for HDF5_VOL_URL${vol_idx_fixed}")
        elseif (HDF5_VOL_ALLOW_EXTERNAL MATCHES "LOCAL_DIR")
          message (SEND_ERROR "Invalid source path '${HDF5_VOL_SOURCE}' specified for HDF5_VOL_PATH${vol_idx_fixed}")
        endif()
      endif ()

      math (EXPR hdf5_vol_name_pos "${hdf5_vol_name_pos}+1")

      string (SUBSTRING "${HDF5_VOL_SOURCE}" ${hdf5_vol_name_pos} -1 hdf5_vol_name)
      string (REPLACE ".git" "" hdf5_vol_name "${hdf5_vol_name}")
      string (STRIP "${hdf5_vol_name}" hdf5_vol_name)
      string (TOUPPER "${hdf5_vol_name}" hdf5_vol_name_upper)
      string (TOLOWER "${hdf5_vol_name}" hdf5_vol_name_lower)

      message (VERBOSE "Building VOL connector '${hdf5_vol_name}' with FetchContent from source ${HDF5_VOL_SOURCE}")

      # Set some cache variables that can be set by users when building
      if (HDF5_VOL_ALLOW_EXTERNAL MATCHES "GIT")
        set ("HDF5_VOL_${hdf5_vol_name_upper}_BRANCH" "main" CACHE STRING "Git branch (or tag) to use when building VOL connector '${hdf5_vol_name}'")
        mark_as_advanced ("HDF5_VOL_${hdf5_vol_name_upper}_BRANCH")
      endif()

      set ("HDF5_VOL_${hdf5_vol_name_upper}_CMAKE_PACKAGE_NAME"
        "${hdf5_vol_name_lower}"
        CACHE
        STRING
        "CMake package name used by find_package(...) calls for VOL connector '${hdf5_vol_name}'"
      )

      set ("HDF5_VOL_${hdf5_vol_name_upper}_NAME" "" CACHE STRING "Name of VOL connector to set for the HDF5_VOL_CONNECTOR environment variable")
      option ("HDF5_VOL_${hdf5_vol_name_upper}_TEST_PARALLEL" "Whether to test VOL connector '${hdf5_vol_name}' against the parallel API tests" OFF)

      mark_as_advanced ("HDF5_VOL_${hdf5_vol_name_upper}_NAME")
      mark_as_advanced ("HDF5_VOL_${hdf5_vol_name_upper}_TEST_PARALLEL")

      if (HDF5_TEST_API)
        if ("${HDF5_VOL_${hdf5_vol_name_upper}_NAME}" STREQUAL "")
          message (SEND_ERROR "HDF5_VOL_${hdf5_vol_name_upper}_NAME must be set to a valid connector name to use VOL connector '${hdf5_vol_name}' for testing")
        endif ()
      endif ()

      if ((HDF5_VOL_ALLOW_EXTERNAL MATCHES "GIT") AND ("${HDF5_VOL_${hdf5_vol_name_upper}_BRANCH}" STREQUAL ""))
        message (SEND_ERROR "HDF5_VOL_${hdf5_vol_name_upper}_BRANCH must be set to a valid git branch name (or git tag) to build VOL connector '${hdf5_vol_name}'")
      endif ()

      if ((HDF5_VOL_ALLOW_EXTERNAL MATCHES "LOCAL_DIR")
        AND NOT (EXISTS ${HDF5_VOL_SOURCE} AND IS_DIRECTORY ${HDF5_VOL_SOURCE}))
          message (FATAL_ERROR "HDF5_VOL_PATH${vol_idx_fixed} must be an absolute path to a valid directory")
      endif ()

      # Set internal convenience variables for FetchContent dependency name
      set (hdf5_vol_depname "${HDF5_VOL_${hdf5_vol_name_upper}_CMAKE_PACKAGE_NAME}")
      string (TOLOWER "${hdf5_vol_depname}" hdf5_vol_depname_lower)

      if (${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.24")
        set("OVERRIDE_FIND_PACKAGE_OPT" "OVERRIDE_FIND_PACKAGE")
      endif()

      if (HDF5_VOL_ALLOW_EXTERNAL MATCHES "GIT")
        FetchContent_Declare (${hdf5_vol_depname}
            GIT_REPOSITORY "${HDF5_VOL_SOURCE}"
            GIT_TAG "${HDF5_VOL_${hdf5_vol_name_upper}_BRANCH}"
            "${OVERRIDE_FIND_PACKAGE_OPT}"
        )
      elseif(HDF5_VOL_ALLOW_EXTERNAL MATCHES "LOCAL_DIR")
        FetchContent_Declare (${hdf5_vol_depname}
          SOURCE_DIR "${HDF5_VOL_SOURCE}"
        )
      endif()

      FetchContent_GetProperties(${hdf5_vol_depname})
      if (NOT ${hdf5_vol_depname}_POPULATED)
        FetchContent_Populate(${hdf5_vol_depname})

        # Now that content has been populated, set other internal
        # convenience variables for FetchContent dependency
        set (hdf5_vol_depname_source_dir "${${hdf5_vol_depname_lower}_SOURCE_DIR}")
        set (hdf5_vol_depname_binary_dir "${${hdf5_vol_depname_lower}_BINARY_DIR}")

        if (NOT EXISTS "${hdf5_vol_depname_source_dir}/CMakeLists.txt")
          if (HDF5_VOL_ALLOW_EXTERNAL MATCHES "GIT")
            message (SEND_ERROR "The git repository branch '${HDF5_VOL_${hdf5_vol_name_upper}_BRANCH}' for VOL connector '${hdf5_vol_name}' does not appear to contain a CMakeLists.txt file")
          elseif (HDF5_VOL_ALLOW_EXTERNAL MATCHES "LOCAL_DIR")
            message(SEND_ERROR "The local directory '${HDF5_VOL_SOURCE}' for VOL connector '${hdf5_vol_name}' does not appear to contain a CMakeLists.txt file")
          endif()
        endif ()

        # If there are any calls to find_package(HDF5) in the connector's
        # CMakeLists.txt files, remove those since any found HDF5 targets
        # will conflict with targets being generated by this build of HDF5
        if (EXISTS "${hdf5_vol_depname_source_dir}/CMakeLists.txt")
          file (READ "${hdf5_vol_depname_source_dir}/CMakeLists.txt" vol_cmake_contents)
          string (REGEX REPLACE "[ \t]*find_package[ \t]*\\([ \t]*HDF5[^\r\n\\)]*\\)[ \t]*[\r\n]+" "" vol_cmake_contents "${vol_cmake_contents}")
          file (WRITE "${hdf5_vol_depname_source_dir}/CMakeLists.txt" "${vol_cmake_contents}")
        endif ()
        if (EXISTS "${hdf5_vol_depname_source_dir}/src/CMakeLists.txt")
          file (READ "${hdf5_vol_depname_source_dir}/src/CMakeLists.txt" vol_cmake_contents)
          string (REGEX REPLACE "[ \t]*find_package[ \t]*\\([ \t]*HDF5[^\r\n\\)]*\\)[ \t]*[\r\n]+" "" vol_cmake_contents "${vol_cmake_contents}")

HDFGroup/hdf5 CMakeVOL.cmake :51

        string (REGEX REPLACE "^[ \t]*set_tests_properties\\([ \t]*[\r\n]?" "" stripped_line "${line}")
      endif ()
      string (REGEX MATCH "^[ \t]*.\\{test\\}[ \t]*[\r\n]?" match_string "${line}")
      if (NOT "${match_string}" STREQUAL "")
        string (REGEX REPLACE "^[ \t]*.\\{[A-Za-z]*\\}[ \t]*[\r\n]?" "" stripped_line "${line}")
      endif ()
      string (REGEX MATCH "^[ \t]*PROPERTIES[ \t]*[\r\n]?" match_string "${line}")
      if (NOT "${match_string}" STREQUAL "")
        string (REGEX REPLACE "^[ \t]*PROPERTIES[ \t]*[\r\n]?" "" stripped_line "${line}")
      endif ()
      string (REGEX MATCH "^[ \t]*ENVIRONMENT[ \t]*.*[\r\n]?" match_string "${line}")
      if (NOT "${match_string}" STREQUAL "")
        string (REGEX REPLACE "^[ \t]*ENVIRONMENT[ \t]*.*[\r\n]?" "" stripped_line "${line}")
      endif ()
      file (APPEND "${source_dir}/tests/CMakeLists.txt" "${stripped_line}\n")
    endforeach ()
  endif ()
endfunction ()

set (HDF5_VOL_ALLOW_EXTERNAL "NO" CACHE STRING "Allow building of external HDF5 VOL connectors with FetchContent")
set_property (CACHE HDF5_VOL_ALLOW_EXTERNAL PROPERTY STRINGS NO GIT LOCAL_DIR)
mark_as_advanced (HDF5_VOL_ALLOW_EXTERNAL)
if (HDF5_VOL_ALLOW_EXTERNAL MATCHES "GIT" OR HDF5_VOL_ALLOW_EXTERNAL MATCHES "LOCAL_DIR")
  # For compatibility, set some variables that projects would
  # typically look for after calling find_package(HDF5)
  set (HDF5_FOUND 1)
  set (HDF5_LIBRARIES "${HDF5_LIBSH_TARGET};${LINK_LIBS};${LINK_COMP_LIBS};$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:MPI::MPI_C>")
  set (HDF5_INCLUDE_DIRS "${HDF5_SRC_INCLUDE_DIRS};${HDF5_SRC_BINARY_DIR};$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_INCLUDE_DIRS}>")
  set (HDF5_IS_PARALLEL ${H5_HAVE_PARALLEL})
  set (HDF5_VERSION ${HDF5_PACKAGE_VERSION})

  set (HDF5_C_LIBRARIES "${HDF5_LIBRARIES}")

  if (HDF5_BUILD_HL_LIB)
    set (HDF5_C_HL_LIBRARIES "${HDF5_HL_LIBSH_TARGET}")
  endif()

  set (HDF5_MAX_EXTERNAL_VOLS 10)
  set (HDF5_EXTERNAL_VOL_TARGETS "")

  foreach (vol_idx RANGE 1 ${HDF5_MAX_EXTERNAL_VOLS})
    # Generate fixed-width index number prepended with 0s
    # so VOL sources come in order from 1 - HDF5_MAX_EXTERNAL_VOLS
    set (vol_idx_num_digits 2) # Based on HDF5_MAX_EXTERNAL_VOLS
    set (vol_idx_fixed "${vol_idx}")
    string (LENGTH "${vol_idx_fixed}" vol_idx_len)
    while (vol_idx_len LESS vol_idx_num_digits)
      string (PREPEND vol_idx_fixed "0")
      math (EXPR vol_idx_len "${vol_idx_len}+1")
    endwhile ()

    if (HDF5_VOL_ALLOW_EXTERNAL MATCHES "GIT")
      set (HDF5_VOL_URL${vol_idx_fixed} "" CACHE STRING "Git repository URL of an external HDF5 VOL connector to build")
      mark_as_advanced (HDF5_VOL_URL${vol_idx_fixed})
      set (HDF5_VOL_SOURCE "${HDF5_VOL_URL${vol_idx_fixed}}")
    elseif(HDF5_VOL_ALLOW_EXTERNAL MATCHES "LOCAL_DIR")
      set (HDF5_VOL_PATH${vol_idx_fixed} "" CACHE STRING "Path to the source directory of an external HDF5 VOL connector to build")
      mark_as_advanced (HDF5_VOL_PATH${vol_idx_fixed})
      set (HDF5_VOL_SOURCE "${HDF5_VOL_PATH${vol_idx_fixed}}")
    endif()

    if (NOT "${HDF5_VOL_SOURCE}" STREQUAL "")
      # Deal with trailing slash in path for LOCAL_DIR case
      if (HDF5_VOL_ALLOW_EXTERNAL MATCHES "LOCAL_DIR")
        # Erase trailing slash
        string (REGEX REPLACE "/$" "" HDF5_VOL_SOURCE ${HDF5_VOL_SOURCE})
      endif()

      # Extract the name of the VOL connector
      string (FIND "${HDF5_VOL_SOURCE}" "/" hdf5_vol_name_pos REVERSE)
      if (hdf5_vol_name_pos EQUAL -1)
        if (HDF5_VOL_ALLOW_EXTERNAL MATCHES "GIT")
          message (SEND_ERROR "Invalid URL '${HDF5_VOL_SOURCE}' specified for HDF5_VOL_URL${vol_idx_fixed}")
        elseif (HDF5_VOL_ALLOW_EXTERNAL MATCHES "LOCAL_DIR")
          message (SEND_ERROR "Invalid source path '${HDF5_VOL_SOURCE}' specified for HDF5_VOL_PATH${vol_idx_fixed}")
        endif()
      endif ()

      math (EXPR hdf5_vol_name_pos "${hdf5_vol_name_pos}+1")

      string (SUBSTRING "${HDF5_VOL_SOURCE}" ${hdf5_vol_name_pos} -1 hdf5_vol_name)
      string (REPLACE ".git" "" hdf5_vol_name "${hdf5_vol_name}")
      string (STRIP "${hdf5_vol_name}" hdf5_vol_name)
      string (TOUPPER "${hdf5_vol_name}" hdf5_vol_name_upper)
      string (TOLOWER "${hdf5_vol_name}" hdf5_vol_name_lower)

      message (VERBOSE "Building VOL connector '${hdf5_vol_name}' with FetchContent from source ${HDF5_VOL_SOURCE}")

      # Set some cache variables that can be set by users when building
      if (HDF5_VOL_ALLOW_EXTERNAL MATCHES "GIT")
        set ("HDF5_VOL_${hdf5_vol_name_upper}_BRANCH" "main" CACHE STRING "Git branch (or tag) to use when building VOL connector '${hdf5_vol_name}'")
        mark_as_advanced ("HDF5_VOL_${hdf5_vol_name_upper}_BRANCH")
      endif()

      set ("HDF5_VOL_${hdf5_vol_name_upper}_CMAKE_PACKAGE_NAME"
        "${hdf5_vol_name_lower}"
        CACHE
        STRING
        "CMake package name used by find_package(...) calls for VOL connector '${hdf5_vol_name}'"
      )

      set ("HDF5_VOL_${hdf5_vol_name_upper}_NAME" "" CACHE STRING "Name of VOL connector to set for the HDF5_VOL_CONNECTOR environment variable")
      option ("HDF5_VOL_${hdf5_vol_name_upper}_TEST_PARALLEL" "Whether to test VOL connector '${hdf5_vol_name}' against the parallel API tests" OFF)

      mark_as_advanced ("HDF5_VOL_${hdf5_vol_name_upper}_NAME")
      mark_as_advanced ("HDF5_VOL_${hdf5_vol_name_upper}_TEST_PARALLEL")

      if (HDF5_TEST_API)
        if ("${HDF5_VOL_${hdf5_vol_name_upper}_NAME}" STREQUAL "")
          message (SEND_ERROR "HDF5_VOL_${hdf5_vol_name_upper}_NAME must be set to a valid connector name to use VOL connector '${hdf5_vol_name}' for testing")
        endif ()
      endif ()

      if ((HDF5_VOL_ALLOW_EXTERNAL MATCHES "GIT") AND ("${HDF5_VOL_${hdf5_vol_name_upper}_BRANCH}" STREQUAL ""))
        message (SEND_ERROR "HDF5_VOL_${hdf5_vol_name_upper}_BRANCH must be set to a valid git branch name (or git tag) to build VOL connector '${hdf5_vol_name}'")
      endif ()

      if ((HDF5_VOL_ALLOW_EXTERNAL MATCHES "LOCAL_DIR")
        AND NOT (EXISTS ${HDF5_VOL_SOURCE} AND IS_DIRECTORY ${HDF5_VOL_SOURCE}))
          message (FATAL_ERROR "HDF5_VOL_PATH${vol_idx_fixed} must be an absolute path to a valid directory")
      endif ()

      # Set internal convenience variables for FetchContent dependency name
      set (hdf5_vol_depname "${HDF5_VOL_${hdf5_vol_name_upper}_CMAKE_PACKAGE_NAME}")
      string (TOLOWER "${hdf5_vol_depname}" hdf5_vol_depname_lower)

      if (${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.24")
        set("OVERRIDE_FIND_PACKAGE_OPT" "OVERRIDE_FIND_PACKAGE")
      endif()

      if (HDF5_VOL_ALLOW_EXTERNAL MATCHES "GIT")
        FetchContent_Declare (${hdf5_vol_depname}
            GIT_REPOSITORY "${HDF5_VOL_SOURCE}"
            GIT_TAG "${HDF5_VOL_${hdf5_vol_name_upper}_BRANCH}"
            "${OVERRIDE_FIND_PACKAGE_OPT}"
        )
      elseif(HDF5_VOL_ALLOW_EXTERNAL MATCHES "LOCAL_DIR")
        FetchContent_Declare (${hdf5_vol_depname}
          SOURCE_DIR "${HDF5_VOL_SOURCE}"
        )
      endif()

      FetchContent_GetProperties(${hdf5_vol_depname})
      if (NOT ${hdf5_vol_depname}_POPULATED)
        FetchContent_Populate(${hdf5_vol_depname})

        # Now that content has been populated, set other internal
        # convenience variables for FetchContent dependency
        set (hdf5_vol_depname_source_dir "${${hdf5_vol_depname_lower}_SOURCE_DIR}")
        set (hdf5_vol_depname_binary_dir "${${hdf5_vol_depname_lower}_BINARY_DIR}")

        if (NOT EXISTS "${hdf5_vol_depname_source_dir}/CMakeLists.txt")
          if (HDF5_VOL_ALLOW_EXTERNAL MATCHES "GIT")
            message (SEND_ERROR "The git repository branch '${HDF5_VOL_${hdf5_vol_name_upper}_BRANCH}' for VOL connector '${hdf5_vol_name}' does not appear to contain a CMakeLists.txt file")
          elseif (HDF5_VOL_ALLOW_EXTERNAL MATCHES "LOCAL_DIR")
            message(SEND_ERROR "The local directory '${HDF5_VOL_SOURCE}' for VOL connector '${hdf5_vol_name}' does not appear to contain a CMakeLists.txt file")
          endif()
        endif ()

        # If there are any calls to find_package(HDF5) in the connector's
        # CMakeLists.txt files, remove those since any found HDF5 targets
        # will conflict with targets being generated by this build of HDF5
        if (EXISTS "${hdf5_vol_depname_source_dir}/CMakeLists.txt")
          file (READ "${hdf5_vol_depname_source_dir}/CMakeLists.txt" vol_cmake_contents)
          string (REGEX REPLACE "[ \t]*find_package[ \t]*\\([ \t]*HDF5[^\r\n\\)]*\\)[ \t]*[\r\n]+" "" vol_cmake_contents "${vol_cmake_contents}")

HDFGroup/hdf5 CMakeVOL.cmake :120

string (FIND "${HDF5_VOL_SOURCE}" "/" hdf5_vol_name_pos REVERSE)

HDFGroup/hdf5 config/HDF5UseFortran.cmake :431

string (FIND "${PAC_FC_ALL_INTEGER_KINDS_SIZEOF}" "16" pos)

ispc/ispc CMakeLists.txt :86

string(FIND "${CONFIGURATION_TYPES}" "${CMAKE_BUILD_TYPE}" MATCHED_CONFIG)

ispc/ispc benchmarks/cmake/AddBenchmark.cmake :81

string(FIND ${BENCHMARKS_ISPC_TARGETS} "," MULTI_TARGET)

ispc/ispc cmake/FindLLVM.cmake :85

string(FIND CXX_FLAGS "NDEBUG" NDEBUG_DEF)

ispc/ispc examples/cpu/cmake/AddISPCExampleLegacy.cmake :31

string(FIND ${example_ISPC_IA_TARGETS} ${ispc_target} FOUND_TARGET)

InsightSoftwareConsortium/ITK Modules/ThirdParty/HDF5/src/itkhdf5/CMakeVOL.cmake :49

      string (REGEX MATCH "^[ \t]*set_tests_properties\\([ \t]*[\r\n]?" match_string "${line}")
      if (NOT "${match_string}" STREQUAL "")
        string (REGEX REPLACE "^[ \t]*set_tests_properties\\([ \t]*[\r\n]?" "" stripped_line "${line}")
      endif ()
      string (REGEX MATCH "^[ \t]*.\\{test\\}[ \t]*[\r\n]?" match_string "${line}")
      if (NOT "${match_string}" STREQUAL "")
        string (REGEX REPLACE "^[ \t]*.\\{[A-Za-z]*\\}[ \t]*[\r\n]?" "" stripped_line "${line}")
      endif ()
      string (REGEX MATCH "^[ \t]*PROPERTIES[ \t]*[\r\n]?" match_string "${line}")
      if (NOT "${match_string}" STREQUAL "")
        string (REGEX REPLACE "^[ \t]*PROPERTIES[ \t]*[\r\n]?" "" stripped_line "${line}")
      endif ()
      string (REGEX MATCH "^[ \t]*ENVIRONMENT[ \t]*.*[\r\n]?" match_string "${line}")
      if (NOT "${match_string}" STREQUAL "")
        string (REGEX REPLACE "^[ \t]*ENVIRONMENT[ \t]*.*[\r\n]?" "" stripped_line "${line}")
      endif ()
      file (APPEND "${source_dir}/tests/CMakeLists.txt" "${stripped_line}\n")
    endforeach ()
  endif ()
endfunction ()

set (HDF5_VOL_ALLOW_EXTERNAL "NO" CACHE STRING "Allow building of external HDF5 VOL connectors with FetchContent")
set_property (CACHE HDF5_VOL_ALLOW_EXTERNAL PROPERTY STRINGS NO GIT LOCAL_DIR)
mark_as_advanced (HDF5_VOL_ALLOW_EXTERNAL)
if (HDF5_VOL_ALLOW_EXTERNAL MATCHES "GIT" OR HDF5_VOL_ALLOW_EXTERNAL MATCHES "LOCAL_DIR")
  # For compatibility, set some variables that projects would
  # typically look for after calling find_package(HDF5)
  set (HDF5_FOUND 1)
  set (HDF5_LIBRARIES "${HDF5_LIBSH_TARGET};${LINK_LIBS};${LINK_COMP_LIBS};$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:MPI::MPI_C>")
  set (HDF5_INCLUDE_DIRS "${HDF5_SRC_INCLUDE_DIRS};${HDF5_SRC_BINARY_DIR};$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_INCLUDE_DIRS}>")
  set (HDF5_IS_PARALLEL ${H5_HAVE_PARALLEL})
  set (HDF5_VERSION ${HDF5_PACKAGE_VERSION})

  set (HDF5_C_LIBRARIES "${HDF5_LIBRARIES}")

  if (HDF5_BUILD_HL_LIB)
    set (HDF5_C_HL_LIBRARIES "${HDF5_HL_LIBSH_TARGET}")
  endif()

  set (HDF5_MAX_EXTERNAL_VOLS 10)
  set (HDF5_EXTERNAL_VOL_TARGETS "")

  foreach (vol_idx RANGE 1 ${HDF5_MAX_EXTERNAL_VOLS})
    # Generate fixed-width index number prepended with 0s
    # so VOL sources come in order from 1 - HDF5_MAX_EXTERNAL_VOLS
    set (vol_idx_num_digits 2) # Based on HDF5_MAX_EXTERNAL_VOLS
    set (vol_idx_fixed "${vol_idx}")
    string (LENGTH "${vol_idx_fixed}" vol_idx_len)
    while (vol_idx_len LESS vol_idx_num_digits)
      string (PREPEND vol_idx_fixed "0")
      math (EXPR vol_idx_len "${vol_idx_len}+1")
    endwhile ()

    if (HDF5_VOL_ALLOW_EXTERNAL MATCHES "GIT")
      set (HDF5_VOL_URL${vol_idx_fixed} "" CACHE STRING "Git repository URL of an external HDF5 VOL connector to build")
      mark_as_advanced (HDF5_VOL_URL${vol_idx_fixed})
      set (HDF5_VOL_SOURCE "${HDF5_VOL_URL${vol_idx_fixed}}")
    elseif(HDF5_VOL_ALLOW_EXTERNAL MATCHES "LOCAL_DIR")
      set (HDF5_VOL_PATH${vol_idx_fixed} "" CACHE STRING "Path to the source directory of an external HDF5 VOL connector to build")
      mark_as_advanced (HDF5_VOL_PATH${vol_idx_fixed})
      set (HDF5_VOL_SOURCE "${HDF5_VOL_PATH${vol_idx_fixed}}")
    endif()

    if (NOT "${HDF5_VOL_SOURCE}" STREQUAL "")
      # Deal with trailing slash in path for LOCAL_DIR case
      if (HDF5_VOL_ALLOW_EXTERNAL MATCHES "LOCAL_DIR")
        # Erase trailing slash
        string (REGEX REPLACE "/$" "" HDF5_VOL_SOURCE ${HDF5_VOL_SOURCE})
      endif()

      # Extract the name of the VOL connector
      string (FIND "${HDF5_VOL_SOURCE}" "/" hdf5_vol_name_pos REVERSE)
      if (hdf5_vol_name_pos EQUAL -1)
        if (HDF5_VOL_ALLOW_EXTERNAL MATCHES "GIT")
          message (SEND_ERROR "Invalid URL '${HDF5_VOL_SOURCE}' specified for HDF5_VOL_URL${vol_idx_fixed}")
        elseif (HDF5_VOL_ALLOW_EXTERNAL MATCHES "LOCAL_DIR")
          message (SEND_ERROR "Invalid source path '${HDF5_VOL_SOURCE}' specified for HDF5_VOL_PATH${vol_idx_fixed}")
        endif()
      endif ()

      math (EXPR hdf5_vol_name_pos "${hdf5_vol_name_pos}+1")

      string (SUBSTRING "${HDF5_VOL_SOURCE}" ${hdf5_vol_name_pos} -1 hdf5_vol_name)
      string (REPLACE ".git" "" hdf5_vol_name "${hdf5_vol_name}")
      string (STRIP "${hdf5_vol_name}" hdf5_vol_name)
      string (TOUPPER "${hdf5_vol_name}" hdf5_vol_name_upper)
      string (TOLOWER "${hdf5_vol_name}" hdf5_vol_name_lower)

      message (VERBOSE "Building VOL connector '${hdf5_vol_name}' with FetchContent from source ${HDF5_VOL_SOURCE}")

      # Set some cache variables that can be set by users when building
      if (HDF5_VOL_ALLOW_EXTERNAL MATCHES "GIT")
        set ("HDF5_VOL_${hdf5_vol_name_upper}_BRANCH" "main" CACHE STRING "Git branch (or tag) to use when building VOL connector '${hdf5_vol_name}'")
        mark_as_advanced ("HDF5_VOL_${hdf5_vol_name_upper}_BRANCH")
      endif()

      set ("HDF5_VOL_${hdf5_vol_name_upper}_CMAKE_PACKAGE_NAME"
        "${hdf5_vol_name_lower}"
        CACHE
        STRING
        "CMake package name used by find_package(...) calls for VOL connector '${hdf5_vol_name}'"
      )

      set ("HDF5_VOL_${hdf5_vol_name_upper}_NAME" "" CACHE STRING "Name of VOL connector to set for the HDF5_VOL_CONNECTOR environment variable")
      option ("HDF5_VOL_${hdf5_vol_name_upper}_TEST_PARALLEL" "Whether to test VOL connector '${hdf5_vol_name}' against the parallel API tests" OFF)

      mark_as_advanced ("HDF5_VOL_${hdf5_vol_name_upper}_NAME")
      mark_as_advanced ("HDF5_VOL_${hdf5_vol_name_upper}_TEST_PARALLEL")

      if (HDF5_TEST_API)
        if ("${HDF5_VOL_${hdf5_vol_name_upper}_NAME}" STREQUAL "")
          message (SEND_ERROR "HDF5_VOL_${hdf5_vol_name_upper}_NAME must be set to a valid connector name to use VOL connector '${hdf5_vol_name}' for testing")
        endif ()
      endif ()

      if ((HDF5_VOL_ALLOW_EXTERNAL MATCHES "GIT") AND ("${HDF5_VOL_${hdf5_vol_name_upper}_BRANCH}" STREQUAL ""))
        message (SEND_ERROR "HDF5_VOL_${hdf5_vol_name_upper}_BRANCH must be set to a valid git branch name (or git tag) to build VOL connector '${hdf5_vol_name}'")
      endif ()

      if ((HDF5_VOL_ALLOW_EXTERNAL MATCHES "LOCAL_DIR")
        AND NOT (EXISTS ${HDF5_VOL_SOURCE} AND IS_DIRECTORY ${HDF5_VOL_SOURCE}))
          message (FATAL_ERROR "HDF5_VOL_PATH${vol_idx_fixed} must be an absolute path to a valid directory")
      endif ()

      # Set internal convenience variables for FetchContent dependency name
      set (hdf5_vol_depname "${HDF5_VOL_${hdf5_vol_name_upper}_CMAKE_PACKAGE_NAME}")
      string (TOLOWER "${hdf5_vol_depname}" hdf5_vol_depname_lower)

      if (${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.24")
        set("OVERRIDE_FIND_PACKAGE_OPT" "OVERRIDE_FIND_PACKAGE")
      endif()

      if (HDF5_VOL_ALLOW_EXTERNAL MATCHES "GIT")
        FetchContent_Declare (${hdf5_vol_depname}
            GIT_REPOSITORY "${HDF5_VOL_SOURCE}"
            GIT_TAG "${HDF5_VOL_${hdf5_vol_name_upper}_BRANCH}"
            "${OVERRIDE_FIND_PACKAGE_OPT}"
        )
      elseif(HDF5_VOL_ALLOW_EXTERNAL MATCHES "LOCAL_DIR")
        FetchContent_Declare (${hdf5_vol_depname}
          SOURCE_DIR "${HDF5_VOL_SOURCE}"
        )
      endif()

      FetchContent_GetProperties(${hdf5_vol_depname})
      if (NOT ${hdf5_vol_depname}_POPULATED)
        FetchContent_Populate(${hdf5_vol_depname})

        # Now that content has been populated, set other internal
        # convenience variables for FetchContent dependency
        set (hdf5_vol_depname_source_dir "${${hdf5_vol_depname_lower}_SOURCE_DIR}")
        set (hdf5_vol_depname_binary_dir "${${hdf5_vol_depname_lower}_BINARY_DIR}")

        if (NOT EXISTS "${hdf5_vol_depname_source_dir}/CMakeLists.txt")
          if (HDF5_VOL_ALLOW_EXTERNAL MATCHES "GIT")
            message (SEND_ERROR "The git repository branch '${HDF5_VOL_${hdf5_vol_name_upper}_BRANCH}' for VOL connector '${hdf5_vol_name}' does not appear to contain a CMakeLists.txt file")
          elseif (HDF5_VOL_ALLOW_EXTERNAL MATCHES "LOCAL_DIR")
            message(SEND_ERROR "The local directory '${HDF5_VOL_SOURCE}' for VOL connector '${hdf5_vol_name}' does not appear to contain a CMakeLists.txt file")
          endif()
        endif ()

        # If there are any calls to find_package(HDF5) in the connector's
        # CMakeLists.txt files, remove those since any found HDF5 targets
        # will conflict with targets being generated by this build of HDF5
        if (EXISTS "${hdf5_vol_depname_source_dir}/CMakeLists.txt")
          file (READ "${hdf5_vol_depname_source_dir}/CMakeLists.txt" vol_cmake_contents)
          string (REGEX REPLACE "[ \t]*find_package[ \t]*\\([ \t]*HDF5[^\r\n\\)]*\\)[ \t]*[\r\n]+" "" vol_cmake_contents "${vol_cmake_contents}")
          file (WRITE "${hdf5_vol_depname_source_dir}/CMakeLists.txt" "${vol_cmake_contents}")
        endif ()
        if (EXISTS "${hdf5_vol_depname_source_dir}/src/CMakeLists.txt")
          file (READ "${hdf5_vol_depname_source_dir}/src/CMakeLists.txt" vol_cmake_contents)
          string (REGEX REPLACE "[ \t]*find_package[ \t]*\\([ \t]*HDF5[^\r\n\\)]*\\)[ \t]*[\r\n]+" "" vol_cmake_contents "${vol_cmake_contents}")

InsightSoftwareConsortium/ITK Modules/ThirdParty/HDF5/src/itkhdf5/CMakeVOL.cmake :51

        string (REGEX REPLACE "^[ \t]*set_tests_properties\\([ \t]*[\r\n]?" "" stripped_line "${line}")
      endif ()
      string (REGEX MATCH "^[ \t]*.\\{test\\}[ \t]*[\r\n]?" match_string "${line}")
      if (NOT "${match_string}" STREQUAL "")
        string (REGEX REPLACE "^[ \t]*.\\{[A-Za-z]*\\}[ \t]*[\r\n]?" "" stripped_line "${line}")
      endif ()
      string (REGEX MATCH "^[ \t]*PROPERTIES[ \t]*[\r\n]?" match_string "${line}")
      if (NOT "${match_string}" STREQUAL "")
        string (REGEX REPLACE "^[ \t]*PROPERTIES[ \t]*[\r\n]?" "" stripped_line "${line}")
      endif ()
      string (REGEX MATCH "^[ \t]*ENVIRONMENT[ \t]*.*[\r\n]?" match_string "${line}")
      if (NOT "${match_string}" STREQUAL "")
        string (REGEX REPLACE "^[ \t]*ENVIRONMENT[ \t]*.*[\r\n]?" "" stripped_line "${line}")
      endif ()
      file (APPEND "${source_dir}/tests/CMakeLists.txt" "${stripped_line}\n")
    endforeach ()
  endif ()
endfunction ()

set (HDF5_VOL_ALLOW_EXTERNAL "NO" CACHE STRING "Allow building of external HDF5 VOL connectors with FetchContent")
set_property (CACHE HDF5_VOL_ALLOW_EXTERNAL PROPERTY STRINGS NO GIT LOCAL_DIR)
mark_as_advanced (HDF5_VOL_ALLOW_EXTERNAL)
if (HDF5_VOL_ALLOW_EXTERNAL MATCHES "GIT" OR HDF5_VOL_ALLOW_EXTERNAL MATCHES "LOCAL_DIR")
  # For compatibility, set some variables that projects would
  # typically look for after calling find_package(HDF5)
  set (HDF5_FOUND 1)
  set (HDF5_LIBRARIES "${HDF5_LIBSH_TARGET};${LINK_LIBS};${LINK_COMP_LIBS};$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:MPI::MPI_C>")
  set (HDF5_INCLUDE_DIRS "${HDF5_SRC_INCLUDE_DIRS};${HDF5_SRC_BINARY_DIR};$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_INCLUDE_DIRS}>")
  set (HDF5_IS_PARALLEL ${H5_HAVE_PARALLEL})
  set (HDF5_VERSION ${HDF5_PACKAGE_VERSION})

  set (HDF5_C_LIBRARIES "${HDF5_LIBRARIES}")

  if (HDF5_BUILD_HL_LIB)
    set (HDF5_C_HL_LIBRARIES "${HDF5_HL_LIBSH_TARGET}")
  endif()

  set (HDF5_MAX_EXTERNAL_VOLS 10)
  set (HDF5_EXTERNAL_VOL_TARGETS "")

  foreach (vol_idx RANGE 1 ${HDF5_MAX_EXTERNAL_VOLS})
    # Generate fixed-width index number prepended with 0s
    # so VOL sources come in order from 1 - HDF5_MAX_EXTERNAL_VOLS
    set (vol_idx_num_digits 2) # Based on HDF5_MAX_EXTERNAL_VOLS
    set (vol_idx_fixed "${vol_idx}")
    string (LENGTH "${vol_idx_fixed}" vol_idx_len)
    while (vol_idx_len LESS vol_idx_num_digits)
      string (PREPEND vol_idx_fixed "0")
      math (EXPR vol_idx_len "${vol_idx_len}+1")
    endwhile ()

    if (HDF5_VOL_ALLOW_EXTERNAL MATCHES "GIT")
      set (HDF5_VOL_URL${vol_idx_fixed} "" CACHE STRING "Git repository URL of an external HDF5 VOL connector to build")
      mark_as_advanced (HDF5_VOL_URL${vol_idx_fixed})
      set (HDF5_VOL_SOURCE "${HDF5_VOL_URL${vol_idx_fixed}}")
    elseif(HDF5_VOL_ALLOW_EXTERNAL MATCHES "LOCAL_DIR")
      set (HDF5_VOL_PATH${vol_idx_fixed} "" CACHE STRING "Path to the source directory of an external HDF5 VOL connector to build")
      mark_as_advanced (HDF5_VOL_PATH${vol_idx_fixed})
      set (HDF5_VOL_SOURCE "${HDF5_VOL_PATH${vol_idx_fixed}}")
    endif()

    if (NOT "${HDF5_VOL_SOURCE}" STREQUAL "")
      # Deal with trailing slash in path for LOCAL_DIR case
      if (HDF5_VOL_ALLOW_EXTERNAL MATCHES "LOCAL_DIR")
        # Erase trailing slash
        string (REGEX REPLACE "/$" "" HDF5_VOL_SOURCE ${HDF5_VOL_SOURCE})
      endif()

      # Extract the name of the VOL connector
      string (FIND "${HDF5_VOL_SOURCE}" "/" hdf5_vol_name_pos REVERSE)
      if (hdf5_vol_name_pos EQUAL -1)
        if (HDF5_VOL_ALLOW_EXTERNAL MATCHES "GIT")
          message (SEND_ERROR "Invalid URL '${HDF5_VOL_SOURCE}' specified for HDF5_VOL_URL${vol_idx_fixed}")
        elseif (HDF5_VOL_ALLOW_EXTERNAL MATCHES "LOCAL_DIR")
          message (SEND_ERROR "Invalid source path '${HDF5_VOL_SOURCE}' specified for HDF5_VOL_PATH${vol_idx_fixed}")
        endif()
      endif ()

      math (EXPR hdf5_vol_name_pos "${hdf5_vol_name_pos}+1")

      string (SUBSTRING "${HDF5_VOL_SOURCE}" ${hdf5_vol_name_pos} -1 hdf5_vol_name)
      string (REPLACE ".git" "" hdf5_vol_name "${hdf5_vol_name}")
      string (STRIP "${hdf5_vol_name}" hdf5_vol_name)
      string (TOUPPER "${hdf5_vol_name}" hdf5_vol_name_upper)
      string (TOLOWER "${hdf5_vol_name}" hdf5_vol_name_lower)

      message (VERBOSE "Building VOL connector '${hdf5_vol_name}' with FetchContent from source ${HDF5_VOL_SOURCE}")

      # Set some cache variables that can be set by users when building
      if (HDF5_VOL_ALLOW_EXTERNAL MATCHES "GIT")
        set ("HDF5_VOL_${hdf5_vol_name_upper}_BRANCH" "main" CACHE STRING "Git branch (or tag) to use when building VOL connector '${hdf5_vol_name}'")
        mark_as_advanced ("HDF5_VOL_${hdf5_vol_name_upper}_BRANCH")
      endif()

      set ("HDF5_VOL_${hdf5_vol_name_upper}_CMAKE_PACKAGE_NAME"
        "${hdf5_vol_name_lower}"
        CACHE
        STRING
        "CMake package name used by find_package(...) calls for VOL connector '${hdf5_vol_name}'"
      )

      set ("HDF5_VOL_${hdf5_vol_name_upper}_NAME" "" CACHE STRING "Name of VOL connector to set for the HDF5_VOL_CONNECTOR environment variable")
      option ("HDF5_VOL_${hdf5_vol_name_upper}_TEST_PARALLEL" "Whether to test VOL connector '${hdf5_vol_name}' against the parallel API tests" OFF)

      mark_as_advanced ("HDF5_VOL_${hdf5_vol_name_upper}_NAME")
      mark_as_advanced ("HDF5_VOL_${hdf5_vol_name_upper}_TEST_PARALLEL")

      if (HDF5_TEST_API)
        if ("${HDF5_VOL_${hdf5_vol_name_upper}_NAME}" STREQUAL "")
          message (SEND_ERROR "HDF5_VOL_${hdf5_vol_name_upper}_NAME must be set to a valid connector name to use VOL connector '${hdf5_vol_name}' for testing")
        endif ()
      endif ()

      if ((HDF5_VOL_ALLOW_EXTERNAL MATCHES "GIT") AND ("${HDF5_VOL_${hdf5_vol_name_upper}_BRANCH}" STREQUAL ""))
        message (SEND_ERROR "HDF5_VOL_${hdf5_vol_name_upper}_BRANCH must be set to a valid git branch name (or git tag) to build VOL connector '${hdf5_vol_name}'")
      endif ()

      if ((HDF5_VOL_ALLOW_EXTERNAL MATCHES "LOCAL_DIR")
        AND NOT (EXISTS ${HDF5_VOL_SOURCE} AND IS_DIRECTORY ${HDF5_VOL_SOURCE}))
          message (FATAL_ERROR "HDF5_VOL_PATH${vol_idx_fixed} must be an absolute path to a valid directory")
      endif ()

      # Set internal convenience variables for FetchContent dependency name
      set (hdf5_vol_depname "${HDF5_VOL_${hdf5_vol_name_upper}_CMAKE_PACKAGE_NAME}")
      string (TOLOWER "${hdf5_vol_depname}" hdf5_vol_depname_lower)

      if (${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.24")
        set("OVERRIDE_FIND_PACKAGE_OPT" "OVERRIDE_FIND_PACKAGE")
      endif()

      if (HDF5_VOL_ALLOW_EXTERNAL MATCHES "GIT")
        FetchContent_Declare (${hdf5_vol_depname}
            GIT_REPOSITORY "${HDF5_VOL_SOURCE}"
            GIT_TAG "${HDF5_VOL_${hdf5_vol_name_upper}_BRANCH}"
            "${OVERRIDE_FIND_PACKAGE_OPT}"
        )
      elseif(HDF5_VOL_ALLOW_EXTERNAL MATCHES "LOCAL_DIR")
        FetchContent_Declare (${hdf5_vol_depname}
          SOURCE_DIR "${HDF5_VOL_SOURCE}"
        )
      endif()

      FetchContent_GetProperties(${hdf5_vol_depname})
      if (NOT ${hdf5_vol_depname}_POPULATED)
        FetchContent_Populate(${hdf5_vol_depname})

        # Now that content has been populated, set other internal
        # convenience variables for FetchContent dependency
        set (hdf5_vol_depname_source_dir "${${hdf5_vol_depname_lower}_SOURCE_DIR}")
        set (hdf5_vol_depname_binary_dir "${${hdf5_vol_depname_lower}_BINARY_DIR}")

        if (NOT EXISTS "${hdf5_vol_depname_source_dir}/CMakeLists.txt")
          if (HDF5_VOL_ALLOW_EXTERNAL MATCHES "GIT")
            message (SEND_ERROR "The git repository branch '${HDF5_VOL_${hdf5_vol_name_upper}_BRANCH}' for VOL connector '${hdf5_vol_name}' does not appear to contain a CMakeLists.txt file")
          elseif (HDF5_VOL_ALLOW_EXTERNAL MATCHES "LOCAL_DIR")
            message(SEND_ERROR "The local directory '${HDF5_VOL_SOURCE}' for VOL connector '${hdf5_vol_name}' does not appear to contain a CMakeLists.txt file")
          endif()
        endif ()

        # If there are any calls to find_package(HDF5) in the connector's
        # CMakeLists.txt files, remove those since any found HDF5 targets
        # will conflict with targets being generated by this build of HDF5
        if (EXISTS "${hdf5_vol_depname_source_dir}/CMakeLists.txt")
          file (READ "${hdf5_vol_depname_source_dir}/CMakeLists.txt" vol_cmake_contents)
          string (REGEX REPLACE "[ \t]*find_package[ \t]*\\([ \t]*HDF5[^\r\n\\)]*\\)[ \t]*[\r\n]+" "" vol_cmake_contents "${vol_cmake_contents}")

InsightSoftwareConsortium/ITK Modules/ThirdParty/HDF5/src/itkhdf5/CMakeVOL.cmake :120

string (FIND "${HDF5_VOL_SOURCE}" "/" hdf5_vol_name_pos REVERSE)

InsightSoftwareConsortium/ITK Modules/ThirdParty/HDF5/src/itkhdf5/config/cmake/runTest.cmake :138

string (FIND "${TEST_STREAM}" "_pmi_alps" TEST_FIND_RESULT)

sbmlteam/libsbml CMakeModules/FindLIBSBML.cmake :87

string(FIND "${library}" "::" index)

sbmlteam/libsbml dev/utilities/build-python/source/create-conda-archives.cmake :51

string(FIND ${ARCH_VERSION} "-" index REVERSE)

webmproject/libwebm build/cxx_flags.cmake :21

string(FIND "${LIBWEBM_FAILED_CXX_FLAGS}" "${cxx_flag}" CXX_FLAG_FAILED)

webmproject/libwebm build/cxx_flags.cmake :43

string(FIND "${CMAKE_CXX_FLAGS}" "${cxx_flag}" CXX_FLAG_FOUND)

luvit/luv deps/luajit.cmake :234

string(FIND "${TMPUNWIND_O}" "eh_frame" EH_FRAME_FOUND)

mfem/mfem config/cmake/modules/MfemCmakeUtilities.cmake :966

string(FIND "${pumilib}" ".so" sharedlib)

mfem/mfem config/cmake/modules/MfemCmakeUtilities.cmake :967

string(FIND "${pumilib}" ".dylib" dynamiclib)

nanodbc/nanodbc test/CMakeLists.txt :28

string(FIND ${test_db} ${test_item} test_found)

tpaviot/oce adm/cmake/cotire.cmake :131

string (FIND "${_sourceFile}" "." _index REVERSE)

tpaviot/oce adm/cmake/tcl.cmake :270

string (FIND "${TK_WISH_ABSOLUTE}" "${3RDPARTY_TCL_DIR_ABSOLUTE}" THE_SAME_FOLDER)

OGRECave/ogre CMake/Utils/AndroidMacros.cmake :67

string(FIND ${ACTIVITY_NAME} "." DOT REVERSE)

OpenImageDenoise/oidn cmake/oidn_macros.cmake :39

string(FIND "${path}" "${CMAKE_CURRENT_BINARY_DIR}" _path_binary_dir_pos)

ollama/ollama ml/backend/ggml/ggml/src/ggml-cpu/CMakeLists.txt :439

string(FIND "${ARCH_FLAGS_TEMP}" "+i8mm" I8MM_ENABLED)

ollama/ollama ml/backend/ggml/ggml/src/ggml-cpu/CMakeLists.txt :440

string(FIND "${ARCH_FLAGS_TEMP}" "+sme" SME_ENABLED)

open62541/open62541 CMakeLists.txt :569

string(FIND "${CMAKE_C_FLAGS}" "${CC_FLAG}" flag_already_set)

OpenMathLib/OpenBLAS CMakeLists.txt :127

string(FIND "${LIBNAMESUFFIX}" "${SUFFIX64_UNDERSCORE}" HAVE64)

opencv/opencv cmake/OpenCVDownload.cmake :65

string(FIND "${OCV_GIT_ORIGIN_URL_OUTPUT}" "github.com" _found_github)

uclouvain/openjpeg tests/nonregression/checkmd5refs.cmake :33

string(FIND ${OUTFILENAME_NAME} "." SHORTEST_EXT_POS REVERSE)

uclouvain/openjpeg tests/nonregression/CMakeLists.txt :105

string(FIND ${INPUT_FILENAME_NAME} "." SHORTEST_EXT_POS REVERSE)

PixarAnimationStudios/OpenSubdiv cmake/iOSToolchain.cmake :36

string(FIND ${DEVROOT} ".platform" PLATFORM_END REVERSE)

PixarAnimationStudios/OpenSubdiv cmake/iOSToolchain.cmake :37

string(FIND ${DEVROOT} "/" PLATFORM_START REVERSE)

AcademySoftwareFoundation/openvdb cmake/FindOpenVDB.cmake :606

string(FIND ${PREREQUISITE} "boost_iostreams" _HAS_DEP)

AcademySoftwareFoundation/openvdb cmake/OpenVDBHoudiniSetup.cmake :360

string(FIND ${_GCC_CXX11_ABI} "_GLIBCXX_USE_CXX11_ABI 1" GCC_NEW_CXX11_ABI)

AcademySoftwareFoundation/openvdb openvdb/openvdb/CMakeLists.txt :63

string(FIND ${VCPKG_TARGET_TRIPLET} "static" _BUILDING_STATIC_TRIPLET)

OSGeo/PROJ cmake/ProjConfig.cmake :14

string(FIND "${CMAKE_C_FLAGS}" "-Werror" FIND_WERROR)

protocolbuffers/protobuf cmake/protobuf-generate.cmake :109

string(FIND "${_file_full_name}" "." _file_last_ext_pos REVERSE)

qgis/QGIS src/providers/grass/CMakeLists.txt :720

    string( REGEX REPLACE ".*(G_[^\\(]*)\\(.*" "\\1" FUNCTION_NAME "${ROW}" )
    foreach( FN ${FUNCTIONS_ALL})
      if ( "${FN}" STREQUAL "${FUNCTION_NAME}" )
        # \\*? and \\** patterns do not work, why?
        string( REGEX REPLACE "^[ \t]*(.*)G_.*" "\\1" FUNCTION_TYPE "${ROW}" )
        string( REGEX REPLACE "\\*" "" FUNCTION_TYPE "${FUNCTION_TYPE}" )
        string( REGEX REPLACE "[^*]*(\\*+) *G_.*" "\\1" POINTER "${ROW}" )
        if ( (NOT "${POINTER}" STREQUAL "*") AND (NOT "${POINTER}" STREQUAL "**") )
          set ( POINTER "" )
        endif()
        string( REGEX REPLACE ".*G_[^\\(]*\\((.*)\\).*" "\\1" PARAM_TYPES "${ROW}" )
        set ( PARAM_NAMES "" )
        set ( PARAMS "" )
        if ( NOT "${PARAM_TYPES}" STREQUAL "void" )
          string ( REGEX MATCHALL "[^,]+" PARAM_TYPE_LIST ${PARAM_TYPES} )
          set ( I 0 )
          foreach( PARAM_TYPE ${PARAM_TYPE_LIST} )
            list ( APPEND PARAM_NAMES "p${I}" )
            list ( APPEND PARAMS "${PARAM_TYPE} p${I}" )
            math(EXPR  I "${I} + 1")
          endforeach ( PARAM_TYPE )
        endif()

        string( REPLACE ";" ", " PARAM_NAMES "${PARAM_NAMES}" )
        string( REPLACE ";" ", " PARAMS "${PARAMS}" )

        # Declare all
        list ( APPEND PROTOTYPES "${FUNCTION_TYPE} GRASS_LIB_EXPORT ${POINTER} ${FUNCTION_NAME} ( ${PARAM_TYPES} )\;\n" )

        # Define only those not implemented in qgsgrassgislib.cpp
        list (FIND FUNCTIONS "${FUNCTION_NAME}" FUNCTION_IDX)
        if( ${FUNCTION_IDX} GREATER -1 )
          list ( APPEND FUNCTIONS_MAP "// ${ROW}\n" )
          # Declare function type
          list ( APPEND FUNCTIONS_MAP "typedef ${FUNCTION_TYPE} ${POINTER} ${FUNCTION_NAME}_type(${PARAM_TYPES})\;\n\n" )
          list ( APPEND FUNCTIONS_MAP "${FUNCTION_TYPE} GRASS_LIB_EXPORT ${POINTER} ${FUNCTION_NAME} ( ${PARAMS} ) {\n" )
	  #list ( APPEND FUNCTIONS_MAP "  QgsDebugMsgLevel( \"Entered\", 4 )\;\n" )
          list ( APPEND FUNCTIONS_MAP "  ${FUNCTION_NAME}_type* fn = (${FUNCTION_NAME}_type*) cast_to_fptr (QgsGrassGisLib::instance()->resolve( \"${FUNCTION_NAME}\" ))\;\n" )
          list ( APPEND FUNCTIONS_MAP "  return fn( ${PARAM_NAMES} )\;\n")
          list ( APPEND FUNCTIONS_MAP "}\n\n" )
        endif()
      endif()
    endforeach ( FN )
  endforeach( ROW )

  list ( APPEND PROTOTYPES "}\n" )

  file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/qgsgrassgislibfunctions.cpp" ${FUNCTIONS_MAP})
  file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/qgsgrassgislibfunctions.h" ${PROTOTYPES})

  endif() # process functions

  # Build fake library
  if(MSVC)
    set (FAKE_LIB_GRASS_GIS "libgrass_gis.${GRASS_VERSION}")
  else()
    set (FAKE_LIB_GRASS_GIS "grass_gis.${GRASS_VERSION}")
  endif()
  add_library(${FAKE_LIB_GRASS_GIS} MODULE qgsgrassgislib.cpp qgsgrassgislibfunctions.cpp )

  # require c++17
  target_compile_features(${FAKE_LIB_GRASS_GIS} PRIVATE cxx_std_17)

  # GRASS_LIBRARY_gis is path to the GRASS library used for compilation, it is the same
  # on runtime on Linux and Mac but on Windows with OSGEO4W the GRASS may be installed
  # in different directory
  set_target_properties(${FAKE_LIB_GRASS_GIS} PROPERTIES
    CLEAN_DIRECT_OUTPUT 1
    COMPILE_FLAGS "-DGRASS_VERSION=\\\"${GRASS_VERSION}\\\" -DGRASS_LIBRARY_GIS=\\\"${GRASS_LIBRARY_gis}\\\" \"-I${CMAKE_CURRENT_SOURCE_DIR}\" ")

  if (NOT APPLE)
    set_target_properties(${FAKE_LIB_GRASS_GIS} PROPERTIES
      VERSION ${COMPLETE_VERSION}
      SOVERSION ${COMPLETE_VERSION}
      )
  endif()

  target_link_libraries(${FAKE_LIB_GRASS_GIS}
    qgis_core
  )


  install(TARGETS ${FAKE_LIB_GRASS_GIS}
    RUNTIME DESTINATION ${QGIS_PLUGIN_DIR}
    LIBRARY DESTINATION ${QGIS_PLUGIN_DIR})
endif()

qgis/QGIS src/providers/grass/CMakeLists.txt :730

        string( REGEX REPLACE ".*G_[^\\(]*\\((.*)\\).*" "\\1" PARAM_TYPES "${ROW}" )
        set ( PARAM_NAMES "" )
        set ( PARAMS "" )
        if ( NOT "${PARAM_TYPES}" STREQUAL "void" )
          string ( REGEX MATCHALL "[^,]+" PARAM_TYPE_LIST ${PARAM_TYPES} )
          set ( I 0 )
          foreach( PARAM_TYPE ${PARAM_TYPE_LIST} )
            list ( APPEND PARAM_NAMES "p${I}" )
            list ( APPEND PARAMS "${PARAM_TYPE} p${I}" )
            math(EXPR  I "${I} + 1")
          endforeach ( PARAM_TYPE )
        endif()

        string( REPLACE ";" ", " PARAM_NAMES "${PARAM_NAMES}" )
        string( REPLACE ";" ", " PARAMS "${PARAMS}" )

        # Declare all
        list ( APPEND PROTOTYPES "${FUNCTION_TYPE} GRASS_LIB_EXPORT ${POINTER} ${FUNCTION_NAME} ( ${PARAM_TYPES} )\;\n" )

        # Define only those not implemented in qgsgrassgislib.cpp
        list (FIND FUNCTIONS "${FUNCTION_NAME}" FUNCTION_IDX)
        if( ${FUNCTION_IDX} GREATER -1 )
          list ( APPEND FUNCTIONS_MAP "// ${ROW}\n" )
          # Declare function type
          list ( APPEND FUNCTIONS_MAP "typedef ${FUNCTION_TYPE} ${POINTER} ${FUNCTION_NAME}_type(${PARAM_TYPES})\;\n\n" )
          list ( APPEND FUNCTIONS_MAP "${FUNCTION_TYPE} GRASS_LIB_EXPORT ${POINTER} ${FUNCTION_NAME} ( ${PARAMS} ) {\n" )
	  #list ( APPEND FUNCTIONS_MAP "  QgsDebugMsgLevel( \"Entered\", 4 )\;\n" )
          list ( APPEND FUNCTIONS_MAP "  ${FUNCTION_NAME}_type* fn = (${FUNCTION_NAME}_type*) cast_to_fptr (QgsGrassGisLib::instance()->resolve( \"${FUNCTION_NAME}\" ))\;\n" )
          list ( APPEND FUNCTIONS_MAP "  return fn( ${PARAM_NAMES} )\;\n")
          list ( APPEND FUNCTIONS_MAP "}\n\n" )
        endif()
      endif()
    endforeach ( FN )
  endforeach( ROW )

  list ( APPEND PROTOTYPES "}\n" )

  file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/qgsgrassgislibfunctions.cpp" ${FUNCTIONS_MAP})
  file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/qgsgrassgislibfunctions.h" ${PROTOTYPES})

  endif() # process functions

  # Build fake library
  if(MSVC)
    set (FAKE_LIB_GRASS_GIS "libgrass_gis.${GRASS_VERSION}")
  else()
    set (FAKE_LIB_GRASS_GIS "grass_gis.${GRASS_VERSION}")
  endif()
  add_library(${FAKE_LIB_GRASS_GIS} MODULE qgsgrassgislib.cpp qgsgrassgislibfunctions.cpp )

  # require c++17
  target_compile_features(${FAKE_LIB_GRASS_GIS} PRIVATE cxx_std_17)

  # GRASS_LIBRARY_gis is path to the GRASS library used for compilation, it is the same
  # on runtime on Linux and Mac but on Windows with OSGEO4W the GRASS may be installed
  # in different directory
  set_target_properties(${FAKE_LIB_GRASS_GIS} PROPERTIES
    CLEAN_DIRECT_OUTPUT 1
    COMPILE_FLAGS "-DGRASS_VERSION=\\\"${GRASS_VERSION}\\\" -DGRASS_LIBRARY_GIS=\\\"${GRASS_LIBRARY_gis}\\\" \"-I${CMAKE_CURRENT_SOURCE_DIR}\" ")

  if (NOT APPLE)
    set_target_properties(${FAKE_LIB_GRASS_GIS} PROPERTIES
      VERSION ${COMPLETE_VERSION}
      SOVERSION ${COMPLETE_VERSION}
      )
  endif()

  target_link_libraries(${FAKE_LIB_GRASS_GIS}
    qgis_core
  )


  install(TARGETS ${FAKE_LIB_GRASS_GIS}
    RUNTIME DESTINATION ${QGIS_PLUGIN_DIR}
    LIBRARY DESTINATION ${QGIS_PLUGIN_DIR})
endif()

qt/qt5 cmake/QtTopLevelHelpers.cmake :1062

string(FIND "${gitdir}" ".git/modules" index)

qt/qt5 cmake/QtTopLevelHelpers.cmake :1077

string(FIND "${git_stdout}" "${dependent}.git" index)

qtwebkit/qtwebkit Source/ThirdParty/libwebrtc/Source/third_party/libyuv/CM_linux_packages.cmake :23

STRING (FIND "${CMAKE_CXX_COMPILER}" "arm-linux-gnueabihf-g++" pos)

sandialabs/seacas cmake/tribits/core/utils/TribitsFilepathHelpers.cmake :41

string(FIND "${absFullDir}" "${absBaseDir}/" baseDirIdx)

sandialabs/seacas cmake/tribits/ctest_driver/TribitsGetCDashUrlsInsideCTestS.cmake :431

string(FIND "${PREFIX_CTEST_DROP_LOCATION}" "?" beginningOfQueryString)

pothosware/SoapySDR CMakeLists.txt :31

string(REGEX MATCH "Release ([0-9]+\\.[0-9]+\\.[0-9]+) \\(" CHANGELOG_MATCH "${changelog_txt}")
if(NOT CHANGELOG_MATCH)
    message(FATAL_ERROR "Failed to extract version number from Changelog.txt")
endif(NOT CHANGELOG_MATCH)
set(SOAPY_SDR_LIBVER "${CMAKE_MATCH_1}")

if (NOT SOAPY_SDR_EXTVER)
    include(${PROJECT_SOURCE_DIR}/cmake/Modules/GetGitRevisionDescription.cmake)
    get_git_head_revision(GITREFSPEC GITHASH)
    if (GITHASH)
        string(SUBSTRING "${GITHASH}" 0 8 GITHASH)
        set(SOAPY_SDR_EXTVER "g${GITHASH}")
    else (GITHASH)
        set(SOAPY_SDR_EXTVER "unknown")
    endif (GITHASH)
endif()

set(SOAPY_SDR_VERSION "${SOAPY_SDR_LIBVER}-${SOAPY_SDR_EXTVER}")

#SOAPY_SDR_ROOT is compiled into the library to locate the install base.
#By default, the SOAPY_SDR_ROOT is set to the CMAKE_INSTALL_PREFIX.
#However users may overload this by specifying -DSOAPY_SDR_ROOT=<path>.
set(SOAPY_SDR_ROOT "${CMAKE_INSTALL_PREFIX}" CACHE PATH
    "Installation root for SoapySDR::getRootPath()")
file(TO_CMAKE_PATH "${SOAPY_SDR_ROOT}" SOAPY_SDR_ROOT)

#SOAPY_SDR_ROOT_ENV is the name of the environment variable
#which tells SoapySDR where to find the root installation.
#By default, the environment variable SOAPY_SDR_ROOT is used.
#Example: set -DSOAPY_SDR_ROOT_ENV=SNAP for snappy packages.
set(SOAPY_SDR_ROOT_ENV "SOAPY_SDR_ROOT" CACHE STRING
    "Environment variable for SoapySDR::getRootPath()")

########################################################################
# select the release build type by default to get optimization flags
########################################################################
if(NOT CMAKE_BUILD_TYPE)
   set(CMAKE_BUILD_TYPE "Release")
   message(STATUS "Build type not specified: defaulting to release.")
endif(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "")

########################################################################
# rpath setup - http://www.cmake.org/Wiki/CMake_RPATH_handling
########################################################################
# use, i.e. don't skip the full RPATH for the build tree
option(CMAKE_SKIP_BUILD_RPATH "skip rpath build" FALSE)

# when building, don't use the install RPATH already
# (but later on when installing)
option(CMAKE_BUILD_WITH_INSTALL_RPATH "build with install rpath" FALSE)

# the RPATH to be used when installing, but only if it's not a system directory
option(CMAKE_AUTOSET_INSTALL_RPATH TRUE)
if(CMAKE_AUTOSET_INSTALL_RPATH)
LIST(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}" isSystemDir)
IF("${isSystemDir}" STREQUAL "-1")
    SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}")
ENDIF("${isSystemDir}" STREQUAL "-1")
endif(CMAKE_AUTOSET_INSTALL_RPATH)

# add the automatically determined parts of the RPATH
# which point to directories outside the build tree to the install RPATH
option(CMAKE_INSTALL_RPATH_USE_LINK_PATH "build with automatic rpath" TRUE)

if(APPLE)
    set(CMAKE_MACOSX_RPATH ON)
endif()

########################################################################
# Allows in-tree module util
########################################################################
set(SoapySDR_DIR ${PROJECT_SOURCE_DIR}/cmake/Modules)
set(SOAPY_SDR_IN_TREE_SOURCE_DIR ${PROJECT_SOURCE_DIR})
find_package(SoapySDR CONFIG REQUIRED)

########################################################################
# Install cmake helper modules
########################################################################
include(CMakePackageConfigHelpers)
if (UNIX OR MSYS OR MINGW)
    set(CMAKE_LIB_DEST ${CMAKE_INSTALL_DATADIR}/cmake/${PROJECT_NAME})
elseif (WIN32)
    set(CMAKE_LIB_DEST cmake)
endif ()

write_basic_package_version_file(
    ${PROJECT_BINARY_DIR}/SoapySDRConfigVersion.cmake
    VERSION ${SOAPY_SDR_VERSION}
    COMPATIBILITY AnyNewerVersion)

install(FILES
    ${PROJECT_SOURCE_DIR}/cmake/Modules/SoapySDRConfig.cmake
    ${PROJECT_SOURCE_DIR}/cmake/Modules/SoapySDRUtil.cmake
    ${PROJECT_BINARY_DIR}/SoapySDRConfigVersion.cmake
    DESTINATION ${CMAKE_LIB_DEST})

########################################################################
# Install headers
########################################################################
install(DIRECTORY include/SoapySDR DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})

########################################################################
# Build subdirs
########################################################################
add_subdirectory(lib)
add_subdirectory(apps)
add_subdirectory(tests)
add_subdirectory(docs)

########################################################################
# SWIG wrappers (optional)
########################################################################
add_subdirectory(swig)

########################################################################
# LuaJIT support (optional)
########################################################################
message(STATUS "")
message(STATUS "#############################################")
message(STATUS "## Begin configuration for LuaJIT support...")
message(STATUS "#############################################")
message(STATUS "Enabling optional LuaJIT bindings if possible...")
add_subdirectory(luajit)

########################################################################
# uninstall target
########################################################################
configure_file(
    "${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in"
    "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
    IMMEDIATE @ONLY)

#only add uninstall target if this is the top project
if(${CMAKE_PROJECT_NAME} STREQUAL ${PROJECT_NAME})
add_custom_target(uninstall
    COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
endif()

#########################################################################
# summary
#########################################################################
include(FeatureSummary)
message(STATUS "")
message(STATUS "######################################################")
message(STATUS "## ${PROJECT_NAME} enabled features")
message(STATUS "######################################################")
feature_summary(WHAT ENABLED_FEATURES)
message(STATUS "######################################################")
message(STATUS "## ${PROJECT_NAME} disabled features")
message(STATUS "######################################################")
feature_summary(WHAT DISABLED_FEATURES)
message(STATUS "SoapySDR version: v${SOAPY_SDR_VERSION}")
message(STATUS "ABI/so version: v${SOAPY_SDR_ABI_VERSION}")
message(STATUS "Install prefix: ${CMAKE_INSTALL_PREFIX}")

pothosware/SoapySDR swig/csharp/assembly/CMakeLists.txt :45

string(FIND "${SOAPY_SDR_API_VERSION}" "\n" newline_pos)

pothosware/SoapySDR swig/python/cmake/FindPython/Support.cmake :1610

string(FIND "${_${_PYTHON_PREFIX}_CONFIGDIR}" "${CMAKE_LIBRARY_ARCHITECTURE}" _${_PYTHON_PREFIX}_RESULT)

DrTimothyAldenDavis/SuiteSparse CHOLMOD/CMakeLists.txt :721

string ( FIND ${_lib} "." _pos REVERSE )

DrTimothyAldenDavis/SuiteSparse GraphBLAS/CMakeLists.txt :670

string ( FIND ${_lib} "." _pos REVERSE )

DrTimothyAldenDavis/SuiteSparse GraphBLAS/cmake_modules/GraphBLAS_JIT_configure.cmake :76

string ( FIND ${_lib} "." _pos REVERSE )

DrTimothyAldenDavis/SuiteSparse LAGraph/CMakeLists.txt :418

string ( FIND ${_lib} "." _pos REVERSE )

DrTimothyAldenDavis/SuiteSparse LAGraph/cmake_modules/FindGraphBLAS.cmake :348

string ( FIND ${GRAPHBLAS_LIBRARY} "." _pos REVERSE )

DrTimothyAldenDavis/SuiteSparse LAGraph/cmake_modules/FindGraphBLAS.cmake :382

string ( FIND ${GRAPHBLAS_STATIC} "." _pos REVERSE )

DrTimothyAldenDavis/SuiteSparse ParU/CMakeLists.txt :364

string ( FIND ${_lib} "." _pos REVERSE )

DrTimothyAldenDavis/SuiteSparse SPEX/CMakeLists.txt :366

string ( FIND ${_lib} "." _pos REVERSE )

DrTimothyAldenDavis/SuiteSparse SPQR/CMakeLists.txt :319

string ( FIND ${_lib} "." _pos REVERSE )

DrTimothyAldenDavis/SuiteSparse SuiteSparse_config/CMakeLists.txt :339

string ( FIND ${_lib} "." _pos REVERSE )

DrTimothyAldenDavis/SuiteSparse UMFPACK/CMakeLists.txt :512

string ( FIND ${_lib} "." _pos REVERSE )