/* * Copyright (c) 2022, Andreas Kling * Copyright (c) 2023, Andrew Kaster * * SPDX-License-Identifier: BSD-2-Clause */ #include "Utilities.h" #include #include #include #include #include ByteString s_serenity_resource_root; ErrorOr application_directory() { auto current_executable_path = TRY(Core::System::current_executable_path()); auto dirname = LexicalPath::dirname(current_executable_path); return String::from_byte_string(dirname); } void platform_init() { s_serenity_resource_root = [] { auto const* source_dir = getenv("SERENITY_SOURCE_DIR"); if (source_dir) { return ByteString::formatted("{}/Base", source_dir); } auto* home = getenv("XDG_CONFIG_HOME") ?: getenv("HOME"); VERIFY(home); auto home_lagom = ByteString::formatted("{}/.lagom", home); if (FileSystem::is_directory(home_lagom)) return home_lagom; auto app_dir = application_directory().release_value_but_fixme_should_propagate_errors().to_byte_string(); #ifdef AK_OS_MACOS return LexicalPath(app_dir).parent().append("Resources"sv).string(); #else return LexicalPath(app_dir).parent().append("share"sv).string(); #endif }(); Core::ResourceImplementation::install(make(MUST(String::formatted("{}/res", s_serenity_resource_root)))); } ErrorOr> get_paths_for_helper_process(StringView process_name) { auto application_path = TRY(application_directory()); Vector paths; TRY(paths.try_append(TRY(String::formatted("{}/{}", application_path, process_name)))); TRY(paths.try_append(TRY(String::formatted("./{}", process_name)))); // NOTE: Add platform-specific paths here return paths; }