Exec mode deps file resolve hostpolicy

This commit is contained in:
Senthil 2016-03-25 12:47:24 -07:00 committed by schellap
parent 7397d20549
commit 4f16db1fc3
7 changed files with 48 additions and 8 deletions

View file

@ -97,6 +97,16 @@ void deps_json_t::reconcile_libraries_with_targets(
entry.relative_path.c_str()); entry.relative_path.c_str());
} }
if (i == deps_entry_t::asset_types::native &&
entry.asset_name == LIBHOSTPOLICY_FILENAME)
{
m_hostpolicy_index = m_deps_entries[i].size() - 1;
trace::verbose(_X("Found hostpolicy from deps %d [%s, %s, %s]"),
m_hostpolicy_index,
entry.library_name.c_str(),
entry.library_version.c_str(),
entry.relative_path.c_str());
}
} }
} }
} }

View file

@ -26,6 +26,7 @@ public:
deps_json_t() deps_json_t()
: m_valid(false) : m_valid(false)
, m_coreclr_index(-1) , m_coreclr_index(-1)
, m_hostpolicy_index(-1)
{ {
} }
@ -51,12 +52,23 @@ public:
return m_coreclr_index >= 0; return m_coreclr_index >= 0;
} }
bool has_hostpolicy_entry()
{
return m_hostpolicy_index >= 0;
}
const deps_entry_t& get_coreclr_entry() const deps_entry_t& get_coreclr_entry()
{ {
assert(has_coreclr_entry()); assert(has_coreclr_entry());
return m_deps_entries[deps_entry_t::asset_types::native][m_coreclr_index]; return m_deps_entries[deps_entry_t::asset_types::native][m_coreclr_index];
} }
const deps_entry_t& get_hostpolicy_entry()
{
assert(has_hostpolicy_entry());
return m_deps_entries[deps_entry_t::asset_types::native][m_hostpolicy_index];
}
bool is_valid() bool is_valid()
{ {
return m_valid; return m_valid;
@ -90,6 +102,7 @@ private:
std::unordered_map<pal::string_t, int> m_ni_entries; std::unordered_map<pal::string_t, int> m_ni_entries;
rid_fallback_graph_t m_rid_fallback_graph; rid_fallback_graph_t m_rid_fallback_graph;
int m_coreclr_index; int m_coreclr_index;
int m_hostpolicy_index;
bool m_valid; bool m_valid;
}; };

View file

@ -20,6 +20,8 @@ set(SOURCES
../../common/trace.cpp ../../common/trace.cpp
../../common/utils.cpp ../../common/utils.cpp
../libhost.cpp ../libhost.cpp
../deps_format.cpp
../deps_entry.cpp
../runtime_config.cpp ../runtime_config.cpp
../json/casablanca/src/json/json.cpp ../json/casablanca/src/json/json.cpp
../json/casablanca/src/json/json_parsing.cpp ../json/casablanca/src/json/json_parsing.cpp

View file

@ -12,6 +12,7 @@
#include "runtime_config.h" #include "runtime_config.h"
#include "cpprest/json.h" #include "cpprest/json.h"
#include "error_codes.h" #include "error_codes.h"
#include "deps_format.h"
pal::string_t fx_muxer_t::resolve_fx_dir(const pal::string_t& muxer_dir, runtime_config_t* runtime) pal::string_t fx_muxer_t::resolve_fx_dir(const pal::string_t& muxer_dir, runtime_config_t* runtime)
{ {
@ -23,7 +24,7 @@ pal::string_t fx_muxer_t::resolve_fx_dir(const pal::string_t& muxer_dir, runtime
fx_ver_t specified(-1, -1, -1); fx_ver_t specified(-1, -1, -1);
if (!fx_ver_t::parse(fx_ver, &specified, false)) if (!fx_ver_t::parse(fx_ver, &specified, false))
{ {
trace::info(_X("The specified runtimeconfig.json version [%s] could not be parsed"), fx_ver.c_str()); trace::error(_X("The specified runtimeconfig.json version [%s] could not be parsed"), fx_ver.c_str());
return pal::string_t(); return pal::string_t();
} }
@ -61,7 +62,7 @@ pal::string_t fx_muxer_t::resolve_fx_dir(const pal::string_t& muxer_dir, runtime
} }
trace::verbose(_X("Chose FX version [%s]"), fx_dir.c_str()); trace::verbose(_X("Chose FX version [%s]"), fx_dir.c_str());
return pal::directory_exists(fx_dir) ? fx_dir : pal::string_t(); return fx_dir;
} }
pal::string_t fx_muxer_t::resolve_cli_version(const pal::string_t& global_json) pal::string_t fx_muxer_t::resolve_cli_version(const pal::string_t& global_json)
@ -104,7 +105,7 @@ pal::string_t fx_muxer_t::resolve_cli_version(const pal::string_t& global_json)
} }
catch (...) catch (...)
{ {
trace::verbose(_X("A JSON parsing exception occurred")); trace::error(_X("A JSON parsing exception occurred"));
} }
trace::verbose(_X("CLI version is [%s] in global json file [%s]"), retval.c_str(), global_json.c_str()); trace::verbose(_X("CLI version is [%s] in global json file [%s]"), retval.c_str(), global_json.c_str());
return retval; return retval;
@ -329,8 +330,20 @@ int fx_muxer_t::execute(const int argc, const pal::char_t* argv[])
else else
{ {
trace::verbose(_X("Executing as a standalone app as per config file [%s]"), config_file.c_str()); trace::verbose(_X("Executing as a standalone app as per config file [%s]"), config_file.c_str());
corehost_init_t init(deps_file, probe_path, _X(""), host_mode_t::muxer, &config);
pal::string_t impl_dir = get_directory(app_or_deps); pal::string_t impl_dir = get_directory(app_or_deps);
if (!library_exists_in_dir(impl_dir, LIBHOSTPOLICY_NAME, nullptr) && !probe_path.empty() && !deps_file.empty())
{
deps_json_t deps_json(false, deps_file);
pal::string_t candidate = impl_dir;
if (!deps_json.has_hostpolicy_entry() ||
!deps_json.get_hostpolicy_entry().to_full_path(probe_path, &candidate))
{
trace::error(_X("Policy library either not found in deps [%s] or not found in [%s]"), deps_file.c_str(), probe_path.c_str());
return StatusCode::CoreHostLibMissingFailure;
}
impl_dir = get_directory(candidate);
}
corehost_init_t init(deps_file, probe_path, _X(""), host_mode_t::muxer, &config);
return execute_app(impl_dir, &init, new_argv.size(), new_argv.data()); return execute_app(impl_dir, &init, new_argv.size(), new_argv.data());
} }
} }

View file

@ -21,7 +21,7 @@ int load_host_library(
corehost_unload_fn* unload_fn) corehost_unload_fn* unload_fn)
{ {
pal::string_t host_path; pal::string_t host_path;
if (!library_exists_in_dir(lib_dir, LIBHOST_NAME, &host_path)) if (!library_exists_in_dir(lib_dir, LIBHOSTPOLICY_NAME, &host_path))
{ {
return StatusCode::CoreHostLibMissingFailure; return StatusCode::CoreHostLibMissingFailure;
} }
@ -86,7 +86,7 @@ bool hostpolicy_exists_in_svc(pal::string_t* resolved_dir)
append_path(&path, COREHOST_PACKAGE_NAME); append_path(&path, COREHOST_PACKAGE_NAME);
append_path(&path, COREHOST_PACKAGE_VERSION); append_path(&path, COREHOST_PACKAGE_VERSION);
append_path(&path, COREHOST_PACKAGE_COREHOST_RELATIVE_DIR); append_path(&path, COREHOST_PACKAGE_COREHOST_RELATIVE_DIR);
if (library_exists_in_dir(path, LIBHOST_NAME)) if (library_exists_in_dir(path, LIBHOSTPOLICY_NAME))
{ {
resolved_dir->assign(path); resolved_dir->assign(path);
} }

View file

@ -4,8 +4,6 @@
#ifndef __LIBHOST_H__ #ifndef __LIBHOST_H__
#define __LIBHOST_H__ #define __LIBHOST_H__
#define LIBHOST_NAME MAKE_LIBNAME("hostpolicy")
enum host_mode_t enum host_mode_t
{ {
invalid = 0, invalid = 0,

View file

@ -65,6 +65,10 @@
#define LIBCORECLR_FILENAME (LIB_PREFIX _X("coreclr")) #define LIBCORECLR_FILENAME (LIB_PREFIX _X("coreclr"))
#define LIBCORECLR_NAME MAKE_LIBNAME("coreclr") #define LIBCORECLR_NAME MAKE_LIBNAME("coreclr")
#define LIBHOSTPOLICY_FILENAME (LIB_PREFIX _X("hostpolicy"))
#define LIBHOSTPOLICY_NAME MAKE_LIBNAME("hostpolicy")
#if !defined(PATH_MAX) && !defined(_WIN32) #if !defined(PATH_MAX) && !defined(_WIN32)
#define PATH_MAX 4096 #define PATH_MAX 4096
#endif #endif