FindLibRHash: Add module to find the librhash package

Add it to a private source directory that is not installed so that we
can use it for building CMake itself.  This will allow it to mature
before being distributed publicly.
This commit is contained in:
Brad King 2016-11-03 13:29:31 -04:00
parent 3216e94cef
commit 71180fc8aa
5 changed files with 111 additions and 0 deletions

View File

@ -0,0 +1,73 @@
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
# file Copyright.txt or https://cmake.org/licensing for details.
#[=======================================================================[.rst:
FindLibRHash
------------
Find LibRHash include directory and library.
Imported Targets
^^^^^^^^^^^^^^^^
An :ref:`imported target <Imported targets>` named
``LibRHash::LibRHash`` is provided if LibRHash has been found.
Result Variables
^^^^^^^^^^^^^^^^
This module defines the following variables:
``LibRHash_FOUND``
True if LibRHash was found, false otherwise.
``LibRHash_INCLUDE_DIRS``
Include directories needed to include LibRHash headers.
``LibRHash_LIBRARIES``
Libraries needed to link to LibRHash.
Cache Variables
^^^^^^^^^^^^^^^
This module uses the following cache variables:
``LibRHash_LIBRARY``
The location of the LibRHash library file.
``LibRHash_INCLUDE_DIR``
The location of the LibRHash include directory containing ``rhash.h``.
The cache variables should not be used by project code.
They may be set by end users to point at LibRHash components.
#]=======================================================================]
#-----------------------------------------------------------------------------
find_library(LibRHash_LIBRARY
NAMES rhash
)
mark_as_advanced(LibRHash_LIBRARY)
find_path(LibRHash_INCLUDE_DIR
NAMES rhash.h
)
mark_as_advanced(LibRHash_INCLUDE_DIR)
#-----------------------------------------------------------------------------
include(${CMAKE_CURRENT_LIST_DIR}/../../Modules/FindPackageHandleStandardArgs.cmake)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(LibRHash
FOUND_VAR LibRHash_FOUND
REQUIRED_VARS LibRHash_LIBRARY LibRHash_INCLUDE_DIR
)
set(LIBRHASH_FOUND ${LibRHash_FOUND})
#-----------------------------------------------------------------------------
# Provide documented result variables and targets.
if(LibRHash_FOUND)
set(LibRHash_INCLUDE_DIRS ${LibRHash_INCLUDE_DIR})
set(LibRHash_LIBRARIES ${LibRHash_LIBRARY})
if(NOT TARGET LibRHash::LibRHash)
add_library(LibRHash::LibRHash UNKNOWN IMPORTED)
set_target_properties(LibRHash::LibRHash PROPERTIES
IMPORTED_LOCATION "${LibRHash_LIBRARY}"
INTERFACE_INCLUDE_DIRECTORIES "${LibRHash_INCLUDE_DIRS}"
)
endif()
endif()

View File

@ -1377,6 +1377,10 @@ ${CMake_BINARY_DIR}/bin/cmake -DDIR=dev -P ${CMake_SOURCE_DIR}/Utilities/Release
add_subdirectory(FindJsonCpp)
endif()
if(CMake_TEST_FindLibRHash)
add_subdirectory(FindLibRHash)
endif()
if(CMake_TEST_FindLibUV)
add_subdirectory(FindLibUV)
endif()

View File

@ -0,0 +1,10 @@
add_test(NAME FindLibRHash.Test COMMAND
${CMAKE_CTEST_COMMAND} -C $<CONFIGURATION>
--build-and-test
"${CMake_SOURCE_DIR}/Tests/FindLibRHash/Test"
"${CMake_BINARY_DIR}/Tests/FindLibRHash/Test"
${build_generator_args}
--build-project TestFindLibRHash
--build-options ${build_options}
--test-command ${CMAKE_CTEST_COMMAND} -V -C $<CONFIGURATION>
)

View File

@ -0,0 +1,17 @@
cmake_minimum_required(VERSION 3.7)
project(TestFindLibRHash C)
include(CTest)
# CMake does not actually provide FindLibRHash publicly.
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../../../Source/Modules)
find_package(LibRHash REQUIRED)
add_executable(test_librhash_tgt main.c)
target_link_libraries(test_librhash_tgt LibRHash::LibRHash)
add_test(NAME test_librhash_tgt COMMAND test_librhash_tgt)
add_executable(test_librhash_var main.c)
target_include_directories(test_librhash_var PRIVATE ${LibRHash_INCLUDE_DIRS})
target_link_libraries(test_librhash_var PRIVATE ${LibRHash_LIBRARIES})
add_test(NAME test_librhash_var COMMAND test_librhash_var)

View File

@ -0,0 +1,7 @@
#include <rhash.h>
int main()
{
rhash_library_init();
return 0;
}