3 SET(CMAKE_MODULE_PATH ${madmutt_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH})
7 # DOTLOCK_{GROUP,PERMISSION}
12 INCLUDE(CMakeDetermineCCompiler)
16 ADD_DEFINITIONS(-DHAVE_CONFIG_H)
17 ADD_DEFINITIONS(-D_GNU_SOURCE)
18 INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR} ${madmutt_SOURCE_DIR})
20 SET(BINDIR "${CMAKE_INSTALL_PREFIX}/bin")
21 SET(DATADIR "${CMAKE_INSTALL_PREFIX}/share")
22 SET(PKGDATADIR "${CMAKE_INSTALL_PREFIX}/share/madmutt")
23 SET(PKGDOCDIR "${CMAKE_INSTALL_PREFIX}/share/doc/madmutt")
24 SET(SYSCONFDIR "${CMAKE_INSTALL_PREFIX}/etc")
28 ADD_DEFINITIONS("-DBINDIR=\\\"${BINDIR}\\\"")
29 ADD_DEFINITIONS("-DPKGDATADIR=\\\"${PKGDATADIR}\\\"")
30 ADD_DEFINITIONS("-DPKGDOCDIR=\\\"${PKGDOCDIR}\\\"")
31 ADD_DEFINITIONS("-DSYSCONFDIR=\\\"${SYSCONFDIR}\\\"")
32 ADD_DEFINITIONS("-DVERSION=\\\"${VERSION}\\\"")
33 ADD_DEFINITIONS("-DMUTTLOCALEDIR=\\\"${DATADIR}/locale\\\"")
35 SET(MAILPATH CACHE STRING "Where new mail is spooled")
36 OPTION(WITH_GPGME "Use GPGME [default: on]" ON)
37 OPTION(WITH_NNTP "Build NNTP support [default: off]")
38 OPTION(WITH_IDN "Use GNU libidn for domain names [default: off]")
39 OPTION(WITH_LIBESMTP "Use libESMTP [default: off]")
40 OPTION(WITH_SLANG "Use S-Lang instead of ncurses [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"
50 FIND_FILE(MIXMASTER mixmaster DOC "path to mixmaster")
52 SET(MIXMASTER "mixmaster")
57 SET(MAILPATH "/var/mail")
58 ELSEIF(EXISTS /var/spool/mail)
59 SET(MAILPATH "/var/spool/mail")
60 ELSEIF(EXISTS /usr/spool/mail)
61 SET(MAILPATH "/usr/spool/mail")
62 ELSEIF(EXISTS /usr/mail)
63 SET(MAILPATH "/usr/mail")
64 ELSE(EXISTS /var/mail)
65 MESSAGE(FATAL_ERROR "Unable to determine MAILPATH")
66 ENDIF(EXISTS /var/mail)
70 INCLUDE(CheckIncludeFile)
72 CHECK_INCLUDE_FILE(alloca.h HAVE_ALLOCA_H)
73 CHECK_INCLUDE_FILE(argz.h HAVE_ARGZ_H)
74 CHECK_INCLUDE_FILE(getopt.h HAVE_GETOPT_H)
75 CHECK_INCLUDE_FILE(iconv.h HAVE_ICONV_H)
76 CHECK_INCLUDE_FILE(inttypes.h HAVE_INTTYPES_H)
77 CHECK_INCLUDE_FILE(ioctl.h HAVE_IOCTL_H)
78 CHECK_INCLUDE_FILE(langinfo.h HAVE_LANGINFO_H)
79 CHECK_INCLUDE_FILE(limits.h HAVE_LIMITS_H)
80 CHECK_INCLUDE_FILE(locale.h HAVE_LOCALE_H)
81 CHECK_INCLUDE_FILE(memory.h HAVE_MEMORY_H)
82 CHECK_INCLUDE_FILE(ncurses.h HAVE_NCURSES_H)
83 CHECK_INCLUDE_FILE(ncurses/ncurses.h HAVE_NCURSES_NCURSES_H)
84 CHECK_INCLUDE_FILE(ncursesw/ncurses.h HAVE_NCURSESW_NCURSES_H)
85 CHECK_INCLUDE_FILE(regex.h HAVE_REGEX_H)
86 CHECK_INCLUDE_FILE(stdarg.h HAVE_STDARG_H)
87 CHECK_INCLUDE_FILE(stddef.h HAVE_STDDEF_H)
88 CHECK_INCLUDE_FILE(stdint.h HAVE_STDINT_H)
89 CHECK_INCLUDE_FILE(stdlib.h HAVE_STDLIB_H)
90 CHECK_INCLUDE_FILE(string.h HAVE_STRING_H)
91 CHECK_INCLUDE_FILE(strings.h HAVE_STRINGS_H)
92 CHECK_INCLUDE_FILE(sysexits.h HAVE_SYSEXITS_H)
93 CHECK_INCLUDE_FILE(sys/ioctl.h HAVE_SYS_IOCTL_H)
94 CHECK_INCLUDE_FILE(sys/param.h HAVE_SYS_PARAM_H)
95 CHECK_INCLUDE_FILE(sys/resource.h HAVE_SYS_RESOURCE_H)
96 CHECK_INCLUDE_FILE(sys/stat.h HAVE_SYS_STAT_H)
97 CHECK_INCLUDE_FILE(sys/time.h HAVE_SYS_TIME_H)
98 CHECK_INCLUDE_FILE(sys/types.h HAVE_SYS_TYPES_H)
99 CHECK_INCLUDE_FILE(unistd.h HAVE_UNISTD_H)
100 CHECK_INCLUDE_FILE(unix.h HAVE_UNIX_H)
101 CHECK_INCLUDE_FILE(wchar.h HAVE_WCHAR_H)
102 CHECK_INCLUDE_FILE(wctype.h HAVE_WCTYPE_H)
105 MESSAGE(FATAL_ERROR "inconv.h not found")
106 ENDIF(NOT HAVE_ICONV_H)
111 INCLUDE(CheckStructMember)
113 CHECK_STRUCT_MEMBER("struct dirent" "d_ino" "dirent.h" HAVE_DIRENT_D_INO)
117 INCLUDE (CheckFunctionExists)
119 CHECK_FUNCTION_EXISTS(strlimit HAVE_SETRLIMIT)
120 CHECK_FUNCTION_EXISTS(getsid HAVE_GETSID)
121 CHECK_FUNCTION_EXISTS(setegid HAVE_SETEGID)
122 CHECK_FUNCTION_EXISTS(isctype HAVE_ISCTYPE)
123 CHECK_FUNCTION_EXISTS(getopt HAVE_GETOPT)
124 CHECK_FUNCTION_EXISTS(regcomp HAVE_REGCOMP)
125 CHECK_FUNCTION_EXISTS(iswalnum HAVE_ISWALNUM)
126 CHECK_FUNCTION_EXISTS(iswalpha HAVE_ISWALPHA)
127 CHECK_FUNCTION_EXISTS(iswcntrl HAVE_ISWCNTRL)
128 CHECK_FUNCTION_EXISTS(iswdigit HAVE_ISWDIGIT)
129 CHECK_FUNCTION_EXISTS(iswgraph HAVE_ISWGRAPH)
130 CHECK_FUNCTION_EXISTS(iswlower HAVE_ISWLOWER)
131 CHECK_FUNCTION_EXISTS(iswprint HAVE_ISWPRINT)
132 CHECK_FUNCTION_EXISTS(iswpunct HAVE_ISWPUNCT)
133 CHECK_FUNCTION_EXISTS(iswspace HAVE_ISWSPACE)
134 CHECK_FUNCTION_EXISTS(iswupper HAVE_ISWUPPER)
135 CHECK_FUNCTION_EXISTS(iswxdigit HAVE_ISWXDIGIT)
136 CHECK_FUNCTION_EXISTS(towupper HAVE_TOWUPPER)
137 CHECK_FUNCTION_EXISTS(towlower HAVE_TOWLOWER)
138 CHECK_FUNCTION_EXISTS(nl_langinfo HAVE_LANGINFO_CODESET)
142 INCLUDE(CheckLibraryExists)
143 INCLUDE(UsePkgConfig)
146 IF(EXISTS ${CMAKE_INSTALL_PREFIX}/include/slang)
147 INCLUDE_DIRECTORIES(${CMAKE_INSTALL_PREFIX}/include/slang)
148 ELSEIF(EXISTS /usr/include/slang)
149 INCLUDE_DIRECTORIES(/usr/include/slang)
150 ENDIF(EXISTS ${CMAKE_INSTALL_PREFIX}/include/slang)
151 CHECK_LIBRARY_EXISTS(slang SLtt_get_terminfo "" USE_SLANG_CURSES)
152 IF(NOT USE_SLANG_CURSES)
153 MESSAGE(FATAL_ERROR "s-lang not found")
154 ENDIF(NOT USE_SLANG_CURSES)
156 IF(HAVE_NCURSESW_NCURSES_H)
157 SET(CMAKE_REQUIRED_INCLUDES "ncursesw/ncurses.h")
158 SET(MUTTLIBS "${MUTTLIBS} -lncursesw")
159 ELSEIF(HAVE_NCURSES_H)
160 SET(CMAKE_REQUIRED_INCLUDES "ncurses.h")
161 SET(MUTTLIBS "${MUTTLIBS} -lncurses")
162 ELSEIF(HAVE_NCURSES_H OR HAVE_NCURSES_NCURSES_H)
163 SET(CMAKE_REQUIRED_INCLUDES "ncurses/ncurses.h")
164 SET(MUTTLIBS "${MUTTLIBS} -lncurses")
165 ELSE(HAVE_NCURSESW_NCURSES_H)
166 MESSAGE(FATAL_ERROR "could not find ncurses.h")
167 ENDIF(HAVE_NCURSESW_NCURSES_H)
168 SET(CMAKE_REQUIRED_LIBRARIES ${MUTTLIBS})
169 CHECK_FUNCTION_EXISTS(start_color HAVE_START_COLOR)
170 CHECK_FUNCTION_EXISTS(typeahead HAVE_TYPEAHEAD)
171 CHECK_FUNCTION_EXISTS(bkgdset HAVE_BKGDSET)
172 CHECK_FUNCTION_EXISTS(curs_set HAVE_CURS_SET)
173 CHECK_FUNCTION_EXISTS(meta HAVE_META)
174 CHECK_FUNCTION_EXISTS(use_default_colors HAVE_USE_DEFAULT_COLORS)
175 CHECK_FUNCTION_EXISTS(resizeterm HAVE_RESIZETERM)
176 SET(CMAKE_REQUIRED_LIBRARIES)
177 SET(CMAKE_REQUIRED_INCLUDES)
180 PKGCONFIG(lua5.1 lua_INCDIR lua_LINKDIR lua_LDFLAGS lua_CFLAGS)
181 MESSAGE(STATUS "found lua5.1 at: INCDIR ${lua_INCDIR}")
182 INCLUDE_DIRECTORIES(${lua_INCDIR})
183 ADD_DEFINITIONS(${lua_CFLAGS})
184 SET(MUTTLIBS "${MUTTLIBS} ${lua_LDFLAGS}")
187 XCONFIG(gpgme-config gpgme_INCDIR gpgme_LINKDIR gpgme_LDFLAGS gpgme_CFLAGS)
188 INCLUDE_DIRECTORIES(${gpgme_INCDIR})
189 ADD_DEFINITIONS(${gpgme_CFLAGS})
190 SET(MUTTLIBS "${MUTTLIBS} ${gpgme_LDFLAGS}")
194 XCONFIG(libgnutls-config gnutls_INCDIR gnutls_LINKDIR gnutls_LDFLAGS gnutls_CFLAGS)
195 INCLUDE_DIRECTORIES(${gnutls_INCDIR})
196 ADD_DEFINITIONS(${gnutls_CFLAGS})
197 SET(MUTTLIBS "${MUTTLIBS} ${gnutls_LDFLAGS}")
199 CHECK_LIBRARY_EXISTS(sasl2 sasl_client_init "" WITH_SASL)
201 MESSAGE(FATAL_ERROR "sasl2 not found")
203 SET(MUTTLIBS "${MUTTLIBS} -lsasl2")
206 PKGCONFIG(libidn idn_INCDIR idn_LINKDIR idn_LDFLAGS idn_CFLAGS)
207 SET(MUTTLIBS "${MUTTLIBS} ${idn_LDFLAGS}")
212 OPTION(WITH_QDBM "Use qdbm for header caching [default: on]" ON)
213 OPTION(WITH_GDBM "Use gdbm for header caching [default: off]")
217 PKGCONFIG(qdbm qdbm_INCDIR qdbm_LINKDIR qdbm_LDFLAGS qdbm_CFLAGS)
219 MESSAGE(STATUS "qdbm found")
221 MESSAGE(FATAL_ERROR "qdbm not found")
223 INCLUDE_DIRECTORIES(${qdbm_INCDIR})
224 ADD_DEFINITIONS(${qdbm_CFLAGS})
225 SET(MUTTLIBS "${MUTTLIBS} ${qdbm_LDFLAGS}")
230 IF(NOT USE_HCACHE AND WITH_GDBM)
231 CHECK_LIBRARY_EXISTS(gdbm gdbm_open "" GDBM)
233 MESSAGE(FATAL_ERROR "gdbm not found")
235 SET(MUTTLIBS "${MUTTLIBS} -lgdbm")
238 ENDIF(NOT USE_HCACHE AND WITH_GDBM)
241 MESSAGE(FATAL_ERROR "no backend for header caching selected")
242 ENDIF(NOT USE_HCACHE)
247 SET(MUTTLIBS "${MUTTLIBS} -lesmtp")
250 IF(WITH_NNTP AND NOT USE_NNTP)
252 MESSAGE(STATUS "building NNTP support")
253 ENDIF(WITH_NNTP AND NOT USE_NNTP)
258 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99 -ggdb3")
259 # Use pipes and not temp files.
260 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pipe")
262 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2")
263 # let the type char be unsigned by default
264 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -funsigned-char")
265 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstrict-aliasing")
266 # turn on all common warnings
267 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall")
268 # turn on extra warnings
269 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -W")
270 # treat warnings as errors
271 #SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror")
272 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wchar-subscripts")
273 # warn about undefined preprocessor identifiers
274 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wundef")
275 # warn about local variable shadowing another local variable
276 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wshadow")
277 # warn about casting of pointers to increased alignment requirements
278 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wcast-align")
279 # make string constants const
280 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wwrite-strings")
281 # warn about comparisons between signed and unsigned values
282 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wsign-compare")
283 # warn about unused declared stuff
284 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wunused")
285 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-parameter")
286 # warn about variable use before initialization
287 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wuninitialized")
288 # warn about variables which are initialized with themselves
289 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Winit-self")
290 # warn about pointer arithmetic on void* and function pointers
291 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wpointer-arith")
292 # warn about multiple declarations
293 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wredundant-decls")
294 # warn if the format string is not a string literal
295 #SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wformat-nonliteral")
296 # do not warn about zero-length formats.
297 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-format-zero-length")
299 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wmissing-prototypes")
300 # warn about functions without format attribute that should have one
301 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wmissing-format-attribute")
304 CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h)
306 # we generate some includes
307 ADD_SUBDIRECTORY(lib-lib)
308 ADD_SUBDIRECTORY(lib-mime)
309 ADD_SUBDIRECTORY(lib-sys)
310 ADD_SUBDIRECTORY(lib-ui)
311 ADD_SUBDIRECTORY(imap)
313 ADD_SUBDIRECTORY(nntp)
315 ADD_SUBDIRECTORY(lib-mx)
316 ADD_SUBDIRECTORY(lib-lua)
318 MADMUTT_SOURCES(madmuttsrc madmuttgen
361 ADD_EXECUTABLE(madmutt ${madmuttsrc})
363 TARGET_LINK_LIBRARIES(madmutt mime sys mx lua imap nntp ui lib)
365 TARGET_LINK_LIBRARIES(madmutt mime sys mx lua imap ui lib)
367 SET_TARGET_PROPERTIES(madmutt PROPERTIES LINK_FLAGS ${MUTTLIBS})
369 ADD_EXECUTABLE(madmutt_dotlock dotlock.c)
370 TARGET_LINK_LIBRARIES(madmutt_dotlock lib)
372 # generate_files hack {{{
375 OUTPUT ${madmutt_SOURCE_DIR}/keymap_defs.h
376 DEPENDS ${madmutt_SOURCE_DIR}/OPS ${madmutt_SOURCE_DIR}/gen_defs
377 COMMAND ${madmutt_SOURCE_DIR}/gen_defs ${madmutt_SOURCE_DIR}/OPS > ${madmutt_SOURCE_DIR}/keymap_defs.h
378 COMMENT "Generating ${madmutt_SOURCE_DIR}/keymap_defs.h from ${madmutt_SOURCE_DIR}/OPS"
381 OUTPUT ${madmutt_SOURCE_DIR}/charset.gperf
382 DEPENDS ${madmutt_SOURCE_DIR}/charset.def
383 COMMAND sh ${madmutt_SOURCE_DIR}/charset.def > ${madmutt_SOURCE_DIR}/charset.gperf
384 COMMENT "Generating ${madmutt_SOURCE_DIR}/charset.gperf from ${madmutt_SOURCE_DIR}/charset.def"
386 SET(__mt ${madmutt_SOURCE_DIR}/lib-mime/mime-token)
389 MAIN_DEPENDENCY ${__mt}.sh ${__mt}.def
390 COMMAND sh ${__mt}.sh ${__mt}.h < ${__mt}.def
391 COMMENT "Generating ${__mt}.h from ${__mt}.def"
393 SET(__lt ${madmutt_SOURCE_DIR}/lib-lua/lua-token)
396 MAIN_DEPENDENCY ${__lt}.gperf
397 COMMAND sh ${__lt}.gperf ${__lt}.h || \(${RM} ${__lt}.h; exit 1\)
398 COMMENT "Generating ${__lt}.h from ${__lt}.gperf"
400 SET(__lm ${madmutt_SOURCE_DIR}/lib-lua/madmutt)
403 MAIN_DEPENDENCY ${__lm}.cpkg
404 COMMAND ${madmutt_SOURCE_DIR}/tools/cpkg2c -h ${__lm}.cpkg > ${__lm}.li || \(${RM} ${__lm}.li; exit 1\)
405 COMMENT "Generating ${__lm}.li from ${__lm}.cpkg"
411 ${madmutt_SOURCE_DIR}/keymap_defs.h
412 ${madmutt_SOURCE_DIR}/charset.gperf
413 ${madmutt_SOURCE_DIR}/lib-mime/mime-token.h
414 ${madmutt_SOURCE_DIR}/lib-lua/lua-token.h
415 ${madmutt_SOURCE_DIR}/lib-lua/madmutt.li
417 ADD_DEPENDENCIES(madmutt generate_files)