Mercurial > malikania
changeset 49:2804ae55c70f
CMake: big cleanup, closes #598
author | David Demelier <markand@malikania.fr> |
---|---|
date | Fri, 09 Dec 2016 13:28:45 +0100 |
parents | 3be179ba3226 |
children | 697bf85e8e19 |
files | CMakeLists.txt cmake/CMake.cmake cmake/MalikaniaFunctions.cmake cmake/MalikaniaOptions.cmake cmake/function/MalikaniaBuildAssets.cmake cmake/function/MalikaniaDefineExecutable.cmake cmake/function/MalikaniaDefineLibrary.cmake cmake/function/MalikaniaDefineTest.cmake cmake/function/MalikaniaSetg.cmake docs/CMakeLists.txt extern/CMakeLists.txt extern/plantuml/CMakeLists.txt extern/plantuml/plantuml.jar libclient-js/CMakeLists.txt libclient/CMakeLists.txt libcommon-js/CMakeLists.txt libcommon/CMakeLists.txt libserver/CMakeLists.txt |
diffstat | 18 files changed, 401 insertions(+), 426 deletions(-) [+] |
line wrap: on
line diff
--- a/CMakeLists.txt Thu Dec 08 20:19:02 2016 +0100 +++ b/CMakeLists.txt Fri Dec 09 13:28:45 2016 +0100 @@ -30,9 +30,13 @@ set(CMAKE_CXX_STANDARD_REQUIRED TRUE) set(CMAKE_POSITION_INDEPENDENT_CODE TRUE) +include(cmake/function/MalikaniaBuildAssets.cmake) +include(cmake/function/MalikaniaDefineLibrary.cmake) +include(cmake/function/MalikaniaDefineExecutable.cmake) +include(cmake/function/MalikaniaDefineTest.cmake) +include(cmake/function/MalikaniaSetg.cmake) include(cmake/MalikaniaVersion.cmake) include(cmake/MalikaniaOptions.cmake) -include(cmake/MalikaniaFunctions.cmake) include(cmake/MalikaniaSystem.cmake) configure_file( @@ -66,4 +70,4 @@ message(" Release flags: ${CMAKE_CXX_FLAGS_RELEASE}") message("") message("Documentation:") -message(" Doxygen: ${WITH_DOCS_DOXYGEN_MSG}") +message(" Doxygen: ${WITH_DOXYGEN_MSG}")
--- a/cmake/CMake.cmake Thu Dec 08 20:19:02 2016 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,57 +0,0 @@ -# -# CMakeLists.txt -- CMake build system for malikania -# -# Copyright (c) 2013, 2014, 2015 Malikania Authors -# -# 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. -# - -project(cmake) - -# -# The following files will be installed: -# -# MalikaniaConfig - Include all Malikania CMake files -# MalikaniaVersion - The version of the engine -# MalikaniaSystem - Platform specific definitions -# MalikaniaMacros - Malikania public macros -# -set( - FILES - MalikaniaConfig.cmake - Macros.cmake - System.cmake - Version.cmake -) - -if (WIN32) - set(DIRECTORY "Malikania") -elseif (UNIX) - set(DIRECTORY "share/malikania/cmake") -elseif (APPLE) - set(DIRECTORY "malikania.framework/Resources/CMake") -endif () - -install( - FILES ${FILES} - DESTINATION ${DIRECTORY} -) - -set( - CMAKE_SOURCES - ${CMAKE_CURRENT_LIST_DIR}/CMake.cmake - ${CMAKE_CURRENT_LIST_DIR}/MalikaniaConfig.cmake - ${CMAKE_CURRENT_LIST_DIR}/MalikaniaFunctions.cmake - ${CMAKE_CURRENT_LIST_DIR}/MalikaniaSystem.cmake - ${CMAKE_CURRENT_LIST_DIR}/MalikaniaVersion.cmake -)
--- a/cmake/MalikaniaFunctions.cmake Thu Dec 08 20:19:02 2016 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,274 +0,0 @@ -# -# CMakeLists.txt -- CMake build system for malikania -# -# Copyright (c) 2013-2016 Malikania Authors -# -# 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. -# - -include(CMakeParseArguments) - -# --------------------------------------------------------- -# The following macros are available: -# -# malikania_build_assets -# ---------------------- -# -# malikania_build_assets(inputs outputs) -# -# Create binary data as C++ arrays for inclusion in source code. Static assets -# increases the executable size so use this when really needed. -# -# The macro iterates over the input data which can be any files and generates -# outputs file in the form CMAKE_CURRENT_BINARY_DIR/assets/basename.cpp. -# -# The macro removes the extension from the filename and create a static array -# with that name, thus you need to specify a filename that is compatible with -# C++ identifiers! -# -# Correct: -# - myfile.png -# - startup_logo.png -# -# Incorrect: -# - useful-code.ogg -# - archive.tar.xz -# -# malikania_define_executable -# --------------------------- -# -# malikania_define_executable( -# TARGET The target name -# SOURCES The list of sources -# FLAGS (Optional) List of flags -# INCLUDES (Optional) List of include directories -# LIBRARIES (Optional) List of libraries -# ) -# -# Create an executable. Be sure to quote SOURCES, if not only the first file will be passed. -# If you need flags, just pass them without -D or /D, this is automatically done for you. -# -# malikania_create_library -# ------------------------ -# -# malikania_create_library( -# TARGET The target name -# SOURCES The sources -# ASSETS (Optional) Additional assets files -# FLAGS (Optional) List of flags -# PRIVATE_INCLUDES (Optional) List of includes only for building the library -# PUBLIC_INCLUDES (Optional) List of public includes to share with the library users -# LIBRARIES (Optional) List of libraries to link against -# ) -# -# Create a shared library. Follow the same specification as malikania_define_executable. -# However, additional PRIVATE_INCLUDES and PUBLIC_INCLUDES are available. -# -# malikania_create_test -# --------------------- -# -# malikania_create_test( -# NAME Test name (must be lowercase) -# SOURCES Test sources files -# LIBRARIES (Optional) Libraries to link to -# RESOURCES (Optional) Resources files to copy verbatim -# ) -# -# This will generate a target named test-<name> where name is the parameter NAME. The test is created -# under CMAKE_BINARY_DIR/test/<NAME> and resources are copied there with the same hierarchy. -# -# setg -# ---- -# -# setg(var value) -# -# Set a cache variable internal with name var. -# -# --------------------------------------------------------- - -function(apply_flags target flags) - # Add MALIKANIA_BUILD to enable declspec(dllexport) on Windows - if (${flags}) - target_compile_definitions( - ${target} - PRIVATE ${flags} - PRIVATE "MALIKANIA_BUILD" - ) - endif () -endfunction() - -function(apply_public_includes target var) - if (${var}) - target_include_directories(${target} PUBLIC ${${var}}) - endif () - - target_include_directories( - ${target} - PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/malikania/${WITH_BACKEND_DIRECTORY} - PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} - ) -endfunction() - -function(apply_private_includes target var) - if (${var}) - target_include_directories(${target} PRIVATE ${${var}}) - endif () -endfunction() - -function(apply_includes target var) - if (${var}) - target_include_directories(${target} PRIVATE ${${var}}) - endif () -endfunction() - -function(apply_libraries target libs) - if (${libs}) - target_link_libraries(${target} ${${libs}}) - endif () -endfunction() - -function(check_args prefix list) - foreach (e ${list}) - if (NOT ${prefix}_${e}) - message(FATAL_ERROR "Please set `${e}' parameter") - endif () - endforeach () -endfunction() - -macro(malikania_build_assets inputs outputs) - file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/assets) - - foreach (in ${inputs}) - get_filename_component(basename ${in} NAME_WE) - set(out ${CMAKE_CURRENT_BINARY_DIR}/assets/${basename}.cpp) - add_custom_command( - OUTPUT ${out} - COMMENT "Generating binary data from ${in}" - DEPENDS ${in} - COMMAND - $<TARGET_FILE:mlk-bcc> ${basename} ${in} ${out} - ) - list(APPEND ${outputs} ${out}) - endforeach () -endmacro() - -function(malikania_define_executable) - set(singleArgs TARGET) - set(multiArgs SOURCES FLAGS INCLUDES LIBRARIES) - set(mandatory TARGET SOURCES) - - cmake_parse_arguments(EXE "" "${singleArgs}" "${multiArgs}" ${ARGN}) - check_args(EXE ${mandatory}) - - add_executable(${EXE_TARGET} ${EXE_SOURCES}) - - apply_libraries(${EXE_TARGET} EXE_LIBRARIES) - apply_includes(${EXE_TARGET} EXE_INCLUDES) - apply_flags(${EXE_TARGET} EXE_FLAGS) -endfunction() - -function(malikania_create_library) - set(singleArgs TARGET) - set(multiArgs ASSETS SOURCES FLAGS PRIVATE_INCLUDES PUBLIC_INCLUDES LIBRARIES) - set(mandatory TARGET SOURCES) - - cmake_parse_arguments(LIB "" "${singleArgs}" "${multiArgs}" ${ARGN}) - check_args(LIB ${mandatory}) - - # Enable assets for libraries. - malikania_build_assets("${LIB_ASSETS}" assets) - - add_library(${LIB_TARGET} SHARED ${LIB_SOURCES} ${assets}) - target_include_directories(${LIB_TARGET} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/assets) - - # Remove lib suffix to avoid conflict with client and libclient targets - set_target_properties( - ${LIB_TARGET} - PROPERTIES - PREFIX "" - ) - - list(APPEND LIB_LIBRARIES duktape) - - apply_libraries(${LIB_TARGET} LIB_LIBRARIES) - apply_private_includes(${LIB_TARGET} LIB_PRIVATE_INCLUDES) - apply_public_includes(${LIB_TARGET} LIB_PUBLIC_INCLUDES) - apply_flags(${LIB_TARGET} LIB_FLAGS) -endfunction() - -function(malikania_create_test) - set(singleArgs NAME) - set(multiArgs LIBRARIES SOURCES RESOURCES) - - set(mandatory NAME SOURCES) - - cmake_parse_arguments(TEST "" "${singleArgs}" "${multiArgs}" ${ARGN}) - check_args(TEST ${mandatory}) - - file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/test/${TEST_NAME}) - - if (UNIX) - list(APPEND TEST_LIBRARIES pthread) - endif () - - # Resources files added before as custom output - foreach (f ${TEST_RESOURCES}) - get_filename_component(absolute ${f} ABSOLUTE) - file(RELATIVE_PATH basename ${CMAKE_CURRENT_SOURCE_DIR} ${absolute}) - set(output ${CMAKE_BINARY_DIR}/test/${TEST_NAME}/${basename}) - - add_custom_command( - OUTPUT ${output} - COMMAND ${CMAKE_COMMAND} -E copy ${absolute} ${output} - DEPENDS ${absolute} - ) - - list(APPEND TEST_SOURCES ${absolute}) - list(APPEND outputs ${output}) - endforeach () - - add_executable(test-${TEST_NAME} ${TEST_SOURCES} ${outputs}) - source_group(private\\Resources FILES ${outputs}) - target_compile_definitions( - test-${TEST_NAME} - PRIVATE - BOOST_TEST_DYN_LINK - SOURCE_DIRECTORY=\"${CMAKE_BINARY_DIR}/test/${TEST_NAME}\" - ) - set_target_properties( - test-${TEST_NAME} - PROPERTIES - RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/test/${TEST_NAME} - RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR}/test/${TEST_NAME} - RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR}/test/${TEST_NAME} - RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO ${CMAKE_BINARY_DIR}/test/${TEST_NAME} - RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL ${CMAKE_BINARY_DIR}/test/${TEST_NAME} - ) - add_test( - NAME ${TEST_NAME} - COMMAND $<TARGET_FILE:test-${TEST_NAME}> - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/test/${TEST_NAME} - ) - - target_link_libraries( - test-${TEST_NAME} - ${TEST_LIBRARIES} - ${Boost_unit_test_framework_LIBRARY} - ) - - add_dependencies(tests test-${TEST_NAME}) -endfunction() - -macro(setg var value) - set(${var} ${value} CACHE INTERNAL "" FORCE) -endmacro()
--- a/cmake/MalikaniaOptions.cmake Thu Dec 08 20:19:02 2016 +0100 +++ b/cmake/MalikaniaOptions.cmake Fri Dec 09 13:28:45 2016 +0100 @@ -81,8 +81,7 @@ option(WITH_LIBSERVER "Build libserver" On) if (WITH_BACKEND MATCHES "SDL") - set(WITH_BACKEND_SDL TRUE) - set(WITH_BACKEND_DIRECTORY "backend/sdl") + set(WITH_BACKEND_DIR "backend/sdl") else () message(FATAL_ERROR "Unknown backend selected: ${WITH_BACKEND}") endif ()
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cmake/function/MalikaniaBuildAssets.cmake Fri Dec 09 13:28:45 2016 +0100 @@ -0,0 +1,61 @@ +# +# MalikaniaBuildAssets.cmake -- CMake build system for malikania +# +# Copyright (c) 2013-2016 Malikania Authors +# +# 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. +# + +# +# malikania_build_assets +# ---------------------- +# +# malikania_build_assets(inputs outputs) +# +# Create binary data as C++ arrays for inclusion in source code. Static assets +# increases the executable size so use this when really needed. +# +# The macro iterates over the input data which can be any files and generates +# outputs file in the form CMAKE_CURRENT_BINARY_DIR/assets/basename.cpp. +# +# The macro removes the extension from the filename and create a static array +# with that name, thus you need to specify a filename that is compatible with +# C++ identifiers! +# +# Correct: +# - myfile.png +# - startup_logo.png +# +# Incorrect: +# - useful-code.ogg +# - archive.tar.xz +# +# Note: this macro requires the target mlk-bcc (tools/bcc directory). +# + +macro(malikania_build_assets inputs outputs) + file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/assets) + + foreach (in ${inputs}) + get_filename_component(basename ${in} NAME_WE) + set(out ${CMAKE_CURRENT_BINARY_DIR}/assets/${basename}.cpp) + add_custom_command( + OUTPUT ${out} + COMMENT "Generating binary data from ${in}" + DEPENDS ${in} + COMMAND + $<TARGET_FILE:mlk-bcc> ${basename} ${in} ${out} + ) + list(APPEND ${outputs} ${out}) + endforeach () +endmacro()
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cmake/function/MalikaniaDefineExecutable.cmake Fri Dec 09 13:28:45 2016 +0100 @@ -0,0 +1,54 @@ +# +# MalikaniaDefineExecutable.cmake -- CMake build system for malikania +# +# Copyright (c) 2013-2016 Malikania Authors +# +# 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. +# + +# +# malikania_define_executable +# --------------------------- +# +# malikania_define_executable( +# TARGET The target name +# SOURCES The list of sources +# FLAGS (Optional) List of flags +# INCLUDES (Optional) List of include directories +# LIBRARIES (Optional) List of libraries +# ) +# +# Create an executable. Be sure to quote SOURCES, if not only the first file will be passed. +# If you need flags, just pass them without -D or /D, this is automatically done for you. +# + +include(CMakeParseArguments) + +function(malikania_define_executable) + set(singleArgs TARGET) + set(multiArgs SOURCES FLAGS INCLUDES LIBRARIES) + + cmake_parse_arguments(EXE "" "${singleArgs}" "${multiArgs}" ${ARGN}) + + if (NOT EXE_TARGET) + message(FATAL_ERROR "Missing TARGET parameter") + endif () + if (NOT EXE_SOURCES) + message(FATAL_ERROR "Missing SOURCES parameter") + endif () + + add_executable(${EXE_TARGET} ${EXE_SOURCES}) + target_link_libraries(${EXE_TARGET} ${EXE_LIBRARIES}) + target_include_directories(${EXE_TARGET} PRIVATE ${EXE_INCLUDES}) + target_compile_definitions(${EXE_TARGET} PRIVATE ${EXE_FLAGS}) +endfunction()
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cmake/function/MalikaniaDefineLibrary.cmake Fri Dec 09 13:28:45 2016 +0100 @@ -0,0 +1,72 @@ +# +# MalikaniaDefineLibrary.cmake -- CMake build system for malikania +# +# Copyright (c) 2013-2016 Malikania Authors +# +# 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. +# + +# +# malikania_define_library +# ------------------------ +# +# malikania_define_library( +# TARGET The target name +# SOURCES The sources +# ASSETS (Optional) Additional assets files +# FLAGS (Optional) List of flags +# PRIVATE_INCLUDES (Optional) List of includes only for building the library +# PUBLIC_INCLUDES (Optional) List of public includes to share with the library users +# LIBRARIES (Optional) List of libraries to link against +# ) +# +# Create a shared library. Follow the same specification as malikania_define_executable. +# However, additional PRIVATE_INCLUDES and PUBLIC_INCLUDES are available. +# + +include(CMakeParseArguments) + +include(${CMAKE_CURRENT_LIST_DIR}/MalikaniaBuildAssets.cmake) + +function(malikania_define_library) + set(singleArgs TARGET) + set(multiArgs ASSETS SOURCES FLAGS PRIVATE_INCLUDES PUBLIC_INCLUDES LIBRARIES) + set(mandatory TARGET SOURCES) + + cmake_parse_arguments(LIB "" "${singleArgs}" "${multiArgs}" ${ARGN}) + + if (NOT LIB_TARGET) + message(FATAL_ERROR "Missing TARGET parameter") + endif () + if (NOT LIB_SOURCES) + message(FATAL_ERROR "Missing SOURCES parameter") + endif () + + # Enable assets for libraries. + malikania_build_assets("${LIB_ASSETS}" assets) + + # Create the shared library. + add_library(${LIB_TARGET} SHARED ${LIB_SOURCES} ${assets}) + set_target_properties(${LIB_TARGET} PROPERTIES PREFIX "") + target_link_libraries(${LIB_TARGET} ${LIB_LIBRARIES}) + target_include_directories( + ${LIB_TARGET} + PRIVATE + ${CMAKE_CURRENT_BINARY_DIR}/assets + ${LIB_PRIVATE_INCLUDES} + PUBLIC + ${CMAKE_CURRENT_SOURCE_DIR} + ${LIB_PUBLIC_INCLUDES} + ) + target_compile_definitions(${LIB_TARGET} PRIVATE ${LIB_FLAGS}) +endfunction()
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cmake/function/MalikaniaDefineTest.cmake Fri Dec 09 13:28:45 2016 +0100 @@ -0,0 +1,101 @@ +# +# MalikaniaDefineTest.cmake -- CMake build system for malikania +# +# Copyright (c) 2013-2016 Malikania Authors +# +# 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. +# + +# +# malikania_create_test +# --------------------- +# +# malikania_create_test( +# NAME Test name (must be lowercase) +# SOURCES Test sources files +# LIBRARIES (Optional) Libraries to link to +# RESOURCES (Optional) Resources files to copy verbatim +# ) +# +# This will generate a target named test-<name> where name is the parameter NAME. The test is created +# under CMAKE_BINARY_DIR/test/<NAME> and resources are copied there with the same hierarchy. +# + +include(CMakeParseArguments) + +function(malikania_create_test) + set(singleArgs NAME) + set(multiArgs LIBRARIES SOURCES RESOURCES) + + cmake_parse_arguments(TEST "" "${singleArgs}" "${multiArgs}" ${ARGN}) + + if (NOT TEST_NAME) + message(FATAL_ERROR "Missing NAME parameter") + endif () + if (NOT TEST_SOURCES) + message(FATAL_ERROR "Missing SOURCES parameter") + endif () + + file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/test/${TEST_NAME}) + + if (UNIX) + list(APPEND TEST_LIBRARIES pthread) + endif () + + # Resources files added before as custom output + foreach (f ${TEST_RESOURCES}) + get_filename_component(absolute ${f} ABSOLUTE) + file(RELATIVE_PATH basename ${CMAKE_CURRENT_SOURCE_DIR} ${absolute}) + set(output ${CMAKE_BINARY_DIR}/test/${TEST_NAME}/${basename}) + + add_custom_command( + OUTPUT ${output} + COMMAND ${CMAKE_COMMAND} -E copy ${absolute} ${output} + DEPENDS ${absolute} + ) + + list(APPEND TEST_SOURCES ${absolute}) + list(APPEND outputs ${output}) + endforeach () + + add_executable(test-${TEST_NAME} ${TEST_SOURCES} ${outputs}) + source_group(private\\Resources FILES ${outputs}) + target_compile_definitions( + test-${TEST_NAME} + PRIVATE + BOOST_TEST_DYN_LINK + SOURCE_DIRECTORY=\"${CMAKE_BINARY_DIR}/test/${TEST_NAME}\" + ) + set_target_properties( + test-${TEST_NAME} + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/test/${TEST_NAME} + RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR}/test/${TEST_NAME} + RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR}/test/${TEST_NAME} + RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO ${CMAKE_BINARY_DIR}/test/${TEST_NAME} + RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL ${CMAKE_BINARY_DIR}/test/${TEST_NAME} + ) + add_test( + NAME ${TEST_NAME} + COMMAND $<TARGET_FILE:test-${TEST_NAME}> + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/test/${TEST_NAME} + ) + + target_link_libraries( + test-${TEST_NAME} + ${TEST_LIBRARIES} + ${Boost_unit_test_framework_LIBRARY} + ) + + add_dependencies(tests test-${TEST_NAME}) +endfunction()
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cmake/function/MalikaniaSetg.cmake Fri Dec 09 13:28:45 2016 +0100 @@ -0,0 +1,30 @@ +# +# MalikaniaSetg.cmake -- CMake build system for malikania +# +# Copyright (c) 2013-2016 Malikania Authors +# +# 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. +# + +# +# malikania_setg +# -------------- +# +# setg(var value) +# +# Set a cache variable internal with name var. +# + +macro(malikania_setg var value) + set(${var} ${value} CACHE INTERNAL "" FORCE) +endmacro()
--- a/docs/CMakeLists.txt Thu Dec 08 20:19:02 2016 +0100 +++ b/docs/CMakeLists.txt Fri Dec 09 13:28:45 2016 +0100 @@ -33,13 +33,13 @@ if (DOXYGEN_FOUND) if (WITH_DOXYGEN) - setg(WITH_DOXYGEN_MSG "Yes") + malikania_setg(WITH_DOXYGEN_MSG "Yes") else () - setg(WITH_DOXYGEN_MSG "No (disabled by user)") + malikania_setg(WITH_DOXYGEN_MSG "No (disabled by user)") endif () else () - setg(WITH_DOXYGEN_MSG "No (doxygen not found)") - setg(WITH_DOXYGEN Off) + malikania_setg(WITH_DOXYGEN_MSG "No (doxygen not found)") + malikania_setg(WITH_DOXYGEN Off) endif () if (WITH_DOXYGEN)
--- a/extern/CMakeLists.txt Thu Dec 08 20:19:02 2016 +0100 +++ b/extern/CMakeLists.txt Fri Dec 09 13:28:45 2016 +0100 @@ -18,4 +18,3 @@ add_subdirectory(duktape) add_subdirectory(json) -add_subdirectory(plantuml)
--- a/extern/plantuml/CMakeLists.txt Thu Dec 08 20:19:02 2016 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,21 +0,0 @@ -# -# CMakeLists.txt -- CMake build system for malikania -# -# Copyright (c) 2013-2016 Malikania Authors -# -# 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. -# - -project(plantuml) - -setg(PLANTUML_JAR ${plantuml_SOURCE_DIR}/plantuml.jar)
--- a/libclient-js/CMakeLists.txt Thu Dec 08 20:19:02 2016 +0100 +++ b/libclient-js/CMakeLists.txt Fri Dec 09 13:28:45 2016 +0100 @@ -22,9 +22,7 @@ HEADERS ${libclient-js_SOURCE_DIR}/malikania/js_animation.hpp ${libclient-js_SOURCE_DIR}/malikania/js_animator.hpp -# ${libclient-js_SOURCE_DIR}/malikania/js_client.hpp ${libclient-js_SOURCE_DIR}/malikania/js_client_resources_loader.hpp -# ${libclient-js_SOURCE_DIR}/malikania/js_client_target.hpp ${libclient-js_SOURCE_DIR}/malikania/js_color.hpp ${libclient-js_SOURCE_DIR}/malikania/js_font.hpp ${libclient-js_SOURCE_DIR}/malikania/js_image.hpp @@ -39,9 +37,7 @@ SOURCES ${libclient-js_SOURCE_DIR}/malikania/js_animation.cpp ${libclient-js_SOURCE_DIR}/malikania/js_animator.cpp -# ${libclient-js_SOURCE_DIR}/malikania/js_client.cpp ${libclient-js_SOURCE_DIR}/malikania/js_client_resources_loader.cpp -# ${libclient-js_SOURCE_DIR}/malikania/js_client_target.cpp ${libclient-js_SOURCE_DIR}/malikania/js_color.cpp ${libclient-js_SOURCE_DIR}/malikania/js_font.cpp ${libclient-js_SOURCE_DIR}/malikania/js_image.cpp @@ -53,7 +49,7 @@ ${libclient-js_SOURCE_DIR}/malikania/js_window.cpp ) -malikania_create_library( +malikania_define_library( PROJECT libclient-js TARGET libclient-js SOURCES ${HEADERS} ${SOURCES}
--- a/libclient/CMakeLists.txt Thu Dec 08 20:19:02 2016 +0100 +++ b/libclient/CMakeLists.txt Fri Dec 09 13:28:45 2016 +0100 @@ -16,56 +16,68 @@ # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # +project(libclient) + set( HEADERS - ${CMAKE_CURRENT_SOURCE_DIR}/malikania/animation.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/malikania/animator.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/malikania/color.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/malikania/font.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/malikania/image.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/malikania/line.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/malikania/point.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/malikania/rectangle.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/malikania/size.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/malikania/sprite.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/malikania/window.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/malikania/${WITH_BACKEND_DIRECTORY}/font_backend.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/malikania/${WITH_BACKEND_DIRECTORY}/image_backend.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/malikania/${WITH_BACKEND_DIRECTORY}/window_backend.hpp + ${libclient_SOURCE_DIR}/malikania/animation.hpp + ${libclient_SOURCE_DIR}/malikania/animator.hpp + ${libclient_SOURCE_DIR}/malikania/color.hpp + ${libclient_SOURCE_DIR}/malikania/font.hpp + ${libclient_SOURCE_DIR}/malikania/image.hpp + ${libclient_SOURCE_DIR}/malikania/line.hpp + ${libclient_SOURCE_DIR}/malikania/point.hpp + ${libclient_SOURCE_DIR}/malikania/rectangle.hpp + ${libclient_SOURCE_DIR}/malikania/size.hpp + ${libclient_SOURCE_DIR}/malikania/sprite.hpp + ${libclient_SOURCE_DIR}/malikania/window.hpp + ${libclient_SOURCE_DIR}/malikania/${WITH_BACKEND_DIR}/font_backend.hpp + ${libclient_SOURCE_DIR}/malikania/${WITH_BACKEND_DIR}/image_backend.hpp + ${libclient_SOURCE_DIR}/malikania/${WITH_BACKEND_DIR}/window_backend.hpp ) set( SOURCES - ${CMAKE_CURRENT_SOURCE_DIR}/malikania/animator.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/malikania/client_resources_loader.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/malikania/color.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/malikania/font.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/malikania/image.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/malikania/sprite.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/malikania/window.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/malikania/${WITH_BACKEND_DIRECTORY}/font_backend.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/malikania/${WITH_BACKEND_DIRECTORY}/image_backend.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/malikania/${WITH_BACKEND_DIRECTORY}/window_backend.cpp + ${libclient_SOURCE_DIR}/malikania/animator.cpp + ${libclient_SOURCE_DIR}/malikania/client_resources_loader.cpp + ${libclient_SOURCE_DIR}/malikania/color.cpp + ${libclient_SOURCE_DIR}/malikania/font.cpp + ${libclient_SOURCE_DIR}/malikania/image.cpp + ${libclient_SOURCE_DIR}/malikania/sprite.cpp + ${libclient_SOURCE_DIR}/malikania/window.cpp + ${libclient_SOURCE_DIR}/malikania/${WITH_BACKEND_DIR}/font_backend.cpp + ${libclient_SOURCE_DIR}/malikania/${WITH_BACKEND_DIR}/image_backend.cpp + ${libclient_SOURCE_DIR}/malikania/${WITH_BACKEND_DIR}/window_backend.cpp ) -find_package(SDL2 REQUIRED) -find_package(SDL2_image REQUIRED) -find_package(SDL2_ttf REQUIRED) +if (WITH_BACKEND MATCHES "SDL") + find_package(SDL2 REQUIRED) + find_package(SDL2_image REQUIRED) + find_package(SDL2_ttf REQUIRED) -malikania_create_library( + list( + APPEND + INCLUDES + ${SDL2_INCLUDE_DIRS} + ${SDL2_IMAGE_INCLUDE_DIRS} + ${SDL2_TTF_INCLUDE_DIRS} + ) + list( + APPEND + LIBRARIES + ${SDL2_LIBRARIES} + ${SDL2_IMAGE_LIBRARIES} + ${SDL2_TTF_LIBRARIES} + ) +endif () + +malikania_define_library( PROJECT libclient TARGET libclient SOURCES ${HEADERS} ${SOURCES} PUBLIC_INCLUDES - $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/malikania> - ${SDL2_INCLUDE_DIRS} - ${SDL2_IMAGE_INCLUDE_DIRS} - ${SDL2_TTF_INCLUDE_DIRS} - LIBRARIES - libcommon - ${SDL2_LIBRARIES} - ${SDL2_IMAGE_LIBRARIES} - ${SDL2_TTF_LIBRARIES} + $<BUILD_INTERFACE:${libclient_SOURCE_DIR}/malikania/${WITH_BACKEND_DIR}> + $<BUILD_INTERFACE:${libclient_SOURCE_DIR}/malikania> + ${INCLUDES} + LIBRARIES libcommon ${LIBRARIES} ) - -target_compile_definitions(libclient PUBLIC ${DEFINITIONS})
--- a/libcommon-js/CMakeLists.txt Thu Dec 08 20:19:02 2016 +0100 +++ b/libcommon-js/CMakeLists.txt Fri Dec 09 13:28:45 2016 +0100 @@ -30,12 +30,12 @@ ${libcommon-js_SOURCE_DIR}/malikania/js_resources_loader.cpp ) -malikania_create_library( +malikania_define_library( PROJECT libcommon-js TARGET libcommon-js SOURCES ${HEADERS} ${SOURCES} FLAGS "MALIKANIA_COMMON_BUILD" PUBLIC_INCLUDES $<BUILD_INTERFACE:${libcommon-js_SOURCE_DIR}/malikania> - LIBRARIES json libcommon + LIBRARIES duktape json libcommon )
--- a/libcommon/CMakeLists.txt Thu Dec 08 20:19:02 2016 +0100 +++ b/libcommon/CMakeLists.txt Fri Dec 09 13:28:45 2016 +0100 @@ -16,28 +16,30 @@ # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # +project(libcommon) + set( HEADERS - ${CMAKE_CURRENT_SOURCE_DIR}/malikania/duktape.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/malikania/game.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/malikania/id.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/malikania/resources_loader.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/malikania/resources_locator.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/malikania/util.hpp + ${libcommon_SOURCE_DIR}/malikania/duktape.hpp + ${libcommon_SOURCE_DIR}/malikania/game.hpp + ${libcommon_SOURCE_DIR}/malikania/id.hpp + ${libcommon_SOURCE_DIR}/malikania/resources_loader.hpp + ${libcommon_SOURCE_DIR}/malikania/resources_locator.hpp + ${libcommon_SOURCE_DIR}/malikania/util.hpp ) set( SOURCES - ${CMAKE_CURRENT_SOURCE_DIR}/malikania/resources_loader.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/malikania/resources_locator.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/malikania/util.cpp + ${libcommon_SOURCE_DIR}/malikania/resources_loader.cpp + ${libcommon_SOURCE_DIR}/malikania/resources_locator.cpp + ${libcommon_SOURCE_DIR}/malikania/util.cpp ) -if (WITH_BACKEND_SDL) +if (WITH_BACKEND MATCHES "SDL") find_package(SDL2 REQUIRED) - list(APPEND HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/malikania/backend/sdl/sdl_util.hpp) - list(APPEND SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/malikania/backend/sdl/sdl_util.cpp) + list(APPEND HEADERS ${libcommon_SOURCE_DIR}/malikania/${WITH_BACKEND_DIR}/sdl_util.hpp) + list(APPEND SOURCES ${libcommon_SOURCE_DIR}/malikania/${WITH_BACKEND_DIR}/sdl_util.cpp) list(APPEND INCLUDES ${SDL2_INCLUDE_DIRS}) list(APPEND LIBRARIES ${SDL2_LIBRARIES}) endif () @@ -46,20 +48,17 @@ list(APPEND LIBRARIES ws2_32) endif () -malikania_create_library( +malikania_define_library( PROJECT libcommon TARGET libcommon SOURCES ${HEADERS} ${SOURCES} FLAGS "MALIKANIA_COMMON_BUILD" PUBLIC_INCLUDES - ${CMAKE_CURRENT_SOURCE_DIR} ${INCLUDES} - $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/malikania> - $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}> + $<BUILD_INTERFACE:${libcommon_SOURCE_DIR}/malikania> + $<BUILD_INTERFACE:${libcommon_SOURCE_DIR}> LIBRARIES json ${Boost_LIBRARIES} ${LIBRARIES} ) - -set_target_properties(libcommon PROPERTIES PREFIX "")
--- a/libserver/CMakeLists.txt Thu Dec 08 20:19:02 2016 +0100 +++ b/libserver/CMakeLists.txt Fri Dec 09 13:28:45 2016 +0100 @@ -35,7 +35,7 @@ ${libmlk-server_SOURCE_DIR}/malikania/server.cpp ) -malikania_create_library( +malikania_define_library( TARGET libmlk-server SOURCES ${HEADERS} ${SOURCES} LIBRARIES