Mercurial > code
view CMakeLists.txt @ 466:a126c10d9321
Socket: rename Type to Protocol everywhere
author | David Demelier <markand@malikania.fr> |
---|---|
date | Wed, 04 Nov 2015 20:36:07 +0100 |
parents | 828d3dc89f2d |
children | 898d8b29a4f1 |
line wrap: on
line source
# # CMakeLists.txt -- code building for common code # # Copyright (c) 2013-2015 David Demelier <markand@malikania.fr> # # Permission to use, copy, modify, and/or distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # # # This CMakeLists build system is primarily used for testing all # modules. # cmake_minimum_required(VERSION 3.0) project(code) set(CMAKE_MODULE_PATH ${code_SOURCE_DIR}/cmake) include(CMakeParseArguments) add_subdirectory(extern) add_subdirectory(tools) enable_testing() macro(define_module) set(oneValueArgs TARGET NAME DIRECTORY) set(multiValueArgs SOURCES RESOURCES LIBRARIES INCLUDES) cmake_parse_arguments(MOD "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) if (NOT MOD_TARGET) message(FATAL_ERROR "Argument TARGET not set") elseif (NOT MOD_NAME) message(FATAL_ERROR "Argument NAME not set") elseif (NOT MOD_DIRECTORY) message(FATAL_ERROR "Argument DIRECTORY not set") endif () string(TOUPPER ${MOD_NAME} optionname) # Create the option for enabling the test option(WITH_${optionname} "Enable ${MOD_NAME}" On) if (WITH_${optionname}) # Add the test executable set(MAIN ${code_SOURCE_DIR}/C++/tests/${MOD_DIRECTORY}/main.cpp) if (NOT EXISTS ${MAIN}) message(FATAL_ERROR "${MAIN} file does not exists") endif () add_executable(${MOD_TARGET} ${MOD_SOURCES} ${MOD_RESOURCES} ${MAIN}) add_test(${MOD_TARGET}-test ${MOD_TARGET}) target_include_directories( ${MOD_TARGET} PRIVATE ${code_SOURCE_DIR}/C++ ${code_SOURCE_DIR}/C++/modules/${MOD_DIRECTORY} ${MOD_INCLUDES} ) target_link_libraries(${MOD_TARGET} gtest ${MOD_LIBRARIES}) # Copy optional resources if (MOD_RESOURCES) foreach (res ${MOD_RESOURCES}) get_filename_component(inputname ${res} NAME) set(output ${CMAKE_BINARY_DIR}/${MOD_DIRECTORY}/${inputname}) list(APPEND outputlist ${output}) add_custom_command( OUTPUT ${output} COMMENT "Copying ${inputname}" DEPENDS ${res} COMMAND ${CMAKE_COMMAND} -E copy ${res} ${output} ) endforeach() add_custom_target(${MOD_TARGET}-resources DEPENDS ${outputlist}) add_dependencies(${MOD_TARGET} ${MOD_TARGET}-resources) endif () endif () endmacro() # Optional find_package(Jansson) find_package(OpenSSL) find_package(ZIP) # Doxygen target find_package(Doxygen) if (DOXYGEN_FOUND) configure_file( ${CMAKE_SOURCE_DIR}/cmake/Doxyfile.in ${CMAKE_BINARY_DIR}/Doxyfile ) add_custom_target( doxygen ALL COMMENT "Generating doxygen documentation" COMMAND ${DOXYGEN_EXECUTABLE} Doxyfile WORKING_DIRECTORY ${CMAKE_BINARY_DIR} VERBATIM ) endif () # --------------------------------------------------------- # Base64 # --------------------------------------------------------- define_module( TARGET base64 NAME Base64 DIRECTORY Base64 SOURCES ${code_SOURCE_DIR}/C++/modules/Base64/Base64.cpp ${code_SOURCE_DIR}/C++/modules/Base64/Base64.h ) # --------------------------------------------------------- # Converter # --------------------------------------------------------- # No tests yet # --------------------------------------------------------- # Directory # --------------------------------------------------------- define_module( TARGET directory NAME Directory DIRECTORY Directory SOURCES ${code_SOURCE_DIR}/C++/modules/Directory/Directory.cpp ${code_SOURCE_DIR}/C++/modules/Directory/Directory.h ) # --------------------------------------------------------- # Dynlib # --------------------------------------------------------- if (WIN32) set(EXTENSION ".dll") elseif (UNIX) set(EXTENSION ".so") elseif (APPLE) set(EXTENSION ".dylib") else () message(FATAL_ERROR "Unsupported platform") endif () define_module( TARGET dynlib NAME Dynlib DIRECTORY Dynlib SOURCES ${code_SOURCE_DIR}/C++/modules/Dynlib/Dynlib.cpp ${code_SOURCE_DIR}/C++/modules/Dynlib/Dynlib.h ) if (WITH_DYNLIB) if (CMAKE_SYSTEM_NAME MATCHES "Linux") target_link_libraries(dynlib dl) endif () target_compile_definitions(dynlib PRIVATE EXTENSION=\"${EXTENSION}\") add_library(dynlib-plugin MODULE ${code_SOURCE_DIR}/C++/tests/Dynlib/Plugin.cpp) set_target_properties(dynlib-plugin PROPERTIES PREFIX "") target_include_directories(dynlib-plugin PRIVATE ${code_SOURCE_DIR}/C++/modules/Dynlib) endif () # --------------------------------------------------------- # Flags # --------------------------------------------------------- # # TODO: may be modified or deleted # #define_module( # TARGET flags # NAME Flags # DIRECTORY Flags # SOURCES ${code_SOURCE_DIR}/C++/modules/Flags/Flags.h #) # --------------------------------------------------------- # Hash # --------------------------------------------------------- if (OPENSSL_FOUND) define_module( TARGET hash NAME Hash DIRECTORY Hash LIBRARIES ${OPENSSL_LIBRARIES} INCLUDES ${OPENSSL_INCLUDE_DIR} SOURCES ${code_SOURCE_DIR}/C++/modules/Hash/Hash.cpp ${code_SOURCE_DIR}/C++/modules/Hash/Hash.h ) endif () # --------------------------------------------------------- # Ini # --------------------------------------------------------- if (WIN32) set(INI_LIBRARIES Shlwapi) endif () define_module( TARGET ini NAME Ini DIRECTORY Ini SOURCES ${code_SOURCE_DIR}/C++/modules/Ini/Ini.cpp ${code_SOURCE_DIR}/C++/modules/Ini/Ini.h LIBRARIES ${INI_LIBRARIES} RESOURCES ${code_SOURCE_DIR}/C++/tests/Ini/configs/compact.conf ${code_SOURCE_DIR}/C++/tests/Ini/configs/empty.conf ${code_SOURCE_DIR}/C++/tests/Ini/configs/error-badcomment.conf ${code_SOURCE_DIR}/C++/tests/Ini/configs/error-badinclude.conf ${code_SOURCE_DIR}/C++/tests/Ini/configs/error-badsection.conf ${code_SOURCE_DIR}/C++/tests/Ini/configs/error-nosection.conf ${code_SOURCE_DIR}/C++/tests/Ini/configs/error-unterminatedsection.conf ${code_SOURCE_DIR}/C++/tests/Ini/configs/includes.conf ${code_SOURCE_DIR}/C++/tests/Ini/configs/lists.conf ${code_SOURCE_DIR}/C++/tests/Ini/configs/multi.conf ${code_SOURCE_DIR}/C++/tests/Ini/configs/novalue.conf ${code_SOURCE_DIR}/C++/tests/Ini/configs/simple.conf ${code_SOURCE_DIR}/C++/tests/Ini/configs/tokens.conf ) # --------------------------------------------------------- # Js (Duktape) # --------------------------------------------------------- define_module( TARGET js NAME Js DIRECTORY Js LIBRARIES duktape SOURCES ${code_SOURCE_DIR}/C++/modules/Js/Js.cpp ${code_SOURCE_DIR}/C++/modules/Js/Js.h ) # --------------------------------------------------------- # Json # --------------------------------------------------------- if (Jansson_FOUND) define_module( TARGET json NAME Json DIRECTORY Json INCLUDES ${Jansson_INCLUDE_DIRS} LIBRARIES ${Jansson_LIBRARIES} SOURCES ${code_SOURCE_DIR}/C++/modules/Json/Json.cpp ${code_SOURCE_DIR}/C++/modules/Json/Json.h RESOURCES ${code_SOURCE_DIR}/C++/tests/Json/data/array-all.json ${code_SOURCE_DIR}/C++/tests/Json/data/array.json ${code_SOURCE_DIR}/C++/tests/Json/data/object-all.json ${code_SOURCE_DIR}/C++/tests/Json/data/object.json ${code_SOURCE_DIR}/C++/tests/Json/data/simple.json ) endif () # --------------------------------------------------------- # OptionParser # --------------------------------------------------------- define_module( TARGET optionparser NAME OptionParser DIRECTORY OptionParser SOURCES ${code_SOURCE_DIR}/C++/modules/OptionParser/OptionParser.cpp ${code_SOURCE_DIR}/C++/modules/OptionParser/OptionParser.h ) # --------------------------------------------------------- # Sockets # --------------------------------------------------------- if (OPENSSL_FOUND) if (WIN32) set(SOCKET_LIBRARIES ws2_32) endif () define_module( TARGET socket NAME Socket DIRECTORY Socket INCLUDES ${OPENSSL_INCLUDE_DIR} LIBRARIES ${SOCKET_LIBRARIES} ${OPENSSL_LIBRARIES} SOURCES ${code_SOURCE_DIR}/C++/modules/Socket/Sockets.cpp ${code_SOURCE_DIR}/C++/modules/Socket/Sockets.h RESOURCES ${code_SOURCE_DIR}/C++/tests/Socket/test.crt ${code_SOURCE_DIR}/C++/tests/Socket/test.key ) endif () # --------------------------------------------------------- # Treenode # --------------------------------------------------------- define_module( TARGET treenode NAME Treenode DIRECTORY Treenode SOURCES ${code_SOURCE_DIR}/C++/modules/Treenode/TreeNode.h ) # --------------------------------------------------------- # Unicode # --------------------------------------------------------- define_module( TARGET unicode NAME Unicode DIRECTORY Unicode SOURCES ${code_SOURCE_DIR}/C++/modules/Unicode/Unicode.cpp ${code_SOURCE_DIR}/C++/modules/Unicode/Unicode.h ) # --------------------------------------------------------- # Xdg # --------------------------------------------------------- if (UNIX) define_module( TARGET xdg NAME Xdg DIRECTORY Xdg SOURCES ${code_SOURCE_DIR}/C++/modules/Xdg/Xdg.cpp ${code_SOURCE_DIR}/C++/modules/Xdg/Xdg.h ) endif () # --------------------------------------------------------- # Zip # --------------------------------------------------------- if (ZIP_FOUND) define_module( TARGET zip NAME Zip DIRECTORY Zip INCLUDES ${ZIP_INCLUDE_DIRS} LIBRARIES ${ZIP_LIBRARIES} RESOURCES ${code_SOURCE_DIR}/C++/tests/Zip/data/data.txt ${code_SOURCE_DIR}/C++/tests/Zip/data/stats.zip SOURCES ${code_SOURCE_DIR}/C++/modules/Zip/ZipArchive.cpp ${code_SOURCE_DIR}/C++/modules/Zip/ZipArchive.h ) endif ()