# HEADERS
check_include_file(sys/types.h HAVE_SYS_TYPES_H)
check_include_file(pwd.h HAVE_PWD_H)
+check_include_file(shadow.h HAVE_SHADOW_H)
check_include_file(grp.h HAVE_GRP_H)
+check_include_file(nss.h HAVE_NSS_H)
+check_include_file(nss_common.h HAVE_NSS_COMMON_H)
# FUNCTIONS
check_function_exists(strncpy HAVE_STRNCPY)
check_function_exists(getpwuid_r HAVE_GETPWUID_R)
check_function_exists(getpwent_r HAVE_GETPWENT_R)
+check_function_exists(setspent HAVE_SETSPENT)
+check_function_exists(getspnam HAVE_GETSPNAM)
+
check_function_exists(getgrnam_r HAVE_GETGRNAM_R)
check_function_exists(getgrgid_r HAVE_GETGRGID_R)
check_function_exists(getgrent_r HAVE_GETGRENT_R)
check_function_exists(getgrouplist HAVE_GETGROUPLIST)
+check_function_exists(gethostbyaddr_r HAVE_GETHOSTBYADDR_R)
+check_function_exists(gethostbyname_r HAVE_GETHOSTBYNAME_R)
+
+check_function_exists(gethostbyname2 HAVE_GETHOSTBYNAME2)
+
if (WIN32)
check_function_exists(_vsnprintf_s HAVE__VSNPRINTF_S)
check_function_exists(_vsnprintf HAVE__VSNPRINTF)
check_function_exists(_snprintf_s HAVE__SNPRINTF_S)
endif (WIN32)
+if (UNIX)
+ if (NOT LINUX)
+ # libsocket (Solaris)
+ check_library_exists(socket getaddrinfo "" HAVE_LIBSOCKET)
+ if (HAVE_LIBSOCKET)
+ set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} socket)
+ endif (HAVE_LIBSOCKET)
+
+ # libnsl/inet_pton (Solaris)
+ check_library_exists(nsl inet_pton "" HAVE_LIBNSL)
+ if (HAVE_LIBNSL)
+ set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} nsl)
+ endif (HAVE_LIBNSL)
+ endif (NOT LINUX)
+
+ check_function_exists(getaddrinfo HAVE_GETADDRINFO)
+endif (UNIX)
+
+if (SOLARIS)
+ check_function_exists(__posix_getpwnam_r HAVE___POSIX_GETPWNAM_R)
+ check_function_exists(__posix_getpwuid_r HAVE___POSIX_GETPWUID_R)
+
+ check_function_exists(__posix_getgrgid_r HAVE___POSIX_GETGRGID_R)
+ check_function_exists(__posix_getgrnam_r HAVE___POSIX_GETGRNAM_R)
+endif (SOLARIS)
+
check_function_exists(asprintf HAVE_ASPRINTF)
if (UNIX AND HAVE_ASPRINTF)
add_definitions(-D_GNU_SOURCE)
endif (UNIX AND HAVE_ASPRINTF)
-
+set(CMAKE_REQUIRED_DEFINITIONS -D_POSIX_PTHREAD_SEMANTICS)
check_prototype_definition(getpwent_r
- "struct passwd *getpwent_r(struct passwd *src, char *buf, int buflen)"
- "NULL"
- "unistd.h;pwd.h"
- SOLARIS_GETPWENT_R)
+ "struct passwd *getpwent_r(struct passwd *src, char *buf, int buflen)"
+ "NULL"
+ "unistd.h;pwd.h"
+ HAVE_SOLARIS_GETPWENT_R)
-check_prototype_definition(getpwent_r
- "struct group *getpwent_r(struct group *src, char *buf, int buflen)"
- "NULL"
- "unistd.h;pwd.h"
- SOLARIS_GETGRENT_R)
+check_prototype_definition(getpwnam_r
+ "int getpwnam_r(const char *name, struct passwd *pwd, char *buf, int buflen, struct passwd **ppwd)"
+ "-1"
+ "unistd.h;pwd.h"
+ HAVE_SOLARIS_GETPWNAM_R)
+
+check_prototype_definition(getpwuid_r
+ "int getpwuid_r(uid_t uid, struct passwd *pwd, char *buf, int buflen, struct passwd **ppwd)"
+ "-1"
+ "unistd.h;pwd.h"
+ HAVE_SOLARIS_GETPWUID_R)
+
+check_prototype_definition(getgrent_r
+ "struct group *getgrent_r(struct group *src, char *buf, int buflen)"
+ "NULL"
+ "unistd.h;grp.h"
+ HAVE_SOLARIS_GETGRENT_R)
+
+check_prototype_definition(getgrnam_r
+ "int getgrnam_r(const char *name, struct group *grp, char *buf, int buflen, struct group **pgrp)"
+ "-1"
+ "unistd.h;grp.h"
+ HAVE_SOLARIS_GETGRNAM_R)
+
+check_prototype_definition(getgrgid_r
+ "int getgrgid_r(gid_t gid, struct group *grp, char *buf, int buflen, struct group **pgrp)"
+ "-1"
+ "unistd.h;grp.h"
+ HAVE_SOLARIS_GETGRGID_R)
+
+check_prototype_definition(sethostent
+ "int sethostent(int stayopen)"
+ "-1"
+ "unistd.h;netdb.h"
+ HAVE_SOLARIS_SETHOSTENT)
+
+check_prototype_definition(endhostent
+ "int endhostent(void)"
+ "-1"
+ "unistd.h;netdb.h"
+ HAVE_SOLARIS_ENDHOSTENT)
+
+check_prototype_definition(gethostname
+ "int gethostname(char *name, int len)"
+ "-1"
+ "unistd.h;netdb.h"
+ HAVE_SOLARIS_GETHOSTNAME)
+set(CMAKE_REQUIRED_DEFINITIONS)
+
+check_prototype_definition(setgrent
+ "int setgrent(void)"
+ "-1"
+ "unistd.h;grp.h"
+ HAVE_BSD_SETGRENT)
+
+check_prototype_definition(getnameinfo
+ "int getnameinfo (const struct sockaddr *sa, socklen_t salen, char *host, socklen_t __hostlen, char *serv, socklen_t servlen, int flags)"
+ "-1"
+ "unistd.h;netdb.h"
+ HAVE_LINUX_GETNAMEINFO)
+
+check_prototype_definition(getnameinfo
+ "int getnameinfo (const struct sockaddr *sa, socklen_t salen, char *host, socklen_t __hostlen, char *serv, socklen_t servlen, unsigned int flags)"
+ "-1"
+ "unistd.h;netdb.h"
+ HAVE_LINUX_GETNAMEINFO_UNSIGNED)
# STRUCT MEMBERS
check_struct_has_member("struct sockaddr" sa_len "sys/socket.h netinet/in.h" HAVE_STRUCT_SOCKADDR_SA_LEN)
return 0;
}" HAVE_IPV6)
+check_c_source_compiles("
+void log_fn(const char *format, ...) __attribute__ ((format (printf, 1, 2)));
+
+int main(void) {
+ return 0;
+}" HAVE_ATTRIBUTE_PRINTF_FORMAT)
+
+check_c_source_compiles("
+void test_destructor_attribute(void) __attribute__ ((destructor));
+
+void test_destructor_attribute(void)
+{
+ return;
+}
+
+int main(void) {
+ return 0;
+}" HAVE_DESTRUCTOR_ATTRIBUTE)
+
check_library_exists(dl dlopen "" HAVE_LIBDL)
if (HAVE_LIBDL)
find_library(DLFCN_LIBRARY dl)
test_big_endian(WORDS_BIGENDIAN)
endif (NOT WIN32)
-set(NSSWRAP_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} CACHE INTERNAL "nsswrap required system libraries")
+set(NWRAP_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} CACHE INTERNAL "nss_wrapper required system libraries")