Merge topic 'project-version-variables'

41d2f2c4 write_basic_package_version_file: use PROJECT_VERSION
7e142c5a project: Manage VERSION variables
16d040c9 project: Add optional LANGUAGES keyword
00007dcc Help: Format project command and variable documentation
This commit is contained in:
Brad King 2014-02-03 11:10:58 -05:00 committed by CMake Topic Stage
commit a7f5a6ee12
62 changed files with 498 additions and 33 deletions

View File

@ -1,27 +1,57 @@
project
-------
Set a name for the entire project.
Set a name, version, and enable languages for the entire project.
::
.. code-block:: cmake
project(<projectname> [languageName1 languageName2 ... ] )
project(<PROJECT-NAME> [LANGUAGES] [<language-name>...])
project(<PROJECT-NAME>
[VERSION <major>[.<minor>[.<patch>[.<tweak>]]]]
[LANGUAGES <language-name>...])
Sets the name of the project. Additionally this sets the variables
<projectName>_BINARY_DIR and <projectName>_SOURCE_DIR to the
respective values.
Sets the name of the project and stores the name in the
:variable:`PROJECT_NAME` variable. Additionally this sets variables
* :variable:`PROJECT_SOURCE_DIR`,
:variable:`<PROJECT-NAME>_SOURCE_DIR`
* :variable:`PROJECT_BINARY_DIR`,
:variable:`<PROJECT-NAME>_BINARY_DIR`
If ``VERSION`` is specified, given components must be non-negative integers.
If ``VERSION`` is not specified, the default version is the empty string.
The ``VERSION`` option may not be used unless policy :policy:`CMP0048` is
set to ``NEW``.
The :command:`project()` command stores the version number and its components
in variables
* :variable:`PROJECT_VERSION`,
:variable:`<PROJECT-NAME>_VERSION`
* :variable:`PROJECT_VERSION_MAJOR`,
:variable:`<PROJECT-NAME>_VERSION_MAJOR`
* :variable:`PROJECT_VERSION_MINOR`,
:variable:`<PROJECT-NAME>_VERSION_MINOR`
* :variable:`PROJECT_VERSION_PATCH`,
:variable:`<PROJECT-NAME>_VERSION_PATCH`
* :variable:`PROJECT_VERSION_TWEAK`,
:variable:`<PROJECT-NAME>_VERSION_TWEAK`
Variables corresponding to unspecified versions are set to the empty string
(if policy :policy:`CMP0048` is set to ``NEW``).
Optionally you can specify which languages your project supports.
Example languages are CXX (i.e. C++), C, Fortran, etc. By default C
and CXX are enabled. E.g. if you do not have a C++ compiler, you can
disable the check for it by explicitly listing the languages you want
to support, e.g. C. By using the special language "NONE" all checks
for any language can be disabled. If a variable exists called
CMAKE_PROJECT_<projectName>_INCLUDE, the file pointed to by that
variable will be included as the last step of the project command.
Example languages are ``C``, ``CXX`` (i.e. C++), ``Fortran``, etc.
By default ``C`` and ``CXX`` are enabled if no language options are
given. Specify language ``NONE``, or use the ``LANGUAGES`` keyword
and list no languages, to skip enabling any languages.
The top-level CMakeLists.txt file for a project must contain a
literal, direct call to the project() command; loading one through the
include() command is not sufficient. If no such call exists CMake
will implicitly add one to the top that enables the default languages
(C and CXX).
If a variable exists called :variable:`CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE`,
the file pointed to by that variable will be included as the last step of the
project command.
The top-level ``CMakeLists.txt`` file for a project must contain a
literal, direct call to the :command:`project` command; loading one
through the :command:`include` command is not sufficient. If no such
call exists CMake will implicitly add one to the top that enables the
default languages (``C`` and ``CXX``).

View File

@ -99,3 +99,4 @@ All Policies
/policy/CMP0045
/policy/CMP0046
/policy/CMP0047
/policy/CMP0048

View File

@ -79,7 +79,17 @@ Variables that Provide Information
/variable/PROJECT-NAME_BINARY_DIR
/variable/PROJECT_NAME
/variable/PROJECT-NAME_SOURCE_DIR
/variable/PROJECT-NAME_VERSION
/variable/PROJECT-NAME_VERSION_MAJOR
/variable/PROJECT-NAME_VERSION_MINOR
/variable/PROJECT-NAME_VERSION_PATCH
/variable/PROJECT-NAME_VERSION_TWEAK
/variable/PROJECT_SOURCE_DIR
/variable/PROJECT_VERSION
/variable/PROJECT_VERSION_MAJOR
/variable/PROJECT_VERSION_MINOR
/variable/PROJECT_VERSION_PATCH
/variable/PROJECT_VERSION_TWEAK
Variables that Change Behavior
==============================
@ -121,6 +131,7 @@ Variables that Change Behavior
/variable/CMAKE_POLICY_DEFAULT_CMPNNNN
/variable/CMAKE_PREFIX_PATH
/variable/CMAKE_PROGRAM_PATH
/variable/CMAKE_PROJECT_PROJECT-NAME_INCLUDE
/variable/CMAKE_SKIP_INSTALL_ALL_DEPENDENCY
/variable/CMAKE_STAGING_PREFIX
/variable/CMAKE_SYSTEM_IGNORE_PATH

22
Help/policy/CMP0048.rst Normal file
View File

@ -0,0 +1,22 @@
CMP0048
-------
The :command:`project` command manages VERSION variables.
CMake version 3.0.0 introduced the ``VERSION`` option of the :command:`project`
command to specify a project version as well as the name. In order to keep
:variable:`PROJECT_VERSION` and related variables consistent with variable
:variable:`PROJECT_NAME` it is necessary to set the VERSION variables
to the empty string when no ``VERSION`` is given to :command:`project`.
However, this can change behavior for existing projects that set VERSION
variables themselves since :command:`project` may now clear them.
This policy controls the behavior for compatibility with such projects.
The OLD behavior for this policy is to leave VERSION variables untouched.
The NEW behavior for this policy is to set VERSION as documented by the
:command:`project` command.
This policy was introduced in CMake version 3.0.0.
CMake version |release| warns when the policy is not set and uses
OLD behavior. Use the cmake_policy command to set it to OLD or
NEW explicitly.

View File

@ -0,0 +1,6 @@
CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE
------------------------------------
A CMake language file or module to be included by the :command:`project`
command. This is is intended for injecting custom code into project
builds without modifying their source.

View File

@ -3,6 +3,6 @@
Top level binary directory for the named project.
A variable is created with the name used in the PROJECT command, and
is the binary directory for the project. This can be useful when
SUBDIR is used to connect several projects.
A variable is created with the name used in the :command:`project` command,
and is the binary directory for the project. This can be useful when
:command:`add_subdirectory` is used to connect several projects.

View File

@ -3,6 +3,6 @@
Top level source directory for the named project.
A variable is created with the name used in the PROJECT command, and
is the source directory for the project. This can be useful when
add_subdirectory is used to connect several projects.
A variable is created with the name used in the :command:`project` command,
and is the source directory for the project. This can be useful when
:command:`add_subdirectory` is used to connect several projects.

View File

@ -0,0 +1,11 @@
<PROJECT-NAME>_VERSION
----------------------
Value given to the ``VERSION`` option of the most recent call to the
:command:`project` command with project name ``<PROJECT-NAME>``, if any.
See also the component-wise version variables
:variable:`<PROJECT-NAME>_VERSION_MAJOR`,
:variable:`<PROJECT-NAME>_VERSION_MINOR`,
:variable:`<PROJECT-NAME>_VERSION_PATCH`, and
:variable:`<PROJECT-NAME>_VERSION_TWEAK`.

View File

@ -0,0 +1,5 @@
<PROJECT-NAME>_VERSION_MAJOR
----------------------------
First version number component of the :variable:`<PROJECT-NAME>_VERSION`
variable as set by the :command:`project` command.

View File

@ -0,0 +1,5 @@
<PROJECT-NAME>_VERSION_MINOR
----------------------------
Second version number component of the :variable:`<PROJECT-NAME>_VERSION`
variable as set by the :command:`project` command.

View File

@ -0,0 +1,5 @@
<PROJECT-NAME>_VERSION_PATCH
----------------------------
Third version number component of the :variable:`<PROJECT-NAME>_VERSION`
variable as set by the :command:`project` command.

View File

@ -0,0 +1,5 @@
<PROJECT-NAME>_VERSION_TWEAK
----------------------------
Fourth version number component of the :variable:`<PROJECT-NAME>_VERSION`
variable as set by the :command:`project` command.

View File

@ -3,4 +3,4 @@ PROJECT_BINARY_DIR
Full path to build directory for project.
This is the binary directory of the most recent PROJECT command.
This is the binary directory of the most recent :command:`project` command.

View File

@ -3,4 +3,4 @@ PROJECT_NAME
Name of the project given to the project command.
This is the name given to the most recent PROJECT command.
This is the name given to the most recent :command:`project` command.

View File

@ -3,4 +3,4 @@ PROJECT_SOURCE_DIR
Top level source directory for the current project.
This is the source directory of the most recent PROJECT command.
This is the source directory of the most recent :command:`project` command.

View File

@ -0,0 +1,11 @@
PROJECT_VERSION
---------------
Value given to the ``VERSION`` option of the most recent call to the
:command:`project` command, if any.
See also the component-wise version variables
:variable:`PROJECT_VERSION_MAJOR`,
:variable:`PROJECT_VERSION_MINOR`,
:variable:`PROJECT_VERSION_PATCH`, and
:variable:`PROJECT_VERSION_TWEAK`.

View File

@ -0,0 +1,5 @@
PROJECT_VERSION_MAJOR
---------------------
First version number component of the :variable:`PROJECT_VERSION`
variable as set by the :command:`project` command.

View File

@ -0,0 +1,5 @@
PROJECT_VERSION_MINOR
---------------------
Second version number component of the :variable:`PROJECT_VERSION`
variable as set by the :command:`project` command.

View File

@ -0,0 +1,5 @@
PROJECT_VERSION_PATCH
---------------------
Third version number component of the :variable:`PROJECT_VERSION`
variable as set by the :command:`project` command.

View File

@ -0,0 +1,5 @@
PROJECT_VERSION_TWEAK
---------------------
Fourth version number component of the :variable:`PROJECT_VERSION`
variable as set by the :command:`project` command.

View File

@ -99,7 +99,7 @@
#
# ::
#
# WRITE_BASIC_PACKAGE_VERSION_FILE( filename VERSION major.minor.patch COMPATIBILITY (AnyNewerVersion|SameMajorVersion|ExactVersion) )
# WRITE_BASIC_PACKAGE_VERSION_FILE( filename [VERSION major.minor.patch] COMPATIBILITY (AnyNewerVersion|SameMajorVersion|ExactVersion) )
#
#
#
@ -112,6 +112,9 @@
# filename is the output filename, it should be in the build tree.
# major.minor.patch is the version number of the project to be installed
#
# If no ``VERSION`` is given, the :variable:`PROJECT_VERSION` variable
# is used. If this hasn't been set, it errors out.
#
# The COMPATIBILITY mode AnyNewerVersion means that the installed
# package version will be considered compatible if it is newer or
# exactly the same as the requested version. This mode should be used

View File

@ -6,7 +6,7 @@
#
# ::
#
# WRITE_BASIC_CONFIG_VERSION_FILE( filename VERSION major.minor.patch COMPATIBILITY (AnyNewerVersion|SameMajorVersion) )
# WRITE_BASIC_CONFIG_VERSION_FILE( filename [VERSION major.minor.patch] COMPATIBILITY (AnyNewerVersion|SameMajorVersion) )
#
#
#
@ -46,7 +46,11 @@ function(WRITE_BASIC_CONFIG_VERSION_FILE _filename)
endif()
if("${CVF_VERSION}" STREQUAL "")
message(FATAL_ERROR "No VERSION specified for WRITE_BASIC_CONFIG_VERSION_FILE()")
if ("${PROJECT_VERSION}" STREQUAL "")
message(FATAL_ERROR "No VERSION specified for WRITE_BASIC_CONFIG_VERSION_FILE()")
else()
set(CVF_VERSION "${PROJECT_VERSION}")
endif()
endif()
configure_file("${versionTemplateFile}" "${_filename}" @ONLY)

View File

@ -341,6 +341,11 @@ cmPolicies::cmPolicies()
CMP0047, "CMP0047",
"Use QCC compiler id for the qcc drivers on QNX.",
3,0,0,0, cmPolicies::WARN);
this->DefinePolicy(
CMP0048, "CMP0048",
"project() command manages VERSION variables.",
3,0,0,0, cmPolicies::WARN);
}
cmPolicies::~cmPolicies()

View File

@ -101,6 +101,7 @@ public:
CMP0045, ///< Error on non-existent target in get_target_property
CMP0046, ///< Error on non-existent dependency in add_dependencies
CMP0047, ///< Use QCC compiler id for the qcc drivers on QNX.
CMP0048, ///< project() command manages VERSION variables
/** \brief Always the last entry.
*

View File

@ -62,15 +62,168 @@ bool cmProjectCommand
"Value Computed by CMake", cmCacheManager::STATIC);
}
bool haveVersion = false;
bool haveLanguages = false;
std::string version;
std::vector<std::string> languages;
if(args.size() > 1)
enum Doing { DoingLanguages, DoingVersion };
Doing doing = DoingLanguages;
for(size_t i = 1; i < args.size(); ++i)
{
for(size_t i =1; i < args.size(); ++i)
if(args[i] == "LANGUAGES")
{
if(haveLanguages)
{
this->Makefile->IssueMessage
(cmake::FATAL_ERROR, "LANGUAGES may be specified at most once.");
cmSystemTools::SetFatalErrorOccured();
return true;
}
haveLanguages = true;
doing = DoingLanguages;
}
else if (args[i] == "VERSION")
{
if(haveVersion)
{
this->Makefile->IssueMessage
(cmake::FATAL_ERROR, "VERSION may be specified at most once.");
cmSystemTools::SetFatalErrorOccured();
return true;
}
haveVersion = true;
doing = DoingVersion;
}
else if(doing == DoingVersion)
{
doing = DoingLanguages;
version = args[i];
}
else // doing == DoingLanguages
{
languages.push_back(args[i]);
}
}
else
if (haveVersion && !haveLanguages && !languages.empty())
{
this->Makefile->IssueMessage
(cmake::FATAL_ERROR,
"project with VERSION must use LANGUAGES before language names.");
cmSystemTools::SetFatalErrorOccured();
return true;
}
if (haveLanguages && languages.empty())
{
languages.push_back("NONE");
}
cmPolicies::PolicyStatus cmp0048 =
this->Makefile->GetPolicyStatus(cmPolicies::CMP0048);
if (haveVersion)
{
// Set project VERSION variables to given values
if (cmp0048 == cmPolicies::OLD ||
cmp0048 == cmPolicies::WARN)
{
this->Makefile->IssueMessage
(cmake::FATAL_ERROR,
"VERSION not allowed unless CMP0048 is set to NEW");
cmSystemTools::SetFatalErrorOccured();
return true;
}
cmsys::RegularExpression
vx("^([0-9]+(\\.[0-9]+(\\.[0-9]+(\\.[0-9]+)?)?)?)?$");
if(!vx.find(version))
{
std::string e = "VERSION \"" + version + "\" format invalid.";
this->Makefile->IssueMessage(cmake::FATAL_ERROR, e);
cmSystemTools::SetFatalErrorOccured();
return true;
}
std::string vs;
const char* sep = "";
char vb[4][64];
unsigned int v[4] = {0,0,0,0};
int vc = sscanf(version.c_str(), "%u.%u.%u.%u",
&v[0], &v[1], &v[2], &v[3]);
for(int i=0; i < 4; ++i)
{
if(i < vc)
{
sprintf(vb[i], "%u", v[i]);
vs += sep;
vs += vb[i];
sep = ".";
}
else
{
vb[i][0] = 0;
}
}
std::string vv;
vv = args[0] + "_VERSION";
this->Makefile->AddDefinition("PROJECT_VERSION", vs.c_str());
this->Makefile->AddDefinition(vv.c_str(), vs.c_str());
vv = args[0] + "_VERSION_MAJOR";
this->Makefile->AddDefinition("PROJECT_VERSION_MAJOR", vb[0]);
this->Makefile->AddDefinition(vv.c_str(), vb[0]);
vv = args[0] + "_VERSION_MINOR";
this->Makefile->AddDefinition("PROJECT_VERSION_MINOR", vb[1]);
this->Makefile->AddDefinition(vv.c_str(), vb[1]);
vv = args[0] + "_VERSION_PATCH";
this->Makefile->AddDefinition("PROJECT_VERSION_PATCH", vb[2]);
this->Makefile->AddDefinition(vv.c_str(), vb[2]);
vv = args[0] + "_VERSION_TWEAK";
this->Makefile->AddDefinition("PROJECT_VERSION_TWEAK", vb[3]);
this->Makefile->AddDefinition(vv.c_str(), vb[3]);
}
else if(cmp0048 != cmPolicies::OLD)
{
// Set project VERSION variables to empty
std::vector<std::string> vv;
vv.push_back("PROJECT_VERSION");
vv.push_back("PROJECT_VERSION_MAJOR");
vv.push_back("PROJECT_VERSION_MINOR");
vv.push_back("PROJECT_VERSION_PATCH");
vv.push_back("PROJECT_VERSION_TWEAK");
vv.push_back(args[0] + "_VERSION");
vv.push_back(args[0] + "_VERSION_MAJOR");
vv.push_back(args[0] + "_VERSION_MINOR");
vv.push_back(args[0] + "_VERSION_PATCH");
vv.push_back(args[0] + "_VERSION_TWEAK");
std::string vw;
for(std::vector<std::string>::iterator i = vv.begin();
i != vv.end(); ++i)
{
const char* v = this->Makefile->GetDefinition(i->c_str());
if(v && *v)
{
if(cmp0048 == cmPolicies::WARN)
{
vw += "\n ";
vw += *i;
}
else
{
this->Makefile->AddDefinition(i->c_str(), "");
}
}
}
if(!vw.empty())
{
cmOStringStream w;
w << (this->Makefile->GetPolicies()
->GetPolicyWarning(cmPolicies::CMP0048))
<< "\nThe following variable(s) would be set to empty:" << vw;
this->Makefile->IssueMessage(cmake::AUTHOR_WARNING, w.str());
}
}
if (languages.empty())
{
// if no language is specified do c and c++
languages.push_back("C");

View File

@ -82,6 +82,7 @@ add_RunCMake_test(include)
add_RunCMake_test(include_directories)
add_RunCMake_test(list)
add_RunCMake_test(message)
add_RunCMake_test(project)
add_RunCMake_test(string)
add_RunCMake_test(try_compile)
add_RunCMake_test(set)

View File

@ -0,0 +1 @@
^$

View File

@ -0,0 +1,30 @@
-- PROJECT_VERSION='1.2.3.4'
-- ProjectA_VERSION='1.2.3.4'
-- PROJECT_VERSION_MAJOR='1'
-- ProjectA_VERSION_MAJOR='1'
-- PROJECT_VERSION_MINOR='2'
-- ProjectA_VERSION_MINOR='2'
-- PROJECT_VERSION_PATCH='3'
-- ProjectA_VERSION_PATCH='3'
-- PROJECT_VERSION_TWEAK='4'
-- ProjectA_VERSION_TWEAK='4'
-- PROJECT_VERSION='0.1.2'
-- ProjectB_VERSION='0.1.2'
-- PROJECT_VERSION_MAJOR='0'
-- ProjectB_VERSION_MAJOR='0'
-- PROJECT_VERSION_MINOR='1'
-- ProjectB_VERSION_MINOR='1'
-- PROJECT_VERSION_PATCH='2'
-- ProjectB_VERSION_PATCH='2'
-- PROJECT_VERSION_TWEAK=''
-- ProjectB_VERSION_TWEAK=''
-- PROJECT_VERSION=''
-- ProjectC_VERSION=''
-- PROJECT_VERSION_MAJOR=''
-- ProjectC_VERSION_MAJOR=''
-- PROJECT_VERSION_MINOR=''
-- ProjectC_VERSION_MINOR=''
-- PROJECT_VERSION_PATCH=''
-- ProjectC_VERSION_PATCH=''
-- PROJECT_VERSION_TWEAK=''
-- ProjectC_VERSION_TWEAK=''

View File

@ -0,0 +1,19 @@
macro(print_versions name)
foreach(v "" _MAJOR _MINOR _PATCH _TWEAK)
message(STATUS "PROJECT_VERSION${v}='${PROJECT_VERSION${v}}'")
message(STATUS "${name}_VERSION${v}='${${name}_VERSION${v}}'")
endforeach()
endmacro()
cmake_policy(SET CMP0048 NEW)
project(ProjectA VERSION 1.2.3.4 LANGUAGES NONE)
print_versions(ProjectA)
project(ProjectB VERSION 0.1.2 LANGUAGES NONE)
print_versions(ProjectB)
set(PROJECT_VERSION 1)
set(ProjectC_VERSION 1)
project(ProjectC NONE)
print_versions(ProjectC)

View File

@ -0,0 +1 @@
1

View File

@ -0,0 +1,4 @@
CMake Error at CMP0048-OLD-VERSION.cmake:1 \(project\):
VERSION not allowed unless CMP0048 is set to NEW
Call Stack \(most recent call first\):
CMakeLists.txt:3 \(include\)$

View File

@ -0,0 +1,2 @@
project(MyProject VERSION 1 LANGUAGES NONE)
message("This line not reached.")

View File

@ -0,0 +1,2 @@
-- PROJECT_VERSION='1'
-- MyProject_VERSION_TWEAK='0'

View File

@ -0,0 +1,6 @@
cmake_policy(SET CMP0048 OLD)
set(PROJECT_VERSION 1)
set(MyProject_VERSION_TWEAK 0)
project(MyProject NONE)
message(STATUS "PROJECT_VERSION='${PROJECT_VERSION}'")
message(STATUS "MyProject_VERSION_TWEAK='${MyProject_VERSION_TWEAK}'")

View File

@ -0,0 +1,12 @@
CMake Warning \(dev\) at CMP0048-WARN.cmake:3 \(project\):
Policy CMP0048 is not set: project\(\) command manages VERSION variables.
Run "cmake --help-policy CMP0048" for policy details. Use the cmake_policy
command to set the policy and suppress this warning.
The following variable\(s\) would be set to empty:
PROJECT_VERSION
MyProject_VERSION_TWEAK
Call Stack \(most recent call first\):
CMakeLists.txt:3 \(include\)
This warning is for project developers. Use -Wno-dev to suppress it.

View File

@ -0,0 +1,3 @@
set(PROJECT_VERSION 1)
set(MyProject_VERSION_TWEAK 0)
project(MyProject NONE)

View File

@ -0,0 +1,3 @@
cmake_minimum_required(VERSION 2.8.4)
project(${RunCMake_TEST} NONE)
include(${RunCMake_TEST}.cmake)

View File

@ -0,0 +1 @@
ENABLED_LANGUAGES='NONE'

View File

@ -0,0 +1,3 @@
project(ProjectA LANGUAGES)
get_property(langs GLOBAL PROPERTY ENABLED_LANGUAGES)
message(STATUS "ENABLED_LANGUAGES='${langs}'")

View File

@ -0,0 +1 @@
ENABLED_LANGUAGES='NONE'

View File

@ -0,0 +1,3 @@
project(ProjectA NONE)
get_property(langs GLOBAL PROPERTY ENABLED_LANGUAGES)
message(STATUS "ENABLED_LANGUAGES='${langs}'")

View File

@ -0,0 +1 @@
ENABLED_LANGUAGES='NONE'

View File

@ -0,0 +1,3 @@
project(ProjectA LANGUAGES NONE)
get_property(langs GLOBAL PROPERTY ENABLED_LANGUAGES)
message(STATUS "ENABLED_LANGUAGES='${langs}'")

View File

@ -0,0 +1 @@
1

View File

@ -0,0 +1,4 @@
CMake Error at LanguagesTwice.cmake:1 \(project\):
LANGUAGES may be specified at most once.
Call Stack \(most recent call first\):
CMakeLists.txt:3 \(include\)$

View File

@ -0,0 +1,2 @@
project(ProjectA LANGUAGES NONE LANGUAGES)
message("This line not reached.")

View File

@ -0,0 +1,17 @@
include(RunCMake)
run_cmake(LanguagesImplicit)
run_cmake(LanguagesEmpty)
run_cmake(LanguagesNONE)
run_cmake(LanguagesTwice)
run_cmake(VersionAndLanguagesEmpty)
run_cmake(VersionEmpty)
run_cmake(VersionInvalid)
run_cmake(VersionMissingLanguages)
run_cmake(VersionMissingValueOkay)
run_cmake(VersionTwice)
run_cmake(CMP0048-OLD)
run_cmake(CMP0048-OLD-VERSION)
run_cmake(CMP0048-WARN)
run_cmake(CMP0048-NEW)

View File

@ -0,0 +1,2 @@
-- ENABLED_LANGUAGES='NONE'
-- PROJECT_VERSION='1'

View File

@ -0,0 +1,5 @@
cmake_policy(SET CMP0048 NEW)
project(ProjectA VERSION 1 LANGUAGES NONE)
get_property(langs GLOBAL PROPERTY ENABLED_LANGUAGES)
message(STATUS "ENABLED_LANGUAGES='${langs}'")
message(STATUS "PROJECT_VERSION='${PROJECT_VERSION}'")

View File

@ -0,0 +1,2 @@
-- ENABLED_LANGUAGES='NONE'
-- PROJECT_VERSION=''

View File

@ -0,0 +1,6 @@
cmake_policy(SET CMP0048 NEW)
set(PROJECT_VERSION 1)
project(ProjectA VERSION "" LANGUAGES NONE)
get_property(langs GLOBAL PROPERTY ENABLED_LANGUAGES)
message(STATUS "ENABLED_LANGUAGES='${langs}'")
message(STATUS "PROJECT_VERSION='${PROJECT_VERSION}'")

View File

@ -0,0 +1 @@
1

View File

@ -0,0 +1,4 @@
CMake Error at VersionInvalid.cmake:2 \(project\):
VERSION "NONE" format invalid.
Call Stack \(most recent call first\):
CMakeLists.txt:3 \(include\)$

View File

@ -0,0 +1,3 @@
cmake_policy(SET CMP0048 NEW)
project(ProjectA VERSION NONE)
message("This line not reached.")

View File

@ -0,0 +1 @@
1

View File

@ -0,0 +1,4 @@
CMake Error at VersionMissingLanguages.cmake:2 \(project\):
project with VERSION must use LANGUAGES before language names.
Call Stack \(most recent call first\):
CMakeLists.txt:3 \(include\)$

View File

@ -0,0 +1,3 @@
cmake_policy(SET CMP0048 NEW)
project(ProjectA VERSION 1 NONE)
message("This line not reached.")

View File

@ -0,0 +1,2 @@
-- ENABLED_LANGUAGES='NONE'
-- PROJECT_VERSION=''

View File

@ -0,0 +1,6 @@
cmake_policy(SET CMP0048 NEW)
set(PROJECT_VERSION 1)
project(ProjectA VERSION LANGUAGES NONE)
get_property(langs GLOBAL PROPERTY ENABLED_LANGUAGES)
message(STATUS "ENABLED_LANGUAGES='${langs}'")
message(STATUS "PROJECT_VERSION='${PROJECT_VERSION}'")

View File

@ -0,0 +1 @@
1

View File

@ -0,0 +1,4 @@
CMake Error at VersionTwice.cmake:2 \(project\):
VERSION may be specified at most once.
Call Stack \(most recent call first\):
CMakeLists.txt:3 \(include\)$

View File

@ -0,0 +1,3 @@
cmake_policy(SET CMP0048 NEW)
project(ProjectA VERSION 1 VERSION)
message("This line not reached.")