-PROJECT(madmutt C)
+SET(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/Modules)
+
+PROJECT(madmutt C D)
SET(PACKAGE madmutt)
-SET(CMAKE_MODULE_PATH ${madmutt_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH})
-# TODO {{{
-# USE_SETGID
-# DOTLOCK_{GROUP,PERMISSION}
-# }}}
+# Using Phobos OR Tango (can be specified from cmake command line)
+if (NOT CMAKE_D_USE_PHOBOS AND NOT CMAKE_D_USE_TANGO)
+ # default to phobos
+ message(STATUS "This application can be built with either Phobos or Tango!")
+ message(STATUS "You did not specify a standard library -- defaulting to Phobos.")
+ message(STATUS "If you wish to use Tango add -DCMAKE_D_USE_TANGO=True to cmake command line.")
+ set(CMAKE_D_USE_PHOBOS True)
+endif (NOT CMAKE_D_USE_PHOBOS AND NOT CMAKE_D_USE_TANGO)
-INCLUDE(CMakeDetermineCCompiler)
include(Cpkg2c)
include(XConfig)
SET(MAILPATH CACHE STRING "Where new mail is spooled")
OPTION(WITH_GPGME "Use GPGME [default: on]" ON)
-OPTION(WITH_NNTP "Build NNTP support [default: off]")
OPTION(WITH_IDN "Use GNU libidn for domain names [default: off]")
OPTION(USE_FLOCK "Use flock to lock files [default: off]")
PATHS /usr/sbin /sbin /usr/lib
DOC "path to sendmail executable"
)
-FIND_FILE(MIXMASTER mixmaster DOC "path to mixmaster")
-IF(NOT MIXMASTER)
- SET(MIXMASTER "mixmaster")
-ENDIF(NOT MIXMASTER)
IF(NOT MAILPATH)
IF(EXISTS /var/mail)
CHECK_INCLUDE_FILE(limits.h HAVE_LIMITS_H)
CHECK_INCLUDE_FILE(locale.h HAVE_LOCALE_H)
CHECK_INCLUDE_FILE(memory.h HAVE_MEMORY_H)
-CHECK_INCLUDE_FILE(ncurses.h HAVE_NCURSES_H)
-CHECK_INCLUDE_FILE(ncurses/ncurses.h HAVE_NCURSES_NCURSES_H)
CHECK_INCLUDE_FILE(ncursesw/ncurses.h HAVE_NCURSESW_NCURSES_H)
CHECK_INCLUDE_FILE(regex.h HAVE_REGEX_H)
CHECK_INCLUDE_FILE(stdarg.h HAVE_STDARG_H)
CHECK_FUNCTION_EXISTS(strlimit HAVE_SETRLIMIT)
CHECK_FUNCTION_EXISTS(getsid HAVE_GETSID)
CHECK_FUNCTION_EXISTS(setegid HAVE_SETEGID)
-CHECK_FUNCTION_EXISTS(isctype HAVE_ISCTYPE)
CHECK_FUNCTION_EXISTS(getopt HAVE_GETOPT)
-CHECK_FUNCTION_EXISTS(regcomp HAVE_REGCOMP)
-CHECK_FUNCTION_EXISTS(iswalnum HAVE_ISWALNUM)
-CHECK_FUNCTION_EXISTS(iswalpha HAVE_ISWALPHA)
-CHECK_FUNCTION_EXISTS(iswcntrl HAVE_ISWCNTRL)
-CHECK_FUNCTION_EXISTS(iswdigit HAVE_ISWDIGIT)
-CHECK_FUNCTION_EXISTS(iswgraph HAVE_ISWGRAPH)
-CHECK_FUNCTION_EXISTS(iswlower HAVE_ISWLOWER)
-CHECK_FUNCTION_EXISTS(iswprint HAVE_ISWPRINT)
-CHECK_FUNCTION_EXISTS(iswpunct HAVE_ISWPUNCT)
-CHECK_FUNCTION_EXISTS(iswspace HAVE_ISWSPACE)
-CHECK_FUNCTION_EXISTS(iswupper HAVE_ISWUPPER)
-CHECK_FUNCTION_EXISTS(iswxdigit HAVE_ISWXDIGIT)
-CHECK_FUNCTION_EXISTS(towupper HAVE_TOWUPPER)
-CHECK_FUNCTION_EXISTS(towlower HAVE_TOWLOWER)
CHECK_FUNCTION_EXISTS(nl_langinfo HAVE_LANGINFO_CODESET)
# }}}
# libraries {{{
INCLUDE(CheckLibraryExists)
-INCLUDE(UsePkgConfig)
-
-IF(HAVE_NCURSESW_NCURSES_H)
- SET(CMAKE_REQUIRED_INCLUDES "ncursesw/ncurses.h")
- SET(MUTTLIBS "${MUTTLIBS} -lncursesw")
-ELSEIF(HAVE_NCURSES_H)
- SET(CMAKE_REQUIRED_INCLUDES "ncurses.h")
- SET(MUTTLIBS "${MUTTLIBS} -lncurses")
-ELSEIF(HAVE_NCURSES_H OR HAVE_NCURSES_NCURSES_H)
- SET(CMAKE_REQUIRED_INCLUDES "ncurses/ncurses.h")
- SET(MUTTLIBS "${MUTTLIBS} -lncurses")
-ELSE(HAVE_NCURSESW_NCURSES_H)
- MESSAGE(FATAL_ERROR "could not find ncurses.h")
-ENDIF(HAVE_NCURSESW_NCURSES_H)
-SET(CMAKE_REQUIRED_LIBRARIES ${MUTTLIBS})
-CHECK_FUNCTION_EXISTS(start_color HAVE_START_COLOR)
-CHECK_FUNCTION_EXISTS(typeahead HAVE_TYPEAHEAD)
-CHECK_FUNCTION_EXISTS(bkgdset HAVE_BKGDSET)
-CHECK_FUNCTION_EXISTS(curs_set HAVE_CURS_SET)
-CHECK_FUNCTION_EXISTS(meta HAVE_META)
-CHECK_FUNCTION_EXISTS(use_default_colors HAVE_USE_DEFAULT_COLORS)
-CHECK_FUNCTION_EXISTS(resizeterm HAVE_RESIZETERM)
-SET(CMAKE_REQUIRED_LIBRARIES)
-SET(CMAKE_REQUIRED_INCLUDES)
-
-PKGCONFIG(lua5.1 lua_INCDIR lua_LINKDIR lua_LDFLAGS lua_CFLAGS)
-MESSAGE(STATUS "found lua5.1 at: INCDIR ${lua_INCDIR}")
-INCLUDE_DIRECTORIES(${lua_INCDIR})
-ADD_DEFINITIONS(${lua_CFLAGS})
-SET(MUTTLIBS "${MUTTLIBS} ${lua_LDFLAGS}")
+INCLUDE(FindPkgConfig)
+
+FIND_LIBRARY(LIBUTIL NAMES util)
+IF(NOT LIBUTIL)
+ MESSAGE(FATAL_ERROR "could not find libutil")
+ENDIF(NOT LIBUTIL)
+LIST(APPEND MUTTLIBS -lutil)
+
+FIND_LIBRARY(NCURSESW NAMES ncursesw)
+IF(NOT NCURSESW OR NOT HAVE_NCURSESW_NCURSES_H)
+ MESSAGE(FATAL_ERROR "could not libncursesw")
+ENDIF(NOT NCURSESW OR NOT HAVE_NCURSESW_NCURSES_H)
+SET(CMAKE_REQUIRED_INCLUDES "ncursesw/ncurses.h")
+LIST(APPEND MUTTLIBS -lncursesw)
+
+pkg_search_module(LUA REQUIRED lua5.1)
+ADD_DEFINITIONS(${LUA_CFLAGS})
+LIST(APPEND MUTTLIBS ${LUA_LDFLAGS})
IF(WITH_GPGME)
XCONFIG(gpgme-config gpgme_INCDIR gpgme_LINKDIR gpgme_LDFLAGS gpgme_CFLAGS)
INCLUDE_DIRECTORIES(${gpgme_INCDIR})
ADD_DEFINITIONS(${gpgme_CFLAGS})
- SET(MUTTLIBS "${MUTTLIBS} ${gpgme_LDFLAGS}")
+ LIST(APPEND MUTTLIBS ${gpgme_LDFLAGS})
SET(HAVE_GPGME 1)
ENDIF(WITH_GPGME)
INCLUDE_DIRECTORIES(${gnutls_INCDIR})
ADD_DEFINITIONS(${gnutls_CFLAGS})
CHECK_INCLUDE_FILE(gnutls/openssl.h HAVE_GNUTLS_OPENSSL_H)
-SET(MUTTLIBS "${MUTTLIBS} ${gnutls_LDFLAGS}")
+LIST(APPEND MUTTLIBS ${gnutls_LDFLAGS})
CHECK_LIBRARY_EXISTS(sasl2 sasl_client_init "" WITH_SASL)
IF(NOT WITH_SASL)
MESSAGE(FATAL_ERROR "sasl2 not found")
ENDIF(NOT WITH_SASL)
-SET(MUTTLIBS "${MUTTLIBS} -lsasl2")
+LIST(APPEND MUTTLIBS -lsasl2)
IF(WITH_IDN)
- PKGCONFIG(libidn idn_INCDIR idn_LINKDIR idn_LDFLAGS idn_CFLAGS)
- SET(MUTTLIBS "${MUTTLIBS} ${idn_LDFLAGS}")
+ pkg_search_module(IDN REQUIRED libidn)
+ LIST(APPEND MUTTLIBS ${IDN_LDFLAGS})
SET(HAVE_LIBIDN 1)
ENDIF(WITH_IDN)
+CHECK_LIBRARY_EXISTS(lockfile lockfile_create "" WITH_LOCKFILE)
+IF(NOT WITH_LOCKFILE)
+ MESSAGE(FATAL_ERROR "lockfile not found")
+ENDIF(NOT WITH_LOCKFILE)
+LIST(APPEND MUTTLIBS -llockfile)
+
IF(USE_HCACHE)
OPTION(WITH_QDBM "Use qdbm for header caching [default: on]" ON)
OPTION(WITH_GDBM "Use gdbm for header caching [default: off]")
SET(USE_HCACHE)
IF(WITH_QDBM)
- PKGCONFIG(qdbm qdbm_INCDIR qdbm_LINKDIR qdbm_LDFLAGS qdbm_CFLAGS)
- IF(qdbm_LDFLAGS)
- MESSAGE(STATUS "qdbm found")
- ELSE(qdbm_LDFLAGS)
- MESSAGE(FATAL_ERROR "qdbm not found")
- ENDIF(qdbm_LDFLAGS)
- INCLUDE_DIRECTORIES(${qdbm_INCDIR})
- ADD_DEFINITIONS(${qdbm_CFLAGS})
- SET(MUTTLIBS "${MUTTLIBS} ${qdbm_LDFLAGS}")
+ pkg_search_module(QDBM REQUIRED qdbm)
+ ADD_DEFINITIONS(${QDBM_CFLAGS})
+ SET(QDBM_LDFLAGS "${QDBM_LDFLAGS}")
+ # LIST(APPEND MUTTLIBS ${QDBM_LDFLAGS})
+ LIST(APPEND MUTTLIBS -lqdbm)
SET(USE_HCACHE 1)
SET(HAVE_QDBM 1)
ENDIF(WITH_QDBM)
IF(NOT GDBM)
MESSAGE(FATAL_ERROR "gdbm not found")
ENDIF(NOT GDBM)
- SET(MUTTLIBS "${MUTTLIBS} -lgdbm")
+ LIST(APPEND MUTTLIBS -lgdbm)
SET(USE_HCACHE 1)
SET(HAVE_GDBM 1)
ENDIF(NOT USE_HCACHE AND WITH_GDBM)
ENDIF(NOT USE_HCACHE)
ENDIF(USE_HCACHE)
-IF(WITH_NNTP AND NOT USE_NNTP)
- SET(USE_NNTP 1)
- MESSAGE(STATUS "building NNTP support")
-ENDIF(WITH_NNTP AND NOT USE_NNTP)
-
# }}}
# C flags {{{
# big debug flags
# warn about functions without format attribute that should have one
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wmissing-format-attribute")
# }}}
+# D flags {{{
+# big debug flags
+SET(CMAKE_D_FLAGS "${CMAKE_D_FLAGS} -ggdb3")
+# Use pipes and not temp files.
+SET(CMAKE_D_FLAGS "${CMAKE_D_FLAGS} -pipe")
+# optimize even more
+SET(CMAKE_D_FLAGS "${CMAKE_D_FLAGS} -O2")
+# let the type char be unsigned by default
+SET(CMAKE_D_FLAGS "${CMAKE_D_FLAGS} -funsigned-char")
+SET(CMAKE_D_FLAGS "${CMAKE_D_FLAGS} -fstrict-aliasing")
+# turn on all common warnings
+SET(CMAKE_D_FLAGS "${CMAKE_D_FLAGS} -Wall")
+# turn on extra warnings
+SET(CMAKE_D_FLAGS "${CMAKE_D_FLAGS} -W")
+# treat warnings as errors
+#SET(CMAKE_D_FLAGS "${CMAKE_D_FLAGS} -Werror")
+# warn about local variable shadowing another local variable
+SET(CMAKE_D_FLAGS "${CMAKE_D_FLAGS} -Wshadow")
+# warn about casting of pointers to increased alignment requirements
+SET(CMAKE_D_FLAGS "${CMAKE_D_FLAGS} -Wcast-align")
+# warn about comparisons between signed and unsigned values
+SET(CMAKE_D_FLAGS "${CMAKE_D_FLAGS} -Wsign-compare")
+# warn about unused declared stuff
+SET(CMAKE_D_FLAGS "${CMAKE_D_FLAGS} -Wunused")
+SET(CMAKE_D_FLAGS "${CMAKE_D_FLAGS} -Wno-unused-parameter")
+# warn about variable use before initialization
+SET(CMAKE_D_FLAGS "${CMAKE_D_FLAGS} -Wuninitialized")
+# }}}
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h)
account.c
attach.c
- browser.c
commands.c
compose.c
copy.c
editmsg.c
flags.c
- from.c
handler.c
headers.c
help.c
postpone.c
recvattach.c
recvcmd.c
- remailer.c
send.c
sendlib.c
sort.c
main.c
)
-IF(WITH_NNTP)
- MADMUTT_SOURCES(madmuttsrc madmuttgen
- nntp.c
- )
-ENDIF(WITH_NNTP)
+STRING(REGEX REPLACE ";" " " MUTTLIBS "${MUTTLIBS}")
ADD_EXECUTABLE(madmutt ${madmuttsrc})
-TARGET_LINK_LIBRARIES(madmutt mime sys mx lua imap ui lib)
-SET_TARGET_PROPERTIES(madmutt PROPERTIES LINK_FLAGS ${MUTTLIBS})
-
-ADD_EXECUTABLE(madmutt_dotlock dotlock.c)
-TARGET_LINK_LIBRARIES(madmutt_dotlock lib)
+TARGET_LINK_LIBRARIES(madmutt mime sys mx lua ui imap lib)
+SET_TARGET_PROPERTIES(madmutt PROPERTIES
+ LINK_FLAGS "${MUTTLIBS}"
+ # LINKER_LANGUAGE D
+)
# generate_files hack {{{