unused variable
[apps/madmutt.git] / CMakeLists.txt
1 SET(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/Modules)
2
3 PROJECT(madmutt C D)
4 SET(PACKAGE madmutt)
5
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)
8     # default to phobos
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)
14
15 include(Cpkg2c)
16 include(XConfig)
17
18 ADD_DEFINITIONS(-DHAVE_CONFIG_H)
19 ADD_DEFINITIONS(-D_GNU_SOURCE)
20 INCLUDE_DIRECTORIES(${madmutt_BINARY_DIR} ${madmutt_SOURCE_DIR})
21
22 SET(BINDIR     "${CMAKE_INSTALL_PREFIX}/bin")
23 SET(DATADIR    "${CMAKE_INSTALL_PREFIX}/share")
24 SET(PKGDATADIR "${CMAKE_INSTALL_PREFIX}/share/madmutt")
25 SET(PKGDOCDIR  "${CMAKE_INSTALL_PREFIX}/share/doc/madmutt")
26 SET(SYSCONFDIR "${CMAKE_INSTALL_PREFIX}/etc")
27 SET(VERSION    "devel")
28 SET(MUTTLIBS   "")
29
30 ADD_DEFINITIONS("-DBINDIR=\\\"${BINDIR}\\\"")
31 ADD_DEFINITIONS("-DPKGDATADIR=\\\"${PKGDATADIR}\\\"")
32 ADD_DEFINITIONS("-DPKGDOCDIR=\\\"${PKGDOCDIR}\\\"")
33 ADD_DEFINITIONS("-DSYSCONFDIR=\\\"${SYSCONFDIR}\\\"")
34 ADD_DEFINITIONS("-DVERSION=\\\"${VERSION}\\\"")
35 ADD_DEFINITIONS("-DMUTTLOCALEDIR=\\\"${DATADIR}/locale\\\"")
36
37 SET(MAILPATH         CACHE STRING "Where new mail is spooled")
38 OPTION(WITH_GPGME    "Use GPGME [default: on]" ON)
39 OPTION(WITH_IDN      "Use GNU libidn for domain names [default: off]")
40
41 OPTION(USE_FLOCK     "Use flock to lock files [default: off]")
42 OPTION(USE_FCNTL     "Use fcntl to lock files [default: on]" ON)
43 OPTION(USE_HCACHE    "Enable headers caching  [default: off]")
44
45 FIND_FILE(SENDMAIL sendmail
46     PATHS /usr/sbin /sbin /usr/lib
47     DOC   "path to sendmail executable"
48 )
49
50 IF(NOT MAILPATH)
51     IF(EXISTS /var/mail)
52         SET(MAILPATH "/var/mail")
53     ELSEIF(EXISTS /var/spool/mail)
54         SET(MAILPATH "/var/spool/mail")
55     ELSEIF(EXISTS /usr/spool/mail)
56         SET(MAILPATH "/usr/spool/mail")
57     ELSEIF(EXISTS /usr/mail)
58         SET(MAILPATH "/usr/mail")
59     ELSE(EXISTS /var/mail)
60         MESSAGE(FATAL_ERROR "Unable to determine MAILPATH")
61     ENDIF(EXISTS /var/mail)
62 ENDIF(NOT MAILPATH)
63
64 # headers {{{
65 INCLUDE(CheckIncludeFile)
66
67 CHECK_INCLUDE_FILE(alloca.h               HAVE_ALLOCA_H)
68 CHECK_INCLUDE_FILE(argz.h                 HAVE_ARGZ_H)
69 CHECK_INCLUDE_FILE(getopt.h               HAVE_GETOPT_H)
70 CHECK_INCLUDE_FILE(iconv.h                HAVE_ICONV_H)
71 CHECK_INCLUDE_FILE(inttypes.h             HAVE_INTTYPES_H)
72 CHECK_INCLUDE_FILE(ioctl.h                HAVE_IOCTL_H)
73 CHECK_INCLUDE_FILE(langinfo.h             HAVE_LANGINFO_H)
74 CHECK_INCLUDE_FILE(limits.h               HAVE_LIMITS_H)
75 CHECK_INCLUDE_FILE(locale.h               HAVE_LOCALE_H)
76 CHECK_INCLUDE_FILE(memory.h               HAVE_MEMORY_H)
77 CHECK_INCLUDE_FILE(ncursesw/ncurses.h     HAVE_NCURSESW_NCURSES_H)
78 CHECK_INCLUDE_FILE(regex.h                HAVE_REGEX_H)
79 CHECK_INCLUDE_FILE(stdarg.h               HAVE_STDARG_H)
80 CHECK_INCLUDE_FILE(stddef.h               HAVE_STDDEF_H)
81 CHECK_INCLUDE_FILE(stdint.h               HAVE_STDINT_H)
82 CHECK_INCLUDE_FILE(stdlib.h               HAVE_STDLIB_H)
83 CHECK_INCLUDE_FILE(string.h               HAVE_STRING_H)
84 CHECK_INCLUDE_FILE(strings.h              HAVE_STRINGS_H)
85 CHECK_INCLUDE_FILE(sysexits.h             HAVE_SYSEXITS_H)
86 CHECK_INCLUDE_FILE(sys/ioctl.h            HAVE_SYS_IOCTL_H)
87 CHECK_INCLUDE_FILE(sys/param.h            HAVE_SYS_PARAM_H)
88 CHECK_INCLUDE_FILE(sys/resource.h         HAVE_SYS_RESOURCE_H)
89 CHECK_INCLUDE_FILE(sys/stat.h             HAVE_SYS_STAT_H)
90 CHECK_INCLUDE_FILE(sys/time.h             HAVE_SYS_TIME_H)
91 CHECK_INCLUDE_FILE(sys/types.h            HAVE_SYS_TYPES_H)
92 CHECK_INCLUDE_FILE(unistd.h               HAVE_UNISTD_H)
93 CHECK_INCLUDE_FILE(unix.h                 HAVE_UNIX_H)
94 CHECK_INCLUDE_FILE(wchar.h                HAVE_WCHAR_H)
95 CHECK_INCLUDE_FILE(wctype.h               HAVE_WCTYPE_H)
96
97 IF(NOT HAVE_ICONV_H)
98     MESSAGE(FATAL_ERROR "inconv.h not found")
99 ENDIF(NOT HAVE_ICONV_H)
100
101 # }}}
102 # types {{{
103
104 INCLUDE(CheckStructMember)
105
106 CHECK_STRUCT_MEMBER("struct dirent" "d_ino" "dirent.h" HAVE_DIRENT_D_INO)
107
108 # }}}
109 # functions {{{
110 INCLUDE (CheckFunctionExists)
111
112 CHECK_FUNCTION_EXISTS(strlimit    HAVE_SETRLIMIT)
113 CHECK_FUNCTION_EXISTS(getsid      HAVE_GETSID)
114 CHECK_FUNCTION_EXISTS(setegid     HAVE_SETEGID)
115 CHECK_FUNCTION_EXISTS(getopt      HAVE_GETOPT)
116 CHECK_FUNCTION_EXISTS(nl_langinfo HAVE_LANGINFO_CODESET)
117
118 # }}}
119 # libraries {{{
120 INCLUDE(CheckLibraryExists)
121 INCLUDE(FindPkgConfig)
122
123 FIND_LIBRARY(LIBUTIL NAMES util)
124 IF(NOT LIBUTIL)
125     MESSAGE(FATAL_ERROR "could not find libutil")
126 ENDIF(NOT LIBUTIL)
127 LIST(APPEND MUTTLIBS -lutil)
128
129 FIND_LIBRARY(NCURSESW NAMES ncursesw)
130 IF(NOT NCURSESW OR NOT HAVE_NCURSESW_NCURSES_H)
131     MESSAGE(FATAL_ERROR "could not libncursesw")
132 ENDIF(NOT NCURSESW OR NOT HAVE_NCURSESW_NCURSES_H)
133 SET(CMAKE_REQUIRED_INCLUDES "ncursesw/ncurses.h")
134 LIST(APPEND MUTTLIBS -lncursesw)
135
136 pkg_search_module(LUA REQUIRED lua5.1)
137 ADD_DEFINITIONS(${LUA_CFLAGS})
138 LIST(APPEND MUTTLIBS ${LUA_LDFLAGS})
139
140 IF(WITH_GPGME)
141     XCONFIG(gpgme-config gpgme_INCDIR gpgme_LINKDIR gpgme_LDFLAGS gpgme_CFLAGS)
142     INCLUDE_DIRECTORIES(${gpgme_INCDIR})
143     ADD_DEFINITIONS(${gpgme_CFLAGS})
144     LIST(APPEND MUTTLIBS ${gpgme_LDFLAGS})
145     SET(HAVE_GPGME 1)
146 ENDIF(WITH_GPGME)
147
148 XCONFIG(libgnutls-config gnutls_INCDIR gnutls_LINKDIR gnutls_LDFLAGS gnutls_CFLAGS)
149 INCLUDE_DIRECTORIES(${gnutls_INCDIR})
150 ADD_DEFINITIONS(${gnutls_CFLAGS})
151 CHECK_INCLUDE_FILE(gnutls/openssl.h  HAVE_GNUTLS_OPENSSL_H)
152 LIST(APPEND MUTTLIBS ${gnutls_LDFLAGS})
153
154 CHECK_LIBRARY_EXISTS(sasl2 sasl_client_init "" WITH_SASL)
155 IF(NOT WITH_SASL)
156     MESSAGE(FATAL_ERROR "sasl2 not found")
157 ENDIF(NOT WITH_SASL)
158 LIST(APPEND MUTTLIBS -lsasl2)
159
160 IF(WITH_IDN)
161     pkg_search_module(IDN REQUIRED libidn)
162     LIST(APPEND MUTTLIBS ${IDN_LDFLAGS})
163     SET(HAVE_LIBIDN 1)
164 ENDIF(WITH_IDN)
165
166 CHECK_LIBRARY_EXISTS(lockfile lockfile_create "" WITH_LOCKFILE)
167 IF(NOT WITH_LOCKFILE)
168     MESSAGE(FATAL_ERROR "lockfile not found")
169 ENDIF(NOT WITH_LOCKFILE)
170 LIST(APPEND MUTTLIBS -llockfile)
171
172 IF(USE_HCACHE)
173     OPTION(WITH_QDBM "Use qdbm for header caching [default: on]" ON)
174     OPTION(WITH_GDBM "Use gdbm for header caching [default: off]")
175     SET(USE_HCACHE)
176
177     IF(WITH_QDBM)
178         pkg_search_module(QDBM REQUIRED qdbm)
179         ADD_DEFINITIONS(${QDBM_CFLAGS})
180         SET(QDBM_LDFLAGS "${QDBM_LDFLAGS}")
181         # LIST(APPEND MUTTLIBS ${QDBM_LDFLAGS})
182         LIST(APPEND MUTTLIBS -lqdbm)
183         SET(USE_HCACHE 1)
184         SET(HAVE_QDBM 1)
185     ENDIF(WITH_QDBM)
186
187     IF(NOT USE_HCACHE AND WITH_GDBM)
188         CHECK_LIBRARY_EXISTS(gdbm gdbm_open "" GDBM)
189         IF(NOT GDBM)
190             MESSAGE(FATAL_ERROR "gdbm not found")
191         ENDIF(NOT GDBM)
192         LIST(APPEND MUTTLIBS -lgdbm)
193         SET(USE_HCACHE 1)
194         SET(HAVE_GDBM 1)
195     ENDIF(NOT USE_HCACHE AND WITH_GDBM)
196
197     IF(NOT USE_HCACHE)
198         MESSAGE(FATAL_ERROR "no backend for header caching selected")
199     ENDIF(NOT USE_HCACHE)
200 ENDIF(USE_HCACHE)
201
202 # }}}
203 # C flags {{{
204 # big debug flags
205 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99 -ggdb3")
206 # Use pipes and not temp files.
207 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pipe")
208 # optimize even more
209 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2")
210 # let the type char be unsigned by default
211 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -funsigned-char")
212 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstrict-aliasing")
213 # turn on all common warnings
214 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall")
215 # turn on extra warnings
216 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -W")
217 # treat warnings as errors
218 #SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror")
219 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wchar-subscripts")
220 # warn about undefined preprocessor identifiers
221 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wundef")
222 # warn about local variable shadowing another local variable
223 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wshadow")
224 # warn about casting of pointers to increased alignment requirements
225 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wcast-align")
226 # make string constants const
227 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wwrite-strings")
228 # warn about comparisons between signed and unsigned values
229 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wsign-compare")
230 # warn about unused declared stuff
231 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wunused")
232 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-parameter")
233 # warn about variable use before initialization
234 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wuninitialized")
235 # warn about variables which are initialized with themselves
236 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Winit-self")
237 # warn about pointer arithmetic on void* and function pointers
238 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wpointer-arith")
239 # warn about multiple declarations
240 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wredundant-decls")
241 # warn if the format string is not a string literal
242 #SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wformat-nonliteral")
243 # do not warn about zero-length formats.
244 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-format-zero-length")
245 # missing prototypes
246 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wmissing-prototypes")
247 # warn about functions without format attribute that should have one
248 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wmissing-format-attribute")
249 # }}}
250 # D flags {{{
251 # big debug flags
252 SET(CMAKE_D_FLAGS "${CMAKE_D_FLAGS} -ggdb3")
253 # Use pipes and not temp files.
254 SET(CMAKE_D_FLAGS "${CMAKE_D_FLAGS} -pipe")
255 # optimize even more
256 SET(CMAKE_D_FLAGS "${CMAKE_D_FLAGS} -O2")
257 # let the type char be unsigned by default
258 SET(CMAKE_D_FLAGS "${CMAKE_D_FLAGS} -funsigned-char")
259 SET(CMAKE_D_FLAGS "${CMAKE_D_FLAGS} -fstrict-aliasing")
260 # turn on all common warnings
261 SET(CMAKE_D_FLAGS "${CMAKE_D_FLAGS} -Wall")
262 # turn on extra warnings
263 SET(CMAKE_D_FLAGS "${CMAKE_D_FLAGS} -W")
264 # treat warnings as errors
265 #SET(CMAKE_D_FLAGS "${CMAKE_D_FLAGS} -Werror")
266 # warn about local variable shadowing another local variable
267 SET(CMAKE_D_FLAGS "${CMAKE_D_FLAGS} -Wshadow")
268 # warn about casting of pointers to increased alignment requirements
269 SET(CMAKE_D_FLAGS "${CMAKE_D_FLAGS} -Wcast-align")
270 # warn about comparisons between signed and unsigned values
271 SET(CMAKE_D_FLAGS "${CMAKE_D_FLAGS} -Wsign-compare")
272 # warn about unused declared stuff
273 SET(CMAKE_D_FLAGS "${CMAKE_D_FLAGS} -Wunused")
274 SET(CMAKE_D_FLAGS "${CMAKE_D_FLAGS} -Wno-unused-parameter")
275 # warn about variable use before initialization
276 SET(CMAKE_D_FLAGS "${CMAKE_D_FLAGS} -Wuninitialized")
277 # }}}
278
279 CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h)
280
281 # we generate some includes
282 ADD_SUBDIRECTORY(lib-lib)
283 ADD_SUBDIRECTORY(lib-mime)
284 ADD_SUBDIRECTORY(lib-sys)
285 ADD_SUBDIRECTORY(lib-ui)
286 ADD_SUBDIRECTORY(imap)
287 ADD_SUBDIRECTORY(lib-mx)
288 ADD_SUBDIRECTORY(lib-lua)
289 ADD_SUBDIRECTORY(po)
290
291 MADMUTT_SOURCES(madmuttsrc madmuttgen
292     alias.cpkg
293     buffy.cpkg
294     charset.cpkg
295     crypt.cpkg
296     score.cpkg
297
298     account.c
299     attach.c
300     commands.c
301     compose.c
302     copy.c
303     editmsg.c
304     flags.c
305     handler.c
306     headers.c
307     help.c
308     hook.c
309     init.c
310     keymap.c
311     mutt_idna.c
312     muttlib.c
313     mutt_sasl.c
314     pager.c
315     pattern.c
316     pop.c
317     postpone.c
318     recvattach.c
319     recvcmd.c
320     send.c
321     sendlib.c
322     sort.c
323     state.c
324     thread.c
325
326     main.c
327 )
328
329 STRING(REGEX REPLACE ";" " " MUTTLIBS "${MUTTLIBS}")
330 ADD_EXECUTABLE(madmutt ${madmuttsrc})
331 TARGET_LINK_LIBRARIES(madmutt mime sys mx lua ui imap lib)
332 SET_TARGET_PROPERTIES(madmutt PROPERTIES
333     LINK_FLAGS "${MUTTLIBS}"
334     #    LINKER_LANGUAGE D
335 )
336
337 # generate_files hack {{{
338
339 ADD_CUSTOM_COMMAND(
340     OUTPUT  ${madmutt_SOURCE_DIR}/keymap_defs.h
341     DEPENDS ${madmutt_SOURCE_DIR}/OPS ${madmutt_SOURCE_DIR}/tools/gen_defs
342     COMMAND ${madmutt_SOURCE_DIR}/tools/gen_defs ${madmutt_SOURCE_DIR}/OPS > ${madmutt_SOURCE_DIR}/keymap_defs.h
343     COMMENT "Generating ${madmutt_SOURCE_DIR}/keymap_defs.h from ${madmutt_SOURCE_DIR}/OPS"
344 )
345 ADD_CUSTOM_COMMAND(
346     OUTPUT  ${madmutt_SOURCE_DIR}/charset.gperf
347     DEPENDS ${madmutt_SOURCE_DIR}/charset.def
348     COMMAND sh ${madmutt_SOURCE_DIR}/charset.def > ${madmutt_SOURCE_DIR}/charset.gperf
349     COMMENT "Generating ${madmutt_SOURCE_DIR}/charset.gperf from ${madmutt_SOURCE_DIR}/charset.def"
350 )
351 ADD_CUSTOM_TARGET(generate_file
352     DEPENDS ${madmuttgen}
353     ${madmutt_SOURCE_DIR}/keymap_defs.h
354     ${madmutt_SOURCE_DIR}/charset.gperf
355 )
356 ADD_DEPENDENCIES(generate_file generate_files)
357 ADD_DEPENDENCIES(madmutt generate_file)
358
359 # }}}