diff options
| author | Dan Engelbrecht <[email protected]> | 2024-08-28 12:55:33 +0200 |
|---|---|---|
| committer | Dan Engelbrecht <[email protected]> | 2024-09-18 10:43:36 +0200 |
| commit | f8398bea9f3b5e7ccd1ba4134fa75976da8b7545 (patch) | |
| tree | 10a79211117a6ff416b4e6867af73ace9a7a6656 /src/zenutil/service.cpp | |
| parent | more WIP (diff) | |
| download | zen-f8398bea9f3b5e7ccd1ba4134fa75976da8b7545.tar.xz zen-f8398bea9f3b5e7ccd1ba4134fa75976da8b7545.zip | |
launchd plist install
Diffstat (limited to 'src/zenutil/service.cpp')
| -rw-r--r-- | src/zenutil/service.cpp | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/src/zenutil/service.cpp b/src/zenutil/service.cpp index cce154988..8ac35d969 100644 --- a/src/zenutil/service.cpp +++ b/src/zenutil/service.cpp @@ -11,6 +11,9 @@ #endif #if ZEN_PLATFORM_MAC # include <zencore/filesystem.h> + +# include <unistd.h> +# include <sys/stat.h> #endif namespace zen { @@ -137,9 +140,9 @@ namespace { ExtendableStringBuilder<256> ProgramArguments; for (const std::string_view Argument : Arguments) { - ProgramArguments.Append("<string>\n"); + ProgramArguments.Append(" <string>"); AppendEscaped(Argument, ProgramArguments); - ProgramArguments.Append("\n</string>\n"); + ProgramArguments.Append("</string>\n"); } return fmt::format( @@ -152,7 +155,7 @@ namespace { " <key>ProgramArguments</key>\n" " <array>\n" " <string>{}</string>\n" // Program name - " {}" // "<string>arg</string>\n" * number of arguments + "{}" // "<string>arg</string>\n" * number of arguments " </array>\n" " <key>KeepAlive</key>\n" " <true/>\n" @@ -526,13 +529,21 @@ InstallService(const std::filesystem::path& ExecutablePath, std::string_view ServiceDescription) { std::filesystem::path SymLink = std::filesystem::path("/usr/local/libexec") / ExecutablePath.filename(); + ZEN_INFO("Attempting synlink from {} to {}", ExecutablePath.string(), SymLink.string()); if (symlink(ExecutablePath.c_str(), SymLink.c_str()) == -1) { return MakeErrorCodeFromLastError(); } std::string DaemonName = fmt::format("com.epicgames.unreal.{}", ServiceName); std::string PList = BuildPlist(ExecutablePath, CommandLineOptions, DaemonName, ServiceDisplayName, ServiceDescription, true); - zen::WriteFile(std::filesystem::path("/Library/LaunchDaemons") / (DaemonName + ".plist"), IoBuffer(PList.data(), PList.size())); + std::filesystem::path PListPath = std::filesystem::path("/Library/LaunchDaemons") / (DaemonName + ".plist"); + ZEN_INFO("Writing launchd plist to {}", PListPath.string()); + zen::WriteFile(PListPath, IoBuffer(IoBuffer::Wrap, PList.data(), PList.size())); + ZEN_INFO("Changing permissions to 0555 for {}", PListPath.string()); + if (chmod(PListPath.c_str(), 0555) == -1) + { + return MakeErrorCodeFromLastError(); + } return {}; } |