Parcourir la source

cmake/Radius: Add libfreeradius support

- Add libfreeradius.cmake to search for libfreeradius-client
- Link modules with correct libraries paths
- Fix description
Xenofon Karamanos il y a 7 mois
Parent
commit
53bd567dd7

+ 36 - 0
cmake/modules/FindLibfreeradius.cmake

@@ -0,0 +1,36 @@
+# - Find freeradius-client
+# Find the native freeradius-client includes and library.
+# Once done this will define
+#
+#  LIBFREERADIUS_CLIENT_INCLUDE_DIRS - where to find freeradius-client.h, etc.
+#  LIBFREERADIUS_CLIENT_LIBRARIES    - List of libraries when using libfreeradius.
+#  LIBFREERADIUS_CLIENT_FOUND        - True if libfreeradius found.
+
+find_path(Libfreeradius_INCLUDE_DIR NAMES freeradius-client.h)
+
+find_library(
+  Libfreeradius_LIBRARY
+  NAMES freeradius-client freeradius-eap
+  PATH_SUFFIXES freeradius)
+
+mark_as_advanced(Libfreeradius_LIBRARY Libfreeradius_INCLUDE_DIR)
+
+# handle the QUIETLY and REQUIRED arguments and set LIBFREERADIUS_FOUND to TRUE if
+# all listed variables are TRUE
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(
+  Libfreeradius REQUIRED_VARS LIBFREERADIUS_LIBRARY LIBFREERADIUS_INCLUDE_DIR)
+
+if(Libfreeradius_FOUND)
+  find_package_message(
+    Libfreeradius "Found Libfreeradius: ${LIBFREERADIUS_LIBRARY}"
+    "[${LIBFREERADIUS_LIBRARY}][${LIBFREERADIUS_INCLUDE_DIR}]")
+  set(LIBFREERADIUS_INCLUDE_DIRS ${LIBFREERADIUS_INCLUDE_DIR})
+  set(LIBFREERADIUS_LIBRARIES ${LIBFREERADIUS_LIBRARY})
+  add_library(Libfreeradius::LIBFREERADIUS UNKNOWN IMPORTED)
+  set_target_properties(
+    Libfreeradius::LIBFREERADIUS PROPERTIES INTERFACE_INCLUDE_DIRECTORIES
+                                            "${LIBFREERADIUS_INCLUDE_DIR}")
+  set_target_properties(Libfreeradius::LIBFREERADIUS
+                        PROPERTIES IMPORTED_LOCATION "${LIBFREERADIUS_LIBRARY}")
+endif()

+ 5 - 4
cmake/modules/FindRadius.cmake

@@ -14,8 +14,7 @@ find_package(PkgConfig)
 set(RADIUSCLIENTS FREERADIUS RADCLI RADIUSCLIENT_NG)
 set(RADIUSCLIENT
     RADCLI
-    CACHE STRING "Locking method to use"
-)
+    CACHE STRING "Radius Client to use")
 set_property(CACHE RADIUSCLIENT PROPERTY STRINGS ${RADIUSCLIENTS})
 
 # option(FREERADIUS "Use freeradius-client library" OFF)
@@ -36,12 +35,14 @@ endif()
 
 if(${RADIUSCLIENT} STREQUAL "FREERADIUS")
   # - freeradius-client library
-  set(RADIUSCLIENT_LIB "freeradius-client")
-  pkg_check_modules(RADIUS REQUIRED IMPORTED_TARGET freeradius)
+  set(RADIUSCLIENT_LIB USE_FREERADIUS)
+  find_package(Libfreeradius REQUIRED)
+  add_library(RadiusClient::RadiusClient ALIAS Libfreeradius::LIBFREERADIUS)
 elseif(${RADIUSCLIENT} STREQUAL "RADCLI")
   # - radcli library
   set(RADIUSCLIENT_LIB USE_RADCLI)
   pkg_check_modules(RADIUS REQUIRED IMPORTED_TARGET radcli)
+  add_library(RadiusClient::RadiusClient ALIAS PkgConfig::RADIUS)
   # Check for radiusclient-ng version
   # elseif(NOT radiusclient_ng STREQUAL "4")
   #   # - radiusclient-ng v5 or v4 library

+ 1 - 0
src/modules/acc_radius/CMakeLists.txt

@@ -5,3 +5,4 @@ add_library(${module_name} SHARED ${MODULE_SOURCES})
 find_package(Radius REQUIRED)
 
 target_compile_definitions(${module_name} PRIVATE ${RADIUSCLIENT_LIB})
+target_link_libraries(${module_name} PRIVATE RadiusClient::RadiusClient)

+ 1 - 0
src/modules/auth_radius/CMakeLists.txt

@@ -5,6 +5,7 @@ add_library(${module_name} SHARED ${MODULE_SOURCES})
 find_package(Radius REQUIRED)
 
 target_compile_definitions(${module_name} PRIVATE ${RADIUSCLIENT_LIB})
+target_link_libraries(${module_name} PRIVATE RadiusClient::RadiusClient)
 
 # Install the configuration file (tls.cfg) using a CODE block to check
 # existence at install time instead of configure time

+ 1 - 0
src/modules/misc_radius/CMakeLists.txt

@@ -5,3 +5,4 @@ add_library(${module_name} SHARED ${MODULE_SOURCES})
 find_package(Radius REQUIRED)
 
 target_compile_definitions(${module_name} PRIVATE ${RADIUSCLIENT_LIB})
+target_link_libraries(${module_name} PRIVATE RadiusClient::RadiusClient)

+ 1 - 0
src/modules/peering/CMakeLists.txt

@@ -5,3 +5,4 @@ add_library(${module_name} SHARED ${MODULE_SOURCES})
 find_package(Radius REQUIRED)
 
 target_compile_definitions(${module_name} PRIVATE ${RADIUSCLIENT_LIB})
+target_link_libraries(${module_name} PRIVATE RadiusClient::RadiusClient)