3 SET(CMAKE_MODULE_PATH ${madmutt_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH})
9 INCLUDE(CMakeDetermineCCompiler)
13 ADD_DEFINITIONS(-DHAVE_CONFIG_H)
14 ADD_DEFINITIONS(-D_GNU_SOURCE)
15 INCLUDE_DIRECTORIES(${madmutt_BINARY_DIR} ${madmutt_SOURCE_DIR})
17 SET(BINDIR "${CMAKE_INSTALL_PREFIX}/bin")
18 SET(DATADIR "${CMAKE_INSTALL_PREFIX}/share")
19 SET(PKGDATADIR "${CMAKE_INSTALL_PREFIX}/share/madmutt")
20 SET(PKGDOCDIR "${CMAKE_INSTALL_PREFIX}/share/doc/madmutt")
21 SET(SYSCONFDIR "${CMAKE_INSTALL_PREFIX}/etc")
25 ADD_DEFINITIONS("-DBINDIR=\\\"${BINDIR}\\\"")
26 ADD_DEFINITIONS("-DPKGDATADIR=\\\"${PKGDATADIR}\\\"")
27 ADD_DEFINITIONS("-DPKGDOCDIR=\\\"${PKGDOCDIR}\\\"")
28 ADD_DEFINITIONS("-DSYSCONFDIR=\\\"${SYSCONFDIR}\\\"")
29 ADD_DEFINITIONS("-DVERSION=\\\"${VERSION}\\\"")
30 ADD_DEFINITIONS("-DMUTTLOCALEDIR=\\\"${DATADIR}/locale\\\"")
32 SET(MAILPATH CACHE STRING "Where new mail is spooled")
33 OPTION(WITH_GPGME "Use GPGME [default: on]" ON)
34 OPTION(WITH_NNTP "Build NNTP support [default: off]")
35 OPTION(WITH_IDN "Use GNU libidn for domain names [default: off]")
37 OPTION(USE_FLOCK "Use flock to lock files [default: off]")
38 OPTION(USE_FCNTL "Use fcntl to lock files [default: on]" ON)
39 OPTION(USE_HCACHE "Enable headers caching [default: off]")
41 FIND_FILE(SENDMAIL sendmail
42 PATHS /usr/sbin /sbin /usr/lib
43 DOC "path to sendmail executable"
48 SET(MAILPATH "/var/mail")
49 ELSEIF(EXISTS /var/spool/mail)
50 SET(MAILPATH "/var/spool/mail")
51 ELSEIF(EXISTS /usr/spool/mail)
52 SET(MAILPATH "/usr/spool/mail")
53 ELSEIF(EXISTS /usr/mail)
54 SET(MAILPATH "/usr/mail")
55 ELSE(EXISTS /var/mail)
56 MESSAGE(FATAL_ERROR "Unable to determine MAILPATH")
57 ENDIF(EXISTS /var/mail)
61 INCLUDE(CheckIncludeFile)
63 CHECK_INCLUDE_FILE(alloca.h HAVE_ALLOCA_H)
64 CHECK_INCLUDE_FILE(argz.h HAVE_ARGZ_H)
65 CHECK_INCLUDE_FILE(getopt.h HAVE_GETOPT_H)
66 CHECK_INCLUDE_FILE(iconv.h HAVE_ICONV_H)
67 CHECK_INCLUDE_FILE(inttypes.h HAVE_INTTYPES_H)
68 CHECK_INCLUDE_FILE(ioctl.h HAVE_IOCTL_H)
69 CHECK_INCLUDE_FILE(langinfo.h HAVE_LANGINFO_H)
70 CHECK_INCLUDE_FILE(limits.h HAVE_LIMITS_H)
71 CHECK_INCLUDE_FILE(locale.h HAVE_LOCALE_H)
72 CHECK_INCLUDE_FILE(memory.h HAVE_MEMORY_H)
73 CHECK_INCLUDE_FILE(ncurses.h HAVE_NCURSES_H)
74 CHECK_INCLUDE_FILE(ncurses/ncurses.h HAVE_NCURSES_NCURSES_H)
75 CHECK_INCLUDE_FILE(ncursesw/ncurses.h HAVE_NCURSESW_NCURSES_H)
76 CHECK_INCLUDE_FILE(regex.h HAVE_REGEX_H)
77 CHECK_INCLUDE_FILE(stdarg.h HAVE_STDARG_H)
78 CHECK_INCLUDE_FILE(stddef.h HAVE_STDDEF_H)
79 CHECK_INCLUDE_FILE(stdint.h HAVE_STDINT_H)
80 CHECK_INCLUDE_FILE(stdlib.h HAVE_STDLIB_H)
81 CHECK_INCLUDE_FILE(string.h HAVE_STRING_H)
82 CHECK_INCLUDE_FILE(strings.h HAVE_STRINGS_H)
83 CHECK_INCLUDE_FILE(sysexits.h HAVE_SYSEXITS_H)
84 CHECK_INCLUDE_FILE(sys/ioctl.h HAVE_SYS_IOCTL_H)
85 CHECK_INCLUDE_FILE(sys/param.h HAVE_SYS_PARAM_H)
86 CHECK_INCLUDE_FILE(sys/resource.h HAVE_SYS_RESOURCE_H)
87 CHECK_INCLUDE_FILE(sys/stat.h HAVE_SYS_STAT_H)
88 CHECK_INCLUDE_FILE(sys/time.h HAVE_SYS_TIME_H)
89 CHECK_INCLUDE_FILE(sys/types.h HAVE_SYS_TYPES_H)
90 CHECK_INCLUDE_FILE(unistd.h HAVE_UNISTD_H)
91 CHECK_INCLUDE_FILE(unix.h HAVE_UNIX_H)
92 CHECK_INCLUDE_FILE(wchar.h HAVE_WCHAR_H)
93 CHECK_INCLUDE_FILE(wctype.h HAVE_WCTYPE_H)
96 MESSAGE(FATAL_ERROR "inconv.h not found")
97 ENDIF(NOT HAVE_ICONV_H)
102 INCLUDE(CheckStructMember)
104 CHECK_STRUCT_MEMBER("struct dirent" "d_ino" "dirent.h" HAVE_DIRENT_D_INO)
108 INCLUDE (CheckFunctionExists)
110 CHECK_FUNCTION_EXISTS(strlimit HAVE_SETRLIMIT)
111 CHECK_FUNCTION_EXISTS(getsid HAVE_GETSID)
112 CHECK_FUNCTION_EXISTS(setegid HAVE_SETEGID)
113 CHECK_FUNCTION_EXISTS(getopt HAVE_GETOPT)
114 CHECK_FUNCTION_EXISTS(nl_langinfo HAVE_LANGINFO_CODESET)
118 INCLUDE(CheckLibraryExists)
119 INCLUDE(UsePkgConfig)
121 IF(HAVE_NCURSESW_NCURSES_H)
122 SET(CMAKE_REQUIRED_INCLUDES "ncursesw/ncurses.h")
123 SET(MUTTLIBS "${MUTTLIBS} -lncursesw")
124 ELSEIF(HAVE_NCURSES_H)
125 SET(CMAKE_REQUIRED_INCLUDES "ncurses.h")
126 SET(MUTTLIBS "${MUTTLIBS} -lncurses")
127 ELSEIF(HAVE_NCURSES_H OR HAVE_NCURSES_NCURSES_H)
128 SET(CMAKE_REQUIRED_INCLUDES "ncurses/ncurses.h")
129 SET(MUTTLIBS "${MUTTLIBS} -lncurses")
130 ELSE(HAVE_NCURSESW_NCURSES_H)
131 MESSAGE(FATAL_ERROR "could not find ncurses.h")
132 ENDIF(HAVE_NCURSESW_NCURSES_H)
133 SET(CMAKE_REQUIRED_LIBRARIES ${MUTTLIBS})
134 CHECK_FUNCTION_EXISTS(resizeterm HAVE_RESIZETERM)
135 SET(CMAKE_REQUIRED_LIBRARIES)
136 SET(CMAKE_REQUIRED_INCLUDES)
138 PKGCONFIG(lua5.1 lua_INCDIR lua_LINKDIR lua_LDFLAGS lua_CFLAGS)
139 MESSAGE(STATUS "found lua5.1 at: INCDIR ${lua_INCDIR}")
140 INCLUDE_DIRECTORIES(${lua_INCDIR})
141 ADD_DEFINITIONS(${lua_CFLAGS})
142 SET(MUTTLIBS "${MUTTLIBS} ${lua_LDFLAGS}")
145 XCONFIG(gpgme-config gpgme_INCDIR gpgme_LINKDIR gpgme_LDFLAGS gpgme_CFLAGS)
146 INCLUDE_DIRECTORIES(${gpgme_INCDIR})
147 ADD_DEFINITIONS(${gpgme_CFLAGS})
148 SET(MUTTLIBS "${MUTTLIBS} ${gpgme_LDFLAGS}")
152 XCONFIG(libgnutls-config gnutls_INCDIR gnutls_LINKDIR gnutls_LDFLAGS gnutls_CFLAGS)
153 INCLUDE_DIRECTORIES(${gnutls_INCDIR})
154 ADD_DEFINITIONS(${gnutls_CFLAGS})
155 CHECK_INCLUDE_FILE(gnutls/openssl.h HAVE_GNUTLS_OPENSSL_H)
156 SET(MUTTLIBS "${MUTTLIBS} ${gnutls_LDFLAGS}")
158 CHECK_LIBRARY_EXISTS(sasl2 sasl_client_init "" WITH_SASL)
160 MESSAGE(FATAL_ERROR "sasl2 not found")
162 SET(MUTTLIBS "${MUTTLIBS} -lsasl2")
165 PKGCONFIG(libidn idn_INCDIR idn_LINKDIR idn_LDFLAGS idn_CFLAGS)
166 SET(MUTTLIBS "${MUTTLIBS} ${idn_LDFLAGS}")
170 CHECK_LIBRARY_EXISTS(lockfile lockfile_create "" WITH_LOCKFILE)
171 IF(NOT WITH_LOCKFILE)
172 MESSAGE(FATAL_ERROR "lockfile not found")
173 ENDIF(NOT WITH_LOCKFILE)
174 SET(MUTTLIBS "${MUTTLIBS} -llockfile")
177 OPTION(WITH_QDBM "Use qdbm for header caching [default: on]" ON)
178 OPTION(WITH_GDBM "Use gdbm for header caching [default: off]")
182 PKGCONFIG(qdbm qdbm_INCDIR qdbm_LINKDIR qdbm_LDFLAGS qdbm_CFLAGS)
184 MESSAGE(STATUS "qdbm found")
186 MESSAGE(FATAL_ERROR "qdbm not found")
188 INCLUDE_DIRECTORIES(${qdbm_INCDIR})
189 ADD_DEFINITIONS(${qdbm_CFLAGS})
190 SET(MUTTLIBS "${MUTTLIBS} ${qdbm_LDFLAGS}")
195 IF(NOT USE_HCACHE AND WITH_GDBM)
196 CHECK_LIBRARY_EXISTS(gdbm gdbm_open "" GDBM)
198 MESSAGE(FATAL_ERROR "gdbm not found")
200 SET(MUTTLIBS "${MUTTLIBS} -lgdbm")
203 ENDIF(NOT USE_HCACHE AND WITH_GDBM)
206 MESSAGE(FATAL_ERROR "no backend for header caching selected")
207 ENDIF(NOT USE_HCACHE)
210 IF(WITH_NNTP AND NOT USE_NNTP)
212 MESSAGE(STATUS "building NNTP support")
213 ENDIF(WITH_NNTP AND NOT USE_NNTP)
218 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99 -ggdb3")
219 # Use pipes and not temp files.
220 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pipe")
222 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2")
223 # let the type char be unsigned by default
224 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -funsigned-char")
225 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstrict-aliasing")
226 # turn on all common warnings
227 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall")
228 # turn on extra warnings
229 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -W")
230 # treat warnings as errors
231 #SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror")
232 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wchar-subscripts")
233 # warn about undefined preprocessor identifiers
234 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wundef")
235 # warn about local variable shadowing another local variable
236 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wshadow")
237 # warn about casting of pointers to increased alignment requirements
238 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wcast-align")
239 # make string constants const
240 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wwrite-strings")
241 # warn about comparisons between signed and unsigned values
242 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wsign-compare")
243 # warn about unused declared stuff
244 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wunused")
245 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-parameter")
246 # warn about variable use before initialization
247 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wuninitialized")
248 # warn about variables which are initialized with themselves
249 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Winit-self")
250 # warn about pointer arithmetic on void* and function pointers
251 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wpointer-arith")
252 # warn about multiple declarations
253 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wredundant-decls")
254 # warn if the format string is not a string literal
255 #SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wformat-nonliteral")
256 # do not warn about zero-length formats.
257 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-format-zero-length")
259 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wmissing-prototypes")
260 # warn about functions without format attribute that should have one
261 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wmissing-format-attribute")
264 CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h)
266 # we generate some includes
267 ADD_SUBDIRECTORY(lib-lib)
268 ADD_SUBDIRECTORY(lib-mime)
269 ADD_SUBDIRECTORY(lib-sys)
270 ADD_SUBDIRECTORY(lib-ui)
271 ADD_SUBDIRECTORY(imap)
272 ADD_SUBDIRECTORY(lib-mx)
273 ADD_SUBDIRECTORY(lib-lua)
276 MADMUTT_SOURCES(madmuttsrc madmuttgen
316 MADMUTT_SOURCES(madmuttsrc madmuttgen
321 ADD_EXECUTABLE(madmutt ${madmuttsrc})
322 TARGET_LINK_LIBRARIES(madmutt mime sys mx lua imap ui lib)
323 SET_TARGET_PROPERTIES(madmutt PROPERTIES LINK_FLAGS ${MUTTLIBS})
325 # generate_files hack {{{
328 OUTPUT ${madmutt_SOURCE_DIR}/keymap_defs.h
329 DEPENDS ${madmutt_SOURCE_DIR}/OPS ${madmutt_SOURCE_DIR}/tools/gen_defs
330 COMMAND ${madmutt_SOURCE_DIR}/tools/gen_defs ${madmutt_SOURCE_DIR}/OPS > ${madmutt_SOURCE_DIR}/keymap_defs.h
331 COMMENT "Generating ${madmutt_SOURCE_DIR}/keymap_defs.h from ${madmutt_SOURCE_DIR}/OPS"
334 OUTPUT ${madmutt_SOURCE_DIR}/charset.gperf
335 DEPENDS ${madmutt_SOURCE_DIR}/charset.def
336 COMMAND sh ${madmutt_SOURCE_DIR}/charset.def > ${madmutt_SOURCE_DIR}/charset.gperf
337 COMMENT "Generating ${madmutt_SOURCE_DIR}/charset.gperf from ${madmutt_SOURCE_DIR}/charset.def"
339 ADD_CUSTOM_TARGET(generate_file
340 DEPENDS ${madmuttgen}
341 ${madmutt_SOURCE_DIR}/keymap_defs.h
342 ${madmutt_SOURCE_DIR}/charset.gperf
344 ADD_DEPENDENCIES(generate_file generate_files)
345 ADD_DEPENDENCIES(madmutt generate_file)