aboutsummaryrefslogtreecommitdiff
path: root/toolsrc/src
diff options
context:
space:
mode:
authorAlexander Karatarakis <alkarata@microsoft.com>2017-01-31 17:09:48 -0800
committerAlexander Karatarakis <alkarata@microsoft.com>2017-02-01 11:42:41 -0800
commit459999786960483f6d46229524500543459968ed (patch)
treeaa3cf7e44325983e693315f698622eb70153ec77 /toolsrc/src
parentbd1a10e5b97b073731cbb97e26611edf317c16d5 (diff)
downloadvcpkg-459999786960483f6d46229524500543459968ed.tar.gz
vcpkg-459999786960483f6d46229524500543459968ed.zip
Introduce BuildPolicies (not used by the post_build checks yet)
Diffstat (limited to 'toolsrc/src')
-rw-r--r--toolsrc/src/BuildInfo.cpp16
-rw-r--r--toolsrc/src/BuildPolicies.cpp49
2 files changed, 62 insertions, 3 deletions
diff --git a/toolsrc/src/BuildInfo.cpp b/toolsrc/src/BuildInfo.cpp
index b401f9d44..82243ebac 100644
--- a/toolsrc/src/BuildInfo.cpp
+++ b/toolsrc/src/BuildInfo.cpp
@@ -1,6 +1,7 @@
#include "pch.h"
#include "BuildInfo.h"
#include "vcpkg_Checks.h"
+#include "opt_bool.h"
#include "vcpkglib_helpers.h"
namespace vcpkg::PostBuildLint
@@ -44,11 +45,20 @@ namespace vcpkg::PostBuildLint
static const std::string LIBRARY_LINKAGE = "LibraryLinkage";
}
- BuildInfo BuildInfo::create(const std::unordered_map<std::string, std::string>& pgh)
+ BuildInfo BuildInfo::create(std::unordered_map<std::string, std::string> pgh)
{
BuildInfo build_info;
- build_info.crt_linkage = details::required_field(pgh, BuildInfoRequiredField::CRT_LINKAGE);
- build_info.library_linkage = details::required_field(pgh, BuildInfoRequiredField::LIBRARY_LINKAGE);
+ build_info.crt_linkage = details::remove_required_field(&pgh, BuildInfoRequiredField::CRT_LINKAGE);
+ build_info.library_linkage = details::remove_required_field(&pgh, BuildInfoRequiredField::LIBRARY_LINKAGE);
+
+ // The remaining entries are policies
+ for (const std::unordered_map<std::string, std::string>::value_type& p : pgh)
+ {
+ const BuildPolicies::type policy = BuildPolicies::parse(p.first);
+ Checks::check_exit(policy != BuildPolicies::UNKNOWN, "Unknown policy found: %s", p.first);
+ const opt_bool_t status = opt_bool::parse(p.second);
+ build_info.policies.emplace(policy, status);
+ }
return build_info;
}
diff --git a/toolsrc/src/BuildPolicies.cpp b/toolsrc/src/BuildPolicies.cpp
new file mode 100644
index 000000000..0f7c3c492
--- /dev/null
+++ b/toolsrc/src/BuildPolicies.cpp
@@ -0,0 +1,49 @@
+#include "pch.h"
+#include "BuildPolicies.h"
+#include "vcpkg_Checks.h"
+
+namespace vcpkg::PostBuildLint::BuildPolicies
+{
+ static const std::string NAME_UNKNOWN = "PolicyUnknown";
+ static const std::string NAME_DLLS_WITHOUT_LIBS = "PolicyDLLsWithoutLIBs";
+
+ const std::string& type::toString() const
+ {
+ switch (this->backing_enum)
+ {
+ case DLLS_WITHOUT_LIBS:
+ return NAME_DLLS_WITHOUT_LIBS;
+ case UNKNOWN:
+ return NAME_UNKNOWN;
+ default:
+ Checks::unreachable();
+ }
+ }
+
+ const std::string& type::cmake_variable() const
+ {
+ static const std::string CMAKE_VARIABLE_DLLS_WITHOUT_LIBS = "VCPKG_POLICY_DLLS_WITHOUT_LIBS";
+
+ switch (this->backing_enum)
+ {
+ case DLLS_WITHOUT_LIBS:
+ return CMAKE_VARIABLE_DLLS_WITHOUT_LIBS;
+ case UNKNOWN:
+ Checks::exit_with_message("No CMake command corresponds to UNKNOWN");
+ default:
+ Checks::unreachable();
+ }
+ }
+
+ type::type(): backing_enum(backing_enum_t::UNKNOWN) {}
+
+ type parse(const std::string& s)
+ {
+ if (s == NAME_DLLS_WITHOUT_LIBS)
+ {
+ return BuildPolicies::DLLS_WITHOUT_LIBS;
+ }
+
+ return BuildPolicies::UNKNOWN;
+ }
+}