Disallow build in-source.
[staging/xdg-launcher.git] / cmake / cmake.d / 03-macros.cmake
index 6f93c37..bf297a2 100644 (file)
 #     Customise your preferences in "./conf.d/cmake/config.cmake"
 #--------------------------------------------------------------------------
 # CMake 3.6 imported macros to simulate list(FILTER ...) subcommand
-# -----------------------
+#--------------------------------------------------------------------------
+MACRO(prevent_in_source_build)
+       execute_process(COMMAND rm -rf ${CMAKE_SOURCE_DIR}/CMakeCache.txt ${CMAKE_SOURCE_DIR}/CMakeCacheForScript.cmake ${CMAKE_SOURCE_DIR}/CMakeFiles ${CMAKE_SOURCE_DIR}/cmake_install.cmake)
+
+       get_filename_component(srcdir "${CMAKE_SOURCE_DIR}" REALPATH)
+       get_filename_component(bindir "${CMAKE_BINARY_DIR}" REALPATH)
+
+       if(${srcdir} STREQUAL ${bindir})
+               message(FATAL_ERROR "${Red}**** ERROR: You trying to build the project from the source directory or a previous build in-source occured. This isn't allowed, you have to clean CMakeCache.txt file from your source directory (${srcdir}), and build from a separate directory. ****\n")
+       endif()
+ENDMACRO(prevent_in_source_build)
+
 MACRO(PARSE_ARGUMENTS prefix arg_names option_names)
-SET(DEFAULT_ARGS)
-FOREACH(arg_name ${arg_names})
-  SET(${prefix}_${arg_name})
-ENDFOREACH(arg_name)
-FOREACH(option ${option_names})
-  SET(${prefix}_${option} FALSE)
-ENDFOREACH(option)
-
-SET(current_arg_name DEFAULT_ARGS)
-SET(current_arg_list)
-FOREACH(arg ${ARGN})
-  LIST_CONTAINS(is_arg_name ${arg} ${arg_names})
-  IF (is_arg_name)
-       SET(${prefix}_${current_arg_name} ${current_arg_list})
-       SET(current_arg_name ${arg})
+       SET(DEFAULT_ARGS)
+       FOREACH(arg_name ${arg_names})
+       SET(${prefix}_${arg_name})
+       ENDFOREACH(arg_name)
+       FOREACH(option ${option_names})
+       SET(${prefix}_${option} FALSE)
+       ENDFOREACH(option)
+
+       SET(current_arg_name DEFAULT_ARGS)
        SET(current_arg_list)
-  ELSE (is_arg_name)
-       LIST_CONTAINS(is_option ${arg} ${option_names})
-       IF (is_option)
-  SET(${prefix}_${arg} TRUE)
-       ELSE (is_option)
-  SET(current_arg_list ${current_arg_list} ${arg})
-       ENDIF (is_option)
-  ENDIF (is_arg_name)
-ENDFOREACH(arg)
-SET(${prefix}_${current_arg_name} ${current_arg_list})
+       FOREACH(arg ${ARGN})
+       LIST_CONTAINS(is_arg_name ${arg} ${arg_names})
+       IF (is_arg_name)
+               SET(${prefix}_${current_arg_name} ${current_arg_list})
+               SET(current_arg_name ${arg})
+               SET(current_arg_list)
+       ELSE (is_arg_name)
+               LIST_CONTAINS(is_option ${arg} ${option_names})
+               IF (is_option)
+       SET(${prefix}_${arg} TRUE)
+               ELSE (is_option)
+       SET(current_arg_list ${current_arg_list} ${arg})
+               ENDIF (is_option)
+       ENDIF (is_arg_name)
+       ENDFOREACH(arg)
+       SET(${prefix}_${current_arg_name} ${current_arg_list})
 ENDMACRO(PARSE_ARGUMENTS)
 
 MACRO(LIST_CONTAINS var value)
@@ -258,13 +269,11 @@ endmacro()
 # Pre-packaging
 macro(project_targets_populate)
        # Default Widget default directory
-       set(AFBDIR afb)
        set(BINDIR bin)
        set(ETCDIR etc)
        set(LIBDIR lib)
        set(HTTPDIR htdocs)
        set(DATADIR data)
-       set(PACKAGE_AFBDIR  ${PROJECT_PKG_BUILD_DIR}/${AFBDIR})
        set(PACKAGE_BINDIR  ${PROJECT_PKG_BUILD_DIR}/${BINDIR})
        set(PACKAGE_ETCDIR  ${PROJECT_PKG_BUILD_DIR}/${ETCDIR})
        set(PACKAGE_LIBDIR  ${PROJECT_PKG_BUILD_DIR}/${LIBDIR})
@@ -317,19 +326,19 @@ macro(project_targets_populate)
                                if(NOT S)
                                        set(S ".ctlso")
                                endif()
-                               generate_one_populate_target(${P}${OUT}${S} "${PACKAGE_AFBDIR}/plugins")
+                               generate_one_populate_target(${P}${OUT}${S} "${PACKAGE_LIBDIR}/plugins")
                        elseif(${T} STREQUAL "BINDING")
                                if(NOT S)
                                        set(S ".so")
                                endif()
                                list(APPEND BINDINGS_LIST "${P}${OUT}${S}")
-                               generate_one_populate_target(${P}${OUT}${S} ${PACKAGE_AFBDIR})
+                               generate_one_populate_target(${P}${OUT}${S} ${PACKAGE_LIBDIR})
                        elseif(${T} STREQUAL "BINDINGV2")
                                if(NOT S)
                                        set(S ".so")
                                endif()
                                afb_genskel()
-                               generate_one_populate_target(${P}${OUT}${S} ${PACKAGE_AFBDIR})
+                               generate_one_populate_target(${P}${OUT}${S} ${PACKAGE_LIBDIR})
                        elseif(${T} STREQUAL "EXECUTABLE")
                                if(NOT S)
                                        set(S "")