summaryrefslogtreecommitdiffstats
path: root/kdm/ConfigureChecks.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'kdm/ConfigureChecks.cmake')
-rw-r--r--kdm/ConfigureChecks.cmake118
1 files changed, 118 insertions, 0 deletions
diff --git a/kdm/ConfigureChecks.cmake b/kdm/ConfigureChecks.cmake
new file mode 100644
index 000000000..2ac6dbd29
--- /dev/null
+++ b/kdm/ConfigureChecks.cmake
@@ -0,0 +1,118 @@
+#################################################
+#
+# (C) 2010-2011 Serghei Amelian
+# serghei (DOT) amelian (AT) gmail.com
+#
+# Improvements and feedback are welcome
+#
+# This file is released under GPL >= 2
+#
+#################################################
+
+find_library( UTIL_LIBRARY util )
+
+check_function_exists( getdomainname HAVE_GETDOMAINNAME )
+check_function_exists( initgroups HAVE_INITGROUPS )
+check_function_exists( mkstemp HAVE_MKSTEMP )
+check_function_exists( setproctitle HAVE_SETPROCTITLE )
+check_function_exists( sysinfo HAVE_SYSINFO )
+check_function_exists( strnlen HAVE_STRNLEN )
+check_function_exists( getifaddrs HAVE_GETIFADDRS )
+
+tde_save( CMAKE_REQUIRED_LIBRARIES )
+set( CMAKE_REQUIRED_LIBRARIES ${UTIL_LIBRARY} )
+check_function_exists( setusercontext HAVE_SETUSERCONTEXT )
+check_function_exists( getusershell HAVE_GETUSERSHELL )
+check_function_exists( login_getclass HAVE_LOGIN_GETCLASS )
+check_function_exists( auth_timeok HAVE_AUTH_TIMEOK )
+tde_restore( CMAKE_REQUIRED_LIBRARIES )
+
+check_include_file( lastlog.h HAVE_LASTLOG_H )
+check_include_file( termio.h HAVE_TERMIO_H )
+
+check_struct_has_member( "struct sockaddr_in" "sin_len" "sys/socket.h;netinet/in.h" HAVE_STRUCT_SOCKADDR_IN_SIN_LEN )
+check_struct_has_member( "struct passwd" "pw_expire" "pwd.h" HAVE_STRUCT_PASSWD_PW_EXPIRE )
+check_struct_has_member( "struct utmp" "ut_user" "utmp.h" HAVE_STRUCT_UTMP_UT_USER )
+
+check_c_source_runs( "
+ #include <errno.h>
+ #include <unistd.h>
+ int main()
+ {
+ setlogin(0);
+ return errno == ENOSYS;
+ }
+" HAVE_SETLOGIN )
+
+check_c_source_runs( "
+ #include <sys/socket.h>
+ #include <sys/un.h>
+ #include <sys/stat.h>
+ #include <sys/types.h>
+ #include <string.h>
+ #include <unistd.h>
+ #include <errno.h>
+ int main()
+ {
+ int fd, fd2;
+ struct sockaddr_un sa;
+
+ if((fd = socket(PF_UNIX, SOCK_STREAM, 0)) < 0)
+ return 2;
+ sa.sun_family = AF_UNIX;
+ strcpy(sa.sun_path, \"testsock\");
+ unlink(sa.sun_path);
+ if(bind(fd, (struct sockaddr *)&sa, sizeof(sa)))
+ return 2;
+ chmod(sa.sun_path, 0);
+ setuid(getuid() + 1000);
+ if((fd2 = socket(PF_UNIX, SOCK_STREAM, 0)) < 0)
+ return 2;
+ connect(fd2, (struct sockaddr *)&sa, sizeof(sa));
+ return errno != EACCES;
+ }
+" HONORS_SOCKET_PERMS )
+
+if( CMAKE_SYSTEM_NAME MATCHES Linux OR CMAKE_SYSTEM_NAME MATCHES Darwin OR CMAKE_SYSTEM_NAME MATCHES GNU/FreeBSD )
+ unset( HAVE_UTMPX )
+ unset( HAVE_LASTLOGX )
+else( )
+ check_function_exists( getutxent HAVE_UTMPX )
+ check_function_exists( updlastlogx HAVE_LASTLOGX )
+endif( )
+
+unset( BSD_UTMP )
+if( NOT HAVE_UTMPX )
+ check_function_exists( getutent have_getutent )
+ if( NOT have_getutent )
+ set( BSD_UTMP 1 )
+ endif( )
+endif( )
+
+check_function_exists( arc4random HAVE_ARC4RANDOM )
+if( NOT HAVE_ARC4RANDOM )
+ # assume that /dev/random is non-blocking if /dev/urandom does not exist
+ if( EXISTS /dev/urandom )
+ set( DEV_RANDOM "/dev/urandom" CACHE INTERNAL "" FORCE )
+ elseif( EXISTS /dev/random )
+ set( DEV_RANDOM "/dev/random" CACHE INTERNAL "" FORCE )
+ endif( )
+endif (NOT HAVE_ARC4RANDOM)
+
+# Xau
+pkg_search_module( XAU xau )
+if( NOT XAU_FOUND )
+ tde_message_fatal( "Xau are required, but not found on your system" )
+endif()
+
+
+if( WITH_PAM )
+
+ set( USE_PAM 1 CACHE INTERNAL "" FORCE )
+
+elseif( WITH_SHADOW )
+
+ set( HAVE_SHADOW 1 CACHE INTERNAL "" FORCE )
+ set( USESHADOW 1 CACHE INTERNAL "" FORCE )
+
+endif( )