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)
Binary file extern/plantuml/plantuml.jar has changed
--- 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