project(assuan)

cmake_minimum_required(VERSION 2.6)

option(BUILD_STATIC "build a static library instead of a dll" OFF)

set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules)
find_package(Gpg-Error REQUIRED)

include_directories(${CMAKE_CURRENT_BINARY_DIR} ${GPG_ERROR_INCLUDE_DIR})

include(ConfigureChecks.cmake)

if(WIN32)
	set(HostOS mingw32)
	if(WINCE)
		set(HostOS mingw32ce)
        include_directories(${GPG_ERROR_INCLUDE_DIR}/gpg-extra)
        find_program(MKHEADER_EXE mkheader)
        set(MKHEADER_TARGET)
	else(WINCE)
        add_executable(mkheader src/mkheader.c)
        get_target_property(MKHEADER_EXE mkheader LOCATION)
        install(TARGETS mkheader RUNTIME DESTINATION bin
                                 LIBRARY DESTINATION lib
                                 ARCHIVE DESTINATION lib)
        set(MKHEADER_TARGET mkheader)
	endif(WINCE)
endif(WIN32)

add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/assuan.h COMMAND ${MKHEADER_EXE} ${HostOS} ${CMAKE_CURRENT_SOURCE_DIR}/src/assuan.h.in > ${CMAKE_CURRENT_BINARY_DIR}/assuan.h DEPENDS ${MKHEADER_TARGET})

set(assuan_SRCS
    src/assuan.c
    src/context.c
    src/system.c
	src/debug.c
    src/conversion.c
	src/client.c
    src/server.c
	src/assuan-error.c
	src/assuan-buffer.c
	src/assuan-handler.c
	src/assuan-inquire.c
	src/assuan-listen.c
	src/assuan-pipe-server.c
	src/assuan-socket-server.c
	src/assuan-pipe-connect.c
	src/assuan-socket-connect.c
	src/assuan-uds.c
	src/assuan-logging.c
	src/assuan-socket.c
    src/sysutils.c
    src/assuan-io.c
	${CMAKE_CURRENT_BINARY_DIR}/assuan.h
)

if(NOT HAVE_PUTC_UNLOCKED)
	set(assuan_SRCS ${assuan_SRCS} src/putc_unlocked.c)
endif(NOT HAVE_PUTC_UNLOCKED)
if(NOT HAVE_STPCPY)
	set(assuan_SRCS ${assuan_SRCS} src/stpcpy.c)
endif(NOT HAVE_STPCPY)
if(NOT HAVE_MEMRCHR)
	set(assuan_SRCS ${assuan_SRCS} src/memrchr.c)
endif(NOT HAVE_MEMRCHR)
if(NOT HAVE_VASPRINTF)
	set(assuan_SRCS ${assuan_SRCS} src/vasprintf.c)
endif(NOT HAVE_VASPRINTF)
if(NOT HAVE_SETENV)
	set(assuan_SRCS ${assuan_SRCS} src/setenv.c)
endif(NOT HAVE_SETENV)

if(WIN32)
    set(assuan_SRCS ${assuan_SRCS} src/libassuan.def)

    if(WINCE)
        set(assuan_SRCS ${assuan_SRCS} src/system-w32ce.c)
    else(WINCE)
        set(assuan_SRCS ${assuan_SRCS} src/system-w32.c)
    endif(WINCE)

	if(MSVC)
		add_definitions(-D_CRT_SECURE_NO_DEPRECATE -wd4996)
	endif(MSVC)
endif(WIN32)

if(BUILD_STATIC)
    set(_shared STATIC)
else(BUILD_STATIC)
    set(_shared SHARED)
endif(BUILD_STATIC)

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

install(TARGETS assuan2 RUNTIME DESTINATION bin
                        LIBRARY DESTINATION lib
                        ARCHIVE DESTINATION lib)

if(WINCE)
    set(gpgcedev_SRCS
        src/gpgcedev.c
        src/gpgcedev.def
    )
    add_library(gpgcedev ${gpgcedev_SRCS})

    set(gpgcemgr_SRCS
         src/gpgcemgr.c
    )
    add_executable(gpgcemgr ${gpgcemgr_SRCS})

    install(TARGETS gpgcedev gpgcemgr   RUNTIME DESTINATION bin
                                        LIBRARY DESTINATION lib
                                        ARCHIVE DESTINATION lib)
endif(WINCE)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/assuan.h DESTINATION include)
