diff options
| author | Alexander Karatarakis <alkarata@microsoft.com> | 2017-01-31 17:09:48 -0800 |
|---|---|---|
| committer | Alexander Karatarakis <alkarata@microsoft.com> | 2017-02-01 11:42:41 -0800 |
| commit | 459999786960483f6d46229524500543459968ed (patch) | |
| tree | aa3cf7e44325983e693315f698622eb70153ec77 | |
| parent | bd1a10e5b97b073731cbb97e26611edf317c16d5 (diff) | |
| download | vcpkg-459999786960483f6d46229524500543459968ed.tar.gz vcpkg-459999786960483f6d46229524500543459968ed.zip | |
Introduce BuildPolicies (not used by the post_build checks yet)
| -rw-r--r-- | toolsrc/include/BuildInfo.h | 6 | ||||
| -rw-r--r-- | toolsrc/include/BuildPolicies.h | 30 | ||||
| -rw-r--r-- | toolsrc/src/BuildInfo.cpp | 16 | ||||
| -rw-r--r-- | toolsrc/src/BuildPolicies.cpp | 49 | ||||
| -rw-r--r-- | toolsrc/vcpkglib/vcpkglib.vcxproj | 2 | ||||
| -rw-r--r-- | toolsrc/vcpkglib/vcpkglib.vcxproj.filters | 6 |
6 files changed, 105 insertions, 4 deletions
diff --git a/toolsrc/include/BuildInfo.h b/toolsrc/include/BuildInfo.h index c90ad7a4e..1fd032aa2 100644 --- a/toolsrc/include/BuildInfo.h +++ b/toolsrc/include/BuildInfo.h @@ -3,6 +3,8 @@ #include <unordered_map> #include "Paragraphs.h" #include <regex> +#include "BuildPolicies.h" +#include "opt_bool.h" namespace vcpkg::PostBuildLint { @@ -119,10 +121,12 @@ namespace vcpkg::PostBuildLint struct BuildInfo { - static BuildInfo create(const std::unordered_map<std::string, std::string>& pgh); + static BuildInfo create(std::unordered_map<std::string, std::string> pgh); std::string crt_linkage; std::string library_linkage; + + std::map<BuildPolicies::type, opt_bool_t> policies; }; BuildInfo read_build_info(const fs::path& filepath); diff --git a/toolsrc/include/BuildPolicies.h b/toolsrc/include/BuildPolicies.h new file mode 100644 index 000000000..fbe9b0ff3 --- /dev/null +++ b/toolsrc/include/BuildPolicies.h @@ -0,0 +1,30 @@ +#pragma once +#include <string> + +namespace vcpkg::PostBuildLint::BuildPolicies +{ + enum class backing_enum_t + { + UNKNOWN = 0, + DLLS_WITHOUT_LIBS + }; + + struct type + { + static constexpr int length() { return 2; } + constexpr explicit type(backing_enum_t backing_enum) : backing_enum(backing_enum) { } + constexpr operator backing_enum_t() const { return backing_enum; } + + const std::string& toString() const; + const std::string& cmake_variable() const; + + private: + type(); + backing_enum_t backing_enum; + }; + + static constexpr type UNKNOWN(backing_enum_t::UNKNOWN); + static constexpr type DLLS_WITHOUT_LIBS(backing_enum_t::DLLS_WITHOUT_LIBS); + + type parse(const std::string& s); +} 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; + } +} diff --git a/toolsrc/vcpkglib/vcpkglib.vcxproj b/toolsrc/vcpkglib/vcpkglib.vcxproj index e0374774c..802198ccb 100644 --- a/toolsrc/vcpkglib/vcpkglib.vcxproj +++ b/toolsrc/vcpkglib/vcpkglib.vcxproj @@ -138,6 +138,7 @@ <ItemGroup> <ClInclude Include="..\include\BinaryParagraph.h" /> <ClInclude Include="..\include\BuildInfo.h" /> + <ClInclude Include="..\include\BuildPolicies.h" /> <ClInclude Include="..\include\coff_file_reader.h" /> <ClInclude Include="..\include\expected.h" /> <ClInclude Include="..\include\filesystem_fs.h" /> @@ -176,6 +177,7 @@ <ItemGroup> <ClCompile Include="..\src\BinaryParagraph.cpp" /> <ClCompile Include="..\src\BuildInfo.cpp" /> + <ClCompile Include="..\src\BuildPolicies.cpp" /> <ClCompile Include="..\src\coff_file_reader.cpp" /> <ClCompile Include="..\src\commands_available_commands.cpp" /> <ClCompile Include="..\src\commands_build.cpp" /> diff --git a/toolsrc/vcpkglib/vcpkglib.vcxproj.filters b/toolsrc/vcpkglib/vcpkglib.vcxproj.filters index 40bde1536..4461655d1 100644 --- a/toolsrc/vcpkglib/vcpkglib.vcxproj.filters +++ b/toolsrc/vcpkglib/vcpkglib.vcxproj.filters @@ -156,6 +156,9 @@ <ClCompile Include="..\src\opt_bool.cpp"> <Filter>Source Files</Filter> </ClCompile> + <ClCompile Include="..\src\BuildPolicies.cpp"> + <Filter>Source Files</Filter> + </ClCompile> </ItemGroup> <ItemGroup> <ClInclude Include="..\include\package_spec.h"> @@ -266,5 +269,8 @@ <ClInclude Include="..\include\vcpkg_optional.h"> <Filter>Header Files</Filter> </ClInclude> + <ClInclude Include="..\include\BuildPolicies.h"> + <Filter>Header Files</Filter> + </ClInclude> </ItemGroup> </Project>
\ No newline at end of file |
