################################################# # # (C) 2010-2012 Serghei Amelian # serghei (DOT) amelian (AT) gmail.com # # (C) 2014 Timothy Pearson # kb9vqf (AT) pearsoncomputing (DOT) net # # Improvements and feedback are welcome # # This file is released under GPL >= 2 # ################################################# # required stuff tde_setup_architecture_flags( ) include(TestBigEndian) test_big_endian(WORDS_BIGENDIAN) tde_setup_largefiles( ) find_package( TQt ) find_package( TDE ) ##### look for the usb.ids file, Its location can be set EG: -DWITH_USBIDS="/opt/share/misc/usb.ids" if( WITH_USBIDS ) set( USBIDS_FILE "${WITH_USBIDS}" ) message( STATUS "Using specified usb.ids file: ${USBIDS_FILE}" ) else() find_file( PATH_USBIDS usb.ids HINTS /usr/share/misc /var/lib/usbutils /usr/share/hwdata ) if( PATH_USBIDS ) set( USBIDS_FILE "${PATH_USBIDS}" ) message( STATUS "Using system usb.ids file: ${PATH_USBIDS}" ) else() set( USE_BUILTIN_USBIDS 1 ) message( STATUS "File usb.ids (hwdata) was not found on the system, using builtin" ) endif() endif( WITH_USBIDS ) ##### check for libdl ########################### set( DL_LIBRARIES dl ) check_library_exists( ${DL_LIBRARIES} dlopen /lib HAVE_LIBDL ) if( NOT HAVE_LIBDL ) unset( DL_LIBRARIES ) check_function_exists( dlopen HAVE_DLOPEN ) if( HAVE_DLOPEN ) set( HAVE_LIBDL 1 ) endif( HAVE_DLOPEN ) endif( NOT HAVE_LIBDL ) # stdint.h (drkonqi) if( BUILD_DRKONQI ) check_include_file( stdint.h HAVE_STDINT_H ) endif( ) # termios.h (tdm, tdeioslave) if( BUILD_TDM OR BUILD_TDEIOSLAVES ) check_include_file( termios.h HAVE_TERMIOS_H ) endif( ) # sys/bitypes.h (drkonqi) if( BUILD_DRKONQI ) check_include_file( sys/bitypes.h HAVE_SYS_BITYPES_H ) endif( ) # sys/ioctl.h (tdeioslave/fish, kcontrol/info) if( BUILD_TDEIOSLAVES OR BUILD_KCONTROL ) check_include_file( sys/ioctl.h HAVE_SYS_IOCTL_H ) endif( ) # sys/types.h (drkonqi, tdeioslave/smtp) if( BUILD_DRKONQI OR BUILD_TDEIOSLAVES ) check_include_file( sys/types.h HAVE_SYS_TYPES_H ) endif( ) # sys/time.h (tdeioslave/sftp, ksmserver, ksplashml) if( BUILD_KSMSERVER OR BUILD_KSPLASHML OR BUILD_TDEIOSLAVES) check_include_file( sys/time.h HAVE_SYS_TIME_H ) check_include_files( "sys/time.h;time.h" TIME_WITH_SYS_TIME ) endif( ) # pam if( WITH_PAM AND (BUILD_KCHECKPASS OR BUILD_TDM) ) check_library_exists( pam pam_start "" HAVE_PAM ) if( HAVE_PAM ) check_include_file( "security/pam_appl.h" SECURITY_PAM_APPL_H ) endif( ) if( HAVE_PAM AND SECURITY_PAM_APPL_H ) set( PAM_LIBRARY pam ${DL_LIBRARIES} ) else( ) tde_message_fatal( "pam are requested, but not found on your system" ) endif( ) endif( ) # crypt set( CRYPT_LIBRARY crypt ) check_library_exists( ${CRYPT_LIBRARY} crypt "" HAVE_CRYPT ) if( NOT HAVE_CRYPT ) unset( CRYPT_LIBRARY ) check_function_exists( crypt LIBC_HAVE_CRYPT ) if( LIBC_HAVE_CRYPT ) set( HAVE_CRYPT 1 CACHE INTERNAL "" FORCE ) endif( LIBC_HAVE_CRYPT ) endif( NOT HAVE_CRYPT ) # hal (ksmserver, tdeioslaves) if( WITH_HAL ) pkg_search_module( HAL hal ) if( NOT HAL_FOUND ) tde_message_fatal( "hal is required, but was not found on your system" ) endif( ) endif( ) # tdehwlib (drkonqi, kcontrol, kicker, ksmserver, tdeioslaves, tdm) if( WITH_TDEHWLIB ) tde_save_and_set( CMAKE_REQUIRED_INCLUDES "${TDE_INCLUDE_DIR}" ) check_cxx_source_compiles( " #include <kdemacros.h> #ifndef __TDE_HAVE_TDEHWLIB #error tdecore is not build with tdehwlib #endif int main() { return 0; } " HAVE_TDEHWLIB ) tde_restore( CMAKE_REQUIRED_INCLUDES ) if( NOT HAVE_TDEHWLIB ) tde_message_fatal( "tdehwlib is required, but not built in tdecore" ) endif( NOT HAVE_TDEHWLIB ) set( TDEHW_LIBRARIES "tdehw-shared" ) endif( ) # udev (tsak) if( BUILD_TSAK ) pkg_search_module( UDEV udev ) if( NOT UDEV_FOUND ) tde_message_fatal( "udev is required, but was not found on your system" ) endif( ) endif( ) ##### check for gcc visibility support ######### if( WITH_GCC_VISIBILITY ) tde_setup_gcc_visibility( ) endif( ) # xrender (kdesktop, konsole, kcontrol, kicker, twin) if( WITH_XRENDER OR BUILD_KDESKTOP OR BUILD_KONSOLE OR BUILD_KCONTROL OR BUILD_KICKER ) pkg_search_module( XRENDER xrender ) if( XRENDER_FOUND ) set( HAVE_XRENDER 1 ) elseif( WITH_XRENDER ) tde_message_fatal( "xrender is requested, but was not found on your system" ) endif( ) endif( ) # xrandr (kcontrol, twin/compot-tde) if( WITH_XRANDR ) pkg_search_module( XRANDR xrandr ) if( NOT XRANDR_FOUND ) tde_message_fatal( "xrandr are requested, but not found on your system" ) endif( ) endif( ) # xinerama (ksplashml, twin/compot-tde) if( WITH_XINERAMA ) pkg_search_module( XINERAMA xinerama ) if( XINERAMA_FOUND ) set( HAVE_XINERAMA 1 ) else( ) tde_message_fatal( "xinerama is requested, but not found on your system" ) endif( ) endif( WITH_XINERAMA ) # xcursor (tdeioslave, kcontrol) if( WITH_XCURSOR ) pkg_search_module( XCURSOR xcursor ) if( XCURSOR_FOUND ) set( HAVE_XCURSOR 1 ) else( ) tde_message_fatal( "xcursor is requested, but was not found on your system" ) endif( ) endif( ) # xcomposite (kicker, twin) if( WITH_XCOMPOSITE ) pkg_search_module( XCOMPOSITE xcomposite ) if( XCOMPOSITE_FOUND ) set( HAVE_XCOMPOSITE 1 ) else( XCOMPOSITE_FOUND ) tde_message_fatal( "xcomposite is requested, but was not found on your system" ) endif( XCOMPOSITE_FOUND ) # xdamage (twin/kompmgr) pkg_search_module( XDAMAGE xdamage ) if( NOT XDAMAGE_FOUND ) tde_message_fatal( "xdamage is required for xcomposite support, but was not found on your system" ) endif( ) # xext (twin/kompmgr) pkg_search_module( XEXT xext ) if( NOT XEXT_FOUND ) tde_message_fatal( "xext is required for xcomposite support, but was not found on your system" ) endif( ) # for (twin/compton) # older libXext (e.g.in debian-6.0) doesn't provide XSyncFence tde_save_and_set( CMAKE_REQUIRED_INCLUDES "${XEXT_INCLUDE_DIRS}" ) tde_save_and_set( CMAKE_REQUIRED_LIBRARIES "${XEXT_LIBRARIES}" ) check_symbol_exists( "XSyncCreateFence" "X11/Xlib.h;X11/extensions/sync.h" HAVE_XEXT_XSYNCFENCE ) tde_restore( CMAKE_REQUIRED_LIBRARIES ) tde_restore( CMAKE_REQUIRED_INCLUDES ) endif( ) # xfixes (klipper, kicker) if( WITH_XFIXES ) pkg_search_module( XFIXES xfixes ) if( XFIXES_FOUND ) set( HAVE_XFIXES 1 CACHE INTERNAL "" FORCE ) else( ) tde_message_fatal( "xfixes is requested, but was not found on your system" ) endif( ) endif( ) # libconfig (twin/compton-tde) if( WITH_LIBCONFIG ) pkg_search_module( LIBCONFIG libconfig ) if( LIBCONFIG_FOUND ) set( HAVE_LIBCONFIG 1 ) # TODO replace with functionality check if( LIBCONFIG_VERSION VERSION_LESS 1.4.0 ) set( HAVE_LIBCONFIG_OLD_API 1 ) endif( ) else( LIBCONFIG_FOUND ) tde_message_fatal( "libconfig is requested, but was not found on your system" ) endif( ) endif( ) # pcre (twin/compton-tde) if( WITH_PCRE ) pkg_search_module( LIBPCRE libpcre ) if( NOT LIBPCRE_FOUND ) tde_message_fatal( "pcre support is requested, but not found on your system" ) endif( NOT LIBPCRE_FOUND ) endif( ) # xtest (kxkb) if( WITH_XTEST ) pkg_search_module( XTEST xtst ) if( XTEST_FOUND ) set( HAVE_XTEST 1 ) else( XTEST_FOUND ) tde_message_fatal( "xtest is requested, but was not found on your system" ) endif( ) endif( ) # xscreensaver () if( WITH_XSCREENSAVER ) pkg_search_module( XSS xscrnsaver ) if( XSS_FOUND ) tde_save_and_set( CMAKE_REQUIRED_INCLUDES "${XSS_INCLUDE_DIRS}" ) check_library_exists( Xss XScreenSaverQueryInfo "${XSS_LIBRARY_DIRS}" HAVE_XSSLIB ) tde_restore( CMAKE_REQUIRED_INCLUDES ) else( XSS_FOUND ) check_library_exists( Xss XScreenSaverQueryInfo "" HAVE_XSSLIB ) endif( XSS_FOUND ) if( NOT HAVE_XSSLIB ) check_library_exists( Xext XScreenSaverQueryInfo "${XEXT_LIBRARY_DIRS}" HAVE_XEXT_XSS ) if( HAVE_XEXT_XSS ) set( HAVE_XSSLIB 1 ) pkg_search_module( XSS xext ) endif( ) endif( ) tde_save_and_set( CMAKE_REQUIRED_INCLUDES "${XSS_INCLUDE_DIRS}" ) check_include_file( X11/extensions/scrnsaver.h HAVE_XSCREENSAVER_H ) tde_restore( CMAKE_REQUIRED_INCLUDES ) if( HAVE_XSSLIB AND HAVE_XSCREENSAVER_H ) set( HAVE_XSCREENSAVER 1 ) else( ) tde_message_fatal( "xscreensaver is requested, but was not found on your system" ) endif( ) # We don't really need the xscreensaver package for building, we only need to know # where xscreensaver stores its executables. So give the user the possibility # to define XSCREENSAVER_DIR and speficy the location manually. include( FindXscreensaver.cmake ) # not really good practise if( NOT XSCREENSAVER_DIR ) tde_message_fatal( "xscreensaver is requested, but cmake can not determine the location of XSCREENSAVER_DIR You have to either specify it manually with e.g. -DXSCREENSAVER_DIR=/usr/lib/misc/xscreensaver/ or make sure that xscreensaver installed properly" ) endif( ) endif( ) # openGL (kdesktop or kcontrol or tdescreensaver or twin/compot-tde ) if( WITH_OPENGL ) pkg_search_module( GL gl ) if( GL_FOUND ) # some extra check, stricktly speaking they are not necessary tde_save_and_set( CMAKE_REQUIRED_LIBRARIES ${GL_LIBRARIES} ) tde_save_and_set( CMAKE_REQUIRED_INCLUDES "${GL_INCLUDE_DIRS}" ) tde_save_and_set( CMAKE_REQUIRED_FLAGS "${GL_LDFLAGS}" ) check_symbol_exists( glXChooseVisual "GL/glx.h" HAVE_GLXCHOOSEVISUAL ) tde_restore( CMAKE_REQUIRED_LIBRARIES ) tde_restore( CMAKE_REQUIRED_INCLUDES ) tde_restore( CMAKE_REQUIRED_FLAGS ) if( NOT HAVE_GLXCHOOSEVISUAL ) tde_message_fatal( "opengl is requested and found, but it doesn't provides glXChooseVisual() or GL/glx.h" ) endif( ) else( ) check_library_exists( GL glXChooseVisual "" HAVE_GLXCHOOSEVISUAL ) if( HAVE_GLXCHOOSEVISUAL ) set( GL_LIBRARIES "GL" ) else( HAVE_GLXCHOOSEVISUAL ) tde_message_fatal( "opengl is requested, but not found on your system" ) endif( HAVE_GLXCHOOSEVISUAL ) endif( ) if( BUILD_KCONTROL ) pkg_search_module( GLU glu ) if( NOT GLU_FOUND ) check_library_exists( GLU gluGetString "" HAVE_GLUGETSTRING ) if( HAVE_GLUGETSTRING ) set( GLU_LIBRARIES "GLU" ) else( HAVE_GLUGETSTRING ) tde_message_fatal( "glu is required, but not found on your system" ) endif( HAVE_GLUGETSTRING ) endif( ) endif( BUILD_KCONTROL ) endif( ) # glib-2.0 if( BUILD_NSPLUGINS ) pkg_search_module( GLIB2 glib-2.0 ) if( NOT GLIB2_FOUND ) tde_message_fatal( "glib-2.0 are required, but not found on your system" ) endif( ) endif( ) # kde_socklen_t if( BUILD_TDEIOSLAVES OR BUILD_KSYSGUARD ) set( kde_socklen_t socklen_t ) endif( ) # getifaddrs (kcontrol, tdm) if( BUILD_KCONTROL OR BUILD_TDM ) check_function_exists( getifaddrs HAVE_GETIFADDRS ) endif( ) # xkb (konsole, tdm, kxkb) if( BUILD_KONSOLE OR BUILD_TDM OR BUILD_KXKB ) check_include_file( X11/XKBlib.h HAVE_X11_XKBLIB_H ) if( HAVE_X11_XKBLIB_H ) check_library_exists( X11 XkbLockModifiers "" HAVE_XKB ) if( BUILD_TDM ) check_library_exists( X11 XkbSetPerClientControls "" HAVE_XKBSETPERCLIENTCONTROLS ) endif( ) endif( ) endif( ) # XBINDIR, XLIBDIR (tdm, kxkb) if( BUILD_TDM OR BUILD_KXKB ) find_program( some_x_program NAMES iceauth xrdb xterm ) if( NOT some_x_program ) set( some_x_program /usr/bin/xrdb ) message( STATUS "Warning: Could not determine X binary directory. Assuming /usr/bin." ) endif( ) get_filename_component( proto_xbindir "${some_x_program}" PATH ) get_filename_component( XBINDIR "${proto_xbindir}" ABSOLUTE ) get_filename_component( xrootdir "${XBINDIR}" PATH ) set( XBINDIR ${XBINDIR} CACHE INTERNAL "" FORCE ) set( XLIBDIR "${xrootdir}/lib/X11" CACHE INTERNAL "" FORCE ) endif( ) # arts if( WITH_ARTS ) pkg_search_module( ARTS arts ) if( NOT ARTS_FOUND ) message( FATAL_ERROR "\naRts is requested, but was not found on your system" ) endif( ) else( ) set( WITHOUT_ARTS 1 ) endif( ) # libart if( WITH_LIBART ) pkg_search_module( LIBART libart-2.0 ) if( NOT LIBART_FOUND ) message(FATAL_ERROR "\nlibart-2.0 support are requested, but not found on your system" ) endif( NOT LIBART_FOUND ) set( HAVE_LIBART 1 ) endif( WITH_LIBART ) # dbus (tdm, kdesktop, twin/compton-tde.c) if( BUILD_TDM OR BUILD_KDESKTOP OR (BUILD_TWIN AND WITH_XCOMPOSITE) ) pkg_search_module( DBUS dbus-1 ) if( NOT DBUS_FOUND ) tde_message_fatal( "dbus-1 is required, but was not found on your system" ) endif( ) endif( ) # dbus-1-tqt (kdesktop) if( BUILD_KDESKTOP ) pkg_search_module( DBUS_1_TQT dbus-1-tqt ) if( NOT DBUS_1_TQT_FOUND ) tde_message_fatal( "dbus-1-tqt is required, but was not found on your system" ) endif( ) endif( ) # dbus-tqt (ksmserver, kicker, tdeioslaves(media)) if( WITH_HAL AND (BUILD_KSMSERVER OR BUILD_KICKER OR BUILD_TDEIOSLAVES) ) # check for dbus-tqt # dbus-tqt need Qt flags pkg_check_modules( DBUS_TQT REQUIRED dbus-tqt ) tde_save( CMAKE_REQUIRED_INCLUDES CMAKE_REQUIRED_LIBRARIES ) set( CMAKE_REQUIRED_INCLUDES ${DBUS_TQT_INCLUDE_DIRS} ${TQT_INCLUDE_DIRS} ${TQT_INCLUDE_DIRS}) set( CMAKE_REQUIRED_LIBRARIES ${DBUS_TQT_LDFLAGS} ${TQT_LDFLAGS} ${QT_LDFLAGS} ) check_cxx_source_compiles(" #include <tqt.h> #include <dbus/connection.h> int main(int, char**) { return 0; } " HAVE_DBUS_QT3_07 ) tde_restore( CMAKE_REQUIRED_INCLUDES CMAKE_REQUIRED_LIBRARIES ) if( NOT HAVE_DBUS_QT3_07 ) tde_message_fatal( "dbus-tqt is required, but was not found on your system" ) endif( ) endif( ) # check for krb5 if( WITH_KRB5 ) pkg_search_module( KRB5 krb5 ) if( NOT KRB5_FOUND ) check_include_file( kadm5/admin.h HAVE_KRB_KADM_H ) if( NOT HAVE_KRB_KADM_H ) message(FATAL_ERROR "\nKerberos support was requested, but krb5 was not found on your system" ) endif( NOT HAVE_KRB_KADM_H ) endif( NOT KRB5_FOUND ) set( HAVE_KRB5 1 ) endif( ) # check for libr if( WITH_ELFICON ) pkg_search_module( LIBR libr ) if( NOT LIBR_FOUND ) message(FATAL_ERROR "\nelficon support was requested, but libr was not found on your system" ) endif( NOT LIBR_FOUND ) if( NOT "${LIBR_VERSION}" STREQUAL "0.6.0" ) message(FATAL_ERROR "\nelficon support was requested, but the libr version on your system may not be compatible with TDE" ) endif( NOT "${LIBR_VERSION}" STREQUAL "0.6.0" ) set( HAVE_ELFICON 1 ) endif( ) # # For kxkb, try to find the path to the Xkb rules files: # # 1: ask for the path from xkeyboard-config's pkg-config file # 2: ask for the path from xkbcomp's pkg-config file # 3: look under the "FILES" heading in the man page for setxkbmap # 4: take the prefix/libdir from xkbfile's pkg-config file and try the # "${prefix}/share/X11" and "${libdir}/X11" directories # # Alternatively, just take an overriding value from the command line. # if( BUILD_KXKB ) if( NOT X11_XKB_RULES_DIR ) pkg_search_module( XKB_CONFIG xkeyboard-config ) if( XKB_CONFIG_FOUND ) execute_process( COMMAND ${PKG_CONFIG_EXECUTABLE} --variable=xkb_base xkeyboard-config OUTPUT_VARIABLE KB_RULES_DIR OUTPUT_STRIP_TRAILING_WHITESPACE ) if( NOT "${KB_RULES_DIR}" STREQUAL "" ) string(REGEX REPLACE "/xkb$" "/" X11_XKB_RULES_DIR "${KB_RULES_DIR}" ) endif( ) endif( ) endif( ) if( NOT X11_XKB_RULES_DIR ) pkg_search_module( XKBCOMP xkbcomp ) if( XKBCOMP_FOUND ) execute_process( COMMAND ${PKG_CONFIG_EXECUTABLE} --variable=xkbconfigdir xkbcomp OUTPUT_VARIABLE KB_RULES_DIR OUTPUT_STRIP_TRAILING_WHITESPACE ) if( NOT "${KB_RULES_DIR}" STREQUAL "" ) string(REGEX REPLACE "/xkb$" "/" X11_XKB_RULES_DIR "${KB_RULES_DIR}" ) endif( ) endif( ) endif( ) if( NOT X11_XKB_RULES_DIR ) execute_process( COMMAND man -P cat setxkbmap OUTPUT_VARIABLE SETXKBMAP_OUTPUT OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_VARIABLE SETXKBMAP_OUTPUT ERROR_STRIP_TRAILING_WHITESPACE RESULT_VARIABLE SETXKBMAP_RC ) if( "${SETXKBMAP_RC}" STREQUAL "0" AND "${SETXKBMAP_OUTPUT}" MATCHES "\n.*FILES.*\n[^/]*(/[^\n]*/)xkb.*\n" ) if( EXISTS "${CMAKE_MATCH_1}xkb" ) set( X11_XKB_RULES_DIR "${CMAKE_MATCH_1}" ) endif( ) endif( ) endif( ) if( NOT X11_XKB_RULES_DIR ) execute_process( COMMAND ${PKG_CONFIG_EXECUTABLE} --variable=libdir xkbfile OUTPUT_VARIABLE KB_RULES_LIBDIR OUTPUT_STRIP_TRAILING_WHITESPACE ) execute_process( COMMAND ${PKG_CONFIG_EXECUTABLE} --variable=prefix xkbfile OUTPUT_VARIABLE KB_RULES_PREFIX OUTPUT_STRIP_TRAILING_WHITESPACE ) if( KB_RULES_LIBDIR AND KB_RULES_PREFIX ) find_file( RULES_FILE NAMES xorg xfree86 PATHS "${KB_RULES_PREFIX}/share/X11" "${KB_RULES_LIBDIR}/X11" PATH_SUFFIXES xkb/rules NO_DEFAULT_PATH ) if( RULES_FILE ) string( REGEX REPLACE "/xkb/rules/(xorg|xfree86)$" "/" X11_XKB_RULES_DIR "${RULES_FILE}" ) endif( ) endif( ) endif( ) if( X11_XKB_RULES_DIR ) if( NOT "${X11_XKB_RULES_DIR}" MATCHES "/$" ) set( X11_XKB_RULES_DIR "${X11_XKB_RULES_DIR}/" ) endif( ) message( STATUS "Adding ${X11_XKB_RULES_DIR} to XKb rules directory search" ) else( ) message( STATUS "No additional XKb rules directory found" ) endif( ) endif( )