1
cmake_minimum_required(VERSION 2.2)
2
3
if(COMMAND cmake_policy)
4
	cmake_policy(SET CMP0003 NEW)
5
	cmake_policy(SET CMP0002 OLD)
6
endif(COMMAND cmake_policy)
7
8
9
INCLUDE(cmake/initng_module.cmake)
10
11
PROJECT(initng C)
12
13
SET(VERSION "0.7.0-svn" CACHE STRING "Version number of the project")
14
SET(VERSION_NAME "Bleeding Edge" CACHE STRING "Version string")
15
16
SET(API_VERSION 0.7)
17
18
SET(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
19
INCLUDE(CheckIncludeFiles)
20
INCLUDE(CheckLibraryExists)
21
INCLUDE(FindPkgConfig)
22
INCLUDE(CheckSymbolExists)
23
24
ADD_DEFINITIONS(-DHAVE_CONFIG_H)
25
# Turn on warnings
26
SET(CMAKE_C_FLAGS "-std=c99 -Wall -O2 -D_XOPEN_SOURCE=600 ${CMAKE_C_FLAGS}")
27
SET(MOD_CFLAGS "${CMAKE_C_FLAGS}")
28
SET(MOD_LDFLAGS "${CMAKE_LINK_FLAGS}")
29
30
INCLUDE_DIRECTORIES(
31
	${CMAKE_SOURCE_DIR}/include
32
	${CMAKE_BINARY_DIR}
33
)
34
35
# Colorize output, needs CMake > 2.3.4
36
OPTION(CMAKE_COLOR_MAKEFILE "Generate Makefiles with colored output" ON)
37
38
SET(CMAKE_INSTALL_PREFIX "" CACHE INTERNAL "")
39
SET(INCLUDE_INSTALL_DIR /usr/include/libinitng-${API_VERSION} CACHE STRING
40
	"Install location for header files.")
41
SET(SBIN_INSTALL_DIR /sbin CACHE STRING "Install location for system binaries.")
42
SET(BIN_INSTALL_DIR /bin CACHE STRING "Install location for binaries.")
43
SET(LIB_INSTALL_DIR /lib CACHE STRING "Install location for libraries.")
44
SET(SYSCONF_INSTALL_DIR /etc CACHE STRING "Install location for configuration files.")
45
SET(DATA_INSTALL_DIR /usr/share CACHE STRING "Install location for data files.")
46
SET(MAN_INSTALL_DIR ${DATA_INSTALL_DIR}/man CACHE STRING "Install location for manpages.")
47
SET(DOC_INSTALL_DIR ${DATA_INSTALL_DIR}/doc CACHE STRING "Install location for documentation.")
48
SET(PKGCONFIG_INSTALL_DIR /usr/lib/pkgconfig CACHE STRING "Install location for pkg-config files.")
49
MARK_AS_ADVANCED(INCLUDE_INSTALL_DIR)
50
MARK_AS_ADVANCED(SBIN_INSTALL_DIR)
51
MARK_AS_ADVANCED(BIN_INSTALL_DIR)
52
MARK_AS_ADVANCED(LIB_INSTALL_DIR)
53
MARK_AS_ADVANCED(SYSCONF_INSTALL_DIR)
54
MARK_AS_ADVANCED(DATA_INSTALL_DIR)
55
MARK_AS_ADVANCED(MAN_INSTALL_DIR)
56
MARK_AS_ADVANCED(DOC_INSTALL_DIR)
57
MARK_AS_ADVANCED(PKGCONFIG_INSTALL_DIR)
58
59
SET(RUNLEVEL_DEFAULT runlevel/default CACHE STRING "Default runlevel.")
60
MARK_AS_ADVANCED(RUNLEVEL_DEFAULT)
61
62
pkg_search_module(DBUS dbus-1)
63
SET(DBUS_DEFINITIONS ${DBUS_CFLAGS})
64
FIND_LIBRARY(DBUS_LIBS NAMES dbus-1 PATHS ${DBUS_LINK_DIR} /usr/lib /usr/local/lib)
65
66
SUBDIRS(
67
	doc
68
	extras
69
	core
70
	modules
71
	tools
72
	preinit
73
	include
74
)
75
76
OPTION(BUILD_ALSO "Build also module" ON)
77
OPTION(BUILD_SERVICE_FILE "Build service_file module" ON )
78
OPTION(BUILD_CHDIR "Build chdir module" ON)
79
OPTION(BUILD_CHROOT "Build chroot module" ON)
80
OPTION(BUILD_CONFLICT "Build conflict module" ON)
81
OPTION(BUILD_CPOUT "Build cpout module" ON)
82
OPTION(BUILD_CRITICAL "Build critical module" ON)
83
OPTION(BUILD_CTRLALTDEL "Build ctrlaltdel module" ON)
84
OPTION(BUILD_DAEMON_CLEAN "Build daemon_clean module" OFF)
85
OPTION(BUILD_DBUS_EVENT "Build dbus_event module" OFF)
86
OPTION(BUILD_DEBUG_COMMANDS "Build debug_commands module" ON)
87
OPTION(BUILD_TASK "Build task service type module" ON)
88
OPTION(BUILD_FMON "Build fmon module" ON)
89
OPTION(BUILD_FSTAT "Build fstat module" ON)
90
OPTION(BUILD_HISTORY "Build history module" OFF)
91
OPTION(BUILD_INITCTL "Build initctl module" ON)
92
OPTION(BUILD_INTERACTIVE "Build interactive module" ON)
93
OPTION(BUILD_LAST "Build last module" ON)
94
OPTION(BUILD_LIMIT "Build limit module" ON)
95
OPTION(BUILD_LOGFILE "Build logfile module" ON)
96
OPTION(BUILD_LOCKFILE "Build lockfile module" ON)
97
OPTION(BUILD_NETDEV "Build netdev module" ON)
98
OPTION(BUILD_IDLEPROBE "Build idleprobe module" ON)
99
OPTION(BUILD_NGC4 "Build ngc4 module" ON)
100
OPTION(BUILD_NGCS "Build ngcs module" OFF)
101
OPTION(BUILD_NGE "Build nge module" ON)
102
OPTION(BUILD_PAUSE "Build pause module" ON)
103
OPTION(BUILD_PROVIDE "Build provide module" ON)
104
OPTION(BUILD_RELOAD "Build reload module" ON)
105
OPTION(BUILD_RENICE "Build renice module" ON)
106
OPTION(BUILD_SIMPLE_LAUNCHER "Build simple_launcher module" ON)
107
OPTION(BUILD_STCMD "Build stcmd module" ON)
108
OPTION(BUILD_STDOUT "Build stdout module" ON)
109
OPTION(BUILD_SUID "Build suid module" ON)
110
OPTION(BUILD_SYNCRON "Build syncron module" ON)
111
OPTION(BUILD_SYSLOG "Build syslog module" ON)
112
OPTION(BUILD_SYSREQ "Build sysreq module" ON)
113
OPTION(BUILD_UNNEEDED "Build unneeded module" ON)
114
OPTION(BUILD_USPLASH "Build initng with usplash support" OFF)
115
116
OPTION(SELINUX_SUPPORT "SELinux support" OFF)
117
OPTION(INSTALL_AS_INIT "Install initng as complete replacement for SysVInit" OFF)
118
OPTION(DEBUG "Build with developer tools, turns on additional warnings and -Werror" OFF)
119
OPTION(CHECK_RO "Test if the / is mounted read-only before reboot/halt" ON)
120
OPTION(FORCE_NOCOLOR "Prevent cpout module from using colors" OFF)
121
OPTION(FORCE_POSIX_IFILES "Force POSIX compliance on ifiles" OFF)
122
OPTION(COUNT_ME "Send a simple http reqest to initng server, with initng version data to count initng users out there" OFF)
123
124
IF(SELINUX_SUPPORT)
125
	CHECK_INCLUDE_FILES(selinux/selinux.h HAVE_SELINUX_H)
126
	CHECK_LIBRARY_EXISTS(selinux selinux_init_load_policy "" HAVE_SELINUX)
127
	IF(HAVE_SELINUX_H AND HAVE_SELINUX)
128
		ADD_DEFINITIONS(-DSELINUX)
129
		SET(SELINUX_LIBS selinux)
130
	ELSE(HAVE_SELINUX_H AND HAVE_SELINUX)
131
		MESSAGE(SEND_ERROR "Could not find selinux development files. Install the selinux devel package.")
132
	ENDIF(HAVE_SELINUX_H AND HAVE_SELINUX)
133
ENDIF(SELINUX_SUPPORT)
134
135
IF(DEBUG)
136
	CHECK_INCLUDE_FILES(google/coredumper.h HAVE_COREDUMPER_H)
137
	CHECK_LIBRARY_EXISTS(coredumper WriteCoreDump "" HAVE_COREDUMPER)
138
139
	IF(HAVE_COREDUMPER AND HAVE_COREDUMPER_H)
140
        	ADD_DEFINITIONS(-DHAVE_COREDUMPER)
141
		SET(COREDUMPER_LIBS coredumper)
142
	ENDIF(HAVE_COREDUMPER AND HAVE_COREDUMPER_H)
143
144
	SET(CMAKE_C_FLAGS "-DDEBUG -g -Werror -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 ${CMAKE_C_FLAGS}")
145
ENDIF(DEBUG)
146
147
IF(COUNT_ME)
148
	EXEC_PROGRAM(${CMAKE_CURRENT_SOURCE_DIR}/count_me.sh)
149
ENDIF(COUNT_ME)
150
151
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/initng.pc.in
152
	       ${CMAKE_CURRENT_BINARY_DIR}/initng-${API_VERSION}.pc
153
	       @ONLY)
154
INSTALL_FILES(${PKGCONFIG_INSTALL_DIR} FILES initng-${API_VERSION}.pc)
155
156
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/initng-paths.h.in
157
	       ${CMAKE_CURRENT_BINARY_DIR}/initng-paths.h @ONLY)
158
INSTALL_FILES(${INCLUDE_INSTALL_DIR} FILES initng-paths.h)
159
160
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/config.h.in
161
               ${CMAKE_CURRENT_BINARY_DIR}/config.h @ONLY)
162
CONFIGURE_FILE(
163
	"${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in"
164
	"${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
165
	IMMEDIATE @ONLY)
166
167
ADD_CUSTOM_TARGET(uninstall
168
	"${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake")