project(gpgme)

cmake_minimum_required(VERSION 2.6)

option(BUILD_STATIC    "build a static version of gpgme" OFF)
option(BUILD_TESTS     "build test executables for gpgme" ON)
option(ENABLE_ASSUAN2  "build in assuan ipc support" ON)
option(ENABLE_GPGSM    "build in gpgsm support" ON)
option(ENABLE_GPGCONF  "build in gpgconf support" ON)
option(ENABLE_G13      "build in g13 support" ON)
option(ENABLE_UISERVER "build in uiserver support" ON)

if(BUILD_TESTS)
    enable_testing()
endif(BUILD_TESTS)

set(NEED__FILE_OFFSET_BITS 0)
set(VERSION "\"1.3.1\"")
set(NEED_GPG_VERSION "\"2.0.17\"")
set(NEED_G13_VERSION "\"\"")
set(NEED_GPGCONF_VERSION "\"\"")
set(NEED_GPGSM_VERSION "\"\"")
set(PACKAGE "\"gpgme\"")
set(PACKAGE_BUGREPORT "\"kde-windows@kde.org\"")
set(PACKAGE_NAME "\"GnuPG made easy\"")
set(PACKAGE_STRING "\"${PACKAGE}-${VERSION}\"")
set(PACKAGE_VERSION "\"${VERSION}\"")

set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}")
find_package(Gpg-Error REQUIRED)
if(ENABLE_ASSUAN2)
    find_package(Assuan2)
endif(ENABLE_ASSUAN2)

include_directories(${CMAKE_CURRENT_BINARY_DIR} ${GPG_ERROR_INCLUDE_DIR})

if(WINCE)
    include_directories(${GPG_ERROR_INCLUDE_DIR}/gpg-extra)
    add_definitions(-DHAVE_W32CE_SYSTEM)
endif(WINCE)

if(ASSUAN2_FOUND)
    include_directories(${ASSUAN2_INCLUDES})
    set(ENABLE_ASSUAN 1)
endif(ASSUAN2_FOUND)

include(ConfigureChecks.cmake)
include(mkstatus.cmake)

set(gpgme_SRCS
    src/conversion.c
    src/get-env.c
    src/data.c
    src/data-fd.c
    src/data-stream.c
    src/data-mem.c
    src/data-user.c
    src/data-compat.c
    src/signers.c
    src/sig-notation.c
    src/wait.c
    src/wait-global.c
    src/wait-private.c
    src/wait-user.c
    src/op-support.c
    src/encrypt.c
    src/encrypt-sign.c
    src/decrypt.c
    src/decrypt-verify.c
    src/verify.c
    src/sign.c
    src/passphrase.c
    src/progress.c
    src/key.c
    src/keylist.c
    src/trust-item.c
    src/trustlist.c
    src/import.c
    src/export.c
    src/genkey.c
    src/delete.c
    src/edit.c
    src/getauditlog.c
    src/passwd.c
    src/engine.c
    src/engine-gpg.c
    src/vfs-mount.c
    src/vfs-create.c
    src/gpgconf.c
    src/dirinfo.c
    src/debug.c
    src/gpgme.c
    src/version.c
    src/error.c
)

if(WIN32)
    set(gpgme_SRCS
        ${gpgme_SRCS}
        src/ath.c
        src/w32-util.c
        src/w32-sema.c
        src/w32-io.c
    )
    if(WINCE)
        set(gpgme_SRCS
            ${gpgme_SRCS}
            src/w32-ce.c
        )
    endif(WINCE)
    
    if(MSVC)
        add_definitions(-Dsnprintf=_snprintf -Dstrcasecmp=_stricmp -Dstrncasecmp=_strnicmp -wd4996 -wd4244 -wd4018)
    endif(MSVC)
else(WIN32)
    set(gpgme_SRCS
        ${gpgme_SRCS}
        src/posix-util.c
        src/posix-sema.c
        src/posix-io.c
    )
endif(WIN32)

if(NOT HAVE_VASPRINTF)
    set(gpgme_SRCS ${gpgme_SRCS} src/vasprintf.c)
endif(NOT HAVE_VASPRINTF)
if(NOT HAVE_STPCPY)
    set(gpgme_SRCS ${gpgme_SRCS} src/stpcpy.c)
endif(NOT HAVE_STPCPY)
if(NOT HAVE_TTYNAME_R)
    set(gpgme_SRCS ${gpgme_SRCS} src/ttyname_r.c)
endif(NOT HAVE_TTYNAME_R)

if(ASSUAN2_FOUND)
    set(gpgme_SRCS
        ${gpgme_SRCS}
        src/opassuan.c
        src/engine-assuan.c
        src/assuan-support.c
        )
endif(ASSUAN2_FOUND)

if(ENABLE_GPGSM)
    set(gpgme_SRCS
        ${gpgme_SRCS}
        src/engine-gpgsm.c
        )
endif(ENABLE_GPGSM)

if(ENABLE_GPGCONF)
    set(gpgme_SRCS
        ${gpgme_SRCS}
        src/engine-gpgconf.c
        )
endif(ENABLE_GPGCONF)

if(ENABLE_G13)
    set(gpgme_SRCS
        ${gpgme_SRCS}
        src/engine-g13.c
        )
endif(ENABLE_G13)

if(ENABLE_G13)
    set(gpgme_SRCS
        ${gpgme_SRCS}
        src/engine-uiserver.c
        )
endif(ENABLE_G13)

if(BUILD_STATIC)
    set(_shared STATIC)
else(BUILD_STATIC)
    set(_shared SHARED)
    set(gpgme_SRCS ${gpgme_SRCS} src/gpgme.def)
endif(BUILD_STATIC)

add_library(gpgme ${_shared} ${gpgme_SRCS})
target_link_libraries(gpgme ${GPG_ERROR_LIBRARIES})
if(WIN32)
    if(WINCE)
        target_link_libraries(gpgme ws2)
    else(WINCE)
        target_link_libraries(gpgme ws2_32)
    endif(WINCE)
endif(WIN32)

if(ASSUAN2_FOUND)
    target_link_libraries(gpgme ${ASSUAN2_LIBRARIES})
endif(ASSUAN2_FOUND)

install(FILES ${CMAKE_CURRENT_BINARY_DIR}/gpgme.h DESTINATION include)

add_executable(gpgme-tool src/gpgme-tool.c)
add_executable(gpgme-w32spawn src/gpgme-w32spawn.c)
target_link_libraries(gpgme-tool gpgme ${GPG_ERROR_LIBRARIES} ${ASSUAN2_LIBRARIES})
target_link_libraries(gpgme-w32spawn gpgme ${GPG_ERROR_LIBRARIES})

install(TARGETS gpgme gpgme-tool gpgme-w32spawn RUNTIME DESTINATION bin
                                 LIBRARY DESTINATION lib
                                 ARCHIVE DESTINATION lib)

if(BUILD_TESTS)
    add_subdirectory(tests)
endif(BUILD_TESTS)
macro_display_feature_log()
