Codebase list libktoblzcheck / a45adb0c-9770-4091-8b61-917653fa27d4/main CMakeLists.txt
a45adb0c-9770-4091-8b61-917653fa27d4/main

Tree @a45adb0c-9770-4091-8b61-917653fa27d4/main (Download .tar.gz)

CMakeLists.txt @a45adb0c-9770-4091-8b61-917653fa27d4/mainraw · history · blame

cmake_minimum_required(VERSION 3.0)

project(ktoblzcheck VERSION 1.53.0)

# define path for local cmake modules
list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)

########### options ###############
option(ENABLE_BANKDATA_DOWNLOAD "Enable download of raw bank data file" ON)
option(INSTALL_RAW_BANKDATA_FILE "Install raw bank data file" OFF)

########### global settings ###############
set(BANK_WEBSITE_HOST https://www.bundesbank.de)
set(BANK_WEBSITE_PATH /de/aufgaben/unbarer-zahlungsverkehr/serviceangebot/bankleitzahlen/download---bankleitzahlen-602592)
# format description
#https://www.bundesbank.de/resource/blob/602848/50cba8afda2b0b1442016101cfd7e084/mL/merkblatt-bankleitzahlendatei-data.pdf

option(INSTALL_SEPA_BANKDATA_FILE "Install sepa provider data file in csv format" OFF)
option(BUILD_STATIC "build static library and executables" OFF)
if(BUILD_STATIC)
    set(LIBS -static -static-libgcc -static-libstdc++)
    set(CMAKE_BUILD_TYPE Release)
endif()

# provide gnu compatible install dirs
include(GNUInstallDirs)

# definitions for running cross compile applications
include(MacrosWine)

# common macros
include(Macros)

# set PACKAGE_... variables
include(MacrosAutotools)
autopackage(${PROJECT_NAME} ${PROJECT_VERSION} "${PROJECT_HOMEPAGE_URL}" "https://sourceforge.net/projects/ktoblzcheck/support")

# definitions in source file
set(KTOBLZCHECK_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
set(KTOBLZCHECK_VERSION_MINOR ${PROJECT_VERSION_MINOR})
set(KTOBLZCHECK_VERSION_PATCH ${PROJECT_VERSION_PATCH})

# shared library version numbers
set(LIBKTOBLZCHECK_CURRENT 6)
set(LIBKTOBLZCHECK_AGE 5)
set(LIBKTOBLZCHECK_REVISION 26)
math(EXPR LIBKTOBLZCHECK_EFFECTIVE "${LIBKTOBLZCHECK_CURRENT} - ${LIBKTOBLZCHECK_AGE}")

if(WIN32)
    set(OS_WIN32 1)
endif()

# target build dir defaults
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
if(WIN32)
   set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
   set(CUSTOM_INSTALL_LIBDIR ${CMAKE_INSTALL_BINDIR})
else()
   set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")
   set(CUSTOM_INSTALL_LIBDIR ${CMAKE_INSTALL_LIBDIR})
endif()

# target install defaults
set(INSTALL_TARGETS_DEFAULT_ARGS
    EXPORT KtoBlzCheckTargets
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
)

# for embedding into installed header files
set(VERSION_MAJOR ${KTOBLZCHECK_VERSION_MAJOR})
set(VERSION_MINOR ${KTOBLZCHECK_VERSION_MINOR})

########### external packages ###############
find_package(Doxygen "1.8.3")

set(CMAKE_THREAD_PREFER_PTHREAD 1)
find_package(Threads REQUIRED)
if(CMAKE_USE_PTHREADS_INIT)
    set(HAVE_LIBPTHREAD 1)
endif()

find_package (Python3 COMPONENTS Interpreter Development)
if(Python3_FOUND)
    set(Python_EXECUTABLE ${Python3_EXECUTABLE})
    string(REGEX REPLACE "^([0-9]+.[0-9]+).*" "\\1" Python_VERSION_MAJOR_MINOR ${Python3_VERSION})
    set(Python_SITEARCH "${CMAKE_INSTALL_LIBDIR}/python${Python_VERSION_MAJOR_MINOR}/site-packages")
    set(Python_Interpreter_FOUND TRUE)
    set(Python_Development_FOUND TRUE)
else()
    find_package(Python2 COMPONENTS Interpreter Development)
    # for cmake < 3.12
    if(Python2_Interpreter_FOUND)
        set(Python_EXECUTABLE ${Python2_EXECUTABLE})
        set(Python_Interpreter_FOUND TRUE)
    else()
        find_package(PythonInterp 2.7 REQUIRED)
        set(Python_Interpreter_FOUND TRUE)
        set(Python_EXECUTABLE ${PYTHON_EXECUTABLE})
    endif()
    if(Python2_Development_FOUND)
        string(REGEX REPLACE "^([0-9]+.[0-9]+).*" "\\1" Python_VERSION_MAJOR_MINOR ${Python2_VERSION})
        set(Python_SITEARCH "${CMAKE_INSTALL_LIBDIR}/python${Python_VERSION_MAJOR_MINOR}/site-packages")
        set(Python_Development_FOUND TRUE)
    else()
        find_package(PythonLibs 2.6 REQUIRED)
        set(Python_Development_FOUND TRUE)
        set(Python2_VERSION ${PYTHONLIBS_VERSION_STRING})
        string(REGEX REPLACE "^([0-9]+.[0-9]+).*" "\\1" Python_VERSION_MAJOR_MINOR ${Python2_VERSION})
        set(Python_SITEARCH "${CMAKE_INSTALL_LIBDIR}/python${Python_VERSION_MAJOR_MINOR}/site-packages")
    endif()
endif()
########### configure checks ###############
include(CheckIncludeFile)
check_include_file(dirent.h     HAVE_DIRENT_H)
check_include_file(dlfcn.h      HAVE_DLFCN_H)
check_include_file(inttypes.h   HAVE_INTTYPES_H)
check_include_file(memory.h     HAVE_MEMORY_H)
check_include_file(stdint.h     HAVE_STDINT_H)
check_include_file(stdlib.h     HAVE_STDLIB_H)
check_include_file(stdio.h      HAVE_STDIO_H)
check_include_file(string.h     HAVE_STRING_H)
check_include_file(strings.h    HAVE_STRINGS_H)
check_include_file(syslog.h     HAVE_SYSLOG_H)
check_include_file(sys/stat.h   HAVE_SYS_STAT_H)
check_include_file(sys/types.h  HAVE_SYS_TYPES_H)
check_include_file(windows.h    HAVE_WINDOWS_H)

include(CheckTypeSize)
check_type_size("long long" LONG_LONG)


# bankdata related variables
set(BANKDATA_SRCPATH ${CMAKE_SOURCE_DIR}/src/bankdata)
if(ENABLE_BANKDATA_DOWNLOAD)
    string(TIMESTAMP _BANKDATA_FILE "bankdata_%Y%m%d.txt")
    set(BANKDATA_FILE ${_BANKDATA_FILE})
    set(BANKDATA_FILEPATH "${BANKDATA_SRCPATH}/${BANKDATA_FILE}")
    message(STATUS "Using bank data file ${BANKDATA_FILEPATH}")

    string(TIMESTAMP _BANKDATA_RAW_FILE "blz_%Y%m%d.txt")
    set(BANKDATA_RAW_FILE ${_BANKDATA_RAW_FILE})
    set(BANKDATA_RAW_FILEPATH "${BANKDATA_SRCPATH}/${BANKDATA_RAW_FILE}")
    message(STATUS "Using raw bank data file ${BANKDATA_RAW_FILEPATH}")
else()
    file(GLOB BANKDATA_FILEPATH  "${BANKDATA_SRCPATH}/bankdata_*.txt")
    get_filename_component(BANKDATA_FILE ${BANKDATA_FILEPATH} NAME)
    message(STATUS "Using present bank data file ${BANKDATA_FILEPATH}")

    file(GLOB BANKDATA_RAW_FILEPATH  "${BANKDATA_SRCPATH}/blz_*.txt")
    get_filename_component(BANKDATA_RAW_FILE ${BANKDATA_RAW_FILEPATH} NAME)
    message(STATUS "Using present raw bank data file ${BANKDATA_RAW_FILEPATH}")
endif()
set(BANKDATA_PATH ${CMAKE_INSTALL_FULL_DATADIR}/ktoblzcheck)
add_definitions(-DBANKDATA_PATH="${BANKDATA_PATH}")

########### generate pkgconfig file ###############
set(prefix "\${pcfiledir}/../..")
set(exec_prefix "\${prefix}")
set(bindir "\${prefix}/${CMAKE_INSTALL_BINDIR}")
set(libdir "\${prefix}/${CMAKE_INSTALL_LIBDIR}")
set(includedir "\${prefix}/${CMAKE_INSTALL_INCLUDEDIR}")
set(datadir "\${prefix}/${CMAKE_INSTALL_DATADIR}")
if (Python_SITEARCH)
    set(pythondir "\${prefix}${Python_SITEARCH}")
endif()

configure_file(${PACKAGE}.pc.in ${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE}.pc @ONLY)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE}.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)

########### generate cmake find_package file ###############
include(CMakePackageConfigHelpers)

set(INSTALL_CMAKE_DIR ${CMAKE_INSTALL_LIBDIR}/cmake/KtoBlzCheck)
configure_package_config_file(KtoBlzCheckConfig.cmake.in
    ${CMAKE_CURRENT_BINARY_DIR}/KtoBlzCheckConfig.cmake
    INSTALL_DESTINATION ${INSTALL_CMAKE_DIR}
)
write_basic_package_version_file(
    ${CMAKE_CURRENT_BINARY_DIR}/KtoBlzCheckConfigVersion.cmake
    VERSION ${PROJECT_VERSION}
    COMPATIBILITY AnyNewerVersion
)

install(EXPORT KtoBlzCheckTargets
    FILE KtoBlzCheckTargets.cmake
    DESTINATION ${INSTALL_CMAKE_DIR}
)

# used by install autotests
export(EXPORT KtoBlzCheckTargets FILE KtoBlzCheckTargets.cmake)

install(FILES
    ${CMAKE_CURRENT_BINARY_DIR}/KtoBlzCheckConfig.cmake
    ${CMAKE_CURRENT_BINARY_DIR}/KtoBlzCheckConfigVersion.cmake
    DESTINATION ${INSTALL_CMAKE_DIR}
)

########### generate config.h ###############
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h)
add_definitions(
    -DHAVE_CONFIG_H
)

########### generate spec file ###############
configure_file(ktoblzcheck.spec.in ${CMAKE_BINARY_DIR}/ktoblzcheck.spec)

########### generate tarball ###############
set(tarname ${PACKAGE}-${PROJECT_VERSION})
set(temppath ${CMAKE_BINARY_DIR}/tmp/${tarname})
set(tarball ${CMAKE_BINARY_DIR}/${tarname}.tar.gz)
add_custom_command(OUTPUT ${temppath}
    COMMAND ${CMAKE_COMMAND} -E make_directory ${temppath}
)

add_custom_target(dist
    COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}  ${temppath}
    COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/config.h.cmake ${temppath}
    COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/ktoblzcheck.spec ${temppath}
    COMMAND ${CMAKE_COMMAND} -E tar -czf ${tarball} ${tarname}
    WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/tmp
    COMMENT "generating ${tarball}"
    DEPENDS ${temppath} ${CMAKE_BINARY_DIR}/ktoblzcheck.spec ${CMAKE_BINARY_DIR}/config.h.cmake
)

add_custom_target(rpm
    COMMAND rpmbuild -ta ${tarball}
    WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
    COMMENT "generating rpm file"
    DEPENDS dist
)

add_custom_target(srpm
    COMMAND rpmbuild -ts ${tarball}
    WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
    COMMENT "generating srpm file"
    DEPENDS dist
)

#
# add package_source target
#

# find files not in git repo
exec_program(git ${CMAKE_SOURCE_DIR}
    ARGS ls-files --others --directory
    OUTPUT_VARIABLE IGNORE_FILES
)
string(REGEX REPLACE "\n" ";" IGNORE_FILES "${IGNORE_FILES}")

# did not find a way to disable binary generator for now
set(CPACK_GENERATOR "XX")
set(CPACK_STRIP_FILES TRUE)
set(CPACK_SOURCE_GENERATOR "TGZ")
set(CPACK_SOURCE_IGNORE_FILES ".git;${IGNORE_FILES}")
set(CPACK_SOURCE_PACKAGE_FILE_NAME "${PROJECT_NAME}-${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}")
include(CPack)

########### generate installer ###############
if(WIN32)
    find_file(
        ISCC_EXECUTABLE ISCC.exe
        PATH
            ${ISCC_DIR}
            "$ENV{ProgramFiles}/Inno\ Setup\ 5/"
            "$ENV{ProgramFiles}/Inno\ Setup\ 6/"
        NO_DEFAULT_PATH
    )
    if (ISCC_EXECUTABLE)
        message(STATUS "Inno Setup compiler found at ${ISCC_EXECUTABLE}")
        configure_file(${CMAKE_CURRENT_SOURCE_DIR}/ktoblzcheck.iss.in ${CMAKE_CURRENT_BINARY_DIR}/ktoblzcheck.iss)
        set(FILES "README;COPYING;README.WIN32;AUTHORS;ChangeLog")
        foreach(f ${FILES})
            configure_file(${CMAKE_CURRENT_SOURCE_DIR}/${f} ${CMAKE_CURRENT_BINARY_DIR}/${f} COPYONLY)
        endforeach()
        add_custom_target(setup
            COMMAND ${CMAKE_MAKE_PROGRAM} install DESTDIR=${CMAKE_CURRENT_BINARY_DIR}/win32-tmp
            COMMAND ${CMAKE_COMMAND} -E copy_directory
                ${CMAKE_CURRENT_BINARY_DIR}/win32-tmp${CMAKE_INSTALL_PREFIX}
                ${CMAKE_CURRENT_BINARY_DIR}/win32-tmp
            COMMAND wine ${ISCC_EXECUTABLE} z:${CMAKE_CURRENT_BINARY_DIR}/ktoblzcheck.iss
            WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
        )
    endif()
endif()

# enable ctest
enable_testing()

add_subdirectory(autotests)
add_subdirectory(src)
add_subdirectory(doc)


add_custom_target(uncrustify
    COMMAND ${CMAKE_SOURCE_DIR}/uncrustify.sh
    COMMENT "uncrustify sources"
)

include(FeatureSummary)
feature_summary(WHAT ALL)