@@ -1795,6 +1795,69 @@ function (basis_find_logo OUTPUT_VARIABLE SPECIFIED_LOGO DEFAULT_NAME)
17951795 endif ()
17961796endfunction ()
17971797
1798+
1799+ # ----------------------------------------------------------------------------
1800+ ## @brief Load project command arguments from BasisProject.cmake file.
1801+ function (basis_project_args VAR)
1802+
1803+ # hide it here to avoid that it shows up in the GUI on error
1804+ set (CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX} " CACHE INTERNAL "" FORCE)
1805+
1806+ # project meta-data
1807+ if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR} /BasisProject.cmake" )
1808+ set (BASIS_basis_project_CALLED FALSE )
1809+ set (PROJECT_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR} " )
1810+ include ("${CMAKE_CURRENT_SOURCE_DIR} /BasisProject.cmake" )
1811+ if (NOT BASIS_basis_project_CALLED)
1812+ message (FATAL_ERROR "Missing basis_project() command in BasisProject.cmake!" )
1813+ endif ()
1814+ else ()
1815+ message (FATAL_ERROR "Missing BasisProject.cmake file!" )
1816+ endif ()
1817+
1818+ # project command arguments
1819+ set (LANGUAGES)
1820+ foreach (lang IN LISTS PROJECT_LANGUAGES)
1821+ if (lang MATCHES "^(C|CXX)$" )
1822+ list (APPEND LANGUAGES ${lang} )
1823+ elseif (lang MATCHES "^CXX-?[0-9][0-9x]+$" )
1824+ list (APPEND LANGUAGES CXX)
1825+ endif ()
1826+ endforeach ()
1827+
1828+ if (POLICY CMP0048)
1829+ cmake_policy (SET CMP0048 NEW)
1830+ set (_args "${PROJECT_NAME} " VERSION "${PROJECT_VERSION} " LANGUAGES ${LANGUAGES} )
1831+ if (CMAKE_VERSION VERSION_LESS 3.9)
1832+ set (PROJECT_DESCRIPTION "${PROJECT_DESCRIPTION} " PARENT_SCOPE)
1833+ elseif (PROJECT_DESCRIPTION)
1834+ list (APPEND _args DESCRIPTION "${PROJECT_DESCRIPTION} " )
1835+ endif ()
1836+ if (CMAKE_VERSION VERSION_LESS 3.12)
1837+ set (PROJECT_HOMEPAGE_URL "${PROJECT_PACKAGE_WEBSITE} " PARENT_SCOPE)
1838+ elseif (PROJECT_PACKAGE_WEBSITE)
1839+ list (APPEND _args HOMEPAGE_URL "${PROJECT_PACKAGE_WEBSITE} " )
1840+ endif ()
1841+ else ()
1842+ set (_args "${PROJECT_NAME} " ${LANGUAGES} )
1843+ basis_version_numbers (
1844+ "${PROJECT_VERSION} "
1845+ PROJECT_VERSION_MAJOR
1846+ PROJECT_VERSION_MINOR
1847+ PROJECT_VERSION_PATCH
1848+ )
1849+ set (PROJECT_VERSION "${PROJECT_VERSION} " PARENT_SCOPE)
1850+ set (PROJECT_VERSION_MAJOR "${PROJECT_VERSION_MAJOR} " PARENT_SCOPE)
1851+ set (PROJECT_VERSION_MINOR "${PROJECT_VERSION_MINOR} " PARENT_SCOPE)
1852+ set (PROJECT_VERSION_PATCH "${PROJECT_VERSION_PATCH} " PARENT_SCOPE)
1853+ set (PROJECT_DESCRIPTION "${PROJECT_DESCRIPTION} " PARENT_SCOPE)
1854+ set (PROJECT_HOMEPAGE_URL "${PROJECT_PACKAGE_WEBSITE} " PARENT_SCOPE)
1855+ endif ()
1856+
1857+ set ("${VAR} " "${_args} " PARENT_SCOPE)
1858+
1859+ endfunction ()
1860+
17981861# ----------------------------------------------------------------------------
17991862## @brief Initialize project, calls CMake's project() command.
18001863#
@@ -1830,11 +1893,6 @@ macro (basis_project_initialize)
18301893 cmake_policy (SET CMP0017 NEW)
18311894 endif ()
18321895
1833- if (POLICY CMP0048)
1834- # PROJECT_VERSION et al. variables are set by basis_project instead
1835- cmake_policy (SET CMP0048 OLD)
1836- endif ()
1837-
18381896 # --------------------------------------------------------------------------
18391897 # reset
18401898
@@ -1863,21 +1921,16 @@ macro (basis_project_initialize)
18631921 endif ()
18641922
18651923 # --------------------------------------------------------------------------
1866- # project()
1867- set (LANGUAGES)
1868- foreach (lang IN LISTS PROJECT_LANGUAGES)
1869- if (lang MATCHES "^(C|CXX)$" )
1870- list (APPEND LANGUAGES ${lang} )
1871- elseif (lang MATCHES "^CXX-?[0-9][0-9x]+$" )
1872- list (APPEND LANGUAGES CXX)
1873- endif ()
1874- endforeach ()
1875-
1876- project ("${PROJECT_NAME} " ${LANGUAGES} )
1924+ # project command
1925+ basis_project_args (_args)
1926+ project (${_args} )
1927+ unset (_args)
18771928
18781929 # work-around for issue with CMAKE_PROJECT_NAME always being set to 'Project'
1879- if ("${PROJECT_SOURCE_DIR} " STREQUAL "${CMAKE_SOURCE_DIR} " )
1880- set_property (CACHE CMAKE_PROJECT_NAME PROPERTY VALUE "${PROJECT_NAME} " )
1930+ if (CMAKE_PROJECT_NAME STREQUAL "Project" AND "${PROJECT_SOURCE_DIR} " STREQUAL "${CMAKE_SOURCE_DIR} " )
1931+ basis_update_value (CMAKE_PROJECT_NAME "${PROJECT_NAME} " )
1932+ basis_update_value (CMAKE_PROJECT_VERSION "${PROJECT_VERSION} " )
1933+ basis_update_value (CMAKE_PROJECT_DESCRIPTION "${PROJECT_DESCRIPTION} " )
18811934 endif ()
18821935
18831936 # C++ standard
@@ -1888,9 +1941,6 @@ macro (basis_project_initialize)
18881941 if (CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
18891942 include (CheckCXXCompilerFlag)
18901943 CHECK_CXX_COMPILER_FLAG("-std=c++${CXX_VERSION} " COMPILER_SUPPORTS_CXX${CXX_VERSION} )
1891- if (CXX_VERSION STREQUAL "11" AND NOT COMPILER_SUPPORTS_CXX${CXX_VERSION} )
1892- CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX${CXX_VERSION} )
1893- endif ()
18941944 if (COMPILER_SUPPORTS_CXX${CXX_VERSION} )
18951945 if (NOT CMAKE_CXX_FLAGS MATCHES "-std=c\\ +\\ +${CXX_VERSION} " )
18961946 if (CMAKE_CXX_FLAGS )
@@ -1899,7 +1949,7 @@ macro (basis_project_initialize)
18991949 set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++${CXX_VERSION} " )
19001950 endif ()
19011951 else ()
1902- message (FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has no C++${CXX_VERSION} support. Please use a different C++ compiler." )
1952+ message (FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has no full C++${CXX_VERSION} support. Please use a different C++ compiler." )
19031953 endif ()
19041954 endif ()
19051955 else ()
@@ -1927,14 +1977,6 @@ macro (basis_project_initialize)
19271977 set (PROJECT_REVISION 0)
19281978 endif ()
19291979
1930- # extract version numbers from version string
1931- basis_version_numbers (
1932- "${PROJECT_VERSION} "
1933- PROJECT_VERSION_MAJOR
1934- PROJECT_VERSION_MINOR
1935- PROJECT_VERSION_PATCH
1936- )
1937-
19381980 if (NOT DEFINED PROJECT_SOVERSION OR PROJECT_SOVERSION STREQUAL "" )
19391981 set (PROJECT_SOVERSION "${PROJECT_VERSION_MAJOR} " )
19401982 endif ()
@@ -2675,7 +2717,9 @@ macro (basis_project_end)
26752717 # Attention: add_uninstall must be called last in a separate file via an
26762718 # add_subdirectory call. This ensures that the code is executed
26772719 # at the end of the root cmake_install.cmake file.
2678- add_subdirectory ("${BASIS_MODULE_PATH} /uninstall" "${PROJECT_BINARY_DIR} /uninstall" )
2720+ if (BASIS_UNINSTALLER)
2721+ add_subdirectory ("${BASIS_MODULE_PATH} /uninstall" "${PROJECT_BINARY_DIR} /uninstall" )
2722+ endif ()
26792723 endif ()
26802724
26812725 endif ()
0 commit comments