cmake: Use _REQUIRED_LIBRARIES for system libs
authorAndreas Schneider <asn@samba.org>
Thu, 17 Oct 2019 13:24:16 +0000 (15:24 +0200)
committerAndreas Schneider <asn@cryptomilk.org>
Sun, 20 Oct 2019 12:59:54 +0000 (14:59 +0200)
This drops support for Solaris as we can't test it in CI anyway.

Signed-off-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
ConfigureChecks.cmake
config.h.cmake
src/resolv_wrapper.c
tests/CMakeLists.txt

index 9748b3aff3922ba68b03bb16738e2c9909ed4636..687da7f9f4acbcab55951022e7c6cd12946cb1cd 100644 (file)
@@ -54,46 +54,57 @@ check_include_file(arpa/nameser.h HAVE_ARPA_NAMESER_H)
 # FUNCTIONS
 find_library(RESOLV_LIRBRARY resolv)
 if (RESOLV_LIRBRARY)
-    check_library_exists(${RESOLV_LIRBRARY} res_send "" RES_SEND_IN_LIBRESOLV)
-    check_library_exists(${RESOLV_LIRBRARY} __res_send "" __RES_SEND_IN_LIBRESOLV)
-    if (RES_SEND_IN_LIBRESOLV OR __RES_SEND_IN_LIBRESOLV)
-        set(HAVE_LIBRESOLV TRUE)
-    endif()
+    set(HAVE_LIBRESOLV TRUE)
 
     # If we have a libresolv, we need to check functions linking the library
-    set(CMAKE_REQUIRED_LIBRARIES ${RESOLV_LIRBRARY})
+    list(APPEND _REQUIRED_LIBRARIES ${RESOLV_LIRBRARY})
+else()
+    message(STATUS "libresolv not found on ${CMAKE_SYSTEM_NAME}: Only dns faking will be available")
 endif()
 
+set(CMAKE_REQUIRED_LIBRARIES ${RESOLV_LIRBRARY})
+check_function_exists(res_send HAVE_RES_SEND)
+check_function_exists(__res_send HAVE___RES_SEND)
+unset(CMAKE_REQUIRED_LIBRARIES)
+
+set(CMAKE_REQUIRED_LIBRARIES ${RESOLV_LIRBRARY})
 check_function_exists(res_init HAVE_RES_INIT)
 check_function_exists(__res_init HAVE___RES_INIT)
+unset(CMAKE_REQUIRED_LIBRARIES)
 
+set(CMAKE_REQUIRED_LIBRARIES ${RESOLV_LIRBRARY})
 check_function_exists(res_ninit HAVE_RES_NINIT)
 check_function_exists(__res_ninit HAVE___RES_NINIT)
-if (RESOLV_LIRBRARY)
-    check_library_exists(${RESOLV_LIRBRARY} res_ninit "" HAVE_RES_NINIT_IN_LIBRESOLV)
-endif()
+unset(CMAKE_REQUIRED_LIBRARIES)
 
+set(CMAKE_REQUIRED_LIBRARIES ${RESOLV_LIRBRARY})
 check_function_exists(res_close HAVE_RES_CLOSE)
 check_function_exists(__res_close HAVE___RES_CLOSE)
+unset(CMAKE_REQUIRED_LIBRARIES)
 
+set(CMAKE_REQUIRED_LIBRARIES ${RESOLV_LIRBRARY})
 check_function_exists(res_nclose HAVE_RES_NCLOSE)
 check_function_exists(__res_nclose HAVE___RES_NCLOSE)
-if (RESOLV_LIRBRARY)
-    check_library_exists(${RESOLV_LIRBRARY} res_nclose "" HAVE_RES_NCLOSE_IN_LIBRESOLV)
-endif()
+unset(CMAKE_REQUIRED_LIBRARIES)
 
+set(CMAKE_REQUIRED_LIBRARIES ${RESOLV_LIRBRARY})
 check_function_exists(res_query HAVE_RES_QUERY)
 check_function_exists(__res_query HAVE___RES_QUERY)
+unset(CMAKE_REQUIRED_LIBRARIES)
 
+set(CMAKE_REQUIRED_LIBRARIES ${RESOLV_LIRBRARY})
 check_function_exists(res_nquery HAVE_RES_NQUERY)
 check_function_exists(__res_nquery HAVE___RES_NQUERY)
+unset(CMAKE_REQUIRED_LIBRARIES)
 
+set(CMAKE_REQUIRED_LIBRARIES ${RESOLV_LIRBRARY})
 check_function_exists(res_search HAVE_RES_SEARCH)
 check_function_exists(__res_search HAVE___RES_SEARCH)
+unset(CMAKE_REQUIRED_LIBRARIES)
 
+set(CMAKE_REQUIRED_LIBRARIES ${RESOLV_LIRBRARY})
 check_function_exists(res_nsearch HAVE_RES_NSEARCH)
 check_function_exists(__res_nsearch HAVE___RES_NSEARCH)
-
 unset(CMAKE_REQUIRED_LIBRARIES)
 
 check_symbol_exists(ns_name_compress "sys/types.h;arpa/nameser.h" HAVE_NS_NAME_COMPRESS)
@@ -104,12 +115,18 @@ if (UNIX)
         find_library(SOCKET_LIBRARY socket)
         if (SOCKET_LIBRARY)
             check_library_exists(${SOCKET_LIBRARY} getaddrinfo "" HAVE_LIBSOCKET)
+            if (HAVE_LIBSOCKET)
+                list(APPEND _REQUIRED_LIBRARIES ${SOCKET_LIBRARY})
+            endif()
         endif()
 
         # libnsl/inet_pton (Solaris)
         find_library(NSL_LIBRARY nsl)
         if (NSL_LIBRARY)
             check_library_exists(${NSL_LIBRARY} inet_pton "" HAVE_LIBNSL)
+            if (HAVE_LIBNSL)
+                list(APPEND _REQUIRED_LIBRARIES ${NSL_LIBRARY})
+            endif()
         endif()
     endif (NOT LINUX)
 
@@ -118,7 +135,12 @@ endif (UNIX)
 
 find_library(DLFCN_LIBRARY dl)
 if (DLFCN_LIBRARY)
-    check_library_exists(${DLFCN_LIBRARY} dlopen "" HAVE_LIBDL)
+    list(APPEND _REQUIRED_LIBRARIES ${DLFCN_LIBRARY})
+else()
+    check_function_exists(dlopen HAVE_DLOPEN)
+    if (NOT HAVE_DLOPEN)
+        message(FATAL_ERROR "FATAL: No dlopen() function detected")
+    endif()
 endif()
 
 # IPV6
@@ -177,4 +199,4 @@ int main(void) {
 # ENDIAN
 test_big_endian(WORDS_BIGENDIAN)
 
-set(RWRAP_REQUIRED_LIBRARIES ${RESOLV_LIRBRARY} ${DLFCN_LIBRARY} ${SOCKET_LIBRARY} ${NSL_LIBRARY} CACHE INTERNAL "resolv_wrapper required system libraries")
+set(RWRAP_REQUIRED_LIBRARIES ${_REQUIRED_LIBRARIES} CACHE INTERNAL "resolv_wrapper required system libraries")
index 86b655a60e4246175ed60ee586fd3afac8fd2fc8..103f3296ba30618bb349771334ef9a61a5f03ffa 100644 (file)
 #cmakedefine HAVE___RES_INIT 1
 
 #cmakedefine HAVE_RES_NINIT 1
-#cmakedefine HAVE_RES_NINIT_IN_LIBRESOLV 1
 #cmakedefine HAVE___RES_NINIT 1
 
 #cmakedefine HAVE_RES_CLOSE 1
 #cmakedefine HAVE___RES_CLOSE 1
 
 #cmakedefine HAVE_RES_NCLOSE 1
-#cmakedefine HAVE_RES_NCLOSE_IN_LIBRESOLV 1
 #cmakedefine HAVE___RES_NCLOSE 1
 
 #cmakedefine HAVE_RES_QUERY 1
index 08e30201e8d448eb79946ebea69da8035ad5857f..bdf2c4171d6d6fceaec15d21e7089e9e0f2074d1 100644 (file)
@@ -1491,21 +1491,13 @@ static void *_rwrap_bind_symbol(enum rwrap_lib lib, const char *fn_name)
 static int libc_res_ninit(struct __res_state *state)
 {
 #if !defined(res_ninit) && defined(HAVE_RES_NINIT)
-
-#if defined(HAVE_RES_NINIT_IN_LIBRESOLV)
        rwrap_bind_symbol_libresolv(res_ninit);
 
        return rwrap.libresolv.symbols._libc_res_ninit.f(state);
-#else /* HAVE_RES_NINIT_IN_LIBRESOLV */
-       rwrap_bind_symbol_libc(res_ninit);
-
-       return rwrap.libc.symbols._libc_res_ninit.f(state);
-#endif /* HAVE_RES_NINIT_IN_LIBRESOLV */
-
 #elif defined(HAVE___RES_NINIT)
-       rwrap_bind_symbol_libc(__res_ninit);
+       rwrap_bind_symbol_libresolv(__res_ninit);
 
-       return rwrap.libc.symbols._libc___res_ninit.f(state);
+       return rwrap.libresolv.symbols._libc___res_ninit.f(state);
 #else
 #error "No res_ninit function"
 #endif
@@ -1514,23 +1506,14 @@ static int libc_res_ninit(struct __res_state *state)
 static void libc_res_nclose(struct __res_state *state)
 {
 #if !defined(res_close) && defined(HAVE_RES_NCLOSE)
-
-#if defined(HAVE_RES_NCLOSE_IN_LIBRESOLV)
        rwrap_bind_symbol_libresolv(res_nclose);
 
        rwrap.libresolv.symbols._libc_res_nclose.f(state);
        return;
-#else /* HAVE_RES_NCLOSE_IN_LIBRESOLV */
-       rwrap_bind_symbol_libc(res_nclose);
-
-       rwrap.libc.symbols._libc_res_nclose.f(state);
-       return;
-#endif /* HAVE_RES_NCLOSE_IN_LIBRESOLV */
-
 #elif defined(HAVE___RES_NCLOSE)
-       rwrap_bind_symbol_libc(__res_nclose);
+       rwrap_bind_symbol_libresolv(__res_nclose);
 
-       rwrap.libc.symbols._libc___res_nclose.f(state);
+       rwrap.libresolv.symbols._libc___res_nclose.f(state);
 #else
 #error "No res_nclose function"
 #endif
index ad3fa8ce0810930742c3d5cdc9a9d7d9443217a5..efb6c6dfc725986c19833dd97e98fc6a3ebb39f6 100644 (file)
@@ -25,9 +25,6 @@ target_link_libraries(${TORTURE_LIBRARY}
 
 
 set(TESTSUITE_LIBRARIES ${RWRAP_REQUIRED_LIBRARIES} ${CMOCKA_LIBRARY})
-if (HAVE_LIBRESOLV)
-    set(TESTSUITE_LIBRARIES ${TESTSUITE_LIBRARIES} resolv)
-endif()
 
 set(RWRAP_TESTS
     test_res_init)