aboutsummaryrefslogtreecommitdiff
path: root/toolsrc/src/commands_import.cpp
diff options
context:
space:
mode:
authorRobert Schumacher <roschuma@microsoft.com>2017-02-08 15:12:28 -0800
committerGitHub <noreply@github.com>2017-02-08 15:12:28 -0800
commit7ddae17e2f520e83d25f78c078bf8b8a58fff447 (patch)
tree87e2fc5c57a685367ec051b1efbdeb5d3ab43f4d /toolsrc/src/commands_import.cpp
parent5e588ddb5be9e6e27cebcc3be2e1a27f3ca83a50 (diff)
parenta9f7fc6e90feaad50c1221ef9bd56e2620302215 (diff)
downloadvcpkg-7ddae17e2f520e83d25f78c078bf8b8a58fff447.tar.gz
vcpkg-7ddae17e2f520e83d25f78c078bf8b8a58fff447.zip
Merge branch 'master' into master
Diffstat (limited to 'toolsrc/src/commands_import.cpp')
-rw-r--r--toolsrc/src/commands_import.cpp86
1 files changed, 79 insertions, 7 deletions
diff --git a/toolsrc/src/commands_import.cpp b/toolsrc/src/commands_import.cpp
index 9cfc53d6c..7af2c7185 100644
--- a/toolsrc/src/commands_import.cpp
+++ b/toolsrc/src/commands_import.cpp
@@ -1,25 +1,97 @@
+#include "pch.h"
#include "vcpkg_Commands.h"
-#include "vcpkg.h"
+#include "Paragraphs.h"
+#include "StatusParagraph.h"
+#include "vcpkg_Files.h"
-namespace vcpkg
+namespace vcpkg::Commands::Import
{
- void import_command(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths)
+ struct Binaries
{
- static const std::string example = create_example_string(R"(import C:\path\to\CONTROLfile C:\path\to\includedir C:\path\to\projectdir)");
- args.check_exact_arg_count(3, example.c_str());
+ std::vector<fs::path> dlls;
+ std::vector<fs::path> libs;
+ };
+
+ static Binaries detect_files_in_directory_ending_with(const fs::path& path)
+ {
+ Files::check_is_directory(path);
+
+ Binaries binaries;
+
+ for (auto it = fs::recursive_directory_iterator(path); it != fs::recursive_directory_iterator(); ++it)
+ {
+ fs::path file = *it;
+ // Skip if directory ?????
+ if (file.extension() == ".dll")
+ {
+ binaries.dlls.push_back(file);
+ }
+ else if (file.extension() == ".lib")
+ {
+ binaries.libs.push_back(file);
+ }
+ }
+
+ return binaries;
+ }
+
+ static void copy_files_into_directory(const std::vector<fs::path>& files, const fs::path& destination_folder)
+ {
+ fs::create_directory(destination_folder);
+
+ for (auto const& src_path : files)
+ {
+ fs::path dest_path = destination_folder / src_path.filename();
+ fs::copy(src_path, dest_path, fs::copy_options::overwrite_existing);
+ }
+ }
+
+ static void place_library_files_in(const fs::path& include_directory, const fs::path& project_directory, const fs::path& destination_path)
+ {
+ Files::check_is_directory(include_directory);
+ Files::check_is_directory(project_directory);
+ Files::check_is_directory(destination_path);
+ Binaries debug_binaries = detect_files_in_directory_ending_with(project_directory / "Debug");
+ Binaries release_binaries = detect_files_in_directory_ending_with(project_directory / "Release");
+
+ fs::path destination_include_directory = destination_path / "include";
+ fs::copy(include_directory, destination_include_directory, fs::copy_options::recursive | fs::copy_options::overwrite_existing);
+
+ copy_files_into_directory(release_binaries.dlls, destination_path / "bin");
+ copy_files_into_directory(release_binaries.libs, destination_path / "lib");
+
+ fs::create_directory(destination_path / "debug");
+ copy_files_into_directory(debug_binaries.dlls, destination_path / "debug" / "bin");
+ copy_files_into_directory(debug_binaries.libs, destination_path / "debug" / "lib");
+ }
+
+ static void do_import(const vcpkg_paths& paths, const fs::path& include_directory, const fs::path& project_directory, const BinaryParagraph& control_file_data)
+ {
+ fs::path library_destination_path = paths.package_dir(control_file_data.spec);
+ fs::create_directory(library_destination_path);
+ place_library_files_in(include_directory, project_directory, library_destination_path);
+
+ fs::path control_file_path = library_destination_path / "CONTROL";
+ std::ofstream(control_file_path) << control_file_data;
+ }
+
+ void perform_and_exit(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths)
+ {
+ static const std::string example = Commands::Help::create_example_string(R"(import C:\path\to\CONTROLfile C:\path\to\includedir C:\path\to\projectdir)");
+ args.check_exact_arg_count(3, example);
const fs::path control_file_path(args.command_arguments[0]);
const fs::path include_directory(args.command_arguments[1]);
const fs::path project_directory(args.command_arguments[2]);
- auto pghs = get_paragraphs(control_file_path);
+ auto pghs = Paragraphs::get_paragraphs(control_file_path);
Checks::check_throw(pghs.size() == 1, "Invalid control file for package");
StatusParagraph spgh;
spgh.package = BinaryParagraph(pghs[0]);
auto& control_file_data = spgh.package;
- vcpkg::binary_import(paths, include_directory, project_directory, control_file_data);
+ do_import(paths, include_directory, project_directory, control_file_data);
exit(EXIT_SUCCESS);
}
}