PROJECT(initng)
SET(VERSION "0.6.3" CACHE STRING "Version number of the project")

IF(CMAKE_BACKWARDS_COMPATIBILITY LESS 2.2)
	MESSAGE(FATAL_ERROR "Error: Your CMake version is too old. This project requires version 2.2 or newer.")
ENDIF(CMAKE_BACKWARDS_COMPATIBILITY LESS 2.2)

SET(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)

ADD_DEFINITIONS(-DHAVE_CONFIG_H)
# Turn on warnings
ADD_DEFINITIONS(-Wall -Werror)

INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR})

# Colorize output, needs CMake > 2.3.4
OPTION(CMAKE_COLOR_MAKEFILE "Generate Makefiles with colored output" ON)

SET(CMAKE_INSTALL_PREFIX "" CACHE INTERNAL "")
#SET(INCLUDE_INSTALL_DIR /usr/include CACHE STRING "Install location for header files.")
#SET(SBIN_INSTALL_DIR /sbin CACHE STRING "Install location for binaries.")
#SET(LIB_INSTALL_DIR /lib CACHE STRING "Install location for libraries.")
#MARK_AS_ADVANCED(INCLUDE_INSTALL_DIR SBIN_INSTALL_DIR LIB_INSTALL_DIR)

INCLUDE(CheckIncludeFiles)
INCLUDE(CheckLibraryExists)
CHECK_INCLUDE_FILES(ncurses.h HAVE_NCURSES_H)
CHECK_LIBRARY_EXISTS(ncurses initscr "" HAVE_NCURSES)

INCLUDE(UsePkgConfig)
PKGCONFIG(dbus-1 DBUS_INCLUDE_DIR DBUS_LINK_DIR DBUS_LINK_FLAGS DBUS_CFLAGS)
SET(DBUS_DEFINITIONS ${DBUS_CFLAGS})
FIND_LIBRARY(DBUS_LIBS NAMES dbus-1 PATHS ${DBUS_LINK_DIR} /usr/lib /usr/local/lib)

SUBDIRS(src plugins tools devtool doc) 

CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/initng-paths.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/initng-paths.h)
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h)
INSTALL_FILES(/usr/include/initng/ FILES initng-paths.h)

OPTION(BUILD_ALSO "Build also plugin" ON)
OPTION(BUILD_BASH_LAUNCHER "Build bash_launcher plugin" ON)
OPTION(BUILD_CHDIR "Build chdir plugin" ON)
OPTION(BUILD_CHROOT "Build chroot plugin" ON)
OPTION(BUILD_CONFLICT "Build conflict plugin" ON)
OPTION(BUILD_CPOUT "Build cpout plugin" ON)
OPTION(BUILD_CRITICAL "Build critical plugin" ON)
OPTION(BUILD_CTRLALTDEL "Build ctrlaltdel plugin" ON)
OPTION(BUILD_DAEMON_CLEAN "Build daemon_clean plugin" OFF)
OPTION(BUILD_DBUS_EVENT "Build dbus_event plugin" OFF)
OPTION(BUILD_DEBUG_COMMANDS "Build debug_commands plugin" ON)
OPTION(BUILD_ENVPARSER "Build envparser plugin" ON)
OPTION(BUILD_FIND "Build find plugin" ON)
OPTION(BUILD_FSTAT "Build fstat plugin" ON)
OPTION(BUILD_HISTORY "Build history plugin" ON)
OPTION(BUILD_INITCTL "Build initctl plugin" ON)
OPTION(BUILD_INTERACTIVE "Build interactive plugin" ON)
OPTION(BUILD_IPARSER "Build iparser plugin" ON)
OPTION(BUILD_LAST "Build last plugin" ON)
OPTION(BUILD_LIMIT "Build limitplugin" ON)
OPTION(BUILD_LOGFILE "Build logfile plugin" ON)
OPTION(BUILD_LOCKFILE "Build lockfile plugin" ON)
OPTION(BUILD_NETPROBE "Build netprobe plugin" ON)
OPTION(BUILD_IDLEPROBE "Build idleprobe plugin" ON)
OPTION(BUILD_NGC4 "Build ngc4 plugin" ON)
OPTION(BUILD_NGCS "Build ngcs plugin" OFF)
OPTION(BUILD_NGE "Build nge plugin" ON)
OPTION(BUILD_PAUSE "Build pause plugin" ON)
OPTION(BUILD_RELOAD "Build reload plugin" ON)
OPTION(BUILD_RENICE "Build renice plugin" ON)
OPTION(BUILD_RLPARSER "Build rlparser plugin" ON)
OPTION(BUILD_SIMPLE_LAUNCHER "Build simple_launcher plugin" ON)
OPTION(BUILD_USPLASH "Build usplash plugin" OFF)
OPTION(BUILD_STCMD "Build stcmd plugin" ON)
OPTION(BUILD_STDOUT "Build stdout plugin" ON)
OPTION(BUILD_SUID "Build suid plugin" ON)
OPTION(BUILD_SYNCRON "Build syncron plugin" ON)
OPTION(BUILD_SYSLOG "Build syslog plugin" ON)
OPTION(BUILD_UNNEEDED "Build unneeded plugin" ON)
OPTION(INSTALL_AS_INIT "Install initng as replacement for sysvinit" OFF)
OPTION(DEBUG "Build with developer tools, turns on additional warnings and Werror" ON)
OPTION(SELINUX "Enable SELinux" OFF)
OPTION(WITH_BUSYBOX "Hacks to make initng work nice with busybox distros" OFF)
OPTION(COUNT_ME "Send a simple http reqest to initng server, with initng version data to count initng users out there" ON)


IF(DEBUG)
    CHECK_INCLUDE_FILES(google/coredumper.h HAVE_COREDUMPER_H)
    CHECK_LIBRARY_EXISTS(coredumper WriteCoreDump "" HAVE_COREDUMPER)

    IF(HAVE_COREDUMPER AND HAVE_COREDUMPER_H)
        ADD_DEFINITIONS(-DHAVE_COREDUMPER)
	SET(COREDUMPER_LIBS coredumper)
    ENDIF(HAVE_COREDUMPER AND HAVE_COREDUMPER_H)

    ADD_DEFINITIONS(-DDEBUG -g -Wmissing-prototypes -Wmissing-declarations -Wstrict-prototypes -Wimplicit -Wredundant-decls -Wnested-externs -Wwrite-strings -Wsign-compare -Winline -Wswitch -Wreturn-type -Wparentheses -Wmissing-braces -Wformat -Wformat-nonliteral -Wformat-security -Wsequence-point -Wundef -Wunused -Wcomment)
ENDIF(DEBUG)

IF(SELINUX OR SELINUXOLD) 
	CHECK_INCLUDE_FILES(/usr/include/selinux/selinux.h HAVE_SELINUX_H)
	IF(NOT HAVE_SELINUX_H)
		MESSAGE(SEND_ERROR "Could not find selinux header files")
	ELSE(NOT HAVE_SELINUX_H)
		FILE(READ /usr/include/selinux/selinux.h SELINUXAPI)
	ENDIF(NOT HAVE_SELINUX_H)
	IF(NOT SELINUXAPI MATCHES "selinux_init_load_policy")
		ADD_DEFINITIONS(-DOLDSELINUX)
	ENDIF(NOT SELINUXAPI MATCHES "selinux_init_load_policy")
	ADD_DEFINITIONS(-DSELINUX)
ENDIF(SELINUX OR SELINUXOLD) 

IF(COUNT_ME)
	EXEC_PROGRAM(${CMAKE_CURRENT_SOURCE_DIR}/count_me.sh)
ENDIF(COUNT_ME)

CONFIGURE_FILE(
	"${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in"
	"${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
	IMMEDIATE @ONLY)

ADD_CUSTOM_TARGET(uninstall
	"${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake")
	
