summarylogtreecommitdiffstats
path: root/CMakeLists.txt
blob: 3c45c62f24a042272c3320539d1b0deaea11307f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
project (epos)
cmake_minimum_required (VERSION 2.6)

set (COMPILE_FLAGS 
	"-Wall" "-Wunused" "-pipe" "-gstabs+" "-fdefer-pop")

#option (WANT_DMALLOC "dmalloc debugging library" OFF)
option (FORGET_CHARSETS "Do not allow automatic conversions between character sets" OFF)

include (CheckIncludeFile)
CHECK_INCLUDE_FILE ("strings.h" HAVE_STRINGS_H)
CHECK_INCLUDE_FILE ("string.h" HAVE_STRING_H)
CHECK_INCLUDE_FILE ("io.h" HAVE_IO_H)
CHECK_INCLUDE_FILE ("rx.h" HAVE_RX_H)
CHECK_INCLUDE_FILE ("regex.h" HAVE_REGEX_H)
CHECK_INCLUDE_FILE ("errno.h" HAVE_ERRNO_H)
CHECK_INCLUDE_FILE ("wait.h" HAVE_WAIT_H)
CHECK_INCLUDE_FILE ("unistd.h" HAVE_UNISTD_H)
CHECK_INCLUDE_FILE ("unix.h" HAVE_UNIX_H)
CHECK_INCLUDE_FILE ("signal.h" HAVE_SIGNAL_H)
CHECK_INCLUDE_FILE ("syslog.h" HAVE_SYSLOG_H)
CHECK_INCLUDE_FILE ("time.h" HAVE_TIME_H)
CHECK_INCLUDE_FILE ("sys/soundcard.h" HAVE_SYS_SOUNDCARD_H)
CHECK_INCLUDE_FILE ("sys/audio.h" HAVE_SYS_AUDIO_H)
CHECK_INCLUDE_FILE ("sys/stat.h" HAVE_SYS_STAT_H)
CHECK_INCLUDE_FILE ("sys/ioctl.h" HAVE_SYS_IOCTL_H)
CHECK_INCLUDE_FILE ("sys/socket.h" HAVE_SYS_SOCKET_H)
CHECK_INCLUDE_FILE ("sys/select.h" HAVE_SYS_SELECT_H)
CHECK_INCLUDE_FILE ("sys/time.h" HAVE_SYS_TIME_H)
CHECK_INCLUDE_FILE ("sys/types.h" HAVE_SYS_TYPES_H)
CHECK_INCLUDE_FILE ("sys/termios.h" HAVE_SYS_TERMIOS_H)
CHECK_INCLUDE_FILE ("netdb.h" HAVE_NETDB_H)
CHECK_INCLUDE_FILE ("netinet/in.h" HAVE_NETINET_IN_H)
CHECK_INCLUDE_FILE ("linux/kd.h" HAVE_LINUX_KD_H)
CHECK_INCLUDE_FILE ("sys/kernel.h" HAVE_SYS_KERNEL_H)
CHECK_INCLUDE_FILE ("sys/name.h" HAVE_SYS_NAME_H)
CHECK_INCLUDE_FILE ("fcntl.h" HAVE_FCNTL_H)

include (CheckFunctionExists)
CHECK_FUNCTION_EXISTS ("strerror" HAVE_STRERROR)
CHECK_FUNCTION_EXISTS ("strdup" HAVE_STRDUP)
CHECK_FUNCTION_EXISTS ("fork" HAVE_FORK)
CHECK_FUNCTION_EXISTS ("getegid" HAVE_GETEGID)
CHECK_FUNCTION_EXISTS ("strcasecmp" HAVE_STRCASECMP)
CHECK_FUNCTION_EXISTS ("stricmp" HAVE_STRICMP)
CHECK_FUNCTION_EXISTS ("gethostname" HAVE_GETHOSTNAME)
CHECK_FUNCTION_EXISTS ("gettimeofday" HAVE_GETTIMEOFDAY)
CHECK_FUNCTION_EXISTS ("qnx_name_attach" HAVE_QNX_NAME_ATTACH)
CHECK_FUNCTION_EXISTS ("abort" HAVE_ABORT)

include (CheckLibraryExists)
CHECK_LIBRARY_EXISTS (socket main "${CMAKE_SYSTEM_LIBRARY_PATH}" HAVE_LIBSOCKET)
CHECK_LIBRARY_EXISTS (lnsl main "${CMAKE_SYSTEM_LIBRARY_PATH}" HAVE_LIBLNSL)

include (CheckCXXSourceCompiles)

CHECK_CXX_SOURCE_COMPILES (
"int main () {bool b; return 0;}"
HAVE_BOOL)

if (HAVE_SYS_SOCKET_H)
	set (_sockethdr "<sys/socket.h>")
else (HAVE_SYS_SOCKET_H)
	set (_sockethdr "<sys/types.h>")
endif (HAVE_SYS_SOCKET_H)

CHECK_CXX_SOURCE_COMPILES (
"#include ${_sockethdr}
socklen_t x;
int main () {return 0;}"
HAVE_SOCKLEN_T)

if (HAVE_RX_H)
	set (_regexhdr "<rx.h>")
elseif (HAVE_REGEX_H)
	set (_regexhdr "<regex.h>")
else (HAVE_RX_H)
	set (_regexhdr "\"rx.h\"")
endif (HAVE_RX_H)

CHECK_CXX_SOURCE_COMPILES (
"#include <sys/types.h>
#include ${_regexhdr}
int main () {int result = REG_EEND; return 0;}"
HAVE_REG_EEND)

CHECK_CXX_SOURCE_COMPILES (
"#include <sys/types.h>
#include ${_regexhdr}
int main () {regmatch_t rt; rt.rm_so; return 0;}"
HAVE_RM_SO)

CHECK_CXX_SOURCE_COMPILES (
"template <class any_type> class some_type{}; template class some_type<int>;
int main () {return 0;}"
HAVE_TEMPL_INST)

include (CheckCXXSourceRuns)

CHECK_CXX_SOURCE_RUNS (
"extern \"C\" void exit(int);
enum t { a, b, c };
struct s {
	t m : 2;
	t n : 2;
	t o : 2;
} arr[2] = {{a, b, c},{c, c, c}};
int main () {exit (arr[1].n == 2);}"
BROKEN_ENUM_BITFIELDS)

configure_file ("${epos_SOURCE_DIR}/config.h.in" "${epos_BINARY_DIR}/config.h")
include_directories ("${epos_BINARY_DIR}")

set (epos_HEADERS
	src/common.h src/defaults.h
	src/unit.h src/parser.h
	src/rule.h src/text.h
	src/encoding.h src/interf.h
	src/function.h src/options.h
	src/hash.h src/synth.h
	src/voice.h src/exc.h)
list (APPEND epos_HEADERS
	src/waveform.h src/ktdsyn.h
	src/ptdsyn.h src/lpcsyn.h
	src/tdpsyn.h src/tcpsyn.h
	src/slab.h src/rx.h
	src/client.h src/agent.h
# If these didn't have this stupid extension,
# they could be here. CMake sees them
# as files to compile, not headers.
#	src/nnet.cc src/block.cc src/exc.cc
	src/options.lst)

set (epos_MODULES_SOURCES
	src/parser.cc src/unit.cc src/rule.cc
	src/text.cc src/encoding.cc
	src/interf.cc src/function.cc
	src/options.cc src/synth.cc src/ktdsyn.cc
	src/ptdsyn.cc src/lpcsyn.cc src/tdpsyn.cc
	src/tcpsyn.cc src/voice.cc src/waveform.cc)

set (epos_EPOS_SOURCES
	${epos_MODULES_SOURCES}
	src/hashd.cc src/daemon.cc src/agent.cc
	src/ttscp.cc src/nonblock.cc src/client.cc)
set (epos_EPOSM_SOURCES
	${epos_MODULES_SOURCES}
	src/monolith.cc src/hash.cc src/client.cc)

if (WIN32)
	set (epos_PLATFORM_SOURCES
		src/rx.c)
	list (APPEND epos_EPOS_SOURCES
		arch/win/service/service.cpp
		arch/win/service/service.h)
endif (WIN32)

add_definitions ("-DBASE_DIR=${CMAKE_INSTALL_PREFIX}/lib/epos")

add_executable (epos ${epos_EPOS_SOURCES} ${epos_PLATFORM_SOURCES} ${epos_HEADERS})
add_executable (eposm EXCLUDE_FROM_ALL ${epos_EPOSM_SOURCES} ${epos_PLATFORM_SOURCES} ${epos_HEADERS})
target_link_libraries (epos pulse-simple pulse)

add_executable (say src/say.cc ${epos_HEADERS})
add_executable (vrfy src/vrfy.cc)
add_executable (gauge src/gauge.cc ${epos_HEADERS})

install (TARGETS epos say vrfy gauge RUNTIME DESTINATION bin)
install (DIRECTORY cfg/ DESTINATION lib/epos)
install (DIRECTORY doc DESTINATION lib/epos)