Rewrite is_from efficiently, and put it in lib-mime where it belongs.
[apps/madmutt.git] / CMakeLists.txt
index 25ded1b..67bede3 100644 (file)
@@ -1,10 +1,9 @@
 PROJECT(madmutt C)
+SET(PACKAGE madmutt)
 SET(CMAKE_MODULE_PATH  ${madmutt_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH})
 
 # TODO {{{
 # USE_SETGID
-# DOTLOCK_{GROUP,PERMISSION}
-# HAVE_DIRENT_D_INO
 # }}}
 
 INCLUDE(CMakeDetermineCCompiler)
@@ -13,9 +12,10 @@ include(XConfig)
 
 ADD_DEFINITIONS(-DHAVE_CONFIG_H)
 ADD_DEFINITIONS(-D_GNU_SOURCE)
-INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR} ${madmutt_SOURCE_DIR})
+INCLUDE_DIRECTORIES(${madmutt_BINARY_DIR} ${madmutt_SOURCE_DIR})
 
 SET(BINDIR     "${CMAKE_INSTALL_PREFIX}/bin")
+SET(DATADIR    "${CMAKE_INSTALL_PREFIX}/share")
 SET(PKGDATADIR "${CMAKE_INSTALL_PREFIX}/share/madmutt")
 SET(PKGDOCDIR  "${CMAKE_INSTALL_PREFIX}/share/doc/madmutt")
 SET(SYSCONFDIR "${CMAKE_INSTALL_PREFIX}/etc")
@@ -27,33 +27,35 @@ ADD_DEFINITIONS("-DPKGDATADIR=\\\"${PKGDATADIR}\\\"")
 ADD_DEFINITIONS("-DPKGDOCDIR=\\\"${PKGDOCDIR}\\\"")
 ADD_DEFINITIONS("-DSYSCONFDIR=\\\"${SYSCONFDIR}\\\"")
 ADD_DEFINITIONS("-DVERSION=\\\"${VERSION}\\\"")
+ADD_DEFINITIONS("-DMUTTLOCALEDIR=\\\"${DATADIR}/locale\\\"")
 
-OPTION(WITH_MAILPATH "Where new mail is spooled")
+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(WITH_LIBESMTP "Use libESMTP [default: off]")
-OPTION(WITH_SLANG    "Use S-Lang instead of ncurses [default:off]")
 
 OPTION(USE_FLOCK     "Use flock to lock files [default: off]")
 OPTION(USE_FCNTL     "Use fcntl to lock files [default: on]" ON)
 OPTION(USE_HCACHE    "Enable headers caching  [default: off]")
 
-FIND_FILE(GPERF gperf)
-FIND_FILE(SENDMAIL sendmail PATHS /usr/sbin /sbin /usr/lib)
-FIND_FILE(MIXMASTER mixmaster)
-
-IF(WITH_MAILPATH)
-    SET(MAILPATH ${WITH_MAILPATH})
-ELSEIF(EXISTS /var/mail)
-    SET(MAILPATH "/var/mail")
-ELSEIF(EXISTS /var/spool/mail)
-    SET(MAILPATH "/var/spool/mail")
-ELSEIF(EXISTS /usr/spool/mail)
-    SET(MAILPATH "/usr/spool/mail")
-ELSEIF(EXISTS /usr/mail)
-    SET(MAILPATH "/usr/mail")
-ENDIF(WITH_MAILPATH)
+FIND_FILE(SENDMAIL sendmail
+    PATHS /usr/sbin /sbin /usr/lib
+    DOC   "path to sendmail executable"
+)
+
+IF(NOT MAILPATH)
+    IF(EXISTS /var/mail)
+        SET(MAILPATH "/var/mail")
+    ELSEIF(EXISTS /var/spool/mail)
+        SET(MAILPATH "/var/spool/mail")
+    ELSEIF(EXISTS /usr/spool/mail)
+        SET(MAILPATH "/usr/spool/mail")
+    ELSEIF(EXISTS /usr/mail)
+        SET(MAILPATH "/usr/mail")
+    ELSE(EXISTS /var/mail)
+        MESSAGE(FATAL_ERROR "Unable to determine MAILPATH")
+    ENDIF(EXISTS /var/mail)
+ENDIF(NOT MAILPATH)
 
 # headers {{{
 INCLUDE(CheckIncludeFile)
@@ -94,28 +96,21 @@ IF(NOT HAVE_ICONV_H)
     MESSAGE(FATAL_ERROR "inconv.h not found")
 ENDIF(NOT HAVE_ICONV_H)
 
+# }}}
+# types {{{
+
+INCLUDE(CheckStructMember)
+
+CHECK_STRUCT_MEMBER("struct dirent" "d_ino" "dirent.h" HAVE_DIRENT_D_INO)
+
 # }}}
 # functions {{{
 INCLUDE (CheckFunctionExists)
 
 CHECK_FUNCTION_EXISTS(strlimit    HAVE_SETRLIMIT)
 CHECK_FUNCTION_EXISTS(getsid      HAVE_GETSID)
-CHECK_FUNCTION_EXISTS(isctype     HAVE_ISCTYPE)
+CHECK_FUNCTION_EXISTS(setegid     HAVE_SETEGID)
 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)
 
 # }}}
@@ -123,40 +118,22 @@ CHECK_FUNCTION_EXISTS(nl_langinfo HAVE_LANGINFO_CODESET)
 INCLUDE(CheckLibraryExists)
 INCLUDE(UsePkgConfig)
 
-IF(WITH_SLANG)
-    IF(EXISTS ${CMAKE_INSTALL_PREFIX}/include/slang)
-        INCLUDE_DIRECTORIES(${CMAKE_INSTALL_PREFIX}/include/slang)
-    ELSEIF(EXISTS /usr/include/slang)
-        INCLUDE_DIRECTORIES(/usr/include/slang)
-    ENDIF(EXISTS ${CMAKE_INSTALL_PREFIX}/include/slang)
-    CHECK_LIBRARY_EXISTS(slang SLtt_get_terminfo "" USE_SLANG_CURSES)
-    IF(NOT USE_SLANG_CURSES)
-        MESSAGE(FATAL_ERROR "s-lang not found")
-    ENDIF(NOT USE_SLANG_CURSES)
-ELSE(WITH_SLANG)
-    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)
-ENDIF(WITH_SLANG)
+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(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}")
@@ -169,11 +146,13 @@ IF(WITH_GPGME)
     INCLUDE_DIRECTORIES(${gpgme_INCDIR})
     ADD_DEFINITIONS(${gpgme_CFLAGS})
     SET(MUTTLIBS "${MUTTLIBS} ${gpgme_LDFLAGS}")
+    SET(HAVE_GPGME 1)
 ENDIF(WITH_GPGME)
 
 XCONFIG(libgnutls-config gnutls_INCDIR gnutls_LINKDIR gnutls_LDFLAGS gnutls_CFLAGS)
 INCLUDE_DIRECTORIES(${gnutls_INCDIR})
 ADD_DEFINITIONS(${gnutls_CFLAGS})
+CHECK_INCLUDE_FILE(gnutls/openssl.h  HAVE_GNUTLS_OPENSSL_H)
 SET(MUTTLIBS "${MUTTLIBS} ${gnutls_LDFLAGS}")
 
 CHECK_LIBRARY_EXISTS(sasl2 sasl_client_init "" WITH_SASL)
@@ -188,6 +167,12 @@ IF(WITH_IDN)
     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)
+SET(MUTTLIBS "${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]")
@@ -222,15 +207,10 @@ IF(USE_HCACHE)
     ENDIF(NOT USE_HCACHE)
 ENDIF(USE_HCACHE)
 
-IF(WITH_LIBESMTP)
-    SET(USE_LIBESMTP 1)
-    SET(MUTTLIBS "${MUTTLIBS} -lesmtp")
-ENDIF(WITH_LIBESMTP)
-
-IF(WITH_NNTP)
+IF(WITH_NNTP AND NOT USE_NNTP)
     SET(USE_NNTP 1)
     MESSAGE(STATUS "building NNTP support")
-ENDIF(WITH_NNTP)
+ENDIF(WITH_NNTP AND NOT USE_NNTP)
 
 # }}}
 # C flags {{{
@@ -289,28 +269,25 @@ ADD_SUBDIRECTORY(lib-mime)
 ADD_SUBDIRECTORY(lib-sys)
 ADD_SUBDIRECTORY(lib-ui)
 ADD_SUBDIRECTORY(imap)
-IF(WITH_NNTP)
-    ADD_SUBDIRECTORY(nntp)
-ENDIF(WITH_NNTP)
 ADD_SUBDIRECTORY(lib-mx)
 ADD_SUBDIRECTORY(lib-lua)
+ADD_SUBDIRECTORY(po)
 
 MADMUTT_SOURCES(madmuttsrc madmuttgen
     alias.cpkg
     buffy.cpkg
     charset.cpkg
     crypt.cpkg
+    score.cpkg
 
     account.c
     attach.c
-    base64.c
     browser.c
     commands.c
     compose.c
     copy.c
     editmsg.c
     flags.c
-    from.c
     handler.c
     headers.c
     help.c
@@ -326,35 +303,30 @@ MADMUTT_SOURCES(madmuttsrc madmuttgen
     postpone.c
     recvattach.c
     recvcmd.c
-    remailer.c
-    score.c
     send.c
     sendlib.c
-    send_smtp.c
     sort.c
     state.c
     thread.c
 
     main.c
 )
-
-ADD_EXECUTABLE(madmutt ${madmuttsrc})
 IF(WITH_NNTP)
-    TARGET_LINK_LIBRARIES(madmutt mime sys mx lua imap nntp ui lib)
-ELSE(WITH_NNTP)
-    TARGET_LINK_LIBRARIES(madmutt mime sys mx lua imap ui lib)
+    MADMUTT_SOURCES(madmuttsrc madmuttgen
+        nntp.c
+    )
 ENDIF(WITH_NNTP)
-SET_TARGET_PROPERTIES(madmutt PROPERTIES LINK_FLAGS ${MUTTLIBS})
 
-ADD_EXECUTABLE(madmutt_dotlock dotlock.c)
-TARGET_LINK_LIBRARIES(madmutt_dotlock lib)
+ADD_EXECUTABLE(madmutt ${madmuttsrc})
+TARGET_LINK_LIBRARIES(madmutt mime sys mx lua imap ui lib)
+SET_TARGET_PROPERTIES(madmutt PROPERTIES LINK_FLAGS ${MUTTLIBS})
 
 # generate_files hack {{{
 
 ADD_CUSTOM_COMMAND(
     OUTPUT  ${madmutt_SOURCE_DIR}/keymap_defs.h
-    DEPENDS ${madmutt_SOURCE_DIR}/OPS
-    COMMAND ${madmutt_SOURCE_DIR}/gen_defs ${madmutt_SOURCE_DIR}/OPS > ${madmutt_SOURCE_DIR}/keymap_defs.h
+    DEPENDS ${madmutt_SOURCE_DIR}/OPS ${madmutt_SOURCE_DIR}/tools/gen_defs
+    COMMAND ${madmutt_SOURCE_DIR}/tools/gen_defs ${madmutt_SOURCE_DIR}/OPS > ${madmutt_SOURCE_DIR}/keymap_defs.h
     COMMENT "Generating ${madmutt_SOURCE_DIR}/keymap_defs.h from ${madmutt_SOURCE_DIR}/OPS"
 )
 ADD_CUSTOM_COMMAND(
@@ -363,37 +335,12 @@ ADD_CUSTOM_COMMAND(
     COMMAND sh ${madmutt_SOURCE_DIR}/charset.def > ${madmutt_SOURCE_DIR}/charset.gperf
     COMMENT "Generating ${madmutt_SOURCE_DIR}/charset.gperf from ${madmutt_SOURCE_DIR}/charset.def"
 )
-SET(__mt ${CMAKE_CURRENT_SOURCE_DIR}/lib-mime/mime-token)
-ADD_CUSTOM_COMMAND(
-    OUTPUT ${__mt}.h
-    MAIN_DEPENDENCY ${__mt}.sh ${__mt}.def
-    COMMAND sh ${__mt}.sh ${__mt}.h < ${__mt}.def
-    COMMENT "Generating ${__mt}.h from ${__mt}.def"
-)
-SET(__lt ${CMAKE_CURRENT_SOURCE_DIR}/lib-lua/lua-token)
-ADD_CUSTOM_COMMAND(
-    OUTPUT ${__lt}.h
-    MAIN_DEPENDENCY ${__lt}.gperf
-    COMMAND sh ${__lt}.gperf ${__lt}.h || \(${RM} ${__lt}.h; exit 1\)
-    COMMENT "Generating ${__lt}.h from ${__lt}.gperf"
-)
-SET(__lm ${CMAKE_CURRENT_SOURCE_DIR}/lib-lua/madmutt)
-ADD_CUSTOM_COMMAND(
-    OUTPUT ${__lm}.li
-    MAIN_DEPENDENCY ${__lm}.cpkg
-    COMMAND ${madmutt_SOURCE_DIR}/tools/cpkg2c -h ${__lm}.cpkg > ${__lm}.li || \(${RM} ${__lm}.li; exit 1\)
-    COMMENT "Generating ${__lm}.li from ${__lm}.cpkg"
-)
-ADD_CUSTOM_TARGET(
-    generate_files
-    DEPENDS
-        ${madmuttgen}
-        ${madmutt_SOURCE_DIR}/keymap_defs.h
-        ${madmutt_SOURCE_DIR}/charset.gperf
-        ${madmutt_SOURCE_DIR}/lib-mime/mime-token.h
-        ${madmutt_SOURCE_DIR}/lib-lua/lua-token.h
-        ${madmutt_SOURCE_DIR}/lib-lua/madmutt.li
+ADD_CUSTOM_TARGET(generate_file
+    DEPENDS ${madmuttgen}
+    ${madmutt_SOURCE_DIR}/keymap_defs.h
+    ${madmutt_SOURCE_DIR}/charset.gperf
 )
-ADD_DEPENDENCIES(madmutt generate_files)
+ADD_DEPENDENCIES(generate_file generate_files)
+ADD_DEPENDENCIES(madmutt generate_file)
 
 # }}}