diff --git a/composer.json b/composer.json index 06de309..f0da064 100644 --- a/composer.json +++ b/composer.json @@ -6,6 +6,6 @@ "php": ">=8.3" }, "autoload": { - "classmap": ["dotnet.inc.php"] + "classmap": ["support.inc.php", "dotnet.inc.php"] } } diff --git a/dotnet.inc.php b/dotnet.inc.php index d80037a..3139ac2 100644 --- a/dotnet.inc.php +++ b/dotnet.inc.php @@ -1,14 +1,6 @@ true], function() { dotnet_set_env(); }); @@ -27,65 +19,13 @@ function dotnet_shell_get($cmd) return shell_get('dotnet ' . $cmd); } -function dotnet_install(string $version) -{ - $has_dotnet = true; - - $dotnet_curr_ver = ""; - try - { - $dotnet_curr_ver = shell_get("dotnet --version"); - print("DOTNET CURRENT VERSION: $dotnet_curr_ver\n"); - } - catch(\Throwable $th) - { - $has_dotnet = false; - } - - if($has_dotnet && version_compare($dotnet_curr_ver, $version) >= 0) - return; - - print("DOTNET VERSION MISMATCH: $dotnet_curr_ver < $version\n"); - - $install_file_path = dotnet_get_installer_path(); - - $version_parts = explode('.', $version); - $channel = $version_parts[0].'.'.$version_parts[1]; - if(is_win()) - shell("powershell -NoProfile -ExecutionPolicy unrestricted Invoke-Expression '\"$install_file_path\" -Channel $channel'"); - else - shell("\"$install_file_path\" --channel $channel"); -} - function dotnet_set_env() { putenv("DOTNET_CLI_TELEMETRY_OPTOUT=1"); - $dotnet_path = dotnet_get_path(); + $dotnet_path = DotnetSupport::getPath(); if(is_win()) putenv("PATH=$dotnet_path;".getenv('PATH')); else putenv("PATH=$dotnet_path:".getenv('PATH')); } - -function dotnet_get_path() -{ - if(is_win()) - { - $appdata_path = getenv('LOCALAPPDATA'); - return "$appdata_path\\Microsoft\\dotnet\\"; - } - else - { - return getenv("HOME")."/.dotnet/"; - } -} - -function dotnet_get_installer_path() : string -{ - if(is_win()) - return __DIR__ . "/dotnet-install.ps1"; - else - return __DIR__ . "/dotnet-install.sh"; -} - diff --git a/support.inc.php b/support.inc.php new file mode 100644 index 0000000..8247f96 --- /dev/null +++ b/support.inc.php @@ -0,0 +1,81 @@ += 0) + return; + + print("DOTNET VERSION MISMATCH: $dotnet_curr_ver < $version\n"); + + $install_file_path = self::getInstallerPath(); + + $version_parts = explode('.', $version); + $channel = $version_parts[0].'.'.$version_parts[1]; + if(self::isWin()) + self::Shell("powershell -NoProfile -ExecutionPolicy unrestricted Invoke-Expression '\"$install_file_path\" -Channel $channel'"); + else + self::Shell("\"$install_file_path\" --channel $channel"); + } + + static function getInstallerPath() : string + { + if(self::isWin()) + return __DIR__ . "/dotnet-install.ps1"; + else + return __DIR__ . "/dotnet-install.sh"; + } + + static function getPath() : string + { + if(self::isWin()) + { + $appdata_path = getenv('LOCALAPPDATA'); + return "$appdata_path\\Microsoft\\dotnet\\"; + } + else + { + return getenv("HOME")."/.dotnet/"; + } + } + + static function isWin() : bool + { + return !(DIRECTORY_SEPARATOR == '/'); + } + + static function shellGet(string $cmd, bool $as_string = true) + { + exec($cmd, $out, $code); + if($code !== 0) + throw new Exception("Error($code) executing shell cmd '$cmd'"); + return $as_string ? implode("", $out) : $out; + } + + static function shell(string $cmd) + { + system($cmd, $ret); + if($ret != 0) + throw new Exception("Shell execution error(exit code $ret)"); + } +}