rm *.li/*.c files when cpkg2c fails.
[apps/madmutt.git] / CMakeLists.txt
1 PROJECT(madmutt C)
2 SET(PACKAGE madmutt)
3 SET(CMAKE_MODULE_PATH  ${madmutt_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH})
4
5 # TODO {{{
6 # USE_SETGID
7 # DOTLOCK_{GROUP,PERMISSION}
8 # ENABLE_NLS
9 SET(ENABLE_NLS 1)
10 # }}}
11
12 INCLUDE(CMakeDetermineCCompiler)
13 include(Cpkg2c)
14 include(XConfig)
15
16 ADD_DEFINITIONS(-DHAVE_CONFIG_H)
17 ADD_DEFINITIONS(-D_GNU_SOURCE)
18 INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR} ${madmutt_SOURCE_DIR})
19
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")
25 SET(VERSION    "devel")
26 SET(MUTTLIBS   "")
27
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\\\"")
34
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]")
41
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]")
45
46 FIND_FILE(SENDMAIL sendmail
47     PATHS /usr/sbin /sbin /usr/lib
48     DOC   "path to sendmail executable"
49 )
50 FIND_FILE(MIXMASTER mixmaster DOC "path to mixmaster")
51 IF(NOT MIXMASTER)
52     SET(MIXMASTER "mixmaster")
53 ENDIF(NOT MIXMASTER)
54
55 IF(NOT MAILPATH)
56     IF(EXISTS /var/mail)
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)
67 ENDIF(NOT MAILPATH)
68
69 # headers {{{
70 INCLUDE(CheckIncludeFile)
71
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)
103
104 IF(NOT HAVE_ICONV_H)
105     MESSAGE(FATAL_ERROR "inconv.h not found")
106 ENDIF(NOT HAVE_ICONV_H)
107
108 # }}}
109 # types {{{
110
111 INCLUDE(CheckStructMember)
112
113 CHECK_STRUCT_MEMBER("struct dirent" "d_ino" "dirent.h" HAVE_DIRENT_D_INO)
114
115 # }}}
116 # functions {{{
117 INCLUDE (CheckFunctionExists)
118
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)
139
140 # }}}
141 # libraries {{{
142 INCLUDE(CheckLibraryExists)
143 INCLUDE(UsePkgConfig)
144
145 IF(WITH_SLANG)
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)
155 ELSE(WITH_SLANG)
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)
178 ENDIF(WITH_SLANG)
179
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}")
185
186 IF(WITH_GPGME)
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}")
191     SET(HAVE_GPGME 1)
192 ENDIF(WITH_GPGME)
193
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}")
198
199 CHECK_LIBRARY_EXISTS(sasl2 sasl_client_init "" WITH_SASL)
200 IF(NOT WITH_SASL)
201     MESSAGE(FATAL_ERROR "sasl2 not found")
202 ENDIF(NOT WITH_SASL)
203 SET(MUTTLIBS "${MUTTLIBS} -lsasl2")
204
205 IF(WITH_IDN)
206     PKGCONFIG(libidn idn_INCDIR idn_LINKDIR idn_LDFLAGS idn_CFLAGS)
207     SET(MUTTLIBS "${MUTTLIBS} ${idn_LDFLAGS}")
208     SET(HAVE_LIBIDN 1)
209 ENDIF(WITH_IDN)
210
211 IF(USE_HCACHE)
212     OPTION(WITH_QDBM "Use qdbm for header caching [default: on]" ON)
213     OPTION(WITH_GDBM "Use gdbm for header caching [default: off]")
214     SET(USE_HCACHE)
215
216     IF(WITH_QDBM)
217         PKGCONFIG(qdbm qdbm_INCDIR qdbm_LINKDIR qdbm_LDFLAGS qdbm_CFLAGS)
218         IF(qdbm_LDFLAGS)
219             MESSAGE(STATUS "qdbm found")
220         ELSE(qdbm_LDFLAGS)
221             MESSAGE(FATAL_ERROR "qdbm not found")
222         ENDIF(qdbm_LDFLAGS)
223         INCLUDE_DIRECTORIES(${qdbm_INCDIR})
224         ADD_DEFINITIONS(${qdbm_CFLAGS})
225         SET(MUTTLIBS "${MUTTLIBS} ${qdbm_LDFLAGS}")
226         SET(USE_HCACHE 1)
227         SET(HAVE_QDBM 1)
228     ENDIF(WITH_QDBM)
229
230     IF(NOT USE_HCACHE AND WITH_GDBM)
231         CHECK_LIBRARY_EXISTS(gdbm gdbm_open "" GDBM)
232         IF(NOT GDBM)
233             MESSAGE(FATAL_ERROR "gdbm not found")
234         ENDIF(NOT GDBM)
235         SET(MUTTLIBS "${MUTTLIBS} -lgdbm")
236         SET(USE_HCACHE 1)
237         SET(HAVE_GDBM 1)
238     ENDIF(NOT USE_HCACHE AND WITH_GDBM)
239
240     IF(NOT USE_HCACHE)
241         MESSAGE(FATAL_ERROR "no backend for header caching selected")
242     ENDIF(NOT USE_HCACHE)
243 ENDIF(USE_HCACHE)
244
245 IF(WITH_LIBESMTP)
246     SET(USE_LIBESMTP 1)
247     SET(MUTTLIBS "${MUTTLIBS} -lesmtp")
248 ENDIF(WITH_LIBESMTP)
249
250 IF(WITH_NNTP AND NOT USE_NNTP)
251     SET(USE_NNTP 1)
252     MESSAGE(STATUS "building NNTP support")
253 ENDIF(WITH_NNTP AND NOT USE_NNTP)
254
255 # }}}
256 # C flags {{{
257 # big debug flags
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")
261 # optimize even more
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")
298 # missing prototypes
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")
302 # }}}
303
304 CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h)
305
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)
312 IF(WITH_NNTP)
313     ADD_SUBDIRECTORY(nntp)
314 ENDIF(WITH_NNTP)
315 ADD_SUBDIRECTORY(lib-mx)
316 ADD_SUBDIRECTORY(lib-lua)
317
318 MADMUTT_SOURCES(madmuttsrc madmuttgen
319     alias.cpkg
320     buffy.cpkg
321     charset.cpkg
322     crypt.cpkg
323
324     account.c
325     attach.c
326     base64.c
327     browser.c
328     commands.c
329     compose.c
330     copy.c
331     editmsg.c
332     flags.c
333     from.c
334     handler.c
335     headers.c
336     help.c
337     hook.c
338     init.c
339     keymap.c
340     mutt_idna.c
341     muttlib.c
342     mutt_sasl.c
343     pager.c
344     pattern.c
345     pop.c
346     postpone.c
347     recvattach.c
348     recvcmd.c
349     remailer.c
350     score.c
351     send.c
352     sendlib.c
353     send_smtp.c
354     sort.c
355     state.c
356     thread.c
357
358     main.c
359 )
360
361 ADD_EXECUTABLE(madmutt ${madmuttsrc})
362 IF(WITH_NNTP)
363     TARGET_LINK_LIBRARIES(madmutt mime sys mx lua imap nntp ui lib)
364 ELSE(WITH_NNTP)
365     TARGET_LINK_LIBRARIES(madmutt mime sys mx lua imap ui lib)
366 ENDIF(WITH_NNTP)
367 SET_TARGET_PROPERTIES(madmutt PROPERTIES LINK_FLAGS ${MUTTLIBS})
368
369 ADD_EXECUTABLE(madmutt_dotlock dotlock.c)
370 TARGET_LINK_LIBRARIES(madmutt_dotlock lib)
371
372 # generate_files hack {{{
373
374 ADD_CUSTOM_COMMAND(
375     OUTPUT  ${madmutt_SOURCE_DIR}/keymap_defs.h
376     DEPENDS ${madmutt_SOURCE_DIR}/OPS
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"
379 )
380 ADD_CUSTOM_COMMAND(
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"
385 )
386 SET(__mt ${CMAKE_CURRENT_SOURCE_DIR}/lib-mime/mime-token)
387 ADD_CUSTOM_COMMAND(
388     OUTPUT ${__mt}.h
389     MAIN_DEPENDENCY ${__mt}.sh ${__mt}.def
390     COMMAND sh ${__mt}.sh ${__mt}.h < ${__mt}.def
391     COMMENT "Generating ${__mt}.h from ${__mt}.def"
392 )
393 SET(__lt ${CMAKE_CURRENT_SOURCE_DIR}/lib-lua/lua-token)
394 ADD_CUSTOM_COMMAND(
395     OUTPUT ${__lt}.h
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"
399 )
400 SET(__lm ${CMAKE_CURRENT_SOURCE_DIR}/lib-lua/madmutt)
401 ADD_CUSTOM_COMMAND(
402     OUTPUT ${__lm}.li
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"
406 )
407 ADD_CUSTOM_TARGET(
408     generate_files
409     DEPENDS
410         ${madmuttgen}
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
416 )
417 ADD_DEPENDENCIES(madmutt generate_files)
418
419 # }}}