1 SET(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/Modules)
6 # Using Phobos OR Tango (can be specified from cmake command line)
7 if (NOT CMAKE_D_USE_PHOBOS AND NOT CMAKE_D_USE_TANGO)
9 message(STATUS "This application can be built with either Phobos or Tango!")
10 message(STATUS "You did not specify a standard library -- defaulting to Phobos.")
11 message(STATUS "If you wish to use Tango add -DCMAKE_D_USE_TANGO=True to cmake command line.")
12 set(CMAKE_D_USE_PHOBOS True)
13 endif (NOT CMAKE_D_USE_PHOBOS AND NOT CMAKE_D_USE_TANGO)
15 INCLUDE(CMakeDetermineCCompiler)
19 ADD_DEFINITIONS(-DHAVE_CONFIG_H)
20 ADD_DEFINITIONS(-D_GNU_SOURCE)
21 INCLUDE_DIRECTORIES(${madmutt_BINARY_DIR} ${madmutt_SOURCE_DIR})
23 SET(BINDIR "${CMAKE_INSTALL_PREFIX}/bin")
24 SET(DATADIR "${CMAKE_INSTALL_PREFIX}/share")
25 SET(PKGDATADIR "${CMAKE_INSTALL_PREFIX}/share/madmutt")
26 SET(PKGDOCDIR "${CMAKE_INSTALL_PREFIX}/share/doc/madmutt")
27 SET(SYSCONFDIR "${CMAKE_INSTALL_PREFIX}/etc")
31 ADD_DEFINITIONS("-DBINDIR=\\\"${BINDIR}\\\"")
32 ADD_DEFINITIONS("-DPKGDATADIR=\\\"${PKGDATADIR}\\\"")
33 ADD_DEFINITIONS("-DPKGDOCDIR=\\\"${PKGDOCDIR}\\\"")
34 ADD_DEFINITIONS("-DSYSCONFDIR=\\\"${SYSCONFDIR}\\\"")
35 ADD_DEFINITIONS("-DVERSION=\\\"${VERSION}\\\"")
36 ADD_DEFINITIONS("-DMUTTLOCALEDIR=\\\"${DATADIR}/locale\\\"")
38 SET(MAILPATH CACHE STRING "Where new mail is spooled")
39 OPTION(WITH_GPGME "Use GPGME [default: on]" ON)
40 OPTION(WITH_IDN "Use GNU libidn for domain names [default: off]")
42 OPTION(USE_FLOCK "Use flock to lock files [default: off]")
43 OPTION(USE_FCNTL "Use fcntl to lock files [default: on]" ON)
44 OPTION(USE_HCACHE "Enable headers caching [default: off]")
46 FIND_FILE(SENDMAIL sendmail
47 PATHS /usr/sbin /sbin /usr/lib
48 DOC "path to sendmail executable"
53 SET(MAILPATH "/var/mail")
54 ELSEIF(EXISTS /var/spool/mail)
55 SET(MAILPATH "/var/spool/mail")
56 ELSEIF(EXISTS /usr/spool/mail)
57 SET(MAILPATH "/usr/spool/mail")
58 ELSEIF(EXISTS /usr/mail)
59 SET(MAILPATH "/usr/mail")
60 ELSE(EXISTS /var/mail)
61 MESSAGE(FATAL_ERROR "Unable to determine MAILPATH")
62 ENDIF(EXISTS /var/mail)
66 INCLUDE(CheckIncludeFile)
68 CHECK_INCLUDE_FILE(alloca.h HAVE_ALLOCA_H)
69 CHECK_INCLUDE_FILE(argz.h HAVE_ARGZ_H)
70 CHECK_INCLUDE_FILE(getopt.h HAVE_GETOPT_H)
71 CHECK_INCLUDE_FILE(iconv.h HAVE_ICONV_H)
72 CHECK_INCLUDE_FILE(inttypes.h HAVE_INTTYPES_H)
73 CHECK_INCLUDE_FILE(ioctl.h HAVE_IOCTL_H)
74 CHECK_INCLUDE_FILE(langinfo.h HAVE_LANGINFO_H)
75 CHECK_INCLUDE_FILE(limits.h HAVE_LIMITS_H)
76 CHECK_INCLUDE_FILE(locale.h HAVE_LOCALE_H)
77 CHECK_INCLUDE_FILE(memory.h HAVE_MEMORY_H)
78 CHECK_INCLUDE_FILE(ncursesw/ncurses.h HAVE_NCURSESW_NCURSES_H)
79 CHECK_INCLUDE_FILE(regex.h HAVE_REGEX_H)
80 CHECK_INCLUDE_FILE(stdarg.h HAVE_STDARG_H)
81 CHECK_INCLUDE_FILE(stddef.h HAVE_STDDEF_H)
82 CHECK_INCLUDE_FILE(stdint.h HAVE_STDINT_H)
83 CHECK_INCLUDE_FILE(stdlib.h HAVE_STDLIB_H)
84 CHECK_INCLUDE_FILE(string.h HAVE_STRING_H)
85 CHECK_INCLUDE_FILE(strings.h HAVE_STRINGS_H)
86 CHECK_INCLUDE_FILE(sysexits.h HAVE_SYSEXITS_H)
87 CHECK_INCLUDE_FILE(sys/ioctl.h HAVE_SYS_IOCTL_H)
88 CHECK_INCLUDE_FILE(sys/param.h HAVE_SYS_PARAM_H)
89 CHECK_INCLUDE_FILE(sys/resource.h HAVE_SYS_RESOURCE_H)
90 CHECK_INCLUDE_FILE(sys/stat.h HAVE_SYS_STAT_H)
91 CHECK_INCLUDE_FILE(sys/time.h HAVE_SYS_TIME_H)
92 CHECK_INCLUDE_FILE(sys/types.h HAVE_SYS_TYPES_H)
93 CHECK_INCLUDE_FILE(unistd.h HAVE_UNISTD_H)
94 CHECK_INCLUDE_FILE(unix.h HAVE_UNIX_H)
95 CHECK_INCLUDE_FILE(wchar.h HAVE_WCHAR_H)
96 CHECK_INCLUDE_FILE(wctype.h HAVE_WCTYPE_H)
99 MESSAGE(FATAL_ERROR "inconv.h not found")
100 ENDIF(NOT HAVE_ICONV_H)
105 INCLUDE(CheckStructMember)
107 CHECK_STRUCT_MEMBER("struct dirent" "d_ino" "dirent.h" HAVE_DIRENT_D_INO)
111 INCLUDE (CheckFunctionExists)
113 CHECK_FUNCTION_EXISTS(strlimit HAVE_SETRLIMIT)
114 CHECK_FUNCTION_EXISTS(getsid HAVE_GETSID)
115 CHECK_FUNCTION_EXISTS(setegid HAVE_SETEGID)
116 CHECK_FUNCTION_EXISTS(getopt HAVE_GETOPT)
117 CHECK_FUNCTION_EXISTS(nl_langinfo HAVE_LANGINFO_CODESET)
121 INCLUDE(CheckLibraryExists)
122 INCLUDE(FindPkgConfig)
124 FIND_LIBRARY(LIBUTIL NAMES util)
126 MESSAGE(FATAL_ERROR "could not find libutil")
128 LIST(APPEND MUTTLIBS -lutil)
130 FIND_LIBRARY(NCURSESW NAMES ncursesw)
131 IF(NOT NCURSESW OR NOT HAVE_NCURSESW_NCURSES_H)
132 MESSAGE(FATAL_ERROR "could not libncursesw")
133 ENDIF(NOT NCURSESW OR NOT HAVE_NCURSESW_NCURSES_H)
134 SET(CMAKE_REQUIRED_INCLUDES "ncursesw/ncurses.h")
135 LIST(APPEND MUTTLIBS -lncursesw)
137 pkg_search_module(LUA REQUIRED lua5.1)
138 ADD_DEFINITIONS(${LUA_CFLAGS})
139 LIST(APPEND MUTTLIBS ${LUA_LDFLAGS})
142 XCONFIG(gpgme-config gpgme_INCDIR gpgme_LINKDIR gpgme_LDFLAGS gpgme_CFLAGS)
143 INCLUDE_DIRECTORIES(${gpgme_INCDIR})
144 ADD_DEFINITIONS(${gpgme_CFLAGS})
145 LIST(APPEND MUTTLIBS ${gpgme_LDFLAGS})
149 XCONFIG(libgnutls-config gnutls_INCDIR gnutls_LINKDIR gnutls_LDFLAGS gnutls_CFLAGS)
150 INCLUDE_DIRECTORIES(${gnutls_INCDIR})
151 ADD_DEFINITIONS(${gnutls_CFLAGS})
152 CHECK_INCLUDE_FILE(gnutls/openssl.h HAVE_GNUTLS_OPENSSL_H)
153 LIST(APPEND MUTTLIBS ${gnutls_LDFLAGS})
155 CHECK_LIBRARY_EXISTS(sasl2 sasl_client_init "" WITH_SASL)
157 MESSAGE(FATAL_ERROR "sasl2 not found")
159 LIST(APPEND MUTTLIBS -lsasl2)
162 pkg_search_module(IDN REQUIRED libidn)
163 LIST(APPEND MUTTLIBS ${IDN_LDFLAGS})
167 CHECK_LIBRARY_EXISTS(lockfile lockfile_create "" WITH_LOCKFILE)
168 IF(NOT WITH_LOCKFILE)
169 MESSAGE(FATAL_ERROR "lockfile not found")
170 ENDIF(NOT WITH_LOCKFILE)
171 LIST(APPEND MUTTLIBS -llockfile)
174 OPTION(WITH_QDBM "Use qdbm for header caching [default: on]" ON)
175 OPTION(WITH_GDBM "Use gdbm for header caching [default: off]")
179 pkg_search_module(QDBM REQUIRED qdbm)
180 ADD_DEFINITIONS(${QDBM_CFLAGS})
181 SET(QDBM_LDFLAGS "${QDBM_LDFLAGS}")
182 # LIST(APPEND MUTTLIBS ${QDBM_LDFLAGS})
183 LIST(APPEND MUTTLIBS -lqdbm)
188 IF(NOT USE_HCACHE AND WITH_GDBM)
189 CHECK_LIBRARY_EXISTS(gdbm gdbm_open "" GDBM)
191 MESSAGE(FATAL_ERROR "gdbm not found")
193 LIST(APPEND MUTTLIBS -lgdbm)
196 ENDIF(NOT USE_HCACHE AND WITH_GDBM)
199 MESSAGE(FATAL_ERROR "no backend for header caching selected")
200 ENDIF(NOT USE_HCACHE)
206 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99 -ggdb3")
207 # Use pipes and not temp files.
208 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pipe")
210 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2")
211 # let the type char be unsigned by default
212 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -funsigned-char")
213 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstrict-aliasing")
214 # turn on all common warnings
215 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall")
216 # turn on extra warnings
217 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -W")
218 # treat warnings as errors
219 #SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror")
220 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wchar-subscripts")
221 # warn about undefined preprocessor identifiers
222 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wundef")
223 # warn about local variable shadowing another local variable
224 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wshadow")
225 # warn about casting of pointers to increased alignment requirements
226 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wcast-align")
227 # make string constants const
228 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wwrite-strings")
229 # warn about comparisons between signed and unsigned values
230 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wsign-compare")
231 # warn about unused declared stuff
232 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wunused")
233 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-parameter")
234 # warn about variable use before initialization
235 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wuninitialized")
236 # warn about variables which are initialized with themselves
237 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Winit-self")
238 # warn about pointer arithmetic on void* and function pointers
239 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wpointer-arith")
240 # warn about multiple declarations
241 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wredundant-decls")
242 # warn if the format string is not a string literal
243 #SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wformat-nonliteral")
244 # do not warn about zero-length formats.
245 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-format-zero-length")
247 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wmissing-prototypes")
248 # warn about functions without format attribute that should have one
249 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wmissing-format-attribute")
253 SET(CMAKE_D_FLAGS "${CMAKE_D_FLAGS} -ggdb3")
254 # Use pipes and not temp files.
255 SET(CMAKE_D_FLAGS "${CMAKE_D_FLAGS} -pipe")
257 SET(CMAKE_D_FLAGS "${CMAKE_D_FLAGS} -O2")
258 # let the type char be unsigned by default
259 SET(CMAKE_D_FLAGS "${CMAKE_D_FLAGS} -funsigned-char")
260 SET(CMAKE_D_FLAGS "${CMAKE_D_FLAGS} -fstrict-aliasing")
261 # turn on all common warnings
262 SET(CMAKE_D_FLAGS "${CMAKE_D_FLAGS} -Wall")
263 # turn on extra warnings
264 SET(CMAKE_D_FLAGS "${CMAKE_D_FLAGS} -W")
265 # treat warnings as errors
266 #SET(CMAKE_D_FLAGS "${CMAKE_D_FLAGS} -Werror")
267 # warn about local variable shadowing another local variable
268 SET(CMAKE_D_FLAGS "${CMAKE_D_FLAGS} -Wshadow")
269 # warn about casting of pointers to increased alignment requirements
270 SET(CMAKE_D_FLAGS "${CMAKE_D_FLAGS} -Wcast-align")
271 # warn about comparisons between signed and unsigned values
272 SET(CMAKE_D_FLAGS "${CMAKE_D_FLAGS} -Wsign-compare")
273 # warn about unused declared stuff
274 SET(CMAKE_D_FLAGS "${CMAKE_D_FLAGS} -Wunused")
275 SET(CMAKE_D_FLAGS "${CMAKE_D_FLAGS} -Wno-unused-parameter")
276 # warn about variable use before initialization
277 SET(CMAKE_D_FLAGS "${CMAKE_D_FLAGS} -Wuninitialized")
280 CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h)
282 # we generate some includes
283 ADD_SUBDIRECTORY(lib-lib)
284 ADD_SUBDIRECTORY(lib-mime)
285 ADD_SUBDIRECTORY(lib-sys)
286 ADD_SUBDIRECTORY(lib-ui)
287 ADD_SUBDIRECTORY(imap)
288 ADD_SUBDIRECTORY(lib-mx)
289 ADD_SUBDIRECTORY(lib-lua)
292 MADMUTT_SOURCES(madmuttsrc madmuttgen
330 STRING(REGEX REPLACE ";" " " MUTTLIBS "${MUTTLIBS}")
331 ADD_EXECUTABLE(madmutt ${madmuttsrc})
332 TARGET_LINK_LIBRARIES(madmutt mime sys mx lua ui imap lib)
333 SET_TARGET_PROPERTIES(madmutt PROPERTIES LINK_FLAGS "${MUTTLIBS}")
335 # generate_files hack {{{
338 OUTPUT ${madmutt_SOURCE_DIR}/keymap_defs.h
339 DEPENDS ${madmutt_SOURCE_DIR}/OPS ${madmutt_SOURCE_DIR}/tools/gen_defs
340 COMMAND ${madmutt_SOURCE_DIR}/tools/gen_defs ${madmutt_SOURCE_DIR}/OPS > ${madmutt_SOURCE_DIR}/keymap_defs.h
341 COMMENT "Generating ${madmutt_SOURCE_DIR}/keymap_defs.h from ${madmutt_SOURCE_DIR}/OPS"
344 OUTPUT ${madmutt_SOURCE_DIR}/charset.gperf
345 DEPENDS ${madmutt_SOURCE_DIR}/charset.def
346 COMMAND sh ${madmutt_SOURCE_DIR}/charset.def > ${madmutt_SOURCE_DIR}/charset.gperf
347 COMMENT "Generating ${madmutt_SOURCE_DIR}/charset.gperf from ${madmutt_SOURCE_DIR}/charset.def"
349 ADD_CUSTOM_TARGET(generate_file
350 DEPENDS ${madmuttgen}
351 ${madmutt_SOURCE_DIR}/keymap_defs.h
352 ${madmutt_SOURCE_DIR}/charset.gperf
354 ADD_DEPENDENCIES(generate_file generate_files)
355 ADD_DEPENDENCIES(madmutt generate_file)