Skip to content
This repository was archived by the owner on Jan 23, 2023. It is now read-only.
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 52 additions & 7 deletions src/corehost/cli/args.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,53 @@ arguments_t::arguments_t() :
{
}

/**
*
* Setup the shared package directories.
*
* o %DOTNET_SHARED_PACKAGES% -- multiple delimited paths
* o $HOME/.dotnet/{x86|x64}/ or %USERPROFILE%\.dotnet\{x86|x64}
* o dotnet.exe relative shared packages
* o Global location
* Windows: C:\Program Files (x86) or
* Unix: directory of dotnet on the path.
*/
void setup_shared_package_paths(const hostpolicy_init_t& init, const pal::string_t& own_dir, arguments_t* args)
{
if (init.tfm.empty())
{
// Old (MNA < 1.1.*) "runtimeconfig.json" files do not contain TFM property.
return;
}

// Environment variable DOTNET_SHARED_PACKAGES
(void) get_env_shared_package_dirs(&args->env_shared_packages, get_arch(), init.tfm);

// User profile based packages
pal::string_t local_shared_packages;
if (pal::get_local_shared_package_dir(&local_shared_packages))
{
append_path(&local_shared_packages, init.tfm.c_str());
args->local_shared_packages = local_shared_packages;
}

// "dotnet.exe" relative shared packages folder
if (init.host_mode == host_mode_t::muxer)
{
args->dotnet_shared_packages = own_dir;
append_path(&args->dotnet_shared_packages, _X("packages"));
append_path(&args->dotnet_shared_packages, init.tfm.c_str());
}

// Global shared package dir
if (pal::get_global_shared_package_dir(&args->global_shared_packages))
{
append_path(&args->global_shared_packages, init.tfm.c_str());
}
}

bool parse_arguments(
const pal::string_t& deps_path,
const std::vector<pal::string_t>& probe_paths,
host_mode_t mode,
const hostpolicy_init_t& init,
const int argc, const pal::char_t* argv[], arguments_t* arg_out)
{
arguments_t& args = *arg_out;
Expand All @@ -35,7 +78,7 @@ bool parse_arguments(
auto own_name = get_filename(args.own_path);
auto own_dir = get_directory(args.own_path);

if (mode != host_mode_t::standalone)
if (init.host_mode != host_mode_t::standalone)
{
// corerun mode. First argument is managed app
if (argc < 2)
Expand Down Expand Up @@ -70,13 +113,13 @@ bool parse_arguments(
args.app_argc = argc - 1;
}

if (!deps_path.empty())
if (!init.deps_file.empty())
{
args.deps_path = deps_path;
args.deps_path = init.deps_file;
args.app_dir = get_directory(args.deps_path);
}

for (const auto& probe : probe_paths)
for (const auto& probe : init.probe_paths)
{
args.probe_paths.push_back(probe);
}
Expand All @@ -96,5 +139,7 @@ bool parse_arguments(
pal::getenv(_X("DOTNET_HOSTING_OPTIMIZATION_CACHE"), &args.dotnet_packages_cache);

This comment was marked as spam.

This comment was marked as spam.

This comment was marked as spam.

This comment was marked as spam.

pal::get_default_servicing_directory(&args.core_servicing);

setup_shared_package_paths(init, own_dir, &args);

return true;
}
65 changes: 37 additions & 28 deletions src/corehost/cli/args.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,68 +21,65 @@ struct probe_config_t
bool only_runtime_assets;
bool only_serviceable_assets;

bool probe_publish_dir;

void print() const
{
trace::verbose(_X("probe_config_t: probe=[%s] match-hash=[%d] patch-roll-forward=[%d] prerelease-roll-forward=[%d] deps-json=[%p]"),
probe_dir.c_str(), match_hash, patch_roll_fwd, prerelease_roll_fwd, probe_deps_json);
}
bool is_roll_fwd_set() const
{
return patch_roll_fwd || prerelease_roll_fwd;
trace::verbose(_X("probe_config_t: probe=[%s] match-hash=[%d] deps-json=[%p] deps-dir-probe=[%d]"),
probe_dir.c_str(), match_hash, probe_deps_json, probe_publish_dir);
}

probe_config_t(
const pal::string_t& probe_dir,
bool match_hash,
bool patch_roll_fwd,
bool prerelease_roll_fwd,
const deps_json_t* probe_deps_json,
bool only_serviceable_assets,
bool only_runtime_assets)
bool only_runtime_assets,
bool probe_publish_dir)
: probe_dir(probe_dir)
, match_hash(match_hash)
, patch_roll_fwd(patch_roll_fwd)
, prerelease_roll_fwd(prerelease_roll_fwd)
, probe_deps_json(probe_deps_json)
, only_serviceable_assets(only_serviceable_assets)
, only_runtime_assets(only_runtime_assets)
, probe_publish_dir(probe_publish_dir)
{
// Cannot roll forward and also match hash.
assert(!is_roll_fwd_set() || !match_hash);
// Will not roll forward within a deps json.
assert(!is_roll_fwd_set() || probe_deps_json == nullptr);
// Will not do hash match when probing a deps json.
assert(!match_hash || probe_deps_json == nullptr);
}

static probe_config_t svc_ni(const pal::string_t& dir, bool patch_roll_fwd, bool prerelease_roll_fwd)
static probe_config_t svc_ni(const pal::string_t& dir)
{
return probe_config_t(dir, false, patch_roll_fwd, prerelease_roll_fwd, nullptr, true, true);
return probe_config_t(dir, false, nullptr, true, true, false);

This comment was marked as spam.

This comment was marked as spam.

}

static probe_config_t svc(const pal::string_t& dir, bool patch_roll_fwd, bool prerelease_roll_fwd)
static probe_config_t svc(const pal::string_t& dir)
{
return probe_config_t(dir, false, patch_roll_fwd, prerelease_roll_fwd, nullptr, true, false);
return probe_config_t(dir, false, nullptr, true, false, false);
}

static probe_config_t cache_ni(const pal::string_t& dir)
{
return probe_config_t(dir, true, false, false, nullptr, false, true);
return probe_config_t(dir, true, nullptr, false, true, false);
}

static probe_config_t cache(const pal::string_t& dir)
{
return probe_config_t(dir, true, false, false, nullptr, false, false);
return probe_config_t(dir, true, nullptr, false, false, false);
}

static probe_config_t fx(const pal::string_t& dir, const deps_json_t* deps)
{
return probe_config_t(dir, false, false, false, deps, false, false);
return probe_config_t(dir, false, deps, false, false, false);
}

static probe_config_t additional(const pal::string_t& dir)
static probe_config_t lookup(const pal::string_t& dir)
{
return probe_config_t(dir, false, false, false, nullptr, false, false);
return probe_config_t(dir, false, nullptr, false, false, false);
}

static probe_config_t published_deps_dir()
{
return probe_config_t(_X(""), false, nullptr, false, false, true);
}
};

Expand All @@ -95,7 +92,10 @@ struct arguments_t
std::vector<pal::string_t> probe_paths;
pal::string_t dotnet_packages_cache;
pal::string_t managed_application;

pal::string_t local_shared_packages;
pal::string_t global_shared_packages;
pal::string_t dotnet_shared_packages;
std::vector<pal::string_t> env_shared_packages;
int app_argc;
const pal::char_t** app_argv;

Expand All @@ -105,16 +105,25 @@ struct arguments_t
{
if (trace::is_enabled())
{
trace::verbose(_X("-- arguments_t: own_path=%s app_dir=%s deps=%s core_svc=%s packages_cache=%s mgd_app=%s"),
trace::verbose(_X("-- arguments_t: own_path='%s' app_dir='%s' deps='%s' core_svc='%s' packages_cache='%s' mgd_app='%s'"),
own_path.c_str(), app_dir.c_str(), deps_path.c_str(), core_servicing.c_str(), dotnet_packages_cache.c_str(), managed_application.c_str());
for (const auto& probe : probe_paths)
{
trace::verbose(_X("-- arguments_t: probe dir: [%s]"), probe.c_str());
trace::verbose(_X("-- arguments_t: probe dir: '%s'"), probe.c_str());
}
for (const auto& shared : env_shared_packages)
{
trace::verbose(_X("-- arguments_t: env shared packages: '%s'"), shared.c_str());
}
trace::verbose(_X("-- arguments_t: local shared packages: '%s'"), local_shared_packages.c_str());
trace::verbose(_X("-- arguments_t: dotnet shared packages: '%s'"), dotnet_shared_packages.c_str());
trace::verbose(_X("-- arguments_t: global shared packages: '%s'"), global_shared_packages.c_str());
}
}
};

bool parse_arguments(const pal::string_t& deps_path, const std::vector<pal::string_t>& probe_paths, host_mode_t mode, const int argc, const pal::char_t* argv[], arguments_t* args);
bool parse_arguments(
const hostpolicy_init_t& init,
const int argc, const pal::char_t* argv[], arguments_t* arg_out);

#endif // ARGS_H
Loading