[Cmake-commits] CMake branch, next, updated. v2.8.12.1-7277-g78532d6
Alexander Neundorf
neundorf at kde.org
Sat Jan 25 16:17:29 EST 2014
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "CMake".
The branch, next has been updated
via 78532d6e3eb87c2a479fcae496006a72853f0f27 (commit)
via 047d35d355669f9f568a28e3d4df1c7c11b565e8 (commit)
via 6ef75f436bba6017d80a1bbd32dcfba689ec2fd6 (commit)
via 7bb7474c2da42863639975eff81f60bfd3578b69 (commit)
via 0569b189d9091d313944b3bdc9487c2bd583a7aa (commit)
via d59997264dd5f431dbf64efcae253942544d0d16 (commit)
via 4401326286dcb908ae1b2f5c3f1d304f61dbc5b6 (commit)
from 3c6550c49c5b8a99e1af5effd2c6bb978e9c517f (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=78532d6e3eb87c2a479fcae496006a72853f0f27
commit 78532d6e3eb87c2a479fcae496006a72853f0f27
Merge: 3c6550c 047d35d
Author: Alexander Neundorf <neundorf at kde.org>
AuthorDate: Sat Jan 25 16:17:28 2014 -0500
Commit: CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Sat Jan 25 16:17:28 2014 -0500
Merge topic 'AddVersionToProjectCommand' into next
047d35d3 project(): add test for VERSION parameter
6ef75f43 write_basic_package_version_file(): make use of the new ${PROJECT_VERSION}
7bb7474c project(): document the new VERSION argument
0569b189 project(): improve documentation
d5999726 project(): unset VERSION variables if no VERSION is given
44013262 project(): add optional VERSION argument
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=047d35d355669f9f568a28e3d4df1c7c11b565e8
commit 047d35d355669f9f568a28e3d4df1c7c11b565e8
Author: Alex Neundorf <neundorf at kde.org>
AuthorDate: Fri Jan 10 23:29:16 2014 +0100
Commit: Alex Neundorf <neundorf at kde.org>
CommitDate: Sat Jan 25 21:19:04 2014 +0100
project(): add test for VERSION parameter
Alex
diff --git a/Tests/DoubleProject/CMakeLists.txt b/Tests/DoubleProject/CMakeLists.txt
index 02a6275..c9004eb 100644
--- a/Tests/DoubleProject/CMakeLists.txt
+++ b/Tests/DoubleProject/CMakeLists.txt
@@ -1,3 +1,56 @@
project(dumb)
project(dumber)
add_executable(just_silly silly.c)
+
+if(DEFINED PROJECT_VERSION)
+ message(SEND_ERROR "PROJECT_VERSION defined, but should not !")
+endif()
+
+project(Foo VERSION "1.2.3.4" C)
+
+if(NOT Foo_VERSION STREQUAL "1.2.3.4")
+ message(SEND_ERROR "Foo_VERSION set to ${Foo_VERSION} ! (expected 1.2.3.4 !")
+endif()
+
+if(NOT "${Foo_VERSION_MAJOR}.${Foo_VERSION_MINOR}.${Foo_VERSION_PATCH}.${Foo_VERSION_TWEAK}" STREQUAL "1.2.3.4")
+ message(SEND_ERROR "Foo_VERSION set to \"${Foo_VERSION_MAJOR}.${Foo_VERSION_MINOR}.${Foo_VERSION_PATCH}.${Foo_VERSION_TWEAK}\"! (expected 1.2.3.4 !")
+endif()
+
+if(NOT Foo_VERSION STREQUAL PROJECT_VERSION)
+ message(SEND_ERROR "Foo_VERSION differs from PROJECT_VERSION ! (${Foo_VERSION} != ${PROJECT_VERSION})")
+endif()
+
+project(Bar CXX)
+
+if(DEFINED PROJECT_VERSION)
+ message(SEND_ERROR "PROJECT_VERSION defined (\"${PROJECT_VERSION}\"), but should not !")
+endif()
+
+if(DEFINED Bar_VERSION)
+ message(SEND_ERROR "Bar_VERSION defined, but should not !")
+endif()
+
+
+# test that PROJECT_VERSION is not reset if it hasn't been set by project(VERSION)
+
+set(PROJECT_VERSION "5.6.7")
+
+project(Blub)
+
+if(NOT "${PROJECT_VERSION}" STREQUAL "5.6.7")
+ message(SEND_ERROR "PROJECT_VERSION unset, but should not have been unset since it wasn't set by project(VERSION) before.")
+endif()
+
+
+
+project(Xyz VERSION "7.8.9")
+
+set(CMAKE_PROJECT_VERSION_SET_BY_PROJECT_COMMAND FALSE)
+
+set(PROJECT_VERSION "3.2.1")
+
+project(Abc)
+
+if(NOT "${PROJECT_VERSION}" STREQUAL "3.2.1")
+ message(SEND_ERROR "PROJECT_VERSION set to \"${PROJECT_VERSION}\", but should still be 3.2.1, since unsetting was disabled .")
+endif()
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=6ef75f436bba6017d80a1bbd32dcfba689ec2fd6
commit 6ef75f436bba6017d80a1bbd32dcfba689ec2fd6
Author: Alex Neundorf <neundorf at kde.org>
AuthorDate: Mon Jan 6 21:20:44 2014 +0100
Commit: Alex Neundorf <neundorf at kde.org>
CommitDate: Sat Jan 25 21:19:04 2014 +0100
write_basic_package_version_file(): make use of the new ${PROJECT_VERSION}
In the write_basic_package_version_file(), the VERSION argument
is now optional. If none is given, it falls back to ${PROJECT_VERSION}.
Alex
diff --git a/Modules/CMakePackageConfigHelpers.cmake b/Modules/CMakePackageConfigHelpers.cmake
index f388fe0..210fdb1 100644
--- a/Modules/CMakePackageConfigHelpers.cmake
+++ b/Modules/CMakePackageConfigHelpers.cmake
@@ -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 version number specified via
+# project(... VERSION x.y.z ...) 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
diff --git a/Modules/WriteBasicConfigVersionFile.cmake b/Modules/WriteBasicConfigVersionFile.cmake
index 95187b4..7d28e95 100644
--- a/Modules/WriteBasicConfigVersionFile.cmake
+++ b/Modules/WriteBasicConfigVersionFile.cmake
@@ -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)
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=7bb7474c2da42863639975eff81f60bfd3578b69
commit 7bb7474c2da42863639975eff81f60bfd3578b69
Author: Alex Neundorf <neundorf at kde.org>
AuthorDate: Mon Jan 6 21:20:12 2014 +0100
Commit: Alex Neundorf <neundorf at kde.org>
CommitDate: Sat Jan 25 21:19:04 2014 +0100
project(): document the new VERSION argument
Alex
diff --git a/Help/command/project.rst b/Help/command/project.rst
index 41cecd3..04c953e 100644
--- a/Help/command/project.rst
+++ b/Help/command/project.rst
@@ -5,7 +5,7 @@ Set a name for the entire project.
::
- project(<projectname> [languageName1 languageName2 ... ] )
+ project(<projectname> [VERSION major[.minor[.patch[.tweak]]]] [languageName1 languageName2 ... ] )
Sets the name of the project, the name is also stored in the PROJECT_NAME
variable. Additionally this sets the cache variables
@@ -13,6 +13,17 @@ variable. Additionally this sets the cache variables
respective values, as well as the PROJECT_BINARY_DIR and PROJECT_SOURCE_DIR
variables.
+If a version is specified, the :command:`project()` command sets the variables
+PROJECT_VERSION and <projectName>_VERSION to this version.
+Additionally the up to 4 components of the version string are stored in the
+PROJECT_VERSION_MAJOR, PROJECT_VERSION_MINOR, PROJECT_VERSION_PATCH and
+PROJECT_VERSION_TWEAK, as well as the <projectName>_VERSION_MAJOR,
+<projectName>_VERSION_MINOR, <projectName>_VERSION_PATCH> and
+<projectName>_VERSION_TWEAK variables.
+If VERSION is not used, the PROJECT_VERSION variables will be unset if they
+have been set by a :command:`project(VERSION)` call before. This can be disabled
+by setting the variable CMAKE_PROJECT_VERSION_SET_BY_PROJECT_COMMAND to FALSE.
+
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
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=0569b189d9091d313944b3bdc9487c2bd583a7aa
commit 0569b189d9091d313944b3bdc9487c2bd583a7aa
Author: Alex Neundorf <neundorf at kde.org>
AuthorDate: Mon Jan 6 21:19:44 2014 +0100
Commit: Alex Neundorf <neundorf at kde.org>
CommitDate: Sat Jan 25 21:19:03 2014 +0100
project(): improve documentation
Now also mention PROJECT_NAME, PROJECT_SOURCE_DIR and PROJECT_BINARY_DIR
in the documentation for project().
Alex
diff --git a/Help/command/project.rst b/Help/command/project.rst
index 9b9f93f..41cecd3 100644
--- a/Help/command/project.rst
+++ b/Help/command/project.rst
@@ -7,9 +7,11 @@ Set a name for the entire project.
project(<projectname> [languageName1 languageName2 ... ] )
-Sets the name of the project. Additionally this sets the variables
+Sets the name of the project, the name is also stored in the PROJECT_NAME
+variable. Additionally this sets the cache variables
<projectName>_BINARY_DIR and <projectName>_SOURCE_DIR to the
-respective values.
+respective values, as well as the PROJECT_BINARY_DIR and PROJECT_SOURCE_DIR
+variables.
Optionally you can specify which languages your project supports.
Example languages are CXX (i.e. C++), C, Fortran, etc. By default C
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=d59997264dd5f431dbf64efcae253942544d0d16
commit d59997264dd5f431dbf64efcae253942544d0d16
Author: Alex Neundorf <neundorf at kde.org>
AuthorDate: Fri Jan 10 22:05:11 2014 +0100
Commit: Alex Neundorf <neundorf at kde.org>
CommitDate: Sat Jan 25 21:19:03 2014 +0100
project(): unset VERSION variables if no VERSION is given
By unsetting the VERSION variables, it is ensured that in subdirs
with project()-calls without version not accidentially the VERSION
from parent directories is inherited. But only unset these variables
if they have been set by a previous project() call. This is done by
testing the cmake variable CMAKE_PROJECT_VERSION_SET_BY_PROJECT_COMMAND.
Alex
diff --git a/Source/cmProjectCommand.cxx b/Source/cmProjectCommand.cxx
index 811813c..8a851e0 100644
--- a/Source/cmProjectCommand.cxx
+++ b/Source/cmProjectCommand.cxx
@@ -62,6 +62,7 @@ bool cmProjectCommand
"Value Computed by CMake", cmCacheManager::STATIC);
}
+ bool haveVersion = false;
std::string version;
std::vector<std::string> languages;
bool doingVersion = false;
@@ -70,6 +71,7 @@ bool cmProjectCommand
if (doingVersion)
{
doingVersion = false;
+ haveVersion = true;
version = args[i];
}
else
@@ -85,7 +87,38 @@ bool cmProjectCommand
}
}
- if (version.size() > 0)
+ if (version.empty())
+ {
+ if (this->Makefile->IsOn("CMAKE_PROJECT_VERSION_SET_BY_PROJECT_COMMAND"))
+ {
+ // unset these variables only if they have been set by a previous
+ // project() call
+ this->Makefile->RemoveDefinition("PROJECT_VERSION");
+ this->Makefile->RemoveDefinition("PROJECT_VERSION_MAJOR");
+ this->Makefile->RemoveDefinition("PROJECT_VERSION_MINOR");
+ this->Makefile->RemoveDefinition("PROJECT_VERSION_PATCH");
+ this->Makefile->RemoveDefinition("PROJECT_VERSION_TWEAK");
+ }
+
+ if (haveVersion)
+ {
+ // an empty version has been explicitely set
+ std::string versionVar = args[0] + "_VERSION";
+ this->Makefile->RemoveDefinition(versionVar.c_str());
+ versionVar = args[0] + "_VERSION_MAJOR";
+ this->Makefile->RemoveDefinition(versionVar.c_str());
+ versionVar = args[0] + "_VERSION_MINOR";
+ this->Makefile->RemoveDefinition(versionVar.c_str());
+ versionVar = args[0] + "_VERSION_PATCH";
+ this->Makefile->RemoveDefinition(versionVar.c_str());
+ versionVar = args[0] + "_VERSION_TWEAK";
+ this->Makefile->RemoveDefinition(versionVar.c_str());
+ }
+
+ this->Makefile->RemoveDefinition(
+ "CMAKE_PROJECT_VERSION_SET_BY_PROJECT_COMMAND");
+ }
+ else
{
// A version was set, set the variables.
unsigned int versionMajor = 0;
@@ -97,27 +130,23 @@ bool cmProjectCommand
&versionPatch, &versionTweak);
char buffer[1024];
-
- std::string versionVar = args[0];
- versionVar += "_VERSION_TWEAK";
+ std::string versionVar;
+ versionVar = args[0] + "_VERSION_TWEAK";
sprintf(buffer, "%d", versionCount >=4 ? versionTweak : 0);
this->Makefile->AddDefinition("PROJECT_VERSION_TWEAK", buffer);
this->Makefile->AddDefinition(versionVar.c_str(), buffer);
- versionVar = args[0];
- versionVar += "_VERSION_PATCH";
+ versionVar = args[0] + "_VERSION_PATCH";
sprintf(buffer, "%d", versionCount >=3 ? versionPatch : 0);
this->Makefile->AddDefinition("PROJECT_VERSION_PATCH", buffer);
this->Makefile->AddDefinition(versionVar.c_str(), buffer);
- versionVar = args[0];
- versionVar += "_VERSION_MINOR";
+ versionVar = args[0] + "_VERSION_MINOR";
sprintf(buffer, "%d", versionCount >=2 ? versionMinor : 0);
this->Makefile->AddDefinition("PROJECT_VERSION_MINOR", buffer);
this->Makefile->AddDefinition(versionVar.c_str(), buffer);
- versionVar = args[0];
- versionVar += "_VERSION_MAJOR";
+ versionVar = args[0] + "_VERSION_MAJOR";
sprintf(buffer, "%d", versionCount >=1 ? versionMajor : 0);
this->Makefile->AddDefinition("PROJECT_VERSION_MAJOR", buffer);
this->Makefile->AddDefinition(versionVar.c_str(), buffer);
@@ -146,6 +175,9 @@ bool cmProjectCommand
versionVar += "_VERSION";
this->Makefile->AddDefinition("PROJECT_VERSION", buffer);
this->Makefile->AddDefinition(versionVar.c_str(), buffer);
+
+ this->Makefile->AddDefinition(
+ "CMAKE_PROJECT_VERSION_SET_BY_PROJECT_COMMAND", "TRUE");
}
if (languages.size() == 0)
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=4401326286dcb908ae1b2f5c3f1d304f61dbc5b6
commit 4401326286dcb908ae1b2f5c3f1d304f61dbc5b6
Author: Alex Neundorf <neundorf at kde.org>
AuthorDate: Mon Jan 6 21:18:58 2014 +0100
Commit: Alex Neundorf <neundorf at kde.org>
CommitDate: Mon Jan 6 21:22:43 2014 +0100
project(): add optional VERSION argument
This patch adds support for an optional VERSION
argument to project().
With this patch, project() now also sets
PROJECT_VERSION_(MAJOR|MINOR|PATCH|TWEAK) and
<Name>_VERSION_(MAJOR|MINOR|PATCH|TWEAK) variables.
This makes it possible for other functions or macros
to rely on these variables containing the version number
of the current project.
Alex
diff --git a/Source/cmProjectCommand.cxx b/Source/cmProjectCommand.cxx
index 11f9a76..811813c 100644
--- a/Source/cmProjectCommand.cxx
+++ b/Source/cmProjectCommand.cxx
@@ -62,15 +62,93 @@ bool cmProjectCommand
"Value Computed by CMake", cmCacheManager::STATIC);
}
+ std::string version;
std::vector<std::string> languages;
- if(args.size() > 1)
+ bool doingVersion = false;
+ for(size_t i =1; i < args.size(); ++i)
{
- for(size_t i =1; i < args.size(); ++i)
+ if (doingVersion)
{
- languages.push_back(args[i]);
+ doingVersion = false;
+ version = args[i];
}
+ else
+ {
+ if (args[i] == "VERSION")
+ {
+ doingVersion = true;
+ }
+ else
+ {
+ languages.push_back(args[i]);
+ }
+ }
+ }
+
+ if (version.size() > 0)
+ {
+ // A version was set, set the variables.
+ unsigned int versionMajor = 0;
+ unsigned int versionMinor = 0;
+ unsigned int versionPatch = 0;
+ unsigned int versionTweak= 0;
+ int versionCount = sscanf(version.c_str(), "%u.%u.%u.%u",
+ &versionMajor, &versionMinor,
+ &versionPatch, &versionTweak);
+
+ char buffer[1024];
+
+ std::string versionVar = args[0];
+ versionVar += "_VERSION_TWEAK";
+ sprintf(buffer, "%d", versionCount >=4 ? versionTweak : 0);
+ this->Makefile->AddDefinition("PROJECT_VERSION_TWEAK", buffer);
+ this->Makefile->AddDefinition(versionVar.c_str(), buffer);
+
+ versionVar = args[0];
+ versionVar += "_VERSION_PATCH";
+ sprintf(buffer, "%d", versionCount >=3 ? versionPatch : 0);
+ this->Makefile->AddDefinition("PROJECT_VERSION_PATCH", buffer);
+ this->Makefile->AddDefinition(versionVar.c_str(), buffer);
+
+ versionVar = args[0];
+ versionVar += "_VERSION_MINOR";
+ sprintf(buffer, "%d", versionCount >=2 ? versionMinor : 0);
+ this->Makefile->AddDefinition("PROJECT_VERSION_MINOR", buffer);
+ this->Makefile->AddDefinition(versionVar.c_str(), buffer);
+
+ versionVar = args[0];
+ versionVar += "_VERSION_MAJOR";
+ sprintf(buffer, "%d", versionCount >=1 ? versionMajor : 0);
+ this->Makefile->AddDefinition("PROJECT_VERSION_MAJOR", buffer);
+ this->Makefile->AddDefinition(versionVar.c_str(), buffer);
+
+ switch(versionCount)
+ {
+ case 4:
+ sprintf(buffer, "%d.%d.%d.%d",
+ versionMajor, versionMinor, versionPatch, versionTweak);
+ break;
+ case 3:
+ sprintf(buffer, "%d.%d.%d", versionMajor, versionMinor, versionPatch);
+ break;
+ case 2:
+ sprintf(buffer, "%d.%d", versionMajor, versionMinor);
+ break;
+ case 1:
+ sprintf(buffer, "%d", versionMajor);
+ break;
+ case 0:
+ sprintf(buffer, "0");
+ break;
}
- else
+
+ versionVar = args[0];
+ versionVar += "_VERSION";
+ this->Makefile->AddDefinition("PROJECT_VERSION", buffer);
+ this->Makefile->AddDefinition(versionVar.c_str(), buffer);
+ }
+
+ if (languages.size() == 0)
{
// if no language is specified do c and c++
languages.push_back("C");
-----------------------------------------------------------------------
Summary of changes:
Help/command/project.rst | 19 ++++-
Modules/CMakePackageConfigHelpers.cmake | 5 +-
Modules/WriteBasicConfigVersionFile.cmake | 8 +-
Source/cmProjectCommand.cxx | 116 ++++++++++++++++++++++++++++-
Tests/DoubleProject/CMakeLists.txt | 53 +++++++++++++
5 files changed, 192 insertions(+), 9 deletions(-)
hooks/post-receive
--
CMake
More information about the Cmake-commits
mailing list