Edit

kc3-lang/libqrencode/CMakeLists.txt

Branch :

  • Show log

    Commit

  • Author : Kentaro Fukuchi
    Date : 2018-06-04 18:21:53
    Hash : fb59fd29
    Message : STATIC_IN_RELEASE is now set to "static" when WITH_TESTS is disabled. (closes #126)

  • CMakeLists.txt
  • cmake_minimum_required(VERSION 3.1.0)
    
    project(QRencode VERSION 4.0.0 LANGUAGES C)
    
    option(WITH_TOOLS "Build utility tools"  YES )
    option(WITH_TESTS "Build tests"  NO )
    option(WITHOUT_PNG "Disable PNG support" NO)
    option(GPROF "Generate extra code to write profile information" OFF)
    option(COVERAGE "Generate extra code to write coverage information" OFF)
    option(ASAN "Use AddressSanitizer" OFF)
    option(BUILD_SHARED_LIBS "Enable build of shared libraries" NO)
    
    if(BUILD_TESTING)
        set(WITH_TESTS ON)
        message(DEPRECATION "use WITH_TESTS option instead BUILD_TESTING")
    endif()
    
    list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
    
    find_package(Threads)
    find_package(PNG)
    find_package(Iconv)
    
    ## Check for system include files
    include(CheckIncludeFile)
    include(CheckFunctionExists)
    
    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(strings.h  HAVE_STRINGS_H )
    check_include_file(string.h   HAVE_STRING_H  )
    check_include_file(getopt.h   HAVE_GETOPT_H  )
    check_include_file(sys/time.h HAVE_SYS_TIME_H)
    
    check_function_exists(strdup HAVE_STRDUP)
    
    if(HAVE_STRDUP)
        add_definitions(-DHAVE_STRDUP=1)
    endif()
    
    if(CMAKE_COMPILER_IS_GNUCXX)
        set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall")
    endif()
    
    if(GPROF)
        set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pg")
    endif()
    
    if(COVERAGE)
        set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --coverage")
    endif()
    
    if(ASAN)
        set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fno-omit-frame-pointer -fno-optimize-sibling-calls")
    endif()
    
    add_definitions(-DMAJOR_VERSION=${PROJECT_VERSION_MAJOR})
    add_definitions(-DMINOR_VERSION=${PROJECT_VERSION_MINOR})
    add_definitions(-DMICRO_VERSION=${PROJECT_VERSION_PATCH})
    add_definitions(-DVERSION="${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}")
    add_definitions(-DHAVE_SDL=0)
    
    if(MSVC)
        set(CMAKE_DEBUG_POSTFIX "d")
    
        add_definitions(-Dstrcasecmp=_stricmp)
        add_definitions(-Dstrncasecmp=_strnicmp)
        add_definitions(-D_CRT_SECURE_NO_WARNINGS)
        add_definitions(-D_CRT_NONSTDC_NO_DEPRECATE)
        
        if(WITH_TOOLS)
    	    find_path(GETOPT_INCLUDE_DIR getopt.h PATH_SUFFIXES include)
    	    find_library(GETOPT_LIBRARIES wingetopt PATH_SUFFIXES lib)
    	    include_directories(${GETOPT_INCLUDE_DIR})
        endif(WITH_TOOLS)
    endif(MSVC)
    
    set(QRENCODE_SRCS qrencode.c
                      qrinput.c
                      bitstream.c
                      qrspec.c
                      rsecc.c
                      split.c
                      mask.c
                      mqrspec.c
                      mmask.c)
    
    set(QRENCODE_HDRS qrencode_inner.h
                      qrinput.h
                      bitstream.h
                      qrspec.h
                      rsecc.h
                      split.h
                      mask.h
                      mqrspec.h
                      mmask.h)
    
    if(BUILD_SHARED_LIBS)
    	if(MSVC)
    		set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
    	endif()
    	add_library(qrencode SHARED ${QRENCODE_SRCS} ${QRENCODE_HDRS})
    	set_target_properties(qrencode PROPERTIES VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH} SOVERSION ${PROJECT_VERSION_MAJOR})
    else()
    	add_library(qrencode ${QRENCODE_SRCS} ${QRENCODE_HDRS})
    endif()
    
    set(prefix "${CMAKE_INSTALL_PREFIX}")
    set(exec_prefix "${CMAKE_INSTALL_PREFIX}/bin")
    set(libdir "${CMAKE_INSTALL_PREFIX}/lib")
    set(includedir "${CMAKE_INSTALL_PREFIX}/include")
    set(VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}")
    
    configure_file(qrencode.1.in qrencode.1 @ONLY)
    configure_file(libqrencode.pc.in libqrencode.pc @ONLY)
    
    install(FILES ${CMAKE_CURRENT_BINARY_DIR}/qrencode.1 DESTINATION share/man/man1)
    install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libqrencode.pc DESTINATION lib/pkgconfig)
    install(FILES qrencode.h DESTINATION include)
    install(TARGETS qrencode DESTINATION lib)
    
    ## Build utility tools
    if(WITH_TOOLS)
    	if(NOT WITHOUT_PNG)
        	add_definitions(-DHAVE_PNG=1)
    	endif()
        add_executable(qrenc qrenc.c)
        set_target_properties(qrenc PROPERTIES OUTPUT_NAME qrencode)
    
        target_link_libraries(qrenc qrencode PNG::PNG)
    
        if(MSVC)
            target_link_libraries(qrenc ${GETOPT_LIBRARIES})
        endif(MSVC)
    
        install(TARGETS qrenc DESTINATION bin)
    endif()
    
    if(WITH_TESTS)
        enable_testing()
        add_definitions(-DWITH_TESTS=)
        add_definitions(-DSTATIC_IN_RELEASE=)
        add_subdirectory(tests)
    else()
        add_definitions(-DSTATIC_IN_RELEASE=static)
    endif()
    
    ## ==============================================================================
    ##
    ##  Configuration summary
    ##
    ## ==============================================================================
    
    message(STATUS "------------------------------------------------------------" )
    message(STATUS "[QRencode] Configuration summary."                            )
    message(STATUS "------------------------------------------------------------ ")
    message(STATUS " System configuration:"                                       )
    message(STATUS " .. Processor type .............. = ${CMAKE_SYSTEM_PROCESSOR}")
    message(STATUS " .. CMake executable ............ = ${CMAKE_COMMAND}"         )
    message(STATUS " .. CMake version ............... = ${CMAKE_VERSION}"         )
    message(STATUS " .. System name ................. = ${CMAKE_SYSTEM}"          )
    message(STATUS " .. C++ compiler ................ = ${CMAKE_CXX_COMPILER}"    )
    message(STATUS " .. C compiler .................. = ${CMAKE_C_COMPILER}"      )
    message(STATUS " .. size(void*) ................. = ${CMAKE_SIZEOF_VOID_P}"   )
    message(STATUS " Dependencies:"                                               )
    #message(STATUS " .. Doxygen ..................... = ${DOXYGEN_EXECUTABLE}"    )
    message(STATUS " .. Thread library of the system  = ${CMAKE_THREAD_LIBS_INIT}")
    message(STATUS " .. Iconv ....................... = ${ICONV_FOUND}"           )
    message(STATUS " .... Iconv includes ............ = ${ICONV_INCLUDE_DIR}"     )
    message(STATUS " .... Iconv library ............. = ${ICONV_LIBRARIES}"       )
    message(STATUS " .. ZLIB ........................ = ${ZLIB_FOUND}"            )
    message(STATUS " .. PNG ......................... = ${PNG_FOUND}"             )
    message(STATUS " .... PNG includes .............. = ${PNG_INCLUDE_DIR}"       )
    message(STATUS " .... PNG library ............... = ${PNG_LIBRARIES}"         )
    #message(STATUS " .. Memory checker .............. = ${MEMORYCHECK_COMMAND}"   )
    message(STATUS " Project configuration:"                                      )
    message(STATUS " .. Build test programs  ........ = ${WITH_TESTS}"            )
    message(STATUS " .. Build utility tools  ........ = ${WITH_TOOLS}"            )
    message(STATUS " .. Disable PNG support  ........ = ${WITHOUT_PNG}"           )
    message(STATUS " .. Installation prefix ......... = ${CMAKE_INSTALL_PREFIX}"  )
    message(STATUS "------------------------------------------------------------ ")