diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 076454e..7c8ebba 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -93,7 +93,7 @@ jobs: env: CC: ${{ matrix.cc }} CXX: ${{ matrix.cxx }} - TKB_VCPKG_ROOT: ${{ github.workspace }}/vcpkg + RHODIUM_VCPKG_ROOT: ${{ github.workspace }}/vcpkg run: bash scripts/build.sh - name: Install package @@ -111,7 +111,7 @@ jobs: if: steps.install_package.outcome == 'success' uses: actions/upload-artifact@v4 with: - name: tpkg-${{ matrix.slug }}-${{ matrix.build_type }} + name: rhodium-${{ matrix.slug }}-${{ matrix.build_type }} path: ${{ env.INSTALL_DIR }} if-no-files-found: error diff --git a/.gitignore b/.gitignore index b13854a..fe2404f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ # Local dependency/cache state +.rhodium/ .tpkg/ tpkg.lock.toml @@ -13,6 +14,7 @@ cmake-build-*/ .idea/ .codegraph/ .clangd +.agents compile_commands.json # Local references and generated packages diff --git a/CMakeLists.txt b/CMakeLists.txt index 6e63d1a..14cd242 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,8 +1,8 @@ cmake_minimum_required(VERSION 3.25) -include(cmake/ToolkitPkgVcpkg.cmake) +include(cmake/RhodiumVcpkg.cmake) -project(ToolkitPkg VERSION 0.1.1 LANGUAGES C CXX) +project(Rhodium VERSION 0.1.2 LANGUAGES C CXX) include(GNUInstallDirs) @@ -14,11 +14,11 @@ if(MSVC) set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") endif() -include(cmake/ToolkitPkgMsvcNinjaSdk.cmake) -include(cmake/ToolkitPkgDependencies.cmake) -include(cmake/ToolkitPkgTargets.cmake) +include(cmake/RhodiumMsvcNinjaSdk.cmake) +include(cmake/RhodiumDependencies.cmake) +include(cmake/RhodiumTargets.cmake) include(CTest) if(BUILD_TESTING) - include(cmake/ToolkitPkgTests.cmake) + include(cmake/RhodiumTests.cmake) endif() diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 2070bbe..59b69af 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -9,7 +9,7 @@ This document applies to project discussions, issues, pull requests, review comm - Be direct and technical when reviewing code. - Criticize behavior, design, and implementation details rather than people. - Provide enough context for maintainers and contributors to reproduce problems. -- Respect project scope: Toolkit Package Manager is a dependency manager for CMake projects, not a general build-system replacement. +- Respect project scope: Rhodium is a dependency manager for CMake projects, not a general build-system replacement. ## Unacceptable behavior diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 96d636c..12c1db3 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,10 +1,10 @@ -# Contributing to Toolkit Package Manager +# Contributing to Rhodium -Toolkit Package Manager is a C/C++ dependency manager for CMake projects. Contributions should preserve that scope. +Rhodium is a C/C++ dependency manager for CMake projects. Contributions should preserve that scope. ## Contribution rules -- Do not turn Toolkit Package Manager into a general-purpose build-system replacement. +- Do not turn Rhodium into a general-purpose build-system replacement. - Do not change CLI behavior, DSL fields, lockfile format, artifact IDs, or cache layout unless the change is explicitly planned. - Prefer small, staged changes over broad rewrites. - Keep `model/` as plain data and validation logic. Do not move I/O, resolver, builder, or CLI behavior into model structures. diff --git a/MAINTENANCE_REFACTOR_NOTES.md b/MAINTENANCE_REFACTOR_NOTES.md index a6e2949..dae166e 100644 --- a/MAINTENANCE_REFACTOR_NOTES.md +++ b/MAINTENANCE_REFACTOR_NOTES.md @@ -9,7 +9,7 @@ This snapshot performs the low-risk maintenance preparation work and packages th ## Completed in this snapshot -- Added root `README.md` with corrected project positioning: Toolkit Package Manager is a dependency manager for CMake projects, not a general build system. +- Added root `README.md` with corrected project positioning: Rhodium is a dependency manager for CMake projects, not a general build system. - Added standard project files: - `CONTRIBUTING.md` - `CODE_OF_CONDUCT.md` @@ -19,7 +19,7 @@ This snapshot performs the low-risk maintenance preparation work and packages th - `AGENTS.md` - Removed stale/incomplete refactor artifacts from the implementation tree. - Fixed `.gitignore` formatting and expanded local/generated ignores. -- Reworked `cmake/ToolkitPkgTargets.cmake` to collect source files by module groups instead of one repository-wide source glob. +- Reworked `cmake/RhodiumTargets.cmake` to collect source files by module groups instead of one repository-wide source glob. - Added documentation structure under `docs/`: - user guides - DSL guides diff --git a/README.md b/README.md index b22b1f7..47eeeac 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,16 @@ -# Toolkit Package Manager +# Rhodium -Toolkit Package Manager is a cross-platform C/C++ dependency management system designed to serve CMake projects. +Repository: https://github.com/AxlumLab/Rhodium.git + +Rhodium is a cross-platform C/C++ dependency management system designed to serve CMake projects. It is **not** a replacement for CMake, Ninja, Visual Studio, Xcode, or any native build backend. Its job is to restore source, archive, local, or prebuilt dependencies; build dependency artifacts when needed; write a lock file for reproducibility; and generate CMake integration files that your normal CMake project can consume. +The executable is `rhodium` (`rhodium.exe` on Windows). Rhodium reads `rhodium.lua` first and falls back to `tpkg.lua`. State uses an existing `.rhodium/` first, otherwise an existing `.tpkg/`, otherwise a new `.rhodium/`. Lockfiles remain `tpkg.lock.toml`. Generated CMake packages and imported targets use `rhodium` and `rhodium::`. + ## Project status -Toolkit Package Manager is under active development. +Rhodium is under active development. Current validation scope: @@ -20,26 +24,26 @@ Current validation scope: ```bash # Check the local environment -tpkg doctor +rhodium doctor # Detect local C/C++ and platform toolchains -tpkg sdk detect -tpkg sdk list +rhodium sdk detect +rhodium sdk list # Restore dependency sources and artifacts -tpkg restore --config debug --toolchain windows-msvc-x64 +rhodium restore --config debug --toolchain windows-msvc-x64 # Generate CMake integration files -tpkg generate --config debug --toolchain windows-msvc-x64 +rhodium generate --config debug --toolchain windows-msvc-x64 ``` A normal project keeps using CMake: ```cmake -include("${CMAKE_SOURCE_DIR}/.tpkg/generated/cmake/tpkg_deps.cmake") +include("${CMAKE_SOURCE_DIR}/.rhodium/generated/cmake/rhodiumConfig.cmake") ``` -## Minimal `tpkg.deps.lua` +## Minimal `rhodium.lua` ```lua package("ExampleApp") @@ -80,7 +84,7 @@ Start here: ## Repository layout ```text -src/tpkg/ Toolkit Package Manager implementation +src/rhodium/ Rhodium implementation cmake/ CMake project glue docs/ User, reference, architecture, and contributor docs examples/ Example dependency manifests and project layouts diff --git a/SECURITY.md b/SECURITY.md index c4fdd3d..4938eb0 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -1,6 +1,6 @@ # Security Policy -Toolkit Package Manager downloads, unpacks, patches, builds, and exposes third-party dependency artifacts. Treat dependency manifests and lock files as security-sensitive project inputs. +Rhodium downloads, unpacks, patches, builds, and exposes third-party dependency artifacts. Treat dependency manifests and lock files as security-sensitive project inputs. ## Supported versions @@ -13,7 +13,7 @@ Report security issues privately to the project maintainer before opening a publ Include: - Affected command or workflow. -- Minimal `tpkg.lua` reproduction. +- Minimal `rhodium.lua` reproduction. - Platform and toolchain profile. - Whether the issue involves source fetching, archive extraction, patch application, command execution, generated CMake files, or lockfile behavior. @@ -29,4 +29,4 @@ Include: ## Manifest trust model -`tpkg.lua` is executable Lua configuration. Do not run manifests from untrusted repositories without review. +`rhodium.lua` is executable Lua configuration. Do not run manifests from untrusted repositories without review. diff --git a/cmake/ToolkitPkgDependencies.cmake b/cmake/RhodiumDependencies.cmake similarity index 97% rename from cmake/ToolkitPkgDependencies.cmake rename to cmake/RhodiumDependencies.cmake index 1e93c37..0e86e70 100644 --- a/cmake/ToolkitPkgDependencies.cmake +++ b/cmake/RhodiumDependencies.cmake @@ -20,7 +20,7 @@ endif() find_package(zstd CONFIG REQUIRED) find_package(LibArchive REQUIRED) -function(tpkg_link_core_dependencies target_name) +function(rhodium_link_core_dependencies target_name) target_link_libraries(${target_name} PUBLIC sol2::sol2 CLI11::CLI11 diff --git a/cmake/ToolkitPkgMsvcNinjaSdk.cmake b/cmake/RhodiumMsvcNinjaSdk.cmake similarity index 81% rename from cmake/ToolkitPkgMsvcNinjaSdk.cmake rename to cmake/RhodiumMsvcNinjaSdk.cmake index 281ed83..ba859dc 100644 --- a/cmake/ToolkitPkgMsvcNinjaSdk.cmake +++ b/cmake/RhodiumMsvcNinjaSdk.cmake @@ -2,7 +2,7 @@ if(NOT MSVC) return() endif() -function(_tpkg_first_existing out_var) +function(_rhodium_first_existing out_var) foreach(_candidate IN LISTS ARGN) if(EXISTS "${_candidate}") set(${out_var} "${_candidate}" PARENT_SCOPE) @@ -12,7 +12,7 @@ function(_tpkg_first_existing out_var) set(${out_var} "" PARENT_SCOPE) endfunction() -function(_tpkg_latest_child out_var parent) +function(_rhodium_latest_child out_var parent) if(NOT EXISTS "${parent}") set(${out_var} "" PARENT_SCOPE) return() @@ -29,7 +29,7 @@ function(_tpkg_latest_child out_var parent) set(${out_var} "" PARENT_SCOPE) endfunction() -function(_tpkg_msvc_host_arch out_var) +function(_rhodium_msvc_host_arch out_var) string(TOLOWER "${CMAKE_SYSTEM_PROCESSOR}" _processor) if(_processor MATCHES "arm64|aarch64") set(${out_var} "arm64" PARENT_SCOPE) @@ -40,7 +40,7 @@ function(_tpkg_msvc_host_arch out_var) endif() endfunction() -function(_tpkg_enable_msvc_ninja_sdk_paths) +function(_rhodium_enable_msvc_ninja_sdk_paths) cmake_path(CONVERT "${CMAKE_CXX_COMPILER}" TO_CMAKE_PATH_LIST _compiler) if(NOT _compiler MATCHES "/VC/Tools/MSVC/[^/]+/bin/Host[^/]+/[^/]+/cl(\\.exe)?$") return() @@ -51,17 +51,17 @@ function(_tpkg_enable_msvc_ninja_sdk_paths) return() endif() - _tpkg_first_existing(_kits_root + _rhodium_first_existing(_kits_root "C:/Windows Kits/10" "C:/Program Files (x86)/Windows Kits/10" "C:/Program Files/Windows Kits/10" ) - _tpkg_latest_child(_kits_version_root "${_kits_root}/Include") + _rhodium_latest_child(_kits_version_root "${_kits_root}/Include") if(_kits_version_root) get_filename_component(_kits_version "${_kits_version_root}" NAME) endif() - _tpkg_msvc_host_arch(_arch) + _rhodium_msvc_host_arch(_arch) set(_include_dirs "${_vc_tools_root}/include" @@ -86,10 +86,10 @@ function(_tpkg_enable_msvc_ninja_sdk_paths) include_directories(BEFORE SYSTEM ${_include_dirs}) link_directories(${_lib_dirs}) - message(STATUS "Toolkit Package Manager: added MSVC SDK include paths for Ninja from ${_vc_tools_root}") + message(STATUS "Rhodium: added MSVC SDK include paths for Ninja from ${_vc_tools_root}") if(_kits_version) - message(STATUS "Toolkit Package Manager: added Windows SDK ${_kits_version} paths from ${_kits_root}") + message(STATUS "Rhodium: added Windows SDK ${_kits_version} paths from ${_kits_root}") endif() endfunction() -_tpkg_enable_msvc_ninja_sdk_paths() +_rhodium_enable_msvc_ninja_sdk_paths() diff --git a/cmake/RhodiumTargets.cmake b/cmake/RhodiumTargets.cmake new file mode 100644 index 0000000..8949fe9 --- /dev/null +++ b/cmake/RhodiumTargets.cmake @@ -0,0 +1,71 @@ +file(GLOB RHODIUM_CLI_SOURCES CONFIGURE_DEPENDS + "${CMAKE_CURRENT_SOURCE_DIR}/src/rhodium/cli/*.cpp" +) +file(GLOB RHODIUM_CMAKE_SOURCES CONFIGURE_DEPENDS + "${CMAKE_CURRENT_SOURCE_DIR}/src/rhodium/cmake/*.cpp" +) +file(GLOB RHODIUM_CONFIG_SOURCES CONFIGURE_DEPENDS + "${CMAKE_CURRENT_SOURCE_DIR}/src/rhodium/config/*.cpp" +) +file(GLOB RHODIUM_CORE_MODULE_SOURCES CONFIGURE_DEPENDS + "${CMAKE_CURRENT_SOURCE_DIR}/src/rhodium/core/*.cpp" +) +file(GLOB RHODIUM_DIAGNOSTICS_SOURCES CONFIGURE_DEPENDS + "${CMAKE_CURRENT_SOURCE_DIR}/src/rhodium/diagnostics/*.cpp" +) +file(GLOB RHODIUM_MODEL_SOURCES CONFIGURE_DEPENDS + "${CMAKE_CURRENT_SOURCE_DIR}/src/rhodium/model/*.cpp" +) +file(GLOB RHODIUM_PACKAGE_SOURCES CONFIGURE_DEPENDS + "${CMAKE_CURRENT_SOURCE_DIR}/src/rhodium/package/*.cpp" +) +file(GLOB RHODIUM_RESOLVE_SOURCES CONFIGURE_DEPENDS + "${CMAKE_CURRENT_SOURCE_DIR}/src/rhodium/resolve/*.cpp" +) +file(GLOB RHODIUM_SCRIPT_SOURCES CONFIGURE_DEPENDS + "${CMAKE_CURRENT_SOURCE_DIR}/src/rhodium/script/*.cpp" +) +file(GLOB RHODIUM_TOOLCHAIN_SOURCES CONFIGURE_DEPENDS + "${CMAKE_CURRENT_SOURCE_DIR}/src/rhodium/toolchain/*.cpp" +) +file(GLOB RHODIUM_UTILS_SOURCES CONFIGURE_DEPENDS + "${CMAKE_CURRENT_SOURCE_DIR}/src/rhodium/utils/*.cpp" +) + +set(RHODIUM_CORE_SOURCES + ${RHODIUM_CLI_SOURCES} + ${RHODIUM_CMAKE_SOURCES} + ${RHODIUM_CONFIG_SOURCES} + ${RHODIUM_CORE_MODULE_SOURCES} + ${RHODIUM_DIAGNOSTICS_SOURCES} + ${RHODIUM_MODEL_SOURCES} + ${RHODIUM_PACKAGE_SOURCES} + ${RHODIUM_RESOLVE_SOURCES} + ${RHODIUM_SCRIPT_SOURCES} + ${RHODIUM_TOOLCHAIN_SOURCES} + ${RHODIUM_UTILS_SOURCES} +) + +add_library(rhodium_core STATIC ${RHODIUM_CORE_SOURCES}) +target_include_directories(rhodium_core PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/src") +target_compile_definitions(rhodium_core PUBLIC RHODIUM_VERSION=\"${PROJECT_VERSION}\") +rhodium_link_core_dependencies(rhodium_core) + +if(MSVC) + target_compile_options(rhodium_core PRIVATE /utf-8 /W4 /permissive-) +else() + target_compile_options(rhodium_core PRIVATE -Wall -Wextra -Wpedantic) +endif() + +add_executable(rhodium "${CMAKE_CURRENT_SOURCE_DIR}/src/rhodium/main.cpp") +target_link_libraries(rhodium PRIVATE rhodium_core) +set_target_properties(rhodium PROPERTIES OUTPUT_NAME rhodium) + +install(TARGETS rhodium + RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" +) + +source_group(TREE "${CMAKE_CURRENT_SOURCE_DIR}/src" FILES + "${CMAKE_CURRENT_SOURCE_DIR}/src/rhodium/main.cpp" + ${RHODIUM_CORE_SOURCES} +) diff --git a/cmake/RhodiumTests.cmake b/cmake/RhodiumTests.cmake new file mode 100644 index 0000000..d109dd1 --- /dev/null +++ b/cmake/RhodiumTests.cmake @@ -0,0 +1,22 @@ +find_package(GTest CONFIG REQUIRED) + +set(RHODIUM_TEST_SOURCES + tests/rhodium/BuildModelTests.cpp + tests/rhodium/WorkspaceCompatibilityTests.cpp + tests/rhodium/ArchiveTests.cpp + tests/rhodium/CMakeDependencyExporterTests.cpp + tests/rhodium/DependencyResolverTests.cpp + tests/rhodium/LuaDslTests.cpp + tests/rhodium/LockFileTests.cpp + tests/rhodium/PackageArtifactResolverTests.cpp + tests/rhodium/PackageBuilderUtilTests.cpp + tests/rhodium/ToolchainTests.cpp +) + +add_executable(rhodium_tests ${RHODIUM_TEST_SOURCES}) +target_link_libraries(rhodium_tests PRIVATE rhodium_core GTest::gtest GTest::gtest_main) + +include(GoogleTest) +gtest_discover_tests(rhodium_tests) + +source_group(TREE "${CMAKE_CURRENT_SOURCE_DIR}/tests" PREFIX tests FILES ${RHODIUM_TEST_SOURCES}) diff --git a/cmake/ToolkitPkgVcpkg.cmake b/cmake/RhodiumVcpkg.cmake similarity index 52% rename from cmake/ToolkitPkgVcpkg.cmake rename to cmake/RhodiumVcpkg.cmake index af958ca..6c2112c 100644 --- a/cmake/ToolkitPkgVcpkg.cmake +++ b/cmake/RhodiumVcpkg.cmake @@ -1,4 +1,4 @@ -set(TKB_VCPKG_ROOT "" CACHE PATH "Path to the vcpkg root directory.") +set(RHODIUM_VCPKG_ROOT "" CACHE PATH "Path to the vcpkg root directory.") if(NOT DEFINED VCPKG_TARGET_TRIPLET OR VCPKG_TARGET_TRIPLET STREQUAL "") if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows") if(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "ARM64|arm64|aarch64") @@ -6,26 +6,26 @@ if(NOT DEFINED VCPKG_TARGET_TRIPLET OR VCPKG_TARGET_TRIPLET STREQUAL "") else() set(VCPKG_TARGET_TRIPLET "x64-windows-static" CACHE STRING "vcpkg target triplet" FORCE) endif() - message(STATUS "Toolkit Package Manager: defaulting vcpkg triplet to ${VCPKG_TARGET_TRIPLET}") + message(STATUS "Rhodium: defaulting vcpkg triplet to ${VCPKG_TARGET_TRIPLET}") endif() endif() if(DEFINED VCPKG_TARGET_TRIPLET) - set_property(CACHE VCPKG_TARGET_TRIPLET PROPERTY HELPSTRING "Optional vcpkg target triplet, such as x64-windows-static, x64-linux, arm64-osx. If unset, Toolkit Package Manager uses static vcpkg libraries on Windows.") + set_property(CACHE VCPKG_TARGET_TRIPLET PROPERTY HELPSTRING "Optional vcpkg target triplet, such as x64-windows-static, x64-linux, arm64-osx. If unset, Rhodium uses static vcpkg libraries on Windows.") endif() if(NOT DEFINED CMAKE_TOOLCHAIN_FILE OR CMAKE_TOOLCHAIN_FILE STREQUAL "") - set(_tkb_vcpkg_candidates) + set(_rhodium_vcpkg_candidates) - if(TKB_VCPKG_ROOT) - list(APPEND _tkb_vcpkg_candidates "${TKB_VCPKG_ROOT}") + if(RHODIUM_VCPKG_ROOT) + list(APPEND _rhodium_vcpkg_candidates "${RHODIUM_VCPKG_ROOT}") endif() if(DEFINED ENV{VCPKG_ROOT} AND NOT "$ENV{VCPKG_ROOT}" STREQUAL "") - list(APPEND _tkb_vcpkg_candidates "$ENV{VCPKG_ROOT}") + list(APPEND _rhodium_vcpkg_candidates "$ENV{VCPKG_ROOT}") endif() - list(APPEND _tkb_vcpkg_candidates + list(APPEND _rhodium_vcpkg_candidates "${CMAKE_CURRENT_LIST_DIR}/../third_party/vcpkg" "${CMAKE_CURRENT_LIST_DIR}/../extern/vcpkg" "${CMAKE_CURRENT_LIST_DIR}/../.vcpkg" @@ -33,11 +33,11 @@ if(NOT DEFINED CMAKE_TOOLCHAIN_FILE OR CMAKE_TOOLCHAIN_FILE STREQUAL "") "C:/vcpkg" ) - foreach(_tkb_vcpkg_root IN LISTS _tkb_vcpkg_candidates) - if(EXISTS "${_tkb_vcpkg_root}/scripts/buildsystems/vcpkg.cmake") - set(CMAKE_TOOLCHAIN_FILE "${_tkb_vcpkg_root}/scripts/buildsystems/vcpkg.cmake" CACHE FILEPATH "vcpkg toolchain file" FORCE) - set(TKB_VCPKG_ROOT "${_tkb_vcpkg_root}" CACHE PATH "Path to the vcpkg root directory." FORCE) - message(STATUS "Toolkit Package Manager: using vcpkg at ${TKB_VCPKG_ROOT}") + foreach(_rhodium_vcpkg_root IN LISTS _rhodium_vcpkg_candidates) + if(EXISTS "${_rhodium_vcpkg_root}/scripts/buildsystems/vcpkg.cmake") + set(CMAKE_TOOLCHAIN_FILE "${_rhodium_vcpkg_root}/scripts/buildsystems/vcpkg.cmake" CACHE FILEPATH "vcpkg toolchain file" FORCE) + set(RHODIUM_VCPKG_ROOT "${_rhodium_vcpkg_root}" CACHE PATH "Path to the vcpkg root directory." FORCE) + message(STATUS "Rhodium: using vcpkg at ${RHODIUM_VCPKG_ROOT}") break() endif() endforeach() @@ -45,9 +45,9 @@ endif() if(NOT DEFINED CMAKE_TOOLCHAIN_FILE OR CMAKE_TOOLCHAIN_FILE STREQUAL "") message(FATAL_ERROR - "Toolkit Package Manager requires vcpkg manifest mode for third-party dependencies, but no vcpkg toolchain was found.\n" - "Pass -DCMAKE_TOOLCHAIN_FILE=/scripts/buildsystems/vcpkg.cmake, set -DTKB_VCPKG_ROOT=, or set VCPKG_ROOT.\n" - "Recommended configure command: cmake -S . -B out/build/ninja-vcpkg -G Ninja -DTKB_VCPKG_ROOT=.\n" + "Rhodium requires vcpkg manifest mode for third-party dependencies, but no vcpkg toolchain was found.\n" + "Pass -DCMAKE_TOOLCHAIN_FILE=/scripts/buildsystems/vcpkg.cmake, set -DRHODIUM_VCPKG_ROOT=, or set VCPKG_ROOT.\n" + "Recommended configure command: cmake -S . -B out/build/ninja-vcpkg -G Ninja -DRHODIUM_VCPKG_ROOT=.\n" "Expected toolchain: /scripts/buildsystems/vcpkg.cmake" ) endif() diff --git a/cmake/ToolkitPkgTargets.cmake b/cmake/ToolkitPkgTargets.cmake deleted file mode 100644 index a176584..0000000 --- a/cmake/ToolkitPkgTargets.cmake +++ /dev/null @@ -1,71 +0,0 @@ -file(GLOB TPKG_CLI_SOURCES CONFIGURE_DEPENDS - "${CMAKE_CURRENT_SOURCE_DIR}/src/tpkg/cli/*.cpp" -) -file(GLOB TPKG_CMAKE_SOURCES CONFIGURE_DEPENDS - "${CMAKE_CURRENT_SOURCE_DIR}/src/tpkg/cmake/*.cpp" -) -file(GLOB TPKG_CONFIG_SOURCES CONFIGURE_DEPENDS - "${CMAKE_CURRENT_SOURCE_DIR}/src/tpkg/config/*.cpp" -) -file(GLOB TPKG_CORE_MODULE_SOURCES CONFIGURE_DEPENDS - "${CMAKE_CURRENT_SOURCE_DIR}/src/tpkg/core/*.cpp" -) -file(GLOB TPKG_DIAGNOSTICS_SOURCES CONFIGURE_DEPENDS - "${CMAKE_CURRENT_SOURCE_DIR}/src/tpkg/diagnostics/*.cpp" -) -file(GLOB TPKG_MODEL_SOURCES CONFIGURE_DEPENDS - "${CMAKE_CURRENT_SOURCE_DIR}/src/tpkg/model/*.cpp" -) -file(GLOB TPKG_PACKAGE_SOURCES CONFIGURE_DEPENDS - "${CMAKE_CURRENT_SOURCE_DIR}/src/tpkg/package/*.cpp" -) -file(GLOB TPKG_RESOLVE_SOURCES CONFIGURE_DEPENDS - "${CMAKE_CURRENT_SOURCE_DIR}/src/tpkg/resolve/*.cpp" -) -file(GLOB TPKG_SCRIPT_SOURCES CONFIGURE_DEPENDS - "${CMAKE_CURRENT_SOURCE_DIR}/src/tpkg/script/*.cpp" -) -file(GLOB TPKG_TOOLCHAIN_SOURCES CONFIGURE_DEPENDS - "${CMAKE_CURRENT_SOURCE_DIR}/src/tpkg/toolchain/*.cpp" -) -file(GLOB TPKG_UTILS_SOURCES CONFIGURE_DEPENDS - "${CMAKE_CURRENT_SOURCE_DIR}/src/tpkg/utils/*.cpp" -) - -set(TPKG_CORE_SOURCES - ${TPKG_CLI_SOURCES} - ${TPKG_CMAKE_SOURCES} - ${TPKG_CONFIG_SOURCES} - ${TPKG_CORE_MODULE_SOURCES} - ${TPKG_DIAGNOSTICS_SOURCES} - ${TPKG_MODEL_SOURCES} - ${TPKG_PACKAGE_SOURCES} - ${TPKG_RESOLVE_SOURCES} - ${TPKG_SCRIPT_SOURCES} - ${TPKG_TOOLCHAIN_SOURCES} - ${TPKG_UTILS_SOURCES} -) - -add_library(tpkg_core STATIC ${TPKG_CORE_SOURCES}) -target_include_directories(tpkg_core PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/src") -target_compile_definitions(tpkg_core PUBLIC TPKG_VERSION=\"${PROJECT_VERSION}\") -tpkg_link_core_dependencies(tpkg_core) - -if(MSVC) - target_compile_options(tpkg_core PRIVATE /utf-8 /W4 /permissive-) -else() - target_compile_options(tpkg_core PRIVATE -Wall -Wextra -Wpedantic) -endif() - -add_executable(tpkg "${CMAKE_CURRENT_SOURCE_DIR}/src/tpkg/main.cpp") -target_link_libraries(tpkg PRIVATE tpkg_core) -set_target_properties(tpkg PROPERTIES OUTPUT_NAME tpkg) - -install(TARGETS tpkg - RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" -) - -source_group(TREE "${CMAKE_CURRENT_SOURCE_DIR}/src" FILES - "${CMAKE_CURRENT_SOURCE_DIR}/src/tpkg/main.cpp" - ${TPKG_CORE_SOURCES} -) diff --git a/cmake/ToolkitPkgTests.cmake b/cmake/ToolkitPkgTests.cmake deleted file mode 100644 index 8d791b0..0000000 --- a/cmake/ToolkitPkgTests.cmake +++ /dev/null @@ -1,21 +0,0 @@ -find_package(GTest CONFIG REQUIRED) - -set(TPKG_TEST_SOURCES - tests/tpkg/BuildModelTests.cpp - tests/tpkg/ArchiveTests.cpp - tests/tpkg/CMakeDependencyExporterTests.cpp - tests/tpkg/DependencyResolverTests.cpp - tests/tpkg/LuaDslTests.cpp - tests/tpkg/LockFileTests.cpp - tests/tpkg/PackageArtifactResolverTests.cpp - tests/tpkg/PackageBuilderUtilTests.cpp - tests/tpkg/ToolchainTests.cpp -) - -add_executable(tpkg_tests ${TPKG_TEST_SOURCES}) -target_link_libraries(tpkg_tests PRIVATE tpkg_core GTest::gtest GTest::gtest_main) - -include(GoogleTest) -gtest_discover_tests(tpkg_tests) - -source_group(TREE "${CMAKE_CURRENT_SOURCE_DIR}/tests" PREFIX tests FILES ${TPKG_TEST_SOURCES}) diff --git a/docs/FEATURES.md b/docs/FEATURES.md index f65e3bb..9345c68 100644 --- a/docs/FEATURES.md +++ b/docs/FEATURES.md @@ -1,6 +1,6 @@ -# Toolkit Package Manager Features Implementation Summary +# Rhodium Features Implementation Summary -This document summarizes the newly implemented features in Toolkit Package Manager. +This document summarizes the newly implemented features in Rhodium. ## Completed Features @@ -9,9 +9,9 @@ This document summarizes the newly implemented features in Toolkit Package Manag **Status**: Fully implemented (DSL + Backend) **Files Modified**: -- `src/tpkg/model/DependencyDesc.hpp` - Added `dependencies` field -- `src/tpkg/script/LuaBindings.cpp` - Parse `dependencies` from Lua -- `src/tpkg/resolve/DependencyResolver.cpp` - Recursive resolution with cycle detection +- `src/rhodium/model/DependencyDesc.hpp` - Added `dependencies` field +- `src/rhodium/script/LuaBindings.cpp` - Parse `dependencies` from Lua +- `src/rhodium/resolve/DependencyResolver.cpp` - Recursive resolution with cycle detection **Usage**: ```lua @@ -34,11 +34,11 @@ require("opencv", { **Status**: Fully implemented **Files Modified**: -- `src/tpkg/cli/CommandLine.cpp` - Added `commandTree()` function +- `src/rhodium/cli/CommandLine.cpp` - Added `commandTree()` function **Usage**: ```bash -tpkg tree +rhodium tree ``` **Output**: @@ -58,7 +58,7 @@ my-project **Status**: Fully implemented **Files Modified**: -- `src/tpkg/resolve/DependencyResolver.cpp` - Added detailed error context +- `src/rhodium/resolve/DependencyResolver.cpp` - Added detailed error context **Improvements**: - Shows build directory path @@ -69,8 +69,8 @@ my-project **Example Output**: ``` error: failed to build package: opencv -info: build directory: .tpkg/build/opencv/abc123 -info: source directory: .tpkg/packages/opencv/src +info: build directory: .rhodium/build/opencv/abc123 +info: source directory: .rhodium/packages/opencv/src info: specified ref: v4.8.0 info: tip: run 'git tag' in the source directory to see available versions ``` @@ -82,10 +82,10 @@ info: tip: run 'git tag' in the source directory to see available versions **Status**: Fully implemented (DSL + Backend) **Files Modified**: -- `src/tpkg/model/DependencyDesc.hpp` - Added `mirrors` field -- `src/tpkg/script/LuaBindings.cpp` - Parse `mirrors` from Lua -- `src/tpkg/package/GitFetcher.cpp` - Retry logic for Git clones -- `src/tpkg/package/Archive.cpp` - Retry logic for archive downloads +- `src/rhodium/model/DependencyDesc.hpp` - Added `mirrors` field +- `src/rhodium/script/LuaBindings.cpp` - Parse `mirrors` from Lua +- `src/rhodium/package/GitFetcher.cpp` - Retry logic for Git clones +- `src/rhodium/package/Archive.cpp` - Retry logic for archive downloads **Usage**: ```lua @@ -129,11 +129,11 @@ require("mylib", { **Status**: Fully implemented **Files Modified**: -- `src/tpkg/core/Logger.hpp` - Added `success` level -- `src/tpkg/core/Logger.cpp` - Separate loggers for different levels -- `src/tpkg/diagnostics/*` - Success level support -- `src/tpkg/package/GitFetcher.cpp` - Progress bar implementation -- `src/tpkg/cli/CommandLine.cpp` - Time tracking +- `src/rhodium/core/Logger.hpp` - Added `success` level +- `src/rhodium/core/Logger.cpp` - Separate loggers for different levels +- `src/rhodium/diagnostics/*` - Success level support +- `src/rhodium/package/GitFetcher.cpp` - Progress bar implementation +- `src/rhodium/cli/CommandLine.cpp` - Time tracking **Features**: - Unified format: `info:`, `warn:`, `error:`, `success:` @@ -153,11 +153,11 @@ success: restore completed (took 3.5s) ## Architecture Principles ### Clear Separation of Concerns -- **Toolkit Package Manager**: Dependency management (download, build, cache) +- **Rhodium**: Dependency management (download, build, cache) - **CMake**: Build logic (linking, target configuration) ### Not Implemented (By Design) -These features are intentionally NOT in Toolkit Package Manager's scope: +These features are intentionally NOT in Rhodium's scope: - ❌ Optional dependencies (use CMake's `find_package`) - ❌ Test-only dependencies (use CMake's `if(BUILD_TESTING)`) @@ -174,7 +174,7 @@ These features are intentionally NOT in Toolkit Package Manager's scope: - [ ] Verify topological build order ### Dependency Tree -- [ ] Run `tpkg tree` on complex projects +- [ ] Run `rhodium tree` on complex projects - [ ] Verify version display - [ ] Test with circular dependencies @@ -199,19 +199,19 @@ These features are intentionally NOT in Toolkit Package Manager's scope: ## File Inventory ### Modified Files (13) -1. `src/tpkg/model/DependencyDesc.hpp` -2. `src/tpkg/script/LuaBindings.cpp` -3. `src/tpkg/resolve/DependencyResolver.cpp` -4. `src/tpkg/cli/CommandLine.cpp` -5. `src/tpkg/core/Logger.hpp` -6. `src/tpkg/core/Logger.cpp` -7. `src/tpkg/diagnostics/Diagnostic.hpp` -8. `src/tpkg/diagnostics/Diagnostic.cpp` -9. `src/tpkg/diagnostics/DiagnosticSink.hpp` -10. `src/tpkg/diagnostics/DiagnosticSink.cpp` -11. `src/tpkg/diagnostics/ConsoleDiagnosticSink.cpp` -12. `src/tpkg/package/GitFetcher.cpp` -13. `src/tpkg/package/Archive.cpp` +1. `src/rhodium/model/DependencyDesc.hpp` +2. `src/rhodium/script/LuaBindings.cpp` +3. `src/rhodium/resolve/DependencyResolver.cpp` +4. `src/rhodium/cli/CommandLine.cpp` +5. `src/rhodium/core/Logger.hpp` +6. `src/rhodium/core/Logger.cpp` +7. `src/rhodium/diagnostics/Diagnostic.hpp` +8. `src/rhodium/diagnostics/Diagnostic.cpp` +9. `src/rhodium/diagnostics/DiagnosticSink.hpp` +10. `src/rhodium/diagnostics/DiagnosticSink.cpp` +11. `src/rhodium/diagnostics/ConsoleDiagnosticSink.cpp` +12. `src/rhodium/package/GitFetcher.cpp` +13. `src/rhodium/package/Archive.cpp` ### New Files (4) 1. `examples/cmake-consumer/libs/zlib-archive.lua` @@ -229,7 +229,7 @@ These features are intentionally NOT in Toolkit Package Manager's scope: 3. Test edge cases (circular deps, mirror failures) ### Future Enhancements (Documented in TODO) -1. CLI build option overrides: `tpkg restore --set pkg:OPT=VAL` +1. CLI build option overrides: `rhodium restore --set pkg:OPT=VAL` 2. Registry support (vcpkg-style) 3. Version constraints (currently exact refs only) @@ -246,4 +246,4 @@ These features are intentionally NOT in Toolkit Package Manager's scope: ✅ Archive source documentation ✅ Improved logging system -Toolkit Package Manager is now a complete, production-ready C++ dependency manager with a clear architectural vision: **focus on dependency management, let CMake handle build logic**. +Rhodium is now a complete, production-ready C++ dependency manager with a clear architectural vision: **focus on dependency management, let CMake handle build logic**. diff --git a/docs/INDEX.md b/docs/INDEX.md index 7498091..33c8286 100644 --- a/docs/INDEX.md +++ b/docs/INDEX.md @@ -3,9 +3,9 @@ * @LastEditors: cubevlmu khfahqp@gmail.com * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. --> -# Toolkit Package Manager documentation +# Rhodium documentation -Toolkit Package Manager is a dependency management system for C/C++ projects that use CMake. It restores dependencies, builds dependency artifacts when needed, records reproducible lock state, and generates CMake integration files. +Rhodium is a dependency management system for C/C++ projects that use CMake. It restores dependencies, builds dependency artifacts when needed, records reproducible lock state, and generates CMake integration files. It is not a general build system. Your project still uses CMake and a native backend such as Ninja, Visual Studio, or Xcode. @@ -65,7 +65,7 @@ It is not a general build system. Your project still uses CMake and a native bac ## Stability levels -Toolkit Package Manager documentation uses these labels: +Rhodium documentation uses these labels: - **Stable**: intended for normal users and should not change without migration notes. - **Experimental**: usable, but behavior or fields may change. diff --git a/docs/README.md b/docs/README.md index 82be28a..fe1d7e6 100644 --- a/docs/README.md +++ b/docs/README.md @@ -3,6 +3,6 @@ * @LastEditors: cubevlmu khfahqp@gmail.com * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. --> -# Toolkit Package Manager documentation +# Rhodium documentation Use [INDEX.md](INDEX.md) as the documentation entry point. diff --git a/docs/architecture/code-organization.md b/docs/architecture/code-organization.md index 3b18233..0936724 100644 --- a/docs/architecture/code-organization.md +++ b/docs/architecture/code-organization.md @@ -7,7 +7,7 @@ This document defines the intended source layout after the maintenance refactor. Current target structure: ```text -src/tpkg/cli/ +src/rhodium/cli/ CommandLine.hpp CommandLine.cpp CommandContext.hpp @@ -35,7 +35,7 @@ src/tpkg/cli/ Target structure: ```text -src/tpkg/toolchain/ +src/rhodium/toolchain/ ToolchainDetector.hpp ToolchainDetector.cpp ToolchainProbe.hpp @@ -52,7 +52,7 @@ Split by platform because environment variables, SDK paths, compiler families, a Target structure: ```text -src/tpkg/resolve/ +src/rhodium/resolve/ DependencyResolver.hpp DependencyResolver.cpp DependencyGraph.hpp @@ -74,7 +74,7 @@ src/tpkg/resolve/ Target structure: ```text -src/tpkg/script/ +src/rhodium/script/ LuaBindings.hpp LuaBindings.cpp LuaValueReader.hpp @@ -96,7 +96,7 @@ src/tpkg/script/ Target structure: ```text -src/tpkg/package/ +src/rhodium/package/ PackageBuilderUtil.hpp PackageBuilderUtil.cpp BuildVariableExpander.hpp diff --git a/docs/architecture/overview.md b/docs/architecture/overview.md index 84b409a..a57185a 100644 --- a/docs/architecture/overview.md +++ b/docs/architecture/overview.md @@ -1,11 +1,11 @@ # Architecture overview -Toolkit Package Manager is organized around a narrow responsibility: restore dependencies for CMake projects and generate CMake integration files. +Rhodium is organized around a narrow responsibility: restore dependencies for CMake projects and generate CMake integration files. ## Main flow ```text -tpkg.lua +rhodium.lua -> script loader -> build model -> dependency resolver diff --git a/docs/archive-sources.md b/docs/archive-sources.md index cfb4801..0358624 100644 --- a/docs/archive-sources.md +++ b/docs/archive-sources.md @@ -1,6 +1,6 @@ # Archive Sources -Toolkit Package Manager supports fetching dependencies from archive files (`.tar.gz`, `.tar.bz2`, `.zip`, etc.) in addition to Git repositories. +Rhodium supports fetching dependencies from archive files (`.tar.gz`, `.tar.bz2`, `.zip`, etc.) in addition to Git repositories. ## Basic Usage @@ -85,7 +85,7 @@ require("mylib", { }) ``` -Toolkit Package Manager will try each URL in order until one succeeds. +Rhodium will try each URL in order until one succeeds. ## Git vs Archive diff --git a/docs/concepts.md b/docs/concepts.md index 3d1022d..c579b9e 100644 --- a/docs/concepts.md +++ b/docs/concepts.md @@ -2,13 +2,13 @@ ## Dependency manager, not build system -Toolkit Package Manager manages dependencies for CMake projects. It may build third-party dependency packages as part of restore, but it does not replace your project build graph. +Rhodium manages dependencies for CMake projects. It may build third-party dependency packages as part of restore, but it does not replace your project build graph. Your application or library remains a CMake project. ## Manifest -`tpkg.lua` declares the dependency graph, source locations, build method, artifacts, and platform-specific overrides. +`rhodium.lua` declares the dependency graph, source locations, build method, artifacts, and platform-specific overrides. ## Lockfile @@ -16,19 +16,19 @@ Your application or library remains a CMake project. ## Package source cache -`.tpkg/packages/` stores fetched dependency sources. +`.rhodium/packages/` stores fetched dependency sources. ## Package build cache -`.tpkg/build-packages/` stores dependency build workspaces. +`.rhodium/build-packages/` stores dependency build workspaces. ## Artifact cache -`.tpkg/artifacts/` stores exported dependency artifacts used by generated CMake integration files. +`.rhodium/artifacts/` stores exported dependency artifacts used by generated CMake integration files. ## Generated CMake integration -`tpkg generate` writes CMake files under `.tpkg/generated/cmake/` by default. Your `CMakeLists.txt` includes the generated file and links the imported targets or libraries it defines. +`rhodium generate` writes CMake files under `.rhodium/generated/cmake/` by default. Your `CMakeLists.txt` includes the generated file and links the imported targets or libraries it defines. ## Toolchain profile diff --git a/docs/contributing/agent-guide.md b/docs/contributing/agent-guide.md index 5ab462e..4cc032d 100644 --- a/docs/contributing/agent-guide.md +++ b/docs/contributing/agent-guide.md @@ -17,7 +17,7 @@ This repository may be modified by coding agents. Agents must follow these rules - Do not change lockfile format. - Do not change artifact ID generation. - Do not change cache layout. -- Do not turn Toolkit Package Manager into a general build system. +- Do not turn Rhodium into a general build system. ## Preferred workflow diff --git a/docs/contributing/development-setup.md b/docs/contributing/development-setup.md index 2328d3e..c5ca9c7 100644 --- a/docs/contributing/development-setup.md +++ b/docs/contributing/development-setup.md @@ -25,9 +25,9 @@ cmake --build build ## Local validation commands ```bash -tpkg doctor -tpkg load --root examples/basic-cmake -tpkg dump-model --root examples/basic-cmake +rhodium doctor +rhodium load --root examples/basic-cmake +rhodium dump-model --root examples/basic-cmake ``` Automated agents should not run these commands unless explicitly instructed by the project owner. diff --git a/docs/dsl/examples.md b/docs/dsl/examples.md index ceab91a..cf096d4 100644 --- a/docs/dsl/examples.md +++ b/docs/dsl/examples.md @@ -38,8 +38,8 @@ require("fmt", { ## Dependency with local override ```bash -tpkg override set fmt ../fmt-fork -tpkg restore fmt +rhodium override set fmt ../fmt-fork +rhodium restore fmt ``` ## Transitive dependency diff --git a/docs/dsl/overview.md b/docs/dsl/overview.md index 3bddc40..a7155be 100644 --- a/docs/dsl/overview.md +++ b/docs/dsl/overview.md @@ -5,7 +5,7 @@ --> # DSL overview -`tpkg.lua` is the dependency manifest for a Toolkit Package Manager workspace. +`rhodium.lua` is the dependency manifest for a Rhodium workspace. If it is absent, Rhodium also accepts the legacy `tpkg.lua`. If both exist, only `rhodium.lua` is loaded; an invalid `rhodium.lua` reports an error rather than falling back. DSL fields and meanings are unchanged. The DSL is Lua-based. Treat the manifest as trusted project code. @@ -38,4 +38,4 @@ require("fmt", { ## Evaluation model -Toolkit Package Manager loads the manifest, builds an in-memory dependency model, validates it, resolves sources, restores artifacts, and then generates CMake integration files. +Rhodium loads the manifest, builds an in-memory dependency model, validates it, resolves sources, restores artifacts, and then generates CMake integration files. diff --git a/docs/dsl/source-types.md b/docs/dsl/source-types.md index a4cddf0..d32c8ed 100644 --- a/docs/dsl/source-types.md +++ b/docs/dsl/source-types.md @@ -1,6 +1,6 @@ # Source types -Toolkit Package Manager can restore dependencies from Git, archives, and local paths. +Rhodium can restore dependencies from Git, archives, and local paths. ## Git source diff --git a/docs/export-defines.md b/docs/export-defines.md index 3a90ae8..4ca547f 100644 --- a/docs/export-defines.md +++ b/docs/export-defines.md @@ -32,7 +32,7 @@ require("spdlog", { }) ``` -Generated CMake target `tpkg::spdlog` will have: +Generated CMake target `rhodium::spdlog` will have: - ✅ Include directories - ✅ Libraries to link - ❌ NO defines exported @@ -113,8 +113,8 @@ require("spdlog", { **With `export_defines = false`**: ```cmake -add_library(tpkg::spdlog INTERFACE IMPORTED) -set_target_properties(tpkg::spdlog PROPERTIES +add_library(rhodium::spdlog INTERFACE IMPORTED) +set_target_properties(rhodium::spdlog PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "/path/to/include" INTERFACE_COMPILE_DEFINITIONS "" # Empty! INTERFACE_LINK_LIBRARIES "..." @@ -123,8 +123,8 @@ set_target_properties(tpkg::spdlog PROPERTIES **With `export_defines = true`**: ```cmake -add_library(tpkg::my-lib INTERFACE IMPORTED) -set_target_properties(tpkg::my-lib PROPERTIES +add_library(rhodium::my-lib INTERFACE IMPORTED) +set_target_properties(rhodium::my-lib PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "/path/to/include" INTERFACE_COMPILE_DEFINITIONS "MY_MACRO=1;ANOTHER_MACRO" INTERFACE_LINK_LIBRARIES "..." diff --git a/docs/features/mirrors.md b/docs/features/mirrors.md index 0934c15..4c0d7d7 100644 --- a/docs/features/mirrors.md +++ b/docs/features/mirrors.md @@ -1,10 +1,10 @@ # Mirror Support -Toolkit Package Manager supports fallback mirrors for both Git and Archive sources, improving reliability when the primary source is unavailable. +Rhodium supports fallback mirrors for both Git and Archive sources, improving reliability when the primary source is unavailable. ## Overview -When a source fails to download, Toolkit Package Manager automatically tries mirrors in the order specified. This is useful for: +When a source fails to download, Rhodium automatically tries mirrors in the order specified. This is useful for: - Handling temporary network issues - Working around geo-restrictions - Providing backup sources for critical dependencies @@ -42,7 +42,7 @@ require("zlib", { ### Retry Logic -1. **Primary source**: Toolkit Package Manager first attempts the main `source` +1. **Primary source**: Rhodium first attempts the main `source` 2. **Mirror fallback**: If the primary fails, it tries each mirror in order 3. **Cleanup**: Failed partial downloads are removed before trying the next source 4. **Verification**: For archives, SHA256 is verified regardless of which source succeeded @@ -82,7 +82,7 @@ sha256 = "abc123...", -- Protects against tampering ### 3. Order Mirrors by Priority -List mirrors in order of preference. Toolkit Package Manager tries them sequentially: +List mirrors in order of preference. Rhodium tries them sequentially: ```lua mirrors = { @@ -182,7 +182,7 @@ When a source fails: ## Comparison with Other Tools -| Feature | Toolkit Package Manager | vcpkg | Conan | +| Feature | Rhodium | vcpkg | Conan | |---------|--------------|-------|-------| | Git mirrors | ✅ | ❌ | ✅ | | Archive mirrors | ✅ | ❌ | ✅ | diff --git a/docs/features/transitive-dependencies.md b/docs/features/transitive-dependencies.md index 7dc873e..a7c20e9 100644 --- a/docs/features/transitive-dependencies.md +++ b/docs/features/transitive-dependencies.md @@ -1,10 +1,10 @@ # Transitive Dependencies -Toolkit Package Manager automatically resolves and builds transitive dependencies, eliminating the need to manually declare every dependency in your project. +Rhodium automatically resolves and builds transitive dependencies, eliminating the need to manually declare every dependency in your project. ## Overview -When a package declares its own dependencies, Toolkit Package Manager will automatically fetch, build, and make them available to your project. This creates a clean dependency tree where each package is responsible for declaring what it needs. +When a package declares its own dependencies, Rhodium will automatically fetch, build, and make them available to your project. This creates a clean dependency tree where each package is responsible for declaring what it needs. ## Usage @@ -33,7 +33,7 @@ require("png", { }) ``` -In this example, when you depend on `opencv`, Toolkit Package Manager will automatically: +In this example, when you depend on `opencv`, Rhodium will automatically: 1. Resolve all transitive dependencies (`zlib`, `jpeg`, `png`) 2. Build them in the correct order (dependencies first) 3. Make them available to `opencv` during its build @@ -41,10 +41,10 @@ In this example, when you depend on `opencv`, Toolkit Package Manager will autom ## Features ### Automatic Resolution -Toolkit Package Manager recursively walks the dependency tree and collects all required packages. +Rhodium recursively walks the dependency tree and collects all required packages. ### Circular Dependency Detection -If a circular dependency is detected, Toolkit Package Manager will report an error: +If a circular dependency is detected, Rhodium will report an error: ``` error: circular dependency detected: packageA @@ -61,7 +61,7 @@ If multiple packages depend on the same library, it is only built once and share Use the `tree` command to visualize your dependency tree: ```bash -tpkg tree +rhodium tree ``` Output: @@ -80,7 +80,7 @@ my-project 2. **Be specific about versions**: Use specific tags or commits to ensure reproducible builds. -3. **Document transitive dependencies**: While Toolkit Package Manager handles them automatically, document why a package needs its dependencies for future maintainers. +3. **Document transitive dependencies**: While Rhodium handles them automatically, document why a package needs its dependencies for future maintainers. ## Error Handling @@ -92,7 +92,7 @@ If a transitive dependency is declared but not found: error: transitive dependency not found: zlib (required by opencv) ``` -**Solution**: Add the missing dependency to your `tpkg.lua`. +**Solution**: Add the missing dependency to your `rhodium.lua`. ### Circular Dependencies @@ -107,7 +107,7 @@ error: circular dependency detected: packageA ## Comparison with Other Tools -| Feature | Toolkit Package Manager | vcpkg | Conan | +| Feature | Rhodium | vcpkg | Conan | |---------|--------------|-------|-------| | Auto-resolve transitive deps | ✅ | ✅ | ✅ | | Circular dep detection | ✅ | ✅ | ✅ | diff --git a/docs/getting-started.md b/docs/getting-started.md index e4cb82a..54940ae 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -1,11 +1,11 @@ # Getting started -This guide creates a minimal CMake project that restores dependencies through Toolkit Package Manager. +This guide creates a minimal CMake project that restores dependencies through Rhodium. -## 1. Create `tpkg.lua` +## 1. Create `rhodium.lua` ```lua -package("HelloTPKG") +package("HelloRHODIUM") version("0.1.0") default_config("debug") default_platform("host") @@ -31,8 +31,8 @@ require("fmt", { ## 2. Detect toolchains ```bash -tpkg sdk detect -tpkg sdk list +rhodium sdk detect +rhodium sdk list ``` Choose a profile ID shown by `sdk list`, for example `windows-msvc-x64`. @@ -40,30 +40,30 @@ Choose a profile ID shown by `sdk list`, for example `windows-msvc-x64`. ## 3. Restore dependencies ```bash -tpkg restore --config debug --toolchain windows-msvc-x64 +rhodium restore --config debug --toolchain windows-msvc-x64 ``` -This reads `tpkg.lua`, fetches dependency sources, builds dependencies if needed, writes or updates `tpkg.lock.toml`, and stores artifacts under `.tpkg/`. +This reads `rhodium.lua`, fetches dependency sources, builds dependencies if needed, writes or updates `tpkg.lock.toml`, and stores artifacts under `.rhodium/`. ## 4. Generate CMake integration ```bash -tpkg generate --config debug --toolchain windows-msvc-x64 +rhodium generate --config debug --toolchain windows-msvc-x64 ``` The default output is: ```text -.tpkg/generated/cmake/ +.rhodium/generated/cmake/ ``` ## 5. Consume from CMake ```cmake cmake_minimum_required(VERSION 3.25) -project(HelloTPKG LANGUAGES CXX) +project(HelloRHODIUM LANGUAGES CXX) -include("${CMAKE_SOURCE_DIR}/.tpkg/generated/cmake/tpkg_deps.cmake") +include("${CMAKE_SOURCE_DIR}/.rhodium/generated/cmake/rhodiumConfig.cmake") add_executable(hello src/main.cpp) target_link_libraries(hello PRIVATE fmt) @@ -74,7 +74,7 @@ target_link_libraries(hello PRIVATE fmt) Commit: ```text -tpkg.lua +rhodium.lua tpkg.lock.toml CMakeLists.txt ``` @@ -82,7 +82,7 @@ CMakeLists.txt Do not commit: ```text -.tpkg/ +.rhodium/ ``` ## Next steps diff --git a/docs/guide/basic-workflow.md b/docs/guide/basic-workflow.md index a839f51..4cb92a4 100644 --- a/docs/guide/basic-workflow.md +++ b/docs/guide/basic-workflow.md @@ -5,11 +5,11 @@ --> # Basic workflow -A normal Toolkit Package Manager workflow has four steps. +A normal Rhodium workflow has four steps. ## 1. Write the manifest -Create `tpkg.lua` in the CMake project root. +Create `rhodium.lua` in the CMake project root. ```lua package("MyProject") @@ -33,17 +33,17 @@ require("fmt", { ## 2. Detect or select a toolchain ```bash -tpkg sdk detect -tpkg sdk list -tpkg sdk select windows-msvc-x64 +rhodium sdk detect +rhodium sdk list +rhodium sdk select windows-msvc-x64 ``` -The selected toolchain is stored in local `.tpkg` state and should not be committed. +The selected toolchain is stored in local `.rhodium` state and should not be committed. ## 3. Restore dependencies ```bash -tpkg restore --config debug +rhodium restore --config debug ``` This fetches sources, builds dependency packages if needed, exports artifacts, and updates `tpkg.lock.toml`. @@ -51,7 +51,7 @@ This fetches sources, builds dependency packages if needed, exports artifacts, a ## 4. Generate CMake files ```bash -tpkg generate --config debug +rhodium generate --config debug ``` Then include the generated file from your CMake project. @@ -61,7 +61,7 @@ Then include the generated file from your CMake project. Commit: ```text -tpkg.lua +rhodium.lua tpkg.lock.toml docs explaining required toolchains ``` @@ -69,5 +69,5 @@ docs explaining required toolchains Ignore: ```text -.tpkg/ +.rhodium/ ``` diff --git a/docs/guide/cleaning.md b/docs/guide/cleaning.md index c259956..f46f670 100644 --- a/docs/guide/cleaning.md +++ b/docs/guide/cleaning.md @@ -5,19 +5,19 @@ Use targeted cleanup first. ## Clean generated integration files ```bash -tpkg clean +rhodium clean ``` ## Clean one dependency ```bash -tpkg clean fmt --artifacts --sources +rhodium clean fmt --artifacts --sources ``` ## Remove the lockfile ```bash -tpkg clean --lock +rhodium clean --lock ``` Only do this when you intentionally want to resolve dependencies again. @@ -25,7 +25,7 @@ Only do this when you intentionally want to resolve dependencies again. ## Remove all local state ```bash -tpkg clean --all +rhodium clean --all ``` -This removes `.tpkg/` and should be treated as a full local reset. +This removes `.rhodium/` and should be treated as a full local reset. diff --git a/docs/guide/cmake-integration.md b/docs/guide/cmake-integration.md index e8b3c8c..fe0463d 100644 --- a/docs/guide/cmake-integration.md +++ b/docs/guide/cmake-integration.md @@ -1,17 +1,17 @@ # CMake integration -Toolkit Package Manager generates CMake files for dependencies after restore. +Rhodium generates CMake files for dependencies after restore. ## Generate integration files ```bash -tpkg generate --config debug --toolchain windows-msvc-x64 +rhodium generate --config debug --toolchain windows-msvc-x64 ``` Default output: ```text -.tpkg/generated/cmake/ +.rhodium/generated/cmake/ ``` ## Include generated files @@ -19,27 +19,27 @@ Default output: Use a guarded include so a missing restore step produces a clear error. ```cmake -set(TPKG_DEPS_FILE "${CMAKE_SOURCE_DIR}/.tpkg/generated/cmake/tpkg_deps.cmake") -if(NOT EXISTS "${TPKG_DEPS_FILE}") - message(FATAL_ERROR "Toolkit Package Manager dependencies were not generated. Run: tpkg restore && tpkg generate") +set(RHODIUM_DEPS_FILE "${CMAKE_SOURCE_DIR}/.rhodium/generated/cmake/rhodiumConfig.cmake") +if(NOT EXISTS "${RHODIUM_DEPS_FILE}") + message(FATAL_ERROR "Rhodium dependencies were not generated. Run: rhodium restore && rhodium generate") endif() -include("${TPKG_DEPS_FILE}") +include("${RHODIUM_DEPS_FILE}") ``` ## Link dependencies -The generated integration exposes dependency artifacts based on the manifest. Link using the names generated by Toolkit Package Manager for your project. +The generated integration exposes dependency artifacts based on the manifest. Link using the names generated by Rhodium for your project. ```cmake add_executable(app src/main.cpp) -target_link_libraries(app PRIVATE fmt) +target_link_libraries(app PRIVATE rhodium::fmt) ``` ## Regeneration rule -Run `tpkg generate` after: +Run `rhodium generate` after: - Adding or removing dependencies. - Changing artifact declarations. - Changing configuration or toolchain. -- Running `tpkg restore` after an update. +- Running `rhodium restore` after an update. diff --git a/docs/guide/dependency-restore.md b/docs/guide/dependency-restore.md index 31cfa49..943adf4 100644 --- a/docs/guide/dependency-restore.md +++ b/docs/guide/dependency-restore.md @@ -3,16 +3,16 @@ `restore` is the main dependency preparation command. ```bash -tpkg restore [package] [options] +rhodium restore [package] [options] ``` ## Common usage ```bash -tpkg restore -tpkg restore --config release -tpkg restore --toolchain windows-msvc-x64 -tpkg restore fmt +rhodium restore +rhodium restore --config release +rhodium restore --toolchain windows-msvc-x64 +rhodium restore fmt ``` ## Reproducible restore @@ -20,7 +20,7 @@ tpkg restore fmt Use the lockfile exactly: ```bash -tpkg restore --locked +rhodium restore --locked ``` `--locked` should not update `tpkg.lock.toml`. @@ -30,19 +30,19 @@ tpkg restore --locked Build a dependency workspace without exporting artifacts: ```bash -tpkg restore dxc --build-only +rhodium restore dxc --build-only ``` Export artifacts from an already-built workspace: ```bash -tpkg restore dxc --export-only +rhodium restore dxc --export-only ``` Force a clean dependency build workspace: ```bash -tpkg restore dxc --rebuild +rhodium restore dxc --rebuild ``` ## Restore outputs @@ -50,8 +50,8 @@ tpkg restore dxc --rebuild Restore may update: ```text -.tpkg/packages/ -.tpkg/build-packages/ -.tpkg/artifacts/ +.rhodium/packages/ +.rhodium/build-packages/ +.rhodium/artifacts/ tpkg.lock.toml ``` diff --git a/docs/guide/dependency-update.md b/docs/guide/dependency-update.md index 9ebbebc..a5769cb 100644 --- a/docs/guide/dependency-update.md +++ b/docs/guide/dependency-update.md @@ -5,21 +5,21 @@ ## Update one package ```bash -tpkg update fmt -tpkg restore fmt +rhodium update fmt +rhodium restore fmt ``` ## Update all packages ```bash -tpkg update --all -tpkg restore +rhodium update --all +rhodium restore ``` ## With toolchain and config ```bash -tpkg update fmt --config release --toolchain windows-msvc-x64 +rhodium update fmt --config release --toolchain windows-msvc-x64 ``` ## Policy diff --git a/docs/guide/local-overrides.md b/docs/guide/local-overrides.md index 88d7466..1fd58c7 100644 --- a/docs/guide/local-overrides.md +++ b/docs/guide/local-overrides.md @@ -5,16 +5,16 @@ Local overrides redirect dependency sources to local working directories. ## Command-line override ```bash -tpkg restore --override fmt=../fmt-fork +rhodium restore --override fmt=../fmt-fork ``` ## Persistent local override ```bash -tpkg override set fmt ../fmt-fork -tpkg override list -tpkg override remove fmt -tpkg override clear +rhodium override set fmt ../fmt-fork +rhodium override list +rhodium override remove fmt +rhodium override clear ``` Overrides are local development state and should not be committed. diff --git a/docs/guide/package-cache.md b/docs/guide/package-cache.md index b969fa3..b991688 100644 --- a/docs/guide/package-cache.md +++ b/docs/guide/package-cache.md @@ -1,15 +1,15 @@ # Package cache -Toolkit Package Manager stores dependency state under `.tpkg/`. +Rhodium stores dependency state under `.rhodium/`. ## Main directories ```text -.tpkg/packages/ fetched dependency sources -.tpkg/build-packages/ dependency build workspaces -.tpkg/artifacts/ exported dependency artifacts -.tpkg/generated/cmake/ generated CMake integration files -.tpkg/toolchains/ detected toolchain cache +.rhodium/packages/ fetched dependency sources +.rhodium/build-packages/ dependency build workspaces +.rhodium/artifacts/ exported dependency artifacts +.rhodium/generated/cmake/ generated CMake integration files +.rhodium/toolchains/ detected toolchain cache ``` ## Artifact identity @@ -19,8 +19,8 @@ Artifact identity is derived from dependency source state and build-relevant con ## Inspect packages ```bash -tpkg packages -tpkg packages --verbose +rhodium packages +rhodium packages --verbose ``` ## Garbage collect unused artifacts @@ -28,17 +28,17 @@ tpkg packages --verbose Dry run: ```bash -tpkg packages gc +rhodium packages gc ``` Apply: ```bash -tpkg packages gc --apply +rhodium packages gc --apply ``` Options: ```bash -tpkg packages gc --package fmt --builds --sources +rhodium packages gc --package fmt --builds --sources ``` diff --git a/docs/guide/toolchains.md b/docs/guide/toolchains.md index 57cd852..115b013 100644 --- a/docs/guide/toolchains.md +++ b/docs/guide/toolchains.md @@ -5,32 +5,32 @@ A toolchain profile describes the local compiler, linker, SDK, and helper tools ## Detect profiles ```bash -tpkg sdk detect -tpkg sdk list +rhodium sdk detect +rhodium sdk list ``` ## Show a profile ```bash -tpkg sdk show windows-msvc-x64 +rhodium sdk show windows-msvc-x64 ``` ## Save a preferred profile ```bash -tpkg sdk select windows-msvc-x64 +rhodium sdk select windows-msvc-x64 ``` Clear it with: ```bash -tpkg sdk clear +rhodium sdk clear ``` ## Register a profile manually ```bash -tpkg sdk add android-arm64 \ +rhodium sdk add android-arm64 \ --platform android \ --compiler-kind clang \ --target-arch arm64 \ @@ -46,8 +46,8 @@ Use `--force` to replace an existing profile with the same ID. ## Diagnostics ```bash -tpkg sdk doctor -tpkg doctor --sdk +rhodium sdk doctor +rhodium doctor --sdk ``` Use diagnostics when a package build cannot find a compiler, CMake, Ninja, Git, Android SDK, NDK, JDK, or system library path. diff --git a/docs/installation.md b/docs/installation.md index eb8a5f3..482ea45 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -1,6 +1,6 @@ # Installation -Toolkit Package Manager is currently distributed as a development executable from this repository. +Rhodium is currently distributed as a development executable from this repository. ## Requirements @@ -11,7 +11,7 @@ Required for normal use: - A C/C++ toolchain for the target platform. - Ninja is recommended for dependency builds. -Required for building Toolkit Package Manager itself: +Required for building Rhodium itself: - CMake 3.25 or newer. - A C++20 compiler. @@ -19,7 +19,7 @@ Required for building Toolkit Package Manager itself: ## Platform status -Toolkit Package Manager is designed to be cross-platform as a dependency manager. +Rhodium is designed to be cross-platform as a dependency manager. Current validation status: @@ -36,10 +36,10 @@ Current validation status: After building the executable, add the output directory to `PATH` or call it with an absolute path. ```bash -tpkg --help -tpkg doctor +rhodium --help +rhodium doctor ``` ## Project-local usage -For reproducible project workflows, prefer documenting the exact `tpkg` version or commit used by the project. +For reproducible project workflows, prefer documenting the exact `rhodium` version or commit used by the project. diff --git a/docs/reference/cache-layout.md b/docs/reference/cache-layout.md index 2e610b3..ee3fc60 100644 --- a/docs/reference/cache-layout.md +++ b/docs/reference/cache-layout.md @@ -5,10 +5,12 @@ --> # Cache layout -Toolkit Package Manager uses `.tpkg/` for local generated state. +Rhodium uses `.rhodium/` for new local generated state. If `.rhodium/` is absent and a legacy `.tpkg/` directory exists, it reuses `.tpkg/` without moving or copying it. If both exist, `.rhodium/` takes precedence. All cache, artifact, toolchain, override, generation, and clean operations use the selected directory. `clean --all` removes only that selected directory. + +The same directory selection applies to user-level toolchains under the home directory. Internal cache structure, marker filenames, and artifact ID generation remain unchanged. ```text -.tpkg/ +.rhodium/ packages/ dependency source cache build-packages/ dependency build workspaces artifacts/ exported artifacts diff --git a/docs/reference/command-reference.md b/docs/reference/command-reference.md index 1d9baa5..013d898 100644 --- a/docs/reference/command-reference.md +++ b/docs/reference/command-reference.md @@ -3,31 +3,31 @@ ## Global options ```bash -tpkg [--root ] [options] +rhodium [--root ] [options] ``` | Option | Meaning | | --- | --- | -| `--root ` | Workspace root containing `tpkg.lua` | +| `--root ` | Workspace root containing `rhodium.lua` | | `--help` | Show help | ## `doctor` -Check the local Toolkit Package Manager runtime. +Check the local Rhodium runtime. ```bash -tpkg doctor -tpkg doctor --sdk +rhodium doctor +rhodium doctor --sdk ``` `--sdk` prints detailed SDK and toolchain diagnostics. ## `load` -Load and validate `tpkg.lua`. +Load and validate `rhodium.lua`. ```bash -tpkg load +rhodium load ``` Use this before restore when checking DSL syntax and model validation. @@ -37,7 +37,7 @@ Use this before restore when checking DSL syntax and model validation. Print the loaded dependency model as JSON. ```bash -tpkg dump-model +rhodium dump-model ``` ## `deps` @@ -45,7 +45,7 @@ tpkg dump-model Print dependencies declared in the manifest. ```bash -tpkg deps +rhodium deps ``` ## `generate` @@ -53,14 +53,14 @@ tpkg deps Generate CMake dependency integration files. ```bash -tpkg generate [options] +rhodium generate [options] ``` | Option | Meaning | | --- | --- | | `--toolchain ` | Preferred local toolchain profile ID | | `--config ` | Build config | -| `--output ` | Output directory; default `.tpkg/generated/cmake` | +| `--output ` | Output directory; default `/generated/cmake` (`.rhodium/`, or existing legacy `.tpkg/`) | | `--override ` | Override dependency source | ## `restore` @@ -68,7 +68,7 @@ tpkg generate [options] Prepare package cache, build/export dependency artifacts, and update lock state. ```bash -tpkg restore [package] [options] +rhodium restore [package] [options] ``` | Option | Meaning | @@ -87,7 +87,7 @@ tpkg restore [package] [options] Update package lock entries. ```bash -tpkg update [package] [options] +rhodium update [package] [options] ``` | Option | Meaning | @@ -103,8 +103,8 @@ tpkg update [package] [options] Print restored package cache and artifact status. ```bash -tpkg packages -tpkg packages --verbose +rhodium packages +rhodium packages --verbose ``` | Option | Meaning | @@ -117,7 +117,7 @@ tpkg packages --verbose Garbage collect unreferenced package caches. ```bash -tpkg packages gc [options] +rhodium packages gc [options] ``` | Option | Meaning | @@ -134,7 +134,7 @@ tpkg packages gc [options] Display dependency tree. ```bash -tpkg tree +rhodium tree ``` ## `clean` @@ -142,15 +142,15 @@ tpkg tree Clean dependency cache and generated integration files. ```bash -tpkg clean [package] [options] +rhodium clean [package] [options] ``` | Option | Meaning | | --- | --- | | `package` | Optional dependency to clean | -| `--all` | Remove the whole `.tpkg` directory | -| `--artifacts` | Remove `.tpkg/artifacts` | -| `--sources` | Remove `.tpkg/packages` source cache | +| `--all` | Remove the active state directory (`.rhodium` or legacy `.tpkg`) | +| `--artifacts` | Remove `.rhodium/artifacts` | +| `--sources` | Remove `.rhodium/packages` source cache | | `--lock` | Remove `tpkg.lock.toml` | ## `override` @@ -158,10 +158,10 @@ tpkg clean [package] [options] Manage local dependency overrides. ```bash -tpkg override list -tpkg override set -tpkg override remove -tpkg override clear +rhodium override list +rhodium override set +rhodium override remove +rhodium override clear ``` ## `sdk` @@ -171,27 +171,27 @@ Detect and inspect local SDK/toolchains. ### `sdk detect` ```bash -tpkg sdk detect +rhodium sdk detect ``` -Detect SDK/toolchains and write `.tpkg/toolchains/host.toml`. +Detect SDK/toolchains and write `.rhodium/toolchains/host.toml`. ### `sdk list` ```bash -tpkg sdk list [--refresh] [--source auto|project-user|workspace|global-user] +rhodium sdk list [--refresh] [--source auto|project-user|workspace|global-user] ``` ### `sdk show` ```bash -tpkg sdk show +rhodium sdk show ``` ### `sdk add` ```bash -tpkg sdk add [options] +rhodium sdk add [options] ``` Common options: @@ -234,14 +234,14 @@ Common options: ### `sdk remove` ```bash -tpkg sdk remove [--source project-user|global-user] +rhodium sdk remove [--source project-user|global-user] ``` ### Other SDK commands ```bash -tpkg sdk doctor -tpkg sdk dump -tpkg sdk select -tpkg sdk clear +rhodium sdk doctor +rhodium sdk dump +rhodium sdk select +rhodium sdk clear ``` diff --git a/docs/reference/exit-codes.md b/docs/reference/exit-codes.md index 421700e..b02f173 100644 --- a/docs/reference/exit-codes.md +++ b/docs/reference/exit-codes.md @@ -5,7 +5,7 @@ --> # Exit codes -Toolkit Package Manager currently uses a simple exit-code policy. +Rhodium currently uses a simple exit-code policy. | Code | Meaning | | --- | --- | diff --git a/docs/reference/generated-cmake.md b/docs/reference/generated-cmake.md index 4907d97..dbf0ded 100644 --- a/docs/reference/generated-cmake.md +++ b/docs/reference/generated-cmake.md @@ -1,11 +1,11 @@ # Generated CMake -`tpkg generate` writes CMake integration files for restored dependency artifacts. +`rhodium generate` writes CMake integration files for restored dependency artifacts. ## Default output ```text -.tpkg/generated/cmake/ +.rhodium/generated/cmake/ ``` ## Include policy @@ -13,7 +13,7 @@ Include generated files from your root `CMakeLists.txt` after restore and generate. ```cmake -include("${CMAKE_SOURCE_DIR}/.tpkg/generated/cmake/tpkg_deps.cmake") +include("${CMAKE_SOURCE_DIR}/.rhodium/generated/cmake/rhodiumConfig.cmake") ``` ## Regeneration diff --git a/docs/reference/lockfile.md b/docs/reference/lockfile.md index fca6b60..58aa920 100644 --- a/docs/reference/lockfile.md +++ b/docs/reference/lockfile.md @@ -9,18 +9,18 @@ Commit `tpkg.lock.toml` for applications and projects that need reproducible dep ## Locked restore ```bash -tpkg restore --locked +rhodium restore --locked ``` A locked restore should use existing lock entries and should not update the lockfile. ## Update policy -Use `tpkg update` when intentionally changing lock state. +Use `rhodium update` when intentionally changing lock state. ```bash -tpkg update fmt -tpkg restore fmt +rhodium update fmt +rhodium restore fmt ``` ## Do not hand-edit by default diff --git a/docs/troubleshooting.md b/docs/troubleshooting.md index 625142a..4a2f0f4 100644 --- a/docs/troubleshooting.md +++ b/docs/troubleshooting.md @@ -1,11 +1,11 @@ # Troubleshooting -## `tpkg.lua` cannot be found +## `rhodium.lua` cannot be found Run commands from the workspace root or pass `--root `. ```bash -tpkg restore --root path/to/project +rhodium restore --root path/to/project ``` ## No toolchain profile is available @@ -13,24 +13,24 @@ tpkg restore --root path/to/project Run: ```bash -tpkg sdk detect -tpkg sdk list +rhodium sdk detect +rhodium sdk list ``` -If detection does not find the expected SDK, register a profile manually with `tpkg sdk add`. +If detection does not find the expected SDK, register a profile manually with `rhodium sdk add`. ## Dependency restore uses the wrong compiler Pass an explicit toolchain profile: ```bash -tpkg restore --toolchain windows-msvc-x64 +rhodium restore --toolchain windows-msvc-x64 ``` To save a local preference: ```bash -tpkg sdk select windows-msvc-x64 +rhodium sdk select windows-msvc-x64 ``` ## A dependency builds but CMake cannot link it @@ -45,8 +45,8 @@ Check the dependency `artifacts` declaration. At minimum, verify: Then rerun: ```bash -tpkg restore --export-only -tpkg generate +rhodium restore --export-only +rhodium generate ``` ## A package cache is stale @@ -54,13 +54,13 @@ tpkg generate Use targeted clean first: ```bash -tpkg clean --artifacts --sources +rhodium clean --artifacts --sources ``` Use full clean only when necessary: ```bash -tpkg clean --all +rhodium clean --all ``` ## Lockfile mismatch @@ -68,12 +68,12 @@ tpkg clean --all If you want exact reproducibility, use: ```bash -tpkg restore --locked +rhodium restore --locked ``` If you intentionally want a new resolved commit or source state, use: ```bash -tpkg update -tpkg restore +rhodium update +rhodium restore ``` diff --git a/examples/basic-cmake/CMakeLists.txt b/examples/basic-cmake/CMakeLists.txt index 2526f0b..c1f7beb 100644 --- a/examples/basic-cmake/CMakeLists.txt +++ b/examples/basic-cmake/CMakeLists.txt @@ -1,14 +1,18 @@ cmake_minimum_required(VERSION 3.25) -project(tpkg_basic_cmake LANGUAGES CXX) +project(rhodium_basic_cmake LANGUAGES CXX) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) -set(TPKG_DEPS_FILE "${CMAKE_SOURCE_DIR}/.tpkg/generated/cmake/tpkg_deps.cmake") -if(NOT EXISTS "${TPKG_DEPS_FILE}") - message(FATAL_ERROR "Run: tpkg restore --root ${CMAKE_SOURCE_DIR} && tpkg generate --root ${CMAKE_SOURCE_DIR}") +set(RHODIUM_STATE_DIR "${CMAKE_SOURCE_DIR}/.rhodium") +if(NOT EXISTS "${RHODIUM_STATE_DIR}" AND EXISTS "${CMAKE_SOURCE_DIR}/.tpkg") + set(RHODIUM_STATE_DIR "${CMAKE_SOURCE_DIR}/.tpkg") endif() -include("${TPKG_DEPS_FILE}") +set(RHODIUM_DEPS_FILE "${RHODIUM_STATE_DIR}/generated/cmake/rhodiumConfig.cmake") +if(NOT EXISTS "${RHODIUM_DEPS_FILE}") + message(FATAL_ERROR "Run: rhodium restore --root ${CMAKE_SOURCE_DIR} && rhodium generate --root ${CMAKE_SOURCE_DIR}") +endif() +include("${RHODIUM_DEPS_FILE}") -add_executable(tpkg_basic src/main.cpp) -target_link_libraries(tpkg_basic PRIVATE fmt) +add_executable(rhodium_basic src/main.cpp) +target_link_libraries(rhodium_basic PRIVATE rhodium::fmt) diff --git a/examples/basic-cmake/README.md b/examples/basic-cmake/README.md index 5419076..52a2d5c 100644 --- a/examples/basic-cmake/README.md +++ b/examples/basic-cmake/README.md @@ -5,11 +5,11 @@ --> # basic-cmake -Minimal CMake project using Toolkit Package Manager generated dependency integration. +Minimal CMake project using Rhodium generated dependency integration. ```bash -tpkg restore --root examples/basic-cmake --toolchain -tpkg generate --root examples/basic-cmake --toolchain +rhodium restore --root examples/basic-cmake --toolchain +rhodium generate --root examples/basic-cmake --toolchain cmake -S examples/basic-cmake -B build/basic-cmake -G Ninja cmake --build build/basic-cmake ``` diff --git a/examples/basic-cmake/tbuild.deps.lua b/examples/basic-cmake/rhodium.lua similarity index 100% rename from examples/basic-cmake/tbuild.deps.lua rename to examples/basic-cmake/rhodium.lua diff --git a/examples/basic-cmake/src/main.cpp b/examples/basic-cmake/src/main.cpp index 6c58819..084bd90 100644 --- a/examples/basic-cmake/src/main.cpp +++ b/examples/basic-cmake/src/main.cpp @@ -2,6 +2,6 @@ int main() { - fmt::print("Hello from Toolkit Package Manager example.\n"); + fmt::print("Hello from Rhodium example.\n"); return 0; } diff --git a/examples/cmake-zlib/tbuild.deps.lua b/examples/cmake-zlib/rhodium.lua similarity index 100% rename from examples/cmake-zlib/tbuild.deps.lua rename to examples/cmake-zlib/rhodium.lua diff --git a/examples/custom-build/tbuild.deps.lua b/examples/custom-build/rhodium.lua similarity index 100% rename from examples/custom-build/tbuild.deps.lua rename to examples/custom-build/rhodium.lua diff --git a/examples/header-only-fmt/tbuild.deps.lua b/examples/header-only-fmt/rhodium.lua similarity index 100% rename from examples/header-only-fmt/tbuild.deps.lua rename to examples/header-only-fmt/rhodium.lua diff --git a/examples/local-override/README.md b/examples/local-override/README.md index 5a30882..535d7da 100644 --- a/examples/local-override/README.md +++ b/examples/local-override/README.md @@ -3,6 +3,6 @@ Demonstrates a local override workflow. ```bash -tpkg override set fmt overrides/fmt -tpkg restore --root examples/local-override fmt +rhodium override set fmt overrides/fmt +rhodium restore --root examples/local-override fmt ``` diff --git a/examples/local-override/tbuild.deps.lua b/examples/local-override/rhodium.lua similarity index 100% rename from examples/local-override/tbuild.deps.lua rename to examples/local-override/rhodium.lua diff --git a/examples/prebuilt-lib/tbuild.deps.lua b/examples/prebuilt-lib/rhodium.lua similarity index 100% rename from examples/prebuilt-lib/tbuild.deps.lua rename to examples/prebuilt-lib/rhodium.lua diff --git a/examples/transitive-deps/tbuild.deps.lua b/examples/transitive-deps/rhodium.lua similarity index 100% rename from examples/transitive-deps/tbuild.deps.lua rename to examples/transitive-deps/rhodium.lua diff --git a/scripts/build.cmd b/scripts/build.cmd index f65eae2..9c324fa 100644 --- a/scripts/build.cmd +++ b/scripts/build.cmd @@ -17,8 +17,8 @@ pushd "%~dp0.." if errorlevel 1 exit /b 1 set "CONFIGURE_ARGS=-S . -B %BUILD_DIR% -G %GENERATOR% -DCMAKE_BUILD_TYPE=%BUILD_TYPE%" -if not "%TKB_VCPKG_ROOT%"=="" set "CONFIGURE_ARGS=%CONFIGURE_ARGS% -DTKB_VCPKG_ROOT=%TKB_VCPKG_ROOT%" -if "%TKB_VCPKG_ROOT%"=="" if not "%VCPKG_ROOT%"=="" set "CONFIGURE_ARGS=%CONFIGURE_ARGS% -DTKB_VCPKG_ROOT=%VCPKG_ROOT%" +if not "%RHODIUM_VCPKG_ROOT%"=="" set "CONFIGURE_ARGS=%CONFIGURE_ARGS% -DRHODIUM_VCPKG_ROOT=%RHODIUM_VCPKG_ROOT%" +if "%RHODIUM_VCPKG_ROOT%"=="" if not "%VCPKG_ROOT%"=="" set "CONFIGURE_ARGS=%CONFIGURE_ARGS% -DRHODIUM_VCPKG_ROOT=%VCPKG_ROOT%" if not "%VCPKG_TRIPLET%"=="" set "CONFIGURE_ARGS=%CONFIGURE_ARGS% -DVCPKG_TARGET_TRIPLET=%VCPKG_TRIPLET%" cmake %CONFIGURE_ARGS% diff --git a/scripts/build.ps1 b/scripts/build.ps1 index 1eeb652..de48227 100644 --- a/scripts/build.ps1 +++ b/scripts/build.ps1 @@ -2,7 +2,7 @@ param( [string]$BuildDir = "", [string]$BuildType = "Release", [string]$Generator = "Ninja", - [string]$VcpkgRoot = $(if ($env:TKB_VCPKG_ROOT) { $env:TKB_VCPKG_ROOT } else { $env:VCPKG_ROOT }), + [string]$VcpkgRoot = $(if ($env:RHODIUM_VCPKG_ROOT) { $env:RHODIUM_VCPKG_ROOT } else { $env:VCPKG_ROOT }), [string]$VcpkgTriplet = $(if ($env:VCPKG_TARGET_TRIPLET) { $env:VCPKG_TARGET_TRIPLET } else { "x64-windows" }) ) @@ -30,7 +30,7 @@ Push-Location $repo try { $configureArgs = @("-S", ".", "-B", $BuildDir, "-G", $Generator, "-DCMAKE_BUILD_TYPE=$BuildType") if (-not [string]::IsNullOrWhiteSpace($VcpkgRoot)) { - $configureArgs += "-DTKB_VCPKG_ROOT=$VcpkgRoot" + $configureArgs += "-DRHODIUM_VCPKG_ROOT=$VcpkgRoot" } if (-not [string]::IsNullOrWhiteSpace($VcpkgTriplet)) { $configureArgs += "-DVCPKG_TARGET_TRIPLET=$VcpkgTriplet" diff --git a/scripts/build.sh b/scripts/build.sh index 4d6a4be..4261fb9 100644 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -3,7 +3,7 @@ set -euo pipefail build_type="${BUILD_TYPE:-Release}" generator="${GENERATOR:-Ninja}" -vcpkg_root="${TKB_VCPKG_ROOT:-${VCPKG_ROOT:-}}" +vcpkg_root="${RHODIUM_VCPKG_ROOT:-${VCPKG_ROOT:-}}" vcpkg_triplet="${VCPKG_TARGET_TRIPLET:-x64-windows}" build_dir="${BUILD_DIR:-out/build/ninja-vcpkg-$vcpkg_triplet-$build_type}" @@ -18,7 +18,7 @@ configure_args=( ) if [[ -n "$vcpkg_root" ]]; then - configure_args+=("-DTKB_VCPKG_ROOT=$vcpkg_root") + configure_args+=("-DRHODIUM_VCPKG_ROOT=$vcpkg_root") fi if [[ -n "$vcpkg_triplet" ]]; then diff --git a/scripts/check-basic.ps1 b/scripts/check-basic.ps1 index 3099b33..f202d2f 100644 --- a/scripts/check-basic.ps1 +++ b/scripts/check-basic.ps1 @@ -9,7 +9,7 @@ param( ) # Source-level and dependency-export smoke script. -# By default this configures and builds the tpkg executable before using it. +# By default this configures and builds the rhodium executable before using it. # Pass -SkipBuild only when an existing executable is already present under # -BuildDir; restore/generate still run and may build dependency packages. @@ -40,9 +40,13 @@ function Assert-CMakePackageExport { [string]$Root ) - $generated = Join-Path $Root ".tpkg/generated/cmake" - $config = Join-Path $generated "tpkgConfig.cmake" - $targets = Join-Path $generated "tpkgTargets.cmake" + $stateRoot = Join-Path $Root ".rhodium" + if (-not (Test-Path $stateRoot) -and (Test-Path (Join-Path $Root ".tpkg"))) { + $stateRoot = Join-Path $Root ".tpkg" + } + $generated = Join-Path $stateRoot "generated/cmake" + $config = Join-Path $generated "rhodiumConfig.cmake" + $targets = Join-Path $generated "rhodiumTargets.cmake" if (-not (Test-Path $config)) { throw "missing generated CMake package config: $config" } @@ -52,11 +56,11 @@ function Assert-CMakePackageExport { $configText = Get-Content $config -Raw $targetsText = Get-Content $targets -Raw - if ($configText -notmatch "TPKG_TOOLCHAIN_ID" -or $configText -notmatch "TPKG_COMPILER_KIND") { - throw "generated config is missing tpkg ABI metadata" + if ($configText -notmatch "RHODIUM_TOOLCHAIN_ID" -or $configText -notmatch "RHODIUM_COMPILER_KIND") { + throw "generated config is missing rhodium ABI metadata" } - if ($targetsText -notmatch "add_library\(tpkg::") { - throw "generated targets do not define tpkg:: imported targets" + if ($targetsText -notmatch "add_library\(rhodium::") { + throw "generated targets do not define rhodium:: imported targets" } if ($targetsText -match "INTERFACE_LINK_DIRECTORIES") { throw "generated targets must not rely on INTERFACE_LINK_DIRECTORIES" @@ -68,7 +72,7 @@ try { if (-not $SkipBuild) { $configureArgs = @("-S", ".", "-B", $BuildDir, "-G", "Ninja", "-DCMAKE_BUILD_TYPE=$BuildType") if (-not [string]::IsNullOrWhiteSpace($VcpkgRoot)) { - $configureArgs += "-DTKB_VCPKG_ROOT=$VcpkgRoot" + $configureArgs += "-DRHODIUM_VCPKG_ROOT=$VcpkgRoot" } if (-not [string]::IsNullOrWhiteSpace($VcpkgTriplet)) { $configureArgs += "-DVCPKG_TARGET_TRIPLET=$VcpkgTriplet" @@ -77,20 +81,20 @@ try { Invoke-Checked cmake --build $BuildDir } - $tpkg = Join-Path $repo "$BuildDir/tpkg.exe" - if (-not (Test-Path $tpkg)) { - $tpkg = Join-Path $repo "$BuildDir/$BuildType/tpkg.exe" + $rhodium = Join-Path $repo "$BuildDir/rhodium.exe" + if (-not (Test-Path $rhodium)) { + $rhodium = Join-Path $repo "$BuildDir/$BuildType/rhodium.exe" } - if (-not (Test-Path $tpkg)) { - throw "tpkg executable was not found under '$BuildDir'" + if (-not (Test-Path $rhodium)) { + throw "rhodium executable was not found under '$BuildDir'" } - Invoke-Checked $tpkg --version - Invoke-Checked $tpkg --root examples/cmake-consumer sdk select $Toolchain - Invoke-Checked $tpkg --root examples/cmake-consumer deps - Invoke-Checked $tpkg --root examples/cmake-consumer restore --config $Config - Invoke-Checked $tpkg --root examples/cmake-consumer generate --config $Config - Invoke-Checked $tpkg --root examples/cmake-consumer packages --verbose + Invoke-Checked $rhodium --version + Invoke-Checked $rhodium --root examples/cmake-consumer sdk select $Toolchain + Invoke-Checked $rhodium --root examples/cmake-consumer deps + Invoke-Checked $rhodium --root examples/cmake-consumer restore --config $Config + Invoke-Checked $rhodium --root examples/cmake-consumer generate --config $Config + Invoke-Checked $rhodium --root examples/cmake-consumer packages --verbose Assert-CMakePackageExport -Root (Join-Path $repo "examples/cmake-consumer") } finally { diff --git a/scripts/install.cmd b/scripts/install.cmd index c853718..184c990 100644 --- a/scripts/install.cmd +++ b/scripts/install.cmd @@ -11,7 +11,7 @@ set "BUILD_DIR=%BUILD_DIR%" if "%BUILD_DIR%"=="" set "BUILD_DIR=out\build\ninja-vcpkg-%VCPKG_TRIPLET%-%BUILD_TYPE%" set "INSTALL_PREFIX=%INSTALL_PREFIX%" -if "%INSTALL_PREFIX%"=="" set "INSTALL_PREFIX=out\install\tpkg" +if "%INSTALL_PREFIX%"=="" set "INSTALL_PREFIX=out\install\rhodium" pushd "%~dp0.." if errorlevel 1 exit /b 1 diff --git a/scripts/install.ps1 b/scripts/install.ps1 index 94dd219..1498b6c 100644 --- a/scripts/install.ps1 +++ b/scripts/install.ps1 @@ -1,9 +1,9 @@ param( [string]$BuildDir = "", [string]$BuildType = "Release", - [string]$InstallPrefix = "out/install/tpkg", + [string]$InstallPrefix = "out/install/rhodium", [string]$Generator = "Ninja", - [string]$VcpkgRoot = $(if ($env:TKB_VCPKG_ROOT) { $env:TKB_VCPKG_ROOT } else { $env:VCPKG_ROOT }), + [string]$VcpkgRoot = $(if ($env:RHODIUM_VCPKG_ROOT) { $env:RHODIUM_VCPKG_ROOT } else { $env:VCPKG_ROOT }), [string]$VcpkgTriplet = $(if ($env:VCPKG_TARGET_TRIPLET) { $env:VCPKG_TARGET_TRIPLET } else { "x64-windows" }) ) diff --git a/scripts/install.sh b/scripts/install.sh index 90260d3..f1b6ac4 100644 --- a/scripts/install.sh +++ b/scripts/install.sh @@ -2,7 +2,7 @@ set -euo pipefail build_type="${BUILD_TYPE:-Release}" -install_prefix="${INSTALL_PREFIX:-out/install/tpkg}" +install_prefix="${INSTALL_PREFIX:-out/install/rhodium}" vcpkg_triplet="${VCPKG_TARGET_TRIPLET:-x64-windows}" build_dir="${BUILD_DIR:-out/build/ninja-vcpkg-$vcpkg_triplet-$build_type}" diff --git a/src/tpkg/cli/CleanCommand.cpp b/src/rhodium/cli/CleanCommand.cpp similarity index 79% rename from src/tpkg/cli/CleanCommand.cpp rename to src/rhodium/cli/CleanCommand.cpp index d0453c5..f81c1ca 100644 --- a/src/tpkg/cli/CleanCommand.cpp +++ b/src/rhodium/cli/CleanCommand.cpp @@ -1,15 +1,15 @@ -#include "tpkg/cli/Commands.hpp" +#include "rhodium/cli/Commands.hpp" -#include "tpkg/config/LockFile.hpp" -#include "tpkg/core/Path.hpp" -#include "tpkg/core/StringUtil.hpp" -#include "tpkg/diagnostics/ConsoleDiagnosticSink.hpp" +#include "rhodium/config/LockFile.hpp" +#include "rhodium/core/Path.hpp" +#include "rhodium/core/StringUtil.hpp" +#include "rhodium/diagnostics/ConsoleDiagnosticSink.hpp" #include #include #include -namespace toolkit +namespace rhodium { int Commands::clean(const std::filesystem::path &workspaceRoot, bool all, @@ -21,11 +21,11 @@ namespace toolkit ConsoleDiagnosticSink diagnostics; if (all && (artifacts || sources || !packageName.empty())) { - diagnostics.error("clean --all already removes .tpkg; do not combine it with --artifacts, --sources, or a package name"); + diagnostics.error("clean --all already removes the active state directory; do not combine it with --artifacts, --sources, or a package name"); return 1; } - const auto tpkgRoot = workspaceRoot / ".tpkg"; + const auto rhodiumRoot = Path::stateRoot(workspaceRoot); std::error_code canonicalEc; auto normalizedWorkspaceRoot = std::filesystem::weakly_canonical(workspaceRoot, canonicalEc); if (canonicalEc) @@ -38,7 +38,7 @@ namespace toolkit return 1; } } - const auto normalizedTPKGRoot = (normalizedWorkspaceRoot / ".tpkg").lexically_normal(); + const auto normalizedRHODIUMRoot = (normalizedWorkspaceRoot / rhodiumRoot.filename()).lexically_normal(); auto isAllowedCleanPath = [&](const std::filesystem::path &path) -> bool { std::error_code ec; @@ -50,13 +50,13 @@ namespace toolkit absolutePath = absolutePath.lexically_normal(); const auto lowerPath = StringUtils::toLower(absolutePath.string()); - const auto lowerTPKGRoot = StringUtils::toLower(normalizedTPKGRoot.string()); - if (lowerPath == lowerTPKGRoot) + const auto lowerRHODIUMRoot = StringUtils::toLower(normalizedRHODIUMRoot.string()); + if (lowerPath == lowerRHODIUMRoot) { return true; } - auto lowerPrefix = lowerTPKGRoot; + auto lowerPrefix = lowerRHODIUMRoot; if (!lowerPrefix.empty() && lowerPrefix.back() != '\\' && lowerPrefix.back() != '/') { lowerPrefix.push_back(std::filesystem::path::preferred_separator); @@ -68,7 +68,7 @@ namespace toolkit { if (!isAllowedCleanPath(path)) { - diagnostics.error("refusing to clean path outside .tpkg: " + path.string()); + diagnostics.error("refusing to clean path outside the active state directory: " + path.string()); return false; } std::error_code ec; @@ -90,34 +90,34 @@ namespace toolkit bool ok = true; if (all) { - ok &= removePath(tpkgRoot); + ok &= removePath(rhodiumRoot); } else { if (!packageName.empty()) { - ok &= removePath(tpkgRoot / "build-packages" / Path::sanitizePackagePath(packageName)); + ok &= removePath(rhodiumRoot / "build-packages" / Path::sanitizePackagePath(packageName)); if (artifacts) { - ok &= removePath(tpkgRoot / "artifacts" / Path::sanitizePackagePath(packageName)); + ok &= removePath(rhodiumRoot / "artifacts" / Path::sanitizePackagePath(packageName)); } if (sources) { - ok &= removePath(tpkgRoot / "packages" / Path::sanitizePackagePath(packageName)); + ok &= removePath(rhodiumRoot / "packages" / Path::sanitizePackagePath(packageName)); } } else { - ok &= removePath(tpkgRoot / "generated"); - ok &= removePath(tpkgRoot / "tmp"); - ok &= removePath(tpkgRoot / "build-packages"); + ok &= removePath(rhodiumRoot / "generated"); + ok &= removePath(rhodiumRoot / "tmp"); + ok &= removePath(rhodiumRoot / "build-packages"); if (artifacts) { - ok &= removePath(tpkgRoot / "artifacts"); + ok &= removePath(rhodiumRoot / "artifacts"); } if (sources) { - ok &= removePath(tpkgRoot / "packages"); + ok &= removePath(rhodiumRoot / "packages"); } } } @@ -189,4 +189,4 @@ namespace toolkit } -} // namespace toolkit +} // namespace rhodium diff --git a/src/rhodium/cli/CommandContext.cpp b/src/rhodium/cli/CommandContext.cpp new file mode 100644 index 0000000..5ea67e2 --- /dev/null +++ b/src/rhodium/cli/CommandContext.cpp @@ -0,0 +1 @@ +#include "rhodium/cli/CommandContext.hpp" diff --git a/src/tpkg/cli/CommandContext.hpp b/src/rhodium/cli/CommandContext.hpp similarity index 96% rename from src/tpkg/cli/CommandContext.hpp rename to src/rhodium/cli/CommandContext.hpp index e033bbe..b93cb31 100644 --- a/src/tpkg/cli/CommandContext.hpp +++ b/src/rhodium/cli/CommandContext.hpp @@ -6,12 +6,12 @@ #pragma once -#include "tpkg/toolchain/Toolchain.hpp" +#include "rhodium/toolchain/Toolchain.hpp" #include #include -namespace toolkit +namespace rhodium { struct SdkAddOptions { diff --git a/src/tpkg/cli/CommandLine.cpp b/src/rhodium/cli/CommandLine.cpp similarity index 91% rename from src/tpkg/cli/CommandLine.cpp rename to src/rhodium/cli/CommandLine.cpp index 4aab63b..aba82c6 100644 --- a/src/tpkg/cli/CommandLine.cpp +++ b/src/rhodium/cli/CommandLine.cpp @@ -4,12 +4,12 @@ * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/cli/CommandLine.hpp" +#include "rhodium/cli/CommandLine.hpp" -#include "tpkg/cli/Commands.hpp" -#include "tpkg/cli/CommandContext.hpp" -#include "tpkg/core/Environment.hpp" -#include "tpkg/core/Logger.hpp" +#include "rhodium/cli/Commands.hpp" +#include "rhodium/cli/CommandContext.hpp" +#include "rhodium/core/Environment.hpp" +#include "rhodium/core/Logger.hpp" #include #include @@ -17,15 +17,15 @@ #include #include -namespace toolkit +namespace rhodium { -#ifndef TPKG_VERSION -#define TPKG_VERSION "0.0.0" +#ifndef RHODIUM_VERSION +#define RHODIUM_VERSION "0.0.0" #endif std::string CmdLine::version() { - return fmt::format("{}-{}-{}-{}", TPKG_VERSION, Environment::buildModeName(), Environment::compilerName(), Environment::hostPlatformName()); + return fmt::format("{}-{}-{}-{}", RHODIUM_VERSION, Environment::buildModeName(), Environment::compilerName(), Environment::hostPlatformName()); } std::filesystem::path CmdLine::root(const std::string &value) @@ -40,29 +40,29 @@ namespace toolkit int CmdLine::run(int argc, char **argv) { - CLI::App app{"Toolkit C/C++ dependency manager"}; + CLI::App app{"Rhodium C/C++ dependency manager"}; app.set_version_flag("--version", CmdLine::version()); CommandContext context; - app.add_option("--root", context.rootOption, "Workspace root containing tpkg.lua") + app.add_option("--root", context.rootOption, "Workspace root containing rhodium.lua (or legacy tpkg.lua)") ->capture_default_str(); #ifndef NDEBUG - auto *doctor = app.add_subcommand("doctor", "Check the local Toolkit Package Manager runtime"); + auto *doctor = app.add_subcommand("doctor", "Check the local Rhodium runtime"); doctor->add_flag("--sdk", context.doctorSdk, "Show detailed SDK/toolchain diagnostics"); doctor->callback([&] { context.exitCode = Commands::doctor(root(context.rootOption), context.doctorSdk); }); - app.add_subcommand("load", "Load tpkg.lua and validate the dependency DSL")->callback([&] + app.add_subcommand("load", "Load rhodium.lua (or legacy tpkg.lua) and validate the dependency DSL")->callback([&] { context.exitCode = Commands::load(root(context.rootOption)); }); - app.add_subcommand("dump-model", "Load tpkg.lua and print the dependency model JSON")->callback([&] + app.add_subcommand("dump-model", "Load rhodium.lua (or legacy tpkg.lua) and print the dependency model JSON")->callback([&] { context.exitCode = Commands::dumpModel(root(context.rootOption)); }); #endif - app.add_subcommand("deps", "Print dependencies declared in tpkg.lua")->callback([&] + app.add_subcommand("deps", "Print dependencies declared in rhodium.lua (or legacy tpkg.lua)")->callback([&] { context.exitCode = Commands::deps(root(context.rootOption)); }); auto *generate = app.add_subcommand("generate", "Generate CMake dependency integration files"); generate->add_option("--toolchain", context.generateToolchain, "Preferred local toolchain profile id"); generate->add_option("--config", context.generateConfig, "Build config: debug or release"); - generate->add_option("--output", context.generateOutputDir, "Output directory for generated CMake files")->default_val(".tpkg/generated/cmake"); + generate->add_option("--output", context.generateOutputDir, "Output directory for generated CMake files (default: active state directory/generated/cmake)"); generate->add_option("--override", context.commandOverrides, "Override dependency source: name=path"); generate->callback([&] { context.exitCode = Commands::generate(root(context.rootOption), context.generateToolchain, context.generateConfig, context.generateOutputDir.empty() ? std::filesystem::path{} : std::filesystem::path(context.generateOutputDir), context.commandOverrides); }); @@ -106,11 +106,11 @@ namespace toolkit auto *tree = app.add_subcommand("tree", "Display dependency tree"); tree->callback([&] { context.exitCode = Commands::tree(root(context.rootOption)); }); - auto *clean = app.add_subcommand("clean", "Clean tpkg dependency cache and generated integration files"); + auto *clean = app.add_subcommand("clean", "Clean rhodium dependency cache and generated integration files"); clean->add_option("package", context.cleanPackage, "Only clean one dependency")->required(false); - clean->add_flag("--all", context.cleanAll, "Remove the whole .tpkg directory"); - clean->add_flag("--artifacts", context.cleanArtifacts, "Also remove .tpkg/artifacts"); - clean->add_flag("--sources", context.cleanSources, "Also remove .tpkg/packages source cache"); + clean->add_flag("--all", context.cleanAll, "Remove the active .rhodium or legacy .tpkg directory"); + clean->add_flag("--artifacts", context.cleanArtifacts, "Also remove artifacts from the active state directory"); + clean->add_flag("--sources", context.cleanSources, "Also remove the active source cache"); clean->add_flag("--lock", context.cleanLock, "Also remove tpkg.lock.toml"); clean->callback([&] { context.exitCode = Commands::clean(root(context.rootOption), context.cleanAll, context.cleanArtifacts, context.cleanSources, context.cleanLock, context.cleanPackage); }); @@ -132,7 +132,7 @@ namespace toolkit { context.exitCode = Commands::overrideClear(root(context.rootOption)); }); auto *sdk = app.add_subcommand("sdk", "Detect and inspect local SDK/toolchains"); sdk->require_subcommand(1); - sdk->add_subcommand("detect", "Detect SDK/toolchains and write .tpkg/toolchains/host.toml")->callback([&] + sdk->add_subcommand("detect", "Detect SDK/toolchains and write toolchains/host.toml in the active state directory")->callback([&] { context.exitCode = Commands::sdkDetect(root(context.rootOption)); }); auto *sdkList = sdk->add_subcommand("list", "List detected SDK/toolchains"); sdkList->add_flag("--refresh", context.sdkListRefresh, "Refresh detected SDK/toolchains before listing"); @@ -188,7 +188,7 @@ namespace toolkit { context.exitCode = printSdkDoctor(root(context.rootOption)) ? 0 : 1; }); sdk->add_subcommand("dump", "Dump cached SDK/toolchain TOML")->callback([&] { context.exitCode = Commands::sdkDump(root(context.rootOption)); }); - auto *sdkSelect = sdk->add_subcommand("select", "Save preferred local toolchain in .tpkg/local.toml"); + auto *sdkSelect = sdk->add_subcommand("select", "Save preferred local toolchain in the active state directory/local.toml"); sdkSelect->add_option("id", context.sdkSelectToolchain, "Toolchain profile id")->required(); sdkSelect->callback([&] { context.exitCode = Commands::sdkSelect(root(context.rootOption), context.sdkSelectToolchain); }); @@ -212,4 +212,4 @@ namespace toolkit } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/cli/CommandLine.hpp b/src/rhodium/cli/CommandLine.hpp similarity index 91% rename from src/tpkg/cli/CommandLine.hpp rename to src/rhodium/cli/CommandLine.hpp index 14b48ac..2965b4c 100644 --- a/src/tpkg/cli/CommandLine.hpp +++ b/src/rhodium/cli/CommandLine.hpp @@ -9,7 +9,7 @@ #include #include -namespace toolkit +namespace rhodium { class CmdLine { @@ -21,4 +21,4 @@ namespace toolkit static std::filesystem::path root(const std::string &value); }; -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/cli/Commands.cpp b/src/rhodium/cli/Commands.cpp similarity index 88% rename from src/tpkg/cli/Commands.cpp rename to src/rhodium/cli/Commands.cpp index fa62dcd..5e0ea04 100644 --- a/src/tpkg/cli/Commands.cpp +++ b/src/rhodium/cli/Commands.cpp @@ -4,15 +4,17 @@ * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/cli/Commands.hpp" +#include "rhodium/cli/Commands.hpp" -#include "tpkg/config/BuildConfig.hpp" -#include "tpkg/config/DependencyOverrideFile.hpp" -#include "tpkg/config/LockFile.hpp" -#include "tpkg/resolve/DependencyResolver.hpp" -#include "tpkg/script/ManifestLoader.hpp" -#include "tpkg/toolchain/Toolchain.hpp" -#include "tpkg/toolchain/ToolchainRegistry.hpp" +#include "rhodium/core/Path.hpp" + +#include "rhodium/config/BuildConfig.hpp" +#include "rhodium/config/DependencyOverrideFile.hpp" +#include "rhodium/config/LockFile.hpp" +#include "rhodium/resolve/DependencyResolver.hpp" +#include "rhodium/script/ManifestLoader.hpp" +#include "rhodium/toolchain/Toolchain.hpp" +#include "rhodium/toolchain/ToolchainRegistry.hpp" #include #include @@ -21,13 +23,11 @@ #include #include -namespace toolkit +namespace rhodium { - constexpr const char *kManifestName = "tpkg.lua"; - std::filesystem::path CliWorkspace::manifest(const std::filesystem::path &workspaceRoot) { - return workspaceRoot / kManifestName; + return Path::manifest(workspaceRoot); } bool CliWorkspace::load(const std::filesystem::path &workspaceRoot, BuildModel &model, ConsoleDiagnosticSink &diagnostics) @@ -66,8 +66,8 @@ namespace toolkit std::string dependenciesNotRestoredMessage(const std::string &config, const std::string &toolchainId) { return "dependencies are not restored for config=" + config + " toolchain=" + toolchainId + - "\nrun:\n tpkg restore --config " + config + " --toolchain " + toolchainId + - "\nor select a default toolchain:\n tpkg sdk select " + toolchainId; + "\nrun:\n rhodium restore --config " + config + " --toolchain " + toolchainId + + "\nor select a default toolchain:\n rhodium sdk select " + toolchainId; } std::string inferPackageMetadataValue(const LockFile &lockFile, @@ -140,7 +140,7 @@ namespace toolkit } diagnostics.error("toolchain " + profile.id + " is incomplete\nmissing: " + (profile.missing.empty() ? std::string("-") : missing.str()) + - "\nrun:\n tpkg sdk doctor"); + "\nrun:\n rhodium sdk doctor"); return false; } @@ -156,7 +156,7 @@ namespace toolkit if (found == profiles.end()) { diagnostics.error("requested toolchain was not found: " + toolchainId + - "\nrun:\n tpkg sdk list --refresh"); + "\nrun:\n rhodium sdk list --refresh"); return false; } selectedToolchain = *found; @@ -176,10 +176,10 @@ namespace toolkit } if (config.preferredToolchain.empty()) { - diagnostics.error("no toolchain selected; pass --toolchain or run:\n tpkg sdk select "); + diagnostics.error("no toolchain selected; pass --toolchain or run:\n rhodium sdk select "); return {}; } return config.preferredToolchain; } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/cli/Commands.hpp b/src/rhodium/cli/Commands.hpp similarity index 94% rename from src/tpkg/cli/Commands.hpp rename to src/rhodium/cli/Commands.hpp index 7a0a227..7f79b12 100644 --- a/src/tpkg/cli/Commands.hpp +++ b/src/rhodium/cli/Commands.hpp @@ -6,19 +6,19 @@ #pragma once -#include "tpkg/cli/CommandContext.hpp" -#include "tpkg/config/DependencyOverrideFile.hpp" -#include "tpkg/config/LockFile.hpp" -#include "tpkg/diagnostics/ConsoleDiagnosticSink.hpp" -#include "tpkg/diagnostics/DiagnosticSink.hpp" -#include "tpkg/model/BuildModel.hpp" -#include "tpkg/toolchain/Toolchain.hpp" +#include "rhodium/cli/CommandContext.hpp" +#include "rhodium/config/DependencyOverrideFile.hpp" +#include "rhodium/config/LockFile.hpp" +#include "rhodium/diagnostics/ConsoleDiagnosticSink.hpp" +#include "rhodium/diagnostics/DiagnosticSink.hpp" +#include "rhodium/model/BuildModel.hpp" +#include "rhodium/toolchain/Toolchain.hpp" #include #include #include -namespace toolkit +namespace rhodium { class CliWorkspace { diff --git a/src/tpkg/cli/DepsCommand.cpp b/src/rhodium/cli/DepsCommand.cpp similarity index 89% rename from src/tpkg/cli/DepsCommand.cpp rename to src/rhodium/cli/DepsCommand.cpp index ee5c9f1..3981982 100644 --- a/src/tpkg/cli/DepsCommand.cpp +++ b/src/rhodium/cli/DepsCommand.cpp @@ -4,14 +4,14 @@ * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/cli/Commands.hpp" +#include "rhodium/cli/Commands.hpp" -#include "tpkg/core/Logger.hpp" +#include "rhodium/core/Logger.hpp" #include #include -namespace toolkit +namespace rhodium { int Commands::deps(const std::filesystem::path &workspaceRoot) { @@ -40,4 +40,4 @@ namespace toolkit } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/cli/DoctorCommand.cpp b/src/rhodium/cli/DoctorCommand.cpp similarity index 84% rename from src/tpkg/cli/DoctorCommand.cpp rename to src/rhodium/cli/DoctorCommand.cpp index c62f4ab..d5364c4 100644 --- a/src/tpkg/cli/DoctorCommand.cpp +++ b/src/rhodium/cli/DoctorCommand.cpp @@ -4,14 +4,16 @@ * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/cli/Commands.hpp" +#include "rhodium/core/Path.hpp" -#include "tpkg/core/Environment.hpp" -#include "tpkg/core/FileSystem.hpp" -#include "tpkg/core/Logger.hpp" -#include "tpkg/core/Process.hpp" -#include "tpkg/toolchain/ToolchainDetector.hpp" -#include "tpkg/toolchain/ToolchainRegistry.hpp" +#include "rhodium/cli/Commands.hpp" + +#include "rhodium/core/Environment.hpp" +#include "rhodium/core/FileSystem.hpp" +#include "rhodium/core/Logger.hpp" +#include "rhodium/core/Process.hpp" +#include "rhodium/toolchain/ToolchainDetector.hpp" +#include "rhodium/toolchain/ToolchainRegistry.hpp" #include #include @@ -23,7 +25,7 @@ #include #include -namespace toolkit +namespace rhodium { class DoctorCli final { @@ -79,17 +81,17 @@ namespace toolkit ConsoleDiagnosticSink diagnostics; bool ok = true; - LogInfo("Toolkit Package Manager doctor"); + LogInfo("Rhodium doctor"); LogInfo("workspace: {}", workspaceRoot.string()); const bool hasManifest = File::exists(CliWorkspace::manifest(workspaceRoot)); - LogInfo("tpkg.lua: {}", hasManifest ? "found" : "missing"); + LogInfo("{}: {}", CliWorkspace::manifest(workspaceRoot).filename().string(), hasManifest ? "found" : "missing"); ok &= hasManifest; std::string error; - const bool tkbWritable = File::mkdir(workspaceRoot / ".tpkg", &error); - LogInfo(".tpkg: {}", tkbWritable ? "writable" : ("error: " + error)); - ok &= tkbWritable; + const bool rhodiumWritable = File::mkdir(Path::stateRoot(workspaceRoot), &error); + LogInfo("{}: {}", Path::stateRoot(workspaceRoot).filename().string(), rhodiumWritable ? "writable" : ("error: " + error)); + ok &= rhodiumWritable; LogInfo("core tools:"); ok &= DoctorCli::checkTool("git", @@ -129,4 +131,4 @@ namespace toolkit return ok ? 0 : 1; } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/cli/DumpModelCommand.cpp b/src/rhodium/cli/DumpModelCommand.cpp similarity index 76% rename from src/tpkg/cli/DumpModelCommand.cpp rename to src/rhodium/cli/DumpModelCommand.cpp index 679244f..cda11a5 100644 --- a/src/tpkg/cli/DumpModelCommand.cpp +++ b/src/rhodium/cli/DumpModelCommand.cpp @@ -4,14 +4,14 @@ * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/cli/Commands.hpp" +#include "rhodium/cli/Commands.hpp" -#include "tpkg/config/JsonModelWriter.hpp" -#include "tpkg/core/Logger.hpp" +#include "rhodium/config/JsonModelWriter.hpp" +#include "rhodium/core/Logger.hpp" #include -namespace toolkit +namespace rhodium { int Commands::dumpModel(const std::filesystem::path &workspaceRoot) { @@ -25,4 +25,4 @@ namespace toolkit return 0; } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/cli/GenerateCommand.cpp b/src/rhodium/cli/GenerateCommand.cpp similarity index 85% rename from src/tpkg/cli/GenerateCommand.cpp rename to src/rhodium/cli/GenerateCommand.cpp index a3e7870..536ca8c 100644 --- a/src/tpkg/cli/GenerateCommand.cpp +++ b/src/rhodium/cli/GenerateCommand.cpp @@ -1,9 +1,11 @@ -#include "tpkg/cli/Commands.hpp" +#include "rhodium/core/Path.hpp" -#include "tpkg/cmake/CMakeDependencyExporter.hpp" -#include "tpkg/config/LockFile.hpp" -#include "tpkg/core/FileSystem.hpp" -#include "tpkg/resolve/PackageArtifactResolver.hpp" +#include "rhodium/cli/Commands.hpp" + +#include "rhodium/cmake/CMakeDependencyExporter.hpp" +#include "rhodium/config/LockFile.hpp" +#include "rhodium/core/FileSystem.hpp" +#include "rhodium/resolve/PackageArtifactResolver.hpp" #include @@ -11,7 +13,7 @@ #include #include -namespace toolkit +namespace rhodium { bool loadRestoredPackagesForCommand(const std::filesystem::path &workspaceRoot, const std::string &toolchainId, @@ -105,33 +107,35 @@ namespace toolkit return 1; } const auto resolvedOutputDir = outputDir.empty() - ? workspaceRoot / ".tpkg" / "generated" / "cmake" + ? Path::stateRoot(workspaceRoot) / "generated" / "cmake" : (outputDir.is_relative() ? workspaceRoot / outputDir : outputDir); if (!CMakeDependency::writeFiles(packages, resolvedOutputDir, metadata, diagnostics)) { return 1; } diagnostics.info("wrote CMake dependency files under " + resolvedOutputDir.string()); - diagnostics.info("CMake consumers can use: find_package(tpkg CONFIG REQUIRED)"); + diagnostics.info("CMake consumers can use: find_package(rhodium CONFIG REQUIRED)"); diagnostics.info("add this path to CMAKE_PREFIX_PATH: " + resolvedOutputDir.string()); + const auto presetPrefix = std::string("${sourceDir}/") + + Path::stateRoot(workspaceRoot).filename().generic_string() + "/generated/cmake"; if (model.workspace.generateCMakeUserPresets) { const auto presetsPath = workspaceRoot / "CMakeUserPresets.json"; if (File::exists(presetsPath)) { diagnostics.info("CMakeUserPresets.json already exists; not overwriting it"); - diagnostics.info("add this cache variable to an existing preset if desired: CMAKE_PREFIX_PATH=${sourceDir}/.tpkg/generated/cmake"); + diagnostics.info("add this cache variable to an existing preset if desired: CMAKE_PREFIX_PATH=" + presetPrefix); } else { nlohmann::json preset; preset["version"] = 2; preset["configurePresets"] = nlohmann::json::array({{ - {"name", "tpkg-deps"}, - {"displayName", "tpkg dependency prefix"}, + {"name", "rhodium-deps"}, + {"displayName", "rhodium dependency prefix"}, {"hidden", true}, - {"cacheVariables", {{"CMAKE_PREFIX_PATH", "${sourceDir}/.tpkg/generated/cmake"}}}, + {"cacheVariables", {{"CMAKE_PREFIX_PATH", presetPrefix}}}, }}); std::string error; if (!File::write(presetsPath, preset.dump(2) + "\n", &error)) @@ -139,11 +143,11 @@ namespace toolkit diagnostics.error("failed to write CMakeUserPresets.json: " + error); return 1; } - diagnostics.info("wrote optional CMakeUserPresets.json with hidden preset 'tpkg-deps'"); + diagnostics.info("wrote optional CMakeUserPresets.json with hidden preset 'rhodium-deps'"); } } return 0; } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/cli/LoadCommand.cpp b/src/rhodium/cli/LoadCommand.cpp similarity index 87% rename from src/tpkg/cli/LoadCommand.cpp rename to src/rhodium/cli/LoadCommand.cpp index 8371e5f..da21652 100644 --- a/src/tpkg/cli/LoadCommand.cpp +++ b/src/rhodium/cli/LoadCommand.cpp @@ -4,11 +4,11 @@ * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/cli/Commands.hpp" +#include "rhodium/cli/Commands.hpp" #include -namespace toolkit +namespace rhodium { int Commands::load(const std::filesystem::path &workspaceRoot) { @@ -22,4 +22,4 @@ namespace toolkit return 0; } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/cli/OverrideCommand.cpp b/src/rhodium/cli/OverrideCommand.cpp similarity index 92% rename from src/tpkg/cli/OverrideCommand.cpp rename to src/rhodium/cli/OverrideCommand.cpp index a8bc647..a150fb6 100644 --- a/src/tpkg/cli/OverrideCommand.cpp +++ b/src/rhodium/cli/OverrideCommand.cpp @@ -1,14 +1,14 @@ -#include "tpkg/cli/Commands.hpp" +#include "rhodium/cli/Commands.hpp" -#include "tpkg/config/DependencyOverrideFile.hpp" -#include "tpkg/core/FileSystem.hpp" -#include "tpkg/core/Logger.hpp" -#include "tpkg/core/Path.hpp" +#include "rhodium/config/DependencyOverrideFile.hpp" +#include "rhodium/core/FileSystem.hpp" +#include "rhodium/core/Logger.hpp" +#include "rhodium/core/Path.hpp" #include #include -namespace toolkit +namespace rhodium { int Commands::overrideList(const std::filesystem::path &workspaceRoot) { @@ -98,4 +98,4 @@ namespace toolkit return 0; } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/cli/PackagesCommand.cpp b/src/rhodium/cli/PackagesCommand.cpp similarity index 89% rename from src/tpkg/cli/PackagesCommand.cpp rename to src/rhodium/cli/PackagesCommand.cpp index 513a0de..5b46c66 100644 --- a/src/tpkg/cli/PackagesCommand.cpp +++ b/src/rhodium/cli/PackagesCommand.cpp @@ -1,21 +1,21 @@ -#include "tpkg/cli/Commands.hpp" +#include "rhodium/cli/Commands.hpp" -#include "tpkg/config/LockFile.hpp" -#include "tpkg/core/FileSystem.hpp" -#include "tpkg/core/Logger.hpp" -#include "tpkg/core/Path.hpp" -#include "tpkg/diagnostics/DiagnosticSink.hpp" -#include "tpkg/model/DependencyDesc.hpp" -#include "tpkg/package/ArtifactGc.hpp" -#include "tpkg/package/PackageBuilderUtil.hpp" -#include "tpkg/package/PackageCache.hpp" -#include "tpkg/package/PackageArtifactStore.hpp" +#include "rhodium/config/LockFile.hpp" +#include "rhodium/core/FileSystem.hpp" +#include "rhodium/core/Logger.hpp" +#include "rhodium/core/Path.hpp" +#include "rhodium/diagnostics/DiagnosticSink.hpp" +#include "rhodium/model/DependencyDesc.hpp" +#include "rhodium/package/ArtifactGc.hpp" +#include "rhodium/package/PackageBuilderUtil.hpp" +#include "rhodium/package/PackageCache.hpp" +#include "rhodium/package/PackageArtifactStore.hpp" #include #include #include -namespace toolkit +namespace rhodium { class NullDiagnosticSink final : public DiagnosticSink { @@ -101,7 +101,7 @@ namespace toolkit dependency.name = package.name; dependency.source = package.source; dependency.ref = package.ref; - PackageCache cache(workspaceRoot / ".tpkg" / "packages"); + PackageCache cache(Path::stateRoot(workspaceRoot) / "packages"); cachePath = cache.source(dependency); } if (package.sourceType == "local" && cachePath.is_relative()) @@ -111,9 +111,9 @@ namespace toolkit if (package.sourceType == "archive") { const auto key = package.sha256.empty() ? package.resolvedArchiveHash : package.sha256; - cachePath = workspaceRoot / ".tpkg" / "packages" / "_archives" / Path::sanitizePackagePath(package.name) / Path::sanitizePackagePath(key) / "src"; + cachePath = Path::stateRoot(workspaceRoot) / "packages" / "_archives" / Path::sanitizePackagePath(package.name) / Path::sanitizePackagePath(key) / "src"; } - const auto artifactPath = workspaceRoot / ".tpkg" / "artifacts" / package.artifactId; + const auto artifactPath = Path::stateRoot(workspaceRoot) / "artifacts" / package.artifactId; const auto status = packageStatus(artifactPath); LogInfo("{} source={} ref={} commit={} build={} cache={} artifact={} status={}", package.name, package.source, @@ -207,4 +207,4 @@ namespace toolkit return 0; } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/cli/RestoreCommand.cpp b/src/rhodium/cli/RestoreCommand.cpp similarity index 95% rename from src/tpkg/cli/RestoreCommand.cpp rename to src/rhodium/cli/RestoreCommand.cpp index a4c8889..0e30782 100644 --- a/src/tpkg/cli/RestoreCommand.cpp +++ b/src/rhodium/cli/RestoreCommand.cpp @@ -4,12 +4,12 @@ * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/cli/Commands.hpp" +#include "rhodium/cli/Commands.hpp" -#include "tpkg/config/LockFile.hpp" -#include "tpkg/package/GitFetcher.hpp" -#include "tpkg/package/PackageCache.hpp" -#include "tpkg/resolve/DependencyResolver.hpp" +#include "rhodium/config/LockFile.hpp" +#include "rhodium/package/GitFetcher.hpp" +#include "rhodium/package/PackageCache.hpp" +#include "rhodium/resolve/DependencyResolver.hpp" #include @@ -18,7 +18,7 @@ #include #include -namespace toolkit +namespace rhodium { class RestoreCli final { @@ -138,4 +138,4 @@ namespace toolkit return 0; } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/cli/SdkCommand.cpp b/src/rhodium/cli/SdkCommand.cpp similarity index 98% rename from src/tpkg/cli/SdkCommand.cpp rename to src/rhodium/cli/SdkCommand.cpp index 8b04aa1..6181216 100644 --- a/src/tpkg/cli/SdkCommand.cpp +++ b/src/rhodium/cli/SdkCommand.cpp @@ -1,12 +1,12 @@ -#include "tpkg/cli/Commands.hpp" -#include "tpkg/cli/CommandContext.hpp" +#include "rhodium/cli/Commands.hpp" +#include "rhodium/cli/CommandContext.hpp" -#include "tpkg/core/FileSystem.hpp" -#include "tpkg/core/Logger.hpp" -#include "tpkg/core/Process.hpp" -#include "tpkg/core/StringUtil.hpp" -#include "tpkg/toolchain/ToolchainDetector.hpp" -#include "tpkg/toolchain/ToolchainRegistry.hpp" +#include "rhodium/core/FileSystem.hpp" +#include "rhodium/core/Logger.hpp" +#include "rhodium/core/Process.hpp" +#include "rhodium/core/StringUtil.hpp" +#include "rhodium/toolchain/ToolchainDetector.hpp" +#include "rhodium/toolchain/ToolchainRegistry.hpp" #include #include @@ -20,7 +20,7 @@ #include #include -namespace toolkit +namespace rhodium { class SdkCli final { @@ -206,7 +206,7 @@ namespace toolkit } const auto stamp = std::chrono::steady_clock::now().time_since_epoch().count(); - const auto dir = std::filesystem::temp_directory_path() / ("tkb-sdk-probe-" + std::to_string(stamp)); + const auto dir = std::filesystem::temp_directory_path() / ("rhodium-sdk-probe-" + std::to_string(stamp)); const auto source = dir / "test.cpp"; std::string error; if (!File::write(source, "#include \nint main(){std::cout << \"ok\\n\"; return 0;}\n", &error)) @@ -263,7 +263,7 @@ namespace toolkit } const auto stamp = std::chrono::steady_clock::now().time_since_epoch().count(); - const auto dir = std::filesystem::temp_directory_path() / ("tkb-android-sdk-probe-" + std::to_string(stamp)); + const auto dir = std::filesystem::temp_directory_path() / ("rhodium-android-sdk-probe-" + std::to_string(stamp)); const auto source = dir / "test.cpp"; const auto object = dir / "test.o"; std::string error; @@ -486,7 +486,7 @@ namespace toolkit if (SdkCli::hasAndroidSignal()) { LogInfo("Android SDK found, but Android NDK was not found or no Android toolchain profile is cached."); - LogInfo("run: tpkg sdk list --refresh"); + LogInfo("run: rhodium sdk list --refresh"); } } return ok; @@ -555,7 +555,7 @@ namespace toolkit const auto profiles = unwrapToolchainProfiles(loadedProfiles); if (!refresh && !SdkCli::hasAndroidProfile(profiles) && SdkCli::hasAndroidSignal()) { - diagnostics.warning("Android SDK appears to be installed but no android toolchain is cached.\nrun:\n tpkg sdk list --refresh\nor:\n tpkg sdk detect"); + diagnostics.warning("Android SDK appears to be installed but no android toolchain is cached.\nrun:\n rhodium sdk list --refresh\nor:\n rhodium sdk detect"); } std::size_t idWidth = std::string("id").size(); std::size_t platformWidth = std::string("platform").size(); @@ -825,7 +825,7 @@ namespace toolkit if (found == profiles.end()) { diagnostics.error("requested toolchain was not found: " + toolchainId + - "\nrun:\n tpkg sdk list --refresh"); + "\nrun:\n rhodium sdk list --refresh"); return 1; } @@ -860,4 +860,4 @@ namespace toolkit return 0; } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/cli/TreeCommand.cpp b/src/rhodium/cli/TreeCommand.cpp similarity index 95% rename from src/tpkg/cli/TreeCommand.cpp rename to src/rhodium/cli/TreeCommand.cpp index b0d2788..9664efa 100644 --- a/src/tpkg/cli/TreeCommand.cpp +++ b/src/rhodium/cli/TreeCommand.cpp @@ -3,10 +3,10 @@ * @LastEditors: cubevlmu khfahqp@gmail.com * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/cli/Commands.hpp" +#include "rhodium/cli/Commands.hpp" -#include "tpkg/config/LockFile.hpp" -#include "tpkg/core/Logger.hpp" +#include "rhodium/config/LockFile.hpp" +#include "rhodium/core/Logger.hpp" #include #include @@ -15,7 +15,7 @@ #include #include -namespace toolkit +namespace rhodium { int Commands::tree(const std::filesystem::path &workspaceRoot) { @@ -93,4 +93,4 @@ namespace toolkit } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/cli/UpdateCommand.cpp b/src/rhodium/cli/UpdateCommand.cpp similarity index 87% rename from src/tpkg/cli/UpdateCommand.cpp rename to src/rhodium/cli/UpdateCommand.cpp index 851fd44..3ae9b2f 100644 --- a/src/tpkg/cli/UpdateCommand.cpp +++ b/src/rhodium/cli/UpdateCommand.cpp @@ -4,15 +4,15 @@ * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/cli/Commands.hpp" +#include "rhodium/cli/Commands.hpp" -#include "tpkg/diagnostics/ConsoleDiagnosticSink.hpp" +#include "rhodium/diagnostics/ConsoleDiagnosticSink.hpp" #include #include #include -namespace toolkit +namespace rhodium { int Commands::update(const std::filesystem::path &workspaceRoot, const std::string &packageName, @@ -30,4 +30,4 @@ namespace toolkit return restore(workspaceRoot, preferredToolchain, configOption, cliOverrides, false, {}, false, false, false, packageName, updateAll); } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/cmake/CMakeDependencyExporter.cpp b/src/rhodium/cmake/CMakeDependencyExporter.cpp similarity index 70% rename from src/tpkg/cmake/CMakeDependencyExporter.cpp rename to src/rhodium/cmake/CMakeDependencyExporter.cpp index 8ecd32b..5911c4c 100644 --- a/src/tpkg/cmake/CMakeDependencyExporter.cpp +++ b/src/rhodium/cmake/CMakeDependencyExporter.cpp @@ -1,7 +1,7 @@ -#include "tpkg/cmake/CMakeDependencyExporter.hpp" +#include "rhodium/cmake/CMakeDependencyExporter.hpp" -#include "tpkg/core/FileSystem.hpp" -#include "tpkg/diagnostics/DiagnosticSink.hpp" +#include "rhodium/core/FileSystem.hpp" +#include "rhodium/diagnostics/DiagnosticSink.hpp" #include #include @@ -9,7 +9,7 @@ #include #include -namespace toolkit +namespace rhodium { namespace { @@ -48,7 +48,7 @@ namespace toolkit result.push_back('_'); } } - return "tpkg::" + (result.empty() ? std::string("package") : result); + return "rhodium::" + (result.empty() ? std::string("package") : result); } void writeStringProperty(std::ostringstream &stream, @@ -185,72 +185,72 @@ namespace toolkit void writeAbiChecks(std::ostringstream &config) { config << R"cmake( -if(TPKG_COMPILER_KIND MATCHES "^(msvc|clang-cl)$" OR TPKG_TOOLCHAIN_ID MATCHES "msvc|clang-cl") +if(RHODIUM_COMPILER_KIND MATCHES "^(msvc|clang-cl)$" OR RHODIUM_TOOLCHAIN_ID MATCHES "msvc|clang-cl") if(NOT (MSVC OR CMAKE_CXX_COMPILER_ID MATCHES "MSVC|Clang" OR CMAKE_C_COMPILER_ID MATCHES "MSVC|Clang")) - message(WARNING "tpkg artifacts were restored with an MSVC ABI toolchain (${TPKG_TOOLCHAIN_ID}), but CMake may not be using a compatible compiler. CMAKE_CXX_COMPILER_ID=${CMAKE_CXX_COMPILER_ID}") + message(WARNING "rhodium artifacts were restored with an MSVC ABI toolchain (${RHODIUM_TOOLCHAIN_ID}), but CMake may not be using a compatible compiler. CMAKE_CXX_COMPILER_ID=${CMAKE_CXX_COMPILER_ID}") endif() endif() -if(TPKG_COMPILER_KIND MATCHES "^(gcc|clang)$" AND TPKG_TOOLCHAIN_ID MATCHES "mingw") +if(RHODIUM_COMPILER_KIND MATCHES "^(gcc|clang)$" AND RHODIUM_TOOLCHAIN_ID MATCHES "mingw") if(MSVC OR CMAKE_CXX_COMPILER_ID MATCHES "MSVC") - message(FATAL_ERROR "tpkg artifacts were restored with a MinGW toolchain, but this CMake project is using MSVC") + message(FATAL_ERROR "rhodium artifacts were restored with a MinGW toolchain, but this CMake project is using MSVC") endif() -elseif(TPKG_TOOLCHAIN_ID MATCHES "mingw") +elseif(RHODIUM_TOOLCHAIN_ID MATCHES "mingw") if(MSVC OR CMAKE_CXX_COMPILER_ID MATCHES "MSVC") - message(FATAL_ERROR "tpkg artifacts were restored with a MinGW toolchain, but this CMake project is using MSVC") + message(FATAL_ERROR "rhodium artifacts were restored with a MinGW toolchain, but this CMake project is using MSVC") endif() endif() -if(TPKG_CONFIG STREQUAL "debug") +if(RHODIUM_CONFIG STREQUAL "debug") if(DEFINED CMAKE_BUILD_TYPE) if(CMAKE_BUILD_TYPE AND NOT CMAKE_BUILD_TYPE STREQUAL "Debug") - message(FATAL_ERROR "tpkg debug artifacts cannot be used with CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}") + message(FATAL_ERROR "rhodium debug artifacts cannot be used with CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}") endif() endif() if(DEFINED CMAKE_CONFIGURATION_TYPES) - list(FIND CMAKE_CONFIGURATION_TYPES Debug _tpkg_debug_config_index) - if(_tpkg_debug_config_index EQUAL -1) - message(FATAL_ERROR "tpkg debug artifacts require a Debug configuration in this multi-config CMake project") + list(FIND CMAKE_CONFIGURATION_TYPES Debug _rhodium_debug_config_index) + if(_rhodium_debug_config_index EQUAL -1) + message(FATAL_ERROR "rhodium debug artifacts require a Debug configuration in this multi-config CMake project") endif() endif() -elseif(TPKG_CONFIG STREQUAL "release") +elseif(RHODIUM_CONFIG STREQUAL "release") if(DEFINED CMAKE_BUILD_TYPE) if(CMAKE_BUILD_TYPE STREQUAL "Debug") - message(FATAL_ERROR "tpkg release artifacts cannot be used with CMAKE_BUILD_TYPE=Debug") + message(FATAL_ERROR "rhodium release artifacts cannot be used with CMAKE_BUILD_TYPE=Debug") endif() endif() if(DEFINED CMAKE_CONFIGURATION_TYPES) - list(LENGTH CMAKE_CONFIGURATION_TYPES _tpkg_config_count) - if(_tpkg_config_count EQUAL 1) - list(GET CMAKE_CONFIGURATION_TYPES 0 _tpkg_only_config) - if(_tpkg_only_config STREQUAL "Debug") - message(FATAL_ERROR "tpkg release artifacts cannot be used with a Debug-only multi-config CMake project") + list(LENGTH CMAKE_CONFIGURATION_TYPES _rhodium_config_count) + if(_rhodium_config_count EQUAL 1) + list(GET CMAKE_CONFIGURATION_TYPES 0 _rhodium_only_config) + if(_rhodium_only_config STREQUAL "Debug") + message(FATAL_ERROR "rhodium release artifacts cannot be used with a Debug-only multi-config CMake project") endif() endif() endif() endif() -if(TPKG_ARCH) - string(TOLOWER "${CMAKE_SYSTEM_PROCESSOR}" _tpkg_consumer_arch) - if(TPKG_ARCH STREQUAL "x64" AND _tpkg_consumer_arch AND NOT _tpkg_consumer_arch MATCHES "x86_64|amd64") - message(FATAL_ERROR "tpkg artifact arch is x64 but CMake reports ${CMAKE_SYSTEM_PROCESSOR}") +if(RHODIUM_ARCH) + string(TOLOWER "${CMAKE_SYSTEM_PROCESSOR}" _rhodium_consumer_arch) + if(RHODIUM_ARCH STREQUAL "x64" AND _rhodium_consumer_arch AND NOT _rhodium_consumer_arch MATCHES "x86_64|amd64") + message(FATAL_ERROR "rhodium artifact arch is x64 but CMake reports ${CMAKE_SYSTEM_PROCESSOR}") endif() - if(TPKG_ARCH STREQUAL "x86" AND _tpkg_consumer_arch AND NOT _tpkg_consumer_arch MATCHES "x86|i.86") - message(FATAL_ERROR "tpkg artifact arch is x86 but CMake reports ${CMAKE_SYSTEM_PROCESSOR}") + if(RHODIUM_ARCH STREQUAL "x86" AND _rhodium_consumer_arch AND NOT _rhodium_consumer_arch MATCHES "x86|i.86") + message(FATAL_ERROR "rhodium artifact arch is x86 but CMake reports ${CMAKE_SYSTEM_PROCESSOR}") endif() - if(TPKG_ARCH STREQUAL "arm64" AND _tpkg_consumer_arch AND NOT _tpkg_consumer_arch MATCHES "aarch64|arm64") - message(FATAL_ERROR "tpkg artifact arch is arm64 but CMake reports ${CMAKE_SYSTEM_PROCESSOR}") + if(RHODIUM_ARCH STREQUAL "arm64" AND _rhodium_consumer_arch AND NOT _rhodium_consumer_arch MATCHES "aarch64|arm64") + message(FATAL_ERROR "rhodium artifact arch is arm64 but CMake reports ${CMAKE_SYSTEM_PROCESSOR}") endif() endif() -if(MSVC AND TPKG_RUNTIME MATCHES "static|dynamic") +if(MSVC AND RHODIUM_RUNTIME MATCHES "static|dynamic") if(DEFINED CMAKE_MSVC_RUNTIME_LIBRARY) if(CMAKE_MSVC_RUNTIME_LIBRARY) - if(TPKG_RUNTIME STREQUAL "static" AND CMAKE_MSVC_RUNTIME_LIBRARY MATCHES "DLL") - message(FATAL_ERROR "tpkg artifacts use static MSVC runtime, but CMAKE_MSVC_RUNTIME_LIBRARY=${CMAKE_MSVC_RUNTIME_LIBRARY}") + if(RHODIUM_RUNTIME STREQUAL "static" AND CMAKE_MSVC_RUNTIME_LIBRARY MATCHES "DLL") + message(FATAL_ERROR "rhodium artifacts use static MSVC runtime, but CMAKE_MSVC_RUNTIME_LIBRARY=${CMAKE_MSVC_RUNTIME_LIBRARY}") endif() - if(TPKG_RUNTIME STREQUAL "dynamic" AND NOT CMAKE_MSVC_RUNTIME_LIBRARY MATCHES "DLL") - message(FATAL_ERROR "tpkg artifacts use dynamic MSVC runtime, but CMAKE_MSVC_RUNTIME_LIBRARY=${CMAKE_MSVC_RUNTIME_LIBRARY}") + if(RHODIUM_RUNTIME STREQUAL "dynamic" AND NOT CMAKE_MSVC_RUNTIME_LIBRARY MATCHES "DLL") + message(FATAL_ERROR "rhodium artifacts use dynamic MSVC runtime, but CMAKE_MSVC_RUNTIME_LIBRARY=${CMAKE_MSVC_RUNTIME_LIBRARY}") endif() endif() endif() @@ -273,7 +273,7 @@ endif() } std::ostringstream targets; - targets << "# Generated by Toolkit Package Manager. Do not edit.\n\n"; + targets << "# Generated by Rhodium. Do not edit.\n\n"; targets << "include_guard(GLOBAL)\n\n"; for (const auto &package : packages) { @@ -299,26 +299,26 @@ endif() writeStringProperty(targets, target, "INTERFACE_LINK_LIBRARIES", linkItems); } - if (!File::write(outputDir / "tpkgTargets.cmake", targets.str(), &error)) + if (!File::write(outputDir / "rhodiumTargets.cmake", targets.str(), &error)) { diagnostics.error("failed to write CMake dependency targets: " + error); return false; } std::ostringstream config; - config << "# Generated by Toolkit Package Manager. Do not edit.\n\n"; + config << "# Generated by Rhodium. Do not edit.\n\n"; config << "include_guard(GLOBAL)\n"; - config << cmakeSet("TPKG_TOOLCHAIN_ID", metadata.toolchainId); - config << cmakeSet("TPKG_COMPILER_KIND", metadata.compilerKind); - config << cmakeSet("TPKG_CONFIG", metadata.config); - config << cmakeSet("TPKG_ARCH", metadata.arch); - config << cmakeSet("TPKG_RUNTIME", metadata.runtime); - config << cmakeSet("TPKG_LINKAGE", metadata.linkage); + config << cmakeSet("RHODIUM_TOOLCHAIN_ID", metadata.toolchainId); + config << cmakeSet("RHODIUM_COMPILER_KIND", metadata.compilerKind); + config << cmakeSet("RHODIUM_CONFIG", metadata.config); + config << cmakeSet("RHODIUM_ARCH", metadata.arch); + config << cmakeSet("RHODIUM_RUNTIME", metadata.runtime); + config << cmakeSet("RHODIUM_LINKAGE", metadata.linkage); writeAbiChecks(config); - config << "include(\"${CMAKE_CURRENT_LIST_DIR}/tpkgTargets.cmake\")\n"; - if (!File::write(outputDir / "tpkgConfig.cmake", config.str(), &error)) + config << "include(\"${CMAKE_CURRENT_LIST_DIR}/rhodiumTargets.cmake\")\n"; + if (!File::write(outputDir / "rhodiumConfig.cmake", config.str(), &error)) { - diagnostics.error("failed to write tpkgConfig.cmake: " + error); + diagnostics.error("failed to write rhodiumConfig.cmake: " + error); return false; } return true; diff --git a/src/tpkg/cmake/CMakeDependencyExporter.hpp b/src/rhodium/cmake/CMakeDependencyExporter.hpp similarity index 92% rename from src/tpkg/cmake/CMakeDependencyExporter.hpp rename to src/rhodium/cmake/CMakeDependencyExporter.hpp index f3c3df3..37a3bd0 100644 --- a/src/tpkg/cmake/CMakeDependencyExporter.hpp +++ b/src/rhodium/cmake/CMakeDependencyExporter.hpp @@ -1,12 +1,12 @@ #pragma once -#include "tpkg/resolve/ResolvedDependencyArtifacts.hpp" +#include "rhodium/resolve/ResolvedDependencyArtifacts.hpp" #include #include #include -namespace toolkit +namespace rhodium { class DiagnosticSink; diff --git a/src/tpkg/common.hpp b/src/rhodium/common.hpp similarity index 95% rename from src/tpkg/common.hpp rename to src/rhodium/common.hpp index 4b976b5..49fc181 100644 --- a/src/tpkg/common.hpp +++ b/src/rhodium/common.hpp @@ -10,7 +10,7 @@ #include #include -namespace toolkit::type +namespace rhodium::type { #ifndef MAX_PATH @@ -175,7 +175,7 @@ namespace toolkit::type } } -namespace toolkit +namespace rhodium { - using namespace toolkit::type; + using namespace rhodium::type; } diff --git a/src/tpkg/config/BuildConfig.cpp b/src/rhodium/config/BuildConfig.cpp similarity index 90% rename from src/tpkg/config/BuildConfig.cpp rename to src/rhodium/config/BuildConfig.cpp index 6750476..66c3b58 100644 --- a/src/tpkg/config/BuildConfig.cpp +++ b/src/rhodium/config/BuildConfig.cpp @@ -4,11 +4,11 @@ * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/config/BuildConfig.hpp" +#include "rhodium/config/BuildConfig.hpp" -#include "tpkg/core/StringUtil.hpp" +#include "rhodium/core/StringUtil.hpp" -namespace toolkit +namespace rhodium { std::string BuildConfig::normalize(const std::string &input, const std::string &fallback) { diff --git a/src/tpkg/config/BuildConfig.hpp b/src/rhodium/config/BuildConfig.hpp similarity index 88% rename from src/tpkg/config/BuildConfig.hpp rename to src/rhodium/config/BuildConfig.hpp index 630de6a..974494b 100644 --- a/src/tpkg/config/BuildConfig.hpp +++ b/src/rhodium/config/BuildConfig.hpp @@ -6,11 +6,11 @@ #pragma once -#include "tpkg/diagnostics/DiagnosticSink.hpp" +#include "rhodium/diagnostics/DiagnosticSink.hpp" #include -namespace toolkit +namespace rhodium { class BuildConfig { diff --git a/src/tpkg/config/DependencyOverrideFile.cpp b/src/rhodium/config/DependencyOverrideFile.cpp similarity index 94% rename from src/tpkg/config/DependencyOverrideFile.cpp rename to src/rhodium/config/DependencyOverrideFile.cpp index 2e1402a..e6b2bea 100644 --- a/src/tpkg/config/DependencyOverrideFile.cpp +++ b/src/rhodium/config/DependencyOverrideFile.cpp @@ -4,16 +4,18 @@ * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/config/DependencyOverrideFile.hpp" +#include "rhodium/core/Path.hpp" -#include "tpkg/core/FileSystem.hpp" -#include "tpkg/diagnostics/DiagnosticSink.hpp" +#include "rhodium/config/DependencyOverrideFile.hpp" + +#include "rhodium/core/FileSystem.hpp" +#include "rhodium/diagnostics/DiagnosticSink.hpp" #include #include #include -namespace toolkit +namespace rhodium { class OverrideData final { @@ -85,7 +87,7 @@ namespace toolkit std::filesystem::path DependencyOverrides::path(const std::filesystem::path &workspaceRoot) { - return workspaceRoot / ".tpkg" / "overrides.toml"; + return Path::stateRoot(workspaceRoot) / "overrides.toml"; } bool DependencyOverrides::read(const std::filesystem::path &workspaceRoot, LocalDependencyOverrides &overrides, DiagnosticSink &diagnostics) @@ -136,7 +138,7 @@ namespace toolkit std::string error; if (!File::mkdir(path(workspaceRoot).parent_path(), &error)) { - diagnostics.error("failed to create .tpkg directory: " + error); + diagnostics.error("failed to create state directory: " + error); return false; } if (!File::write(path(workspaceRoot), stream.str(), &error)) @@ -191,4 +193,4 @@ namespace toolkit return true; } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/config/DependencyOverrideFile.hpp b/src/rhodium/config/DependencyOverrideFile.hpp similarity index 89% rename from src/tpkg/config/DependencyOverrideFile.hpp rename to src/rhodium/config/DependencyOverrideFile.hpp index 90f2e2e..4d0a592 100644 --- a/src/tpkg/config/DependencyOverrideFile.hpp +++ b/src/rhodium/config/DependencyOverrideFile.hpp @@ -6,15 +6,15 @@ #pragma once -#include "tpkg/model/BuildModel.hpp" -#include "tpkg/model/DependencyOverride.hpp" +#include "rhodium/model/BuildModel.hpp" +#include "rhodium/model/DependencyOverride.hpp" #include #include #include #include -namespace toolkit +namespace rhodium { class DiagnosticSink; @@ -37,4 +37,4 @@ namespace toolkit DiagnosticSink &diagnostics); }; -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/config/JsonModelWriter.cpp b/src/rhodium/config/JsonModelWriter.cpp similarity index 97% rename from src/tpkg/config/JsonModelWriter.cpp rename to src/rhodium/config/JsonModelWriter.cpp index 8c2d60c..8abc228 100644 --- a/src/tpkg/config/JsonModelWriter.cpp +++ b/src/rhodium/config/JsonModelWriter.cpp @@ -4,13 +4,13 @@ * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/config/JsonModelWriter.hpp" +#include "rhodium/config/JsonModelWriter.hpp" #include #include #include -namespace toolkit +namespace rhodium { std::vector JsonModel::paths(const std::vector &paths) { @@ -112,7 +112,7 @@ namespace toolkit } return { - {"manifest", "tpkg.lua"}, + {"manifest", model.manifestName}, {"package", { {"name", model.rootPackage.name}, {"version", model.rootPackage.version}, @@ -160,4 +160,4 @@ namespace toolkit return from(model).dump(2); } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/config/JsonModelWriter.hpp b/src/rhodium/config/JsonModelWriter.hpp similarity index 84% rename from src/tpkg/config/JsonModelWriter.hpp rename to src/rhodium/config/JsonModelWriter.hpp index c4a7a04..62986e9 100644 --- a/src/tpkg/config/JsonModelWriter.hpp +++ b/src/rhodium/config/JsonModelWriter.hpp @@ -6,15 +6,15 @@ #pragma once -#include "tpkg/model/BuildModel.hpp" -#include "tpkg/resolve/ResolvedDependencyArtifacts.hpp" +#include "rhodium/model/BuildModel.hpp" +#include "rhodium/resolve/ResolvedDependencyArtifacts.hpp" #include #include #include #include -namespace toolkit +namespace rhodium { class JsonModel { @@ -29,4 +29,4 @@ namespace toolkit static std::vector paths(const std::vector &paths); }; -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/config/LockFile.cpp b/src/rhodium/config/LockFile.cpp similarity index 98% rename from src/tpkg/config/LockFile.cpp rename to src/rhodium/config/LockFile.cpp index 8433081..34d0c62 100644 --- a/src/tpkg/config/LockFile.cpp +++ b/src/rhodium/config/LockFile.cpp @@ -4,12 +4,12 @@ * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/config/LockFile.hpp" +#include "rhodium/config/LockFile.hpp" -#include "tpkg/config/BuildConfig.hpp" -#include "tpkg/core/FileSystem.hpp" -#include "tpkg/core/Hash.hpp" -#include "tpkg/diagnostics/DiagnosticSink.hpp" +#include "rhodium/config/BuildConfig.hpp" +#include "rhodium/core/FileSystem.hpp" +#include "rhodium/core/Hash.hpp" +#include "rhodium/diagnostics/DiagnosticSink.hpp" #include #include @@ -17,7 +17,7 @@ #include #include -namespace toolkit +namespace rhodium { class LockData final { @@ -376,4 +376,4 @@ namespace toolkit return from(dependency, commit, "debug", {}); } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/config/LockFile.hpp b/src/rhodium/config/LockFile.hpp similarity index 96% rename from src/tpkg/config/LockFile.hpp rename to src/rhodium/config/LockFile.hpp index d435a80..d3efa39 100644 --- a/src/tpkg/config/LockFile.hpp +++ b/src/rhodium/config/LockFile.hpp @@ -6,14 +6,14 @@ #pragma once -#include "tpkg/model/DependencyDesc.hpp" +#include "rhodium/model/DependencyDesc.hpp" #include #include #include #include -namespace toolkit +namespace rhodium { class DiagnosticSink; @@ -69,4 +69,4 @@ namespace toolkit static bool write(const std::filesystem::path &path, const LockFile &lockFile, DiagnosticSink &diagnostics); }; -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/config/TomlConfig.cpp b/src/rhodium/config/TomlConfig.cpp similarity index 74% rename from src/tpkg/config/TomlConfig.cpp rename to src/rhodium/config/TomlConfig.cpp index ab5eb22..93505ec 100644 --- a/src/tpkg/config/TomlConfig.cpp +++ b/src/rhodium/config/TomlConfig.cpp @@ -4,13 +4,14 @@ * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/config/TomlConfig.hpp" +#include "rhodium/config/TomlConfig.hpp" -#include "tpkg/core/FileSystem.hpp" +#include "rhodium/core/FileSystem.hpp" +#include "rhodium/core/Path.hpp" #include -namespace toolkit +namespace rhodium { std::optional ToolConfig::load(const std::filesystem::path &path) @@ -22,6 +23,7 @@ namespace toolkit auto table = toml::parse_file(path.string()); ToolConfig config; + config.buildDir = (Path::stateRoot(std::filesystem::path{}) / "build").generic_string(); config.buildDir = table["build_dir"].value_or(config.buildDir); config.defaultPlatform = table["default_platform"].value_or(""); config.defaultConfig = table["default_config"].value_or(""); @@ -29,4 +31,4 @@ namespace toolkit return config; } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/config/TomlConfig.hpp b/src/rhodium/config/TomlConfig.hpp similarity index 83% rename from src/tpkg/config/TomlConfig.hpp rename to src/rhodium/config/TomlConfig.hpp index 4ee8a05..a4b62f1 100644 --- a/src/tpkg/config/TomlConfig.hpp +++ b/src/rhodium/config/TomlConfig.hpp @@ -10,12 +10,12 @@ #include #include -namespace toolkit +namespace rhodium { struct ToolConfig { - std::string buildDir = ".tpkg/build"; + std::string buildDir = ".rhodium/build"; std::string defaultPlatform; std::string defaultConfig; std::string defaultArch; @@ -23,4 +23,4 @@ namespace toolkit static std::optional load(const std::filesystem::path &path); }; -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/core/Environment.cpp b/src/rhodium/core/Environment.cpp similarity index 90% rename from src/tpkg/core/Environment.cpp rename to src/rhodium/core/Environment.cpp index 6c51959..bd68ea5 100644 --- a/src/tpkg/core/Environment.cpp +++ b/src/rhodium/core/Environment.cpp @@ -4,9 +4,9 @@ * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/core/Environment.hpp" +#include "rhodium/core/Environment.hpp" -namespace toolkit +namespace rhodium { std::string Environment::hostPlatformName() @@ -44,4 +44,4 @@ namespace toolkit #endif } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/core/Environment.hpp b/src/rhodium/core/Environment.hpp similarity index 90% rename from src/tpkg/core/Environment.hpp rename to src/rhodium/core/Environment.hpp index a9b492d..16e7ec9 100644 --- a/src/tpkg/core/Environment.hpp +++ b/src/rhodium/core/Environment.hpp @@ -8,7 +8,7 @@ #include -namespace toolkit +namespace rhodium { class Environment @@ -19,4 +19,4 @@ namespace toolkit static std::string buildModeName(); }; -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/core/FileCopy.cpp b/src/rhodium/core/FileCopy.cpp similarity index 98% rename from src/tpkg/core/FileCopy.cpp rename to src/rhodium/core/FileCopy.cpp index 87fe226..9dd8c68 100644 --- a/src/tpkg/core/FileCopy.cpp +++ b/src/rhodium/core/FileCopy.cpp @@ -1,8 +1,8 @@ -#include "tpkg/core/FileCopy.hpp" +#include "rhodium/core/FileCopy.hpp" #include -namespace toolkit +namespace rhodium { bool FileCopy::same(const std::filesystem::path &source, const std::filesystem::path &destination) { diff --git a/src/tpkg/core/FileCopy.hpp b/src/rhodium/core/FileCopy.hpp similarity index 94% rename from src/tpkg/core/FileCopy.hpp rename to src/rhodium/core/FileCopy.hpp index cfc4dc1..2847a3a 100644 --- a/src/tpkg/core/FileCopy.hpp +++ b/src/rhodium/core/FileCopy.hpp @@ -1,12 +1,12 @@ #pragma once -#include "tpkg/diagnostics/DiagnosticSink.hpp" +#include "rhodium/diagnostics/DiagnosticSink.hpp" #include #include #include -namespace toolkit +namespace rhodium { enum class CopyStatus { diff --git a/src/tpkg/core/FileSystem.cpp b/src/rhodium/core/FileSystem.cpp similarity index 96% rename from src/tpkg/core/FileSystem.cpp rename to src/rhodium/core/FileSystem.cpp index 46c57ce..cade0dc 100644 --- a/src/tpkg/core/FileSystem.cpp +++ b/src/rhodium/core/FileSystem.cpp @@ -4,12 +4,12 @@ * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/core/FileSystem.hpp" +#include "rhodium/core/FileSystem.hpp" #include #include -namespace toolkit +namespace rhodium { bool File::exists(const std::filesystem::path &path) { @@ -82,4 +82,4 @@ namespace toolkit return stream.str(); } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/core/FileSystem.hpp b/src/rhodium/core/FileSystem.hpp similarity index 94% rename from src/tpkg/core/FileSystem.hpp rename to src/rhodium/core/FileSystem.hpp index 3792012..d7389f2 100644 --- a/src/tpkg/core/FileSystem.hpp +++ b/src/rhodium/core/FileSystem.hpp @@ -9,7 +9,7 @@ #include #include -namespace toolkit +namespace rhodium { class File { @@ -20,4 +20,4 @@ namespace toolkit static bool write(const std::filesystem::path &path, const std::string &content, std::string *error = nullptr); static std::string read(const std::filesystem::path &path); }; -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/core/Hash.cpp b/src/rhodium/core/Hash.cpp similarity index 86% rename from src/tpkg/core/Hash.cpp rename to src/rhodium/core/Hash.cpp index b28e0c0..4cdef03 100644 --- a/src/tpkg/core/Hash.cpp +++ b/src/rhodium/core/Hash.cpp @@ -4,12 +4,12 @@ * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/core/Hash.hpp" +#include "rhodium/core/Hash.hpp" #include #include -namespace toolkit +namespace rhodium { std::string Hash::xxhash64Hex(const void *data, std::size_t size) { @@ -21,4 +21,4 @@ namespace toolkit return xxhash64Hex(value.data(), value.size()); } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/core/Hash.hpp b/src/rhodium/core/Hash.hpp similarity index 90% rename from src/tpkg/core/Hash.hpp rename to src/rhodium/core/Hash.hpp index 049029a..5eeb3d7 100644 --- a/src/tpkg/core/Hash.hpp +++ b/src/rhodium/core/Hash.hpp @@ -9,7 +9,7 @@ #include #include -namespace toolkit +namespace rhodium { class Hash { @@ -17,4 +17,4 @@ namespace toolkit static std::string xxhash64Hex(const void *data, std::size_t size); static std::string xxhash64Hex(const std::string &value); }; -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/core/Logger.cpp b/src/rhodium/core/Logger.cpp similarity index 96% rename from src/tpkg/core/Logger.cpp rename to src/rhodium/core/Logger.cpp index abb5dfe..c987cac 100644 --- a/src/tpkg/core/Logger.cpp +++ b/src/rhodium/core/Logger.cpp @@ -21,7 +21,7 @@ #define COLORED_FORMAT "%^%l:%$ %v" #define FILE_FORMAT "%l: %v" -namespace toolkit { +namespace rhodium { static std::unique_ptr s_logger; static std::unique_ptr s_info_logger; diff --git a/src/tpkg/core/Logger.hpp b/src/rhodium/core/Logger.hpp similarity index 87% rename from src/tpkg/core/Logger.hpp rename to src/rhodium/core/Logger.hpp index d2d2522..7434ffc 100644 --- a/src/tpkg/core/Logger.hpp +++ b/src/rhodium/core/Logger.hpp @@ -12,7 +12,7 @@ #include -namespace toolkit +namespace rhodium { #define BUILD_DEBUG 1 @@ -123,9 +123,9 @@ namespace toolkit Logger *getDefaultLogger(const char *name = "", bool useFileRecorder = false); } -#define LogInfo(...) ::toolkit::getDefaultLogger()->info(__VA_ARGS__) -#define LogWarn(...) ::toolkit::getDefaultLogger()->warning(__VA_ARGS__) -#define LogError(...) ::toolkit::getDefaultLogger()->error(__VA_ARGS__) -#define LogSuccess(...) ::toolkit::getDefaultLogger()->success(__VA_ARGS__) -#define LogDebug(...) ::toolkit::getDefaultLogger()->debug(__VA_ARGS__) -#define LogTrace(...) ::toolkit::getDefaultLogger()->trace(__VA_ARGS__) +#define LogInfo(...) ::rhodium::getDefaultLogger()->info(__VA_ARGS__) +#define LogWarn(...) ::rhodium::getDefaultLogger()->warning(__VA_ARGS__) +#define LogError(...) ::rhodium::getDefaultLogger()->error(__VA_ARGS__) +#define LogSuccess(...) ::rhodium::getDefaultLogger()->success(__VA_ARGS__) +#define LogDebug(...) ::rhodium::getDefaultLogger()->debug(__VA_ARGS__) +#define LogTrace(...) ::rhodium::getDefaultLogger()->trace(__VA_ARGS__) diff --git a/src/tpkg/core/Path.cpp b/src/rhodium/core/Path.cpp similarity index 61% rename from src/tpkg/core/Path.cpp rename to src/rhodium/core/Path.cpp index 36c3c71..4e9bc5d 100644 --- a/src/tpkg/core/Path.cpp +++ b/src/rhodium/core/Path.cpp @@ -4,12 +4,25 @@ * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/core/Path.hpp" +#include "rhodium/core/Path.hpp" #include -namespace toolkit +namespace rhodium { + std::filesystem::path Path::manifest(const std::filesystem::path &workspaceRoot) + { + const auto preferred = workspaceRoot / "rhodium.lua"; + const auto legacy = workspaceRoot / "tpkg.lua"; + return std::filesystem::exists(preferred) || !std::filesystem::exists(legacy) ? preferred : legacy; + } + + std::filesystem::path Path::stateRoot(const std::filesystem::path &workspaceRoot) + { + const auto preferred = workspaceRoot / ".rhodium"; + const auto legacy = workspaceRoot / ".tpkg"; + return std::filesystem::exists(preferred) || !std::filesystem::exists(legacy) ? preferred : legacy; + } std::string Path::normalizePath(const std::filesystem::path &path) { @@ -38,4 +51,4 @@ namespace toolkit return value; } -} // namespace toolkit +} // namespace rhodium diff --git a/src/rhodium/core/Path.hpp b/src/rhodium/core/Path.hpp new file mode 100644 index 0000000..150eba8 --- /dev/null +++ b/src/rhodium/core/Path.hpp @@ -0,0 +1,17 @@ +#pragma once + +#include +#include + +namespace rhodium +{ + class Path + { + public: + // Prefer Rhodium names; reuse legacy names only when the new name is absent. + static std::filesystem::path manifest(const std::filesystem::path &workspaceRoot); + static std::filesystem::path stateRoot(const std::filesystem::path &workspaceRoot); + static std::string normalizePath(const std::filesystem::path &path); + static std::string sanitizePackagePath(std::string value); + }; +} // namespace rhodium diff --git a/src/tpkg/core/Process.cpp b/src/rhodium/core/Process.cpp similarity index 99% rename from src/tpkg/core/Process.cpp rename to src/rhodium/core/Process.cpp index 01a2558..ad9e4bc 100644 --- a/src/tpkg/core/Process.cpp +++ b/src/rhodium/core/Process.cpp @@ -4,7 +4,7 @@ * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/core/Process.hpp" +#include "rhodium/core/Process.hpp" #include #include @@ -23,7 +23,7 @@ #include #endif -namespace toolkit +namespace rhodium { namespace { @@ -318,4 +318,4 @@ namespace toolkit return runDirect(command, {}, environment); } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/core/Process.hpp b/src/rhodium/core/Process.hpp similarity index 95% rename from src/tpkg/core/Process.hpp rename to src/rhodium/core/Process.hpp index b55a25a..77bb829 100644 --- a/src/tpkg/core/Process.hpp +++ b/src/rhodium/core/Process.hpp @@ -10,7 +10,7 @@ #include #include -namespace toolkit +namespace rhodium { enum class ProcessShell { @@ -35,4 +35,4 @@ namespace toolkit static ProcessResult runShell(const std::string &command, ProcessShell shell, const std::map &environment); }; -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/core/StringUtil.cpp b/src/rhodium/core/StringUtil.cpp similarity index 88% rename from src/tpkg/core/StringUtil.cpp rename to src/rhodium/core/StringUtil.cpp index 29b9774..14e79bf 100644 --- a/src/tpkg/core/StringUtil.cpp +++ b/src/rhodium/core/StringUtil.cpp @@ -4,12 +4,12 @@ * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/core/StringUtil.hpp" +#include "rhodium/core/StringUtil.hpp" #include #include -namespace toolkit +namespace rhodium { std::string StringUtils::toLower(std::string value) @@ -24,4 +24,4 @@ namespace toolkit return toLower(lhs) == toLower(rhs); } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/core/StringUtil.hpp b/src/rhodium/core/StringUtil.hpp similarity index 90% rename from src/tpkg/core/StringUtil.hpp rename to src/rhodium/core/StringUtil.hpp index 9ddf0cf..cab9ab1 100644 --- a/src/tpkg/core/StringUtil.hpp +++ b/src/rhodium/core/StringUtil.hpp @@ -8,7 +8,7 @@ #include -namespace toolkit +namespace rhodium { class StringUtils { @@ -16,4 +16,4 @@ namespace toolkit static std::string toLower(std::string value); static bool equalsIgnoreCase(const std::string &lhs, const std::string &rhs); }; -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/diagnostics/ConsoleDiagnosticSink.cpp b/src/rhodium/diagnostics/ConsoleDiagnosticSink.cpp similarity index 92% rename from src/tpkg/diagnostics/ConsoleDiagnosticSink.cpp rename to src/rhodium/diagnostics/ConsoleDiagnosticSink.cpp index c1d2f20..974e116 100644 --- a/src/tpkg/diagnostics/ConsoleDiagnosticSink.cpp +++ b/src/rhodium/diagnostics/ConsoleDiagnosticSink.cpp @@ -4,15 +4,15 @@ * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/diagnostics/ConsoleDiagnosticSink.hpp" +#include "rhodium/diagnostics/ConsoleDiagnosticSink.hpp" -#include "tpkg/core/Logger.hpp" +#include "rhodium/core/Logger.hpp" #ifdef _WIN32 #include #endif -namespace toolkit +namespace rhodium { void ConsoleDiagnosticSink::report(const Diagnostic &diagnostic) @@ -52,4 +52,4 @@ namespace toolkit } } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/diagnostics/ConsoleDiagnosticSink.hpp b/src/rhodium/diagnostics/ConsoleDiagnosticSink.hpp similarity index 77% rename from src/tpkg/diagnostics/ConsoleDiagnosticSink.hpp rename to src/rhodium/diagnostics/ConsoleDiagnosticSink.hpp index 07d6f68..b41adfa 100644 --- a/src/tpkg/diagnostics/ConsoleDiagnosticSink.hpp +++ b/src/rhodium/diagnostics/ConsoleDiagnosticSink.hpp @@ -6,9 +6,9 @@ #pragma once -#include "tpkg/diagnostics/DiagnosticSink.hpp" +#include "rhodium/diagnostics/DiagnosticSink.hpp" -namespace toolkit +namespace rhodium { class ConsoleDiagnosticSink final : public DiagnosticSink { @@ -16,4 +16,4 @@ namespace toolkit void report(const Diagnostic &diagnostic) override; }; -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/diagnostics/Diagnostic.cpp b/src/rhodium/diagnostics/Diagnostic.cpp similarity index 86% rename from src/tpkg/diagnostics/Diagnostic.cpp rename to src/rhodium/diagnostics/Diagnostic.cpp index 90ea89a..4437022 100644 --- a/src/tpkg/diagnostics/Diagnostic.cpp +++ b/src/rhodium/diagnostics/Diagnostic.cpp @@ -4,9 +4,9 @@ * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/diagnostics/Diagnostic.hpp" +#include "rhodium/diagnostics/Diagnostic.hpp" -namespace toolkit +namespace rhodium { const char *toString(DiagnosticLevel level) { @@ -24,4 +24,4 @@ namespace toolkit return "unknown"; } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/diagnostics/Diagnostic.hpp b/src/rhodium/diagnostics/Diagnostic.hpp similarity index 91% rename from src/tpkg/diagnostics/Diagnostic.hpp rename to src/rhodium/diagnostics/Diagnostic.hpp index cc7b780..38bf2c4 100644 --- a/src/tpkg/diagnostics/Diagnostic.hpp +++ b/src/rhodium/diagnostics/Diagnostic.hpp @@ -8,7 +8,7 @@ #include -namespace toolkit +namespace rhodium { enum class DiagnosticLevel @@ -27,4 +27,4 @@ namespace toolkit const char *toString(DiagnosticLevel level); -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/diagnostics/DiagnosticSink.cpp b/src/rhodium/diagnostics/DiagnosticSink.cpp similarity index 88% rename from src/tpkg/diagnostics/DiagnosticSink.cpp rename to src/rhodium/diagnostics/DiagnosticSink.cpp index a6a983c..23196a1 100644 --- a/src/tpkg/diagnostics/DiagnosticSink.cpp +++ b/src/rhodium/diagnostics/DiagnosticSink.cpp @@ -4,9 +4,9 @@ * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/diagnostics/DiagnosticSink.hpp" +#include "rhodium/diagnostics/DiagnosticSink.hpp" -namespace toolkit +namespace rhodium { DiagnosticSink::~DiagnosticSink() = default; @@ -31,4 +31,4 @@ namespace toolkit report({DiagnosticLevel::Success, message}); } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/diagnostics/DiagnosticSink.hpp b/src/rhodium/diagnostics/DiagnosticSink.hpp similarity index 85% rename from src/tpkg/diagnostics/DiagnosticSink.hpp rename to src/rhodium/diagnostics/DiagnosticSink.hpp index 06e396e..6646586 100644 --- a/src/tpkg/diagnostics/DiagnosticSink.hpp +++ b/src/rhodium/diagnostics/DiagnosticSink.hpp @@ -6,11 +6,11 @@ #pragma once -#include "tpkg/diagnostics/Diagnostic.hpp" +#include "rhodium/diagnostics/Diagnostic.hpp" #include -namespace toolkit +namespace rhodium { class DiagnosticSink { @@ -25,4 +25,4 @@ namespace toolkit void success(const std::string &message); }; -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/diagnostics/JsonDiagnosticSink.cpp b/src/rhodium/diagnostics/JsonDiagnosticSink.cpp similarity index 83% rename from src/tpkg/diagnostics/JsonDiagnosticSink.cpp rename to src/rhodium/diagnostics/JsonDiagnosticSink.cpp index c5c1af2..28b13e7 100644 --- a/src/tpkg/diagnostics/JsonDiagnosticSink.cpp +++ b/src/rhodium/diagnostics/JsonDiagnosticSink.cpp @@ -4,9 +4,9 @@ * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/diagnostics/JsonDiagnosticSink.hpp" +#include "rhodium/diagnostics/JsonDiagnosticSink.hpp" -namespace toolkit +namespace rhodium { void JsonDiagnosticSink::report(const Diagnostic &diagnostic) @@ -22,4 +22,4 @@ namespace toolkit return diagnostics_; } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/diagnostics/JsonDiagnosticSink.hpp b/src/rhodium/diagnostics/JsonDiagnosticSink.hpp similarity index 83% rename from src/tpkg/diagnostics/JsonDiagnosticSink.hpp rename to src/rhodium/diagnostics/JsonDiagnosticSink.hpp index 3fdf241..b2f2cb0 100644 --- a/src/tpkg/diagnostics/JsonDiagnosticSink.hpp +++ b/src/rhodium/diagnostics/JsonDiagnosticSink.hpp @@ -6,11 +6,11 @@ #pragma once -#include "tpkg/diagnostics/DiagnosticSink.hpp" +#include "rhodium/diagnostics/DiagnosticSink.hpp" #include -namespace toolkit +namespace rhodium { class JsonDiagnosticSink final : public DiagnosticSink @@ -23,4 +23,4 @@ namespace toolkit nlohmann::json diagnostics_ = nlohmann::json::array(); }; -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/main.cpp b/src/rhodium/main.cpp similarity index 68% rename from src/tpkg/main.cpp rename to src/rhodium/main.cpp index e29c4c8..ec03e2a 100644 --- a/src/tpkg/main.cpp +++ b/src/rhodium/main.cpp @@ -4,8 +4,8 @@ * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/cli/CommandLine.hpp" +#include "rhodium/cli/CommandLine.hpp" int main(int argc, char** argv) { - return toolkit::CmdLine::run(argc, argv); + return rhodium::CmdLine::run(argc, argv); } diff --git a/src/tpkg/model/BuildConfig.hpp b/src/rhodium/model/BuildConfig.hpp similarity index 88% rename from src/tpkg/model/BuildConfig.hpp rename to src/rhodium/model/BuildConfig.hpp index 5a011b8..d7ff742 100644 --- a/src/tpkg/model/BuildConfig.hpp +++ b/src/rhodium/model/BuildConfig.hpp @@ -8,7 +8,7 @@ #include -namespace toolkit +namespace rhodium { struct BuildConfig { @@ -17,4 +17,4 @@ namespace toolkit std::string architecture; }; -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/model/BuildModel.cpp b/src/rhodium/model/BuildModel.cpp similarity index 97% rename from src/tpkg/model/BuildModel.cpp rename to src/rhodium/model/BuildModel.cpp index 2282c68..b04f7f9 100644 --- a/src/tpkg/model/BuildModel.cpp +++ b/src/rhodium/model/BuildModel.cpp @@ -4,10 +4,10 @@ * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/model/BuildModel.hpp" +#include "rhodium/model/BuildModel.hpp" -#include "tpkg/core/StringUtil.hpp" -#include "tpkg/diagnostics/DiagnosticSink.hpp" +#include "rhodium/core/StringUtil.hpp" +#include "rhodium/diagnostics/DiagnosticSink.hpp" #include #include @@ -15,7 +15,7 @@ #include #include -namespace toolkit +namespace rhodium { namespace { @@ -143,4 +143,4 @@ namespace toolkit return ok; } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/model/BuildModel.hpp b/src/rhodium/model/BuildModel.hpp similarity index 66% rename from src/tpkg/model/BuildModel.hpp rename to src/rhodium/model/BuildModel.hpp index 1ef26d9..771175f 100644 --- a/src/tpkg/model/BuildModel.hpp +++ b/src/rhodium/model/BuildModel.hpp @@ -6,10 +6,12 @@ #pragma once -#include "tpkg/model/PackageDesc.hpp" -#include "tpkg/model/WorkspaceDesc.hpp" +#include "rhodium/model/PackageDesc.hpp" +#include "rhodium/model/WorkspaceDesc.hpp" -namespace toolkit +#include + +namespace rhodium { class DiagnosticSink; @@ -18,8 +20,9 @@ namespace toolkit { WorkspaceDesc workspace; PackageDesc rootPackage; + std::string manifestName = "rhodium.lua"; }; bool validateBuildModel(const BuildModel &model, DiagnosticSink &diagnostics); -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/model/DependencyDesc.hpp b/src/rhodium/model/DependencyDesc.hpp similarity index 98% rename from src/tpkg/model/DependencyDesc.hpp rename to src/rhodium/model/DependencyDesc.hpp index b9170c1..5025089 100644 --- a/src/tpkg/model/DependencyDesc.hpp +++ b/src/rhodium/model/DependencyDesc.hpp @@ -10,7 +10,7 @@ #include #include -namespace toolkit +namespace rhodium { struct DependencyArtifacts @@ -110,4 +110,4 @@ namespace toolkit bool local = false; }; -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/model/DependencyOverride.hpp b/src/rhodium/model/DependencyOverride.hpp similarity index 91% rename from src/tpkg/model/DependencyOverride.hpp rename to src/rhodium/model/DependencyOverride.hpp index a85c127..8bcecd6 100644 --- a/src/tpkg/model/DependencyOverride.hpp +++ b/src/rhodium/model/DependencyOverride.hpp @@ -4,7 +4,7 @@ #include #include -namespace toolkit +namespace rhodium { struct DependencyOverrideDesc @@ -26,4 +26,4 @@ namespace toolkit std::map overrides; }; -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/model/PackageDesc.hpp b/src/rhodium/model/PackageDesc.hpp similarity index 75% rename from src/tpkg/model/PackageDesc.hpp rename to src/rhodium/model/PackageDesc.hpp index dbb87e3..79f4916 100644 --- a/src/tpkg/model/PackageDesc.hpp +++ b/src/rhodium/model/PackageDesc.hpp @@ -6,13 +6,13 @@ #pragma once -#include "tpkg/model/DependencyDesc.hpp" -#include "tpkg/model/DependencyOverride.hpp" +#include "rhodium/model/DependencyDesc.hpp" +#include "rhodium/model/DependencyOverride.hpp" #include #include -namespace toolkit +namespace rhodium { struct PackageDesc @@ -23,4 +23,4 @@ namespace toolkit std::vector dependencyOverrides; }; -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/model/WorkspaceDesc.hpp b/src/rhodium/model/WorkspaceDesc.hpp similarity index 91% rename from src/tpkg/model/WorkspaceDesc.hpp rename to src/rhodium/model/WorkspaceDesc.hpp index 32b84f4..e1bee4b 100644 --- a/src/tpkg/model/WorkspaceDesc.hpp +++ b/src/rhodium/model/WorkspaceDesc.hpp @@ -8,7 +8,7 @@ #include -namespace toolkit +namespace rhodium { struct WorkspaceDesc { @@ -20,4 +20,4 @@ namespace toolkit bool generateCMakeUserPresets = false; }; -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/package/Archive.cpp b/src/rhodium/package/Archive.cpp similarity index 96% rename from src/tpkg/package/Archive.cpp rename to src/rhodium/package/Archive.cpp index 24263c5..e3a2347 100644 --- a/src/tpkg/package/Archive.cpp +++ b/src/rhodium/package/Archive.cpp @@ -4,14 +4,14 @@ * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/package/Archive.hpp" +#include "rhodium/package/Archive.hpp" -#include "tpkg/core/FileSystem.hpp" -#include "tpkg/core/Hash.hpp" -#include "tpkg/core/Path.hpp" -#include "tpkg/diagnostics/DiagnosticSink.hpp" -#include "tpkg/package/PatchApplier.hpp" -#include "tpkg/utils/Sha256.hpp" +#include "rhodium/core/FileSystem.hpp" +#include "rhodium/core/Hash.hpp" +#include "rhodium/core/Path.hpp" +#include "rhodium/diagnostics/DiagnosticSink.hpp" +#include "rhodium/package/PatchApplier.hpp" +#include "rhodium/utils/Sha256.hpp" #include #include @@ -25,7 +25,7 @@ #include #include -namespace toolkit +namespace rhodium { class ArchiveData { @@ -238,7 +238,7 @@ namespace toolkit curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); curl_easy_setopt(curl, CURLOPT_FAILONERROR, 1L); curl_easy_setopt(curl, CURLOPT_NETRC, CURL_NETRC_OPTIONAL); - curl_easy_setopt(curl, CURLOPT_USERAGENT, "Toolkit Package Manager/0"); + curl_easy_setopt(curl, CURLOPT_USERAGENT, "Rhodium/0"); curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errorBuffer); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, curlWrite); curl_easy_setopt(curl, CURLOPT_WRITEDATA, &output); diff --git a/src/tpkg/package/Archive.hpp b/src/rhodium/package/Archive.hpp similarity index 95% rename from src/tpkg/package/Archive.hpp rename to src/rhodium/package/Archive.hpp index 512f510..8a4e820 100644 --- a/src/tpkg/package/Archive.hpp +++ b/src/rhodium/package/Archive.hpp @@ -6,13 +6,13 @@ #pragma once -#include "tpkg/model/DependencyDesc.hpp" +#include "rhodium/model/DependencyDesc.hpp" #include #include #include -namespace toolkit +namespace rhodium { class DiagnosticSink; diff --git a/src/tpkg/package/ArtifactGc.cpp b/src/rhodium/package/ArtifactGc.cpp similarity index 95% rename from src/tpkg/package/ArtifactGc.cpp rename to src/rhodium/package/ArtifactGc.cpp index 2ec796f..ac5f4bf 100644 --- a/src/tpkg/package/ArtifactGc.cpp +++ b/src/rhodium/package/ArtifactGc.cpp @@ -4,19 +4,19 @@ * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/package/ArtifactGc.hpp" +#include "rhodium/package/ArtifactGc.hpp" -#include "tpkg/config/BuildConfig.hpp" -#include "tpkg/core/Hash.hpp" -#include "tpkg/core/Path.hpp" -#include "tpkg/diagnostics/DiagnosticSink.hpp" -#include "tpkg/package/PackageCache.hpp" +#include "rhodium/config/BuildConfig.hpp" +#include "rhodium/core/Hash.hpp" +#include "rhodium/core/Path.hpp" +#include "rhodium/diagnostics/DiagnosticSink.hpp" +#include "rhodium/package/PackageCache.hpp" #include #include #include -namespace toolkit +namespace rhodium { bool ArtifactGc::runArtifacts(const LockFile &lockFile, const std::filesystem::path &workspaceRoot, @@ -33,7 +33,7 @@ namespace toolkit } } - const auto artifactsRoot = workspaceRoot / ".tpkg" / "artifacts"; + const auto artifactsRoot = Path::stateRoot(workspaceRoot) / "artifacts"; if (!std::filesystem::is_directory(artifactsRoot)) { diagnostics.info("artifact gc: no artifacts directory"); @@ -102,7 +102,7 @@ namespace toolkit keepKeysByPackage[package.name].insert(BuildConfig::normalize(package.config) + "-" + (package.toolchainId.empty() ? std::string("default") : package.toolchainId)); } - const auto buildRoot = workspaceRoot / ".tpkg" / "build-packages"; + const auto buildRoot = Path::stateRoot(workspaceRoot) / "build-packages"; if (!std::filesystem::is_directory(buildRoot)) { diagnostics.info("build cache gc: no build-packages directory"); @@ -170,7 +170,7 @@ namespace toolkit const std::string &packageFilter, DiagnosticSink &diagnostics) { - PackageCache cache(workspaceRoot / ".tpkg" / "packages"); + PackageCache cache(Path::stateRoot(workspaceRoot) / "packages"); std::set keepGitSources; std::set keepArchiveRoots; std::set keptArchivePackages; @@ -206,7 +206,7 @@ namespace toolkit } } - const auto packagesRoot = workspaceRoot / ".tpkg" / "packages"; + const auto packagesRoot = Path::stateRoot(workspaceRoot) / "packages"; if (!std::filesystem::is_directory(packagesRoot)) { diagnostics.info("source cache gc: no packages directory"); diff --git a/src/tpkg/package/ArtifactGc.hpp b/src/rhodium/package/ArtifactGc.hpp similarity index 96% rename from src/tpkg/package/ArtifactGc.hpp rename to src/rhodium/package/ArtifactGc.hpp index ce846ae..6e3971d 100644 --- a/src/tpkg/package/ArtifactGc.hpp +++ b/src/rhodium/package/ArtifactGc.hpp @@ -6,12 +6,12 @@ #pragma once -#include "tpkg/config/LockFile.hpp" +#include "rhodium/config/LockFile.hpp" #include #include -namespace toolkit +namespace rhodium { class DiagnosticSink; diff --git a/src/tpkg/package/ArtifactMaterializer.cpp b/src/rhodium/package/ArtifactMaterializer.cpp similarity index 88% rename from src/tpkg/package/ArtifactMaterializer.cpp rename to src/rhodium/package/ArtifactMaterializer.cpp index 3eb23a8..eeade73 100644 --- a/src/tpkg/package/ArtifactMaterializer.cpp +++ b/src/rhodium/package/ArtifactMaterializer.cpp @@ -1,141 +1,141 @@ -/* - * @Author: cubevlmu khfahqp@gmail.com - * @LastEditors: cubevlmu khfahqp@gmail.com - * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. - */ - -#include "tpkg/package/ArtifactMaterializer.hpp" - -#include "tpkg/core/FileSystem.hpp" -#include "tpkg/core/StringUtil.hpp" -#include "tpkg/diagnostics/DiagnosticSink.hpp" -#include "tpkg/package/ArtifactValidator.hpp" - -#include -#include -#include -#include - -namespace toolkit -{ - std::filesystem::path ArtifactFiles::input(const BuildUtil::Context &context, const std::string &value) - { - auto path = std::filesystem::path(value); - if (path.is_absolute()) - { - return path; - } - - auto sourcePath = context.sourceDir / path; - if (std::filesystem::exists(sourcePath)) - { - return sourcePath; - } - - auto buildPath = context.buildDir / path; - if (std::filesystem::exists(buildPath)) - { - return buildPath; - } - - return sourcePath; - } - - std::string ArtifactFiles::output(const std::string &value) - { - auto path = std::filesystem::path(value); - if (path.is_absolute()) - { - return path.filename().string(); - } - return path.generic_string(); - } - - bool ArtifactFiles::copy(const BuildUtil::Context &context, - const std::vector &requested, - std::vector &exported, - const char *field, - DiagnosticSink &diagnostics) - { - for (const auto &value : requested) - { - if (value.empty()) - { - diagnostics.error(std::string("package artifact ") + field + " path is empty"); - return false; - } - - const auto inputPath = input(context, value); - if (!std::filesystem::exists(inputPath)) - { - diagnostics.error(std::string("package artifact ") + field + " path is missing: " + inputPath.string()); - return false; - } - - const auto outputName = output(value); - const auto outputPath = context.artifactDir / outputName; - std::string error; - if (!File::mkdir(outputPath.parent_path(), &error)) - { - diagnostics.error("failed to create artifact copy parent: " + error); - return false; - } - - try - { - if (std::filesystem::is_directory(inputPath)) - { - if (std::filesystem::exists(outputPath)) - { - std::filesystem::remove_all(outputPath); - } - std::filesystem::copy(inputPath, - outputPath, - std::filesystem::copy_options::recursive | - std::filesystem::copy_options::overwrite_existing); - } - else - { - std::filesystem::copy_file(inputPath, outputPath, std::filesystem::copy_options::overwrite_existing); - } - } - catch (const std::exception &ex) - { - diagnostics.error(std::string("failed to copy package artifact ") + field + ": " + ex.what()); - return false; - } - - exported.push_back(outputName); - } - return true; - } - - bool ArtifactFiles::materialize(const BuildUtil::Context &context, - const DependencyArtifacts &requested, - DependencyArtifacts &exported, - DiagnosticSink &diagnostics) - { - exported = requested; - if (StringUtils::toLower(requested.mode) != "copy") - { - return ArtifactCheck::validate(context, exported, diagnostics); - } - - exported.includeDirs.clear(); - exported.libDirs.clear(); - exported.binDirs.clear(); - exported.binFiles.clear(); - exported.libFiles.clear(); - if (!copy(context, requested.includeDirs, exported.includeDirs, "include_dirs", diagnostics) || - !copy(context, requested.libDirs, exported.libDirs, "lib_dirs", diagnostics) || - !copy(context, requested.binDirs, exported.binDirs, "bin_dirs", diagnostics) || - !copy(context, requested.binFiles, exported.binFiles, "bin_files", diagnostics) || - !copy(context, requested.libFiles, exported.libFiles, "lib_files", diagnostics)) - { - return false; - } - - return ArtifactCheck::validate(context, exported, diagnostics); - } - -} // namespace toolkit +/* + * @Author: cubevlmu khfahqp@gmail.com + * @LastEditors: error: error: git config user.name & please set dead value or install git && error: git config user.email & please set dead value or install git & please set dead value or install git + * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. + */ + +#include "rhodium/package/ArtifactMaterializer.hpp" + +#include "rhodium/core/FileSystem.hpp" +#include "rhodium/core/StringUtil.hpp" +#include "rhodium/diagnostics/DiagnosticSink.hpp" +#include "rhodium/package/ArtifactValidator.hpp" + +#include +#include +#include +#include + +namespace rhodium +{ + std::filesystem::path ArtifactFiles::input(const BuildUtil::Context &context, const std::string &value) + { + auto path = std::filesystem::path(value); + if (path.is_absolute()) + { + return path; + } + + auto sourcePath = context.sourceDir / path; + if (std::filesystem::exists(sourcePath)) + { + return sourcePath; + } + + auto buildPath = context.buildDir / path; + if (std::filesystem::exists(buildPath)) + { + return buildPath; + } + + return sourcePath; + } + + std::string ArtifactFiles::output(const std::string &value) + { + auto path = std::filesystem::path(value); + if (path.is_absolute()) + { + return path.filename().string(); + } + return path.generic_string(); + } + + bool ArtifactFiles::copy(const BuildUtil::Context &context, + const std::vector &requested, + std::vector &exported, + const char *field, + DiagnosticSink &diagnostics) + { + for (const auto &value : requested) + { + if (value.empty()) + { + diagnostics.error(std::string("package artifact ") + field + " path is empty"); + return false; + } + + const auto inputPath = input(context, value); + if (!std::filesystem::exists(inputPath)) + { + diagnostics.error(std::string("package artifact ") + field + " path is missing: " + inputPath.string()); + return false; + } + + const auto outputName = output(value); + const auto outputPath = context.artifactDir / outputName; + std::string error; + if (!File::mkdir(outputPath.parent_path(), &error)) + { + diagnostics.error("failed to create artifact copy parent: " + error); + return false; + } + + try + { + if (std::filesystem::is_directory(inputPath)) + { + if (std::filesystem::exists(outputPath)) + { + std::filesystem::remove_all(outputPath); + } + std::filesystem::copy(inputPath, + outputPath, + std::filesystem::copy_options::recursive | + std::filesystem::copy_options::overwrite_existing); + } + else + { + std::filesystem::copy_file(inputPath, outputPath, std::filesystem::copy_options::overwrite_existing); + } + } + catch (const std::exception &ex) + { + diagnostics.error(std::string("failed to copy package artifact ") + field + ": " + ex.what()); + return false; + } + + exported.push_back(outputName); + } + return true; + } + + bool ArtifactFiles::materialize(const BuildUtil::Context &context, + const DependencyArtifacts &requested, + DependencyArtifacts &exported, + DiagnosticSink &diagnostics) + { + exported = requested; + if (StringUtils::toLower(requested.mode) != "copy") + { + return ArtifactCheck::validate(context, exported, diagnostics); + } + + exported.includeDirs.clear(); + exported.libDirs.clear(); + exported.binDirs.clear(); + exported.binFiles.clear(); + exported.libFiles.clear(); + if (!copy(context, requested.includeDirs, exported.includeDirs, "include_dirs", diagnostics) || + !copy(context, requested.libDirs, exported.libDirs, "lib_dirs", diagnostics) || + !copy(context, requested.binDirs, exported.binDirs, "bin_dirs", diagnostics) || + !copy(context, requested.binFiles, exported.binFiles, "bin_files", diagnostics) || + !copy(context, requested.libFiles, exported.libFiles, "lib_files", diagnostics)) + { + return false; + } + + return ArtifactCheck::validate(context, exported, diagnostics); + } + +} // namespace rhodium \ No newline at end of file diff --git a/src/tpkg/package/ArtifactMaterializer.hpp b/src/rhodium/package/ArtifactMaterializer.hpp similarity index 86% rename from src/tpkg/package/ArtifactMaterializer.hpp rename to src/rhodium/package/ArtifactMaterializer.hpp index ffe7a64..3d80168 100644 --- a/src/tpkg/package/ArtifactMaterializer.hpp +++ b/src/rhodium/package/ArtifactMaterializer.hpp @@ -6,15 +6,15 @@ #pragma once -#include "tpkg/model/DependencyDesc.hpp" -#include "tpkg/package/PackageBuilderUtil.hpp" +#include "rhodium/model/DependencyDesc.hpp" +#include "rhodium/package/PackageBuilderUtil.hpp" -namespace toolkit +namespace rhodium { class DiagnosticSink; } -namespace toolkit +namespace rhodium { class ArtifactFiles { @@ -33,4 +33,4 @@ namespace toolkit const char *field, DiagnosticSink &diagnostics); }; -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/package/ArtifactValidator.cpp b/src/rhodium/package/ArtifactValidator.cpp similarity index 96% rename from src/tpkg/package/ArtifactValidator.cpp rename to src/rhodium/package/ArtifactValidator.cpp index 2ab134e..b9dbb05 100644 --- a/src/tpkg/package/ArtifactValidator.cpp +++ b/src/rhodium/package/ArtifactValidator.cpp @@ -4,18 +4,18 @@ * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/package/ArtifactValidator.hpp" +#include "rhodium/package/ArtifactValidator.hpp" -#include "tpkg/core/Environment.hpp" -#include "tpkg/core/StringUtil.hpp" -#include "tpkg/diagnostics/DiagnosticSink.hpp" +#include "rhodium/core/Environment.hpp" +#include "rhodium/core/StringUtil.hpp" +#include "rhodium/diagnostics/DiagnosticSink.hpp" #include #include #include #include -namespace toolkit +namespace rhodium { bool ArtifactCheck::dirs(const BuildUtil::Context &context, const std::vector &dirs, @@ -193,4 +193,4 @@ namespace toolkit libs(context, artifacts, diagnostics); } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/package/ArtifactValidator.hpp b/src/rhodium/package/ArtifactValidator.hpp similarity index 88% rename from src/tpkg/package/ArtifactValidator.hpp rename to src/rhodium/package/ArtifactValidator.hpp index a37f677..f9a5534 100644 --- a/src/tpkg/package/ArtifactValidator.hpp +++ b/src/rhodium/package/ArtifactValidator.hpp @@ -6,15 +6,15 @@ #pragma once -#include "tpkg/model/DependencyDesc.hpp" -#include "tpkg/package/PackageBuilderUtil.hpp" +#include "rhodium/model/DependencyDesc.hpp" +#include "rhodium/package/PackageBuilderUtil.hpp" -namespace toolkit +namespace rhodium { class DiagnosticSink; } -namespace toolkit +namespace rhodium { class ArtifactCheck { @@ -37,4 +37,4 @@ namespace toolkit const char *field, DiagnosticSink &diagnostics); }; -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/package/BuildVariableExpander.cpp b/src/rhodium/package/BuildVariableExpander.cpp similarity index 95% rename from src/tpkg/package/BuildVariableExpander.cpp rename to src/rhodium/package/BuildVariableExpander.cpp index fb991fa..127e3e6 100644 --- a/src/tpkg/package/BuildVariableExpander.cpp +++ b/src/rhodium/package/BuildVariableExpander.cpp @@ -4,9 +4,9 @@ * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/package/BuildVariableExpander.hpp" +#include "rhodium/package/BuildVariableExpander.hpp" -namespace toolkit +namespace rhodium { void BuildVar::replace(std::string &value, const std::string &from, const std::string &to) { @@ -61,4 +61,4 @@ namespace toolkit return result; } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/package/BuildVariableExpander.hpp b/src/rhodium/package/BuildVariableExpander.hpp similarity index 88% rename from src/tpkg/package/BuildVariableExpander.hpp rename to src/rhodium/package/BuildVariableExpander.hpp index fbe7fc0..e0ec01c 100644 --- a/src/tpkg/package/BuildVariableExpander.hpp +++ b/src/rhodium/package/BuildVariableExpander.hpp @@ -6,13 +6,13 @@ #pragma once -#include "tpkg/package/PackageBuilderUtil.hpp" +#include "rhodium/package/PackageBuilderUtil.hpp" #include #include #include -namespace toolkit +namespace rhodium { class BuildVar { @@ -24,4 +24,4 @@ namespace toolkit private: static void replace(std::string &value, const std::string &from, const std::string &to); }; -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/package/CMakeArgumentBuilder.cpp b/src/rhodium/package/CMakeArgumentBuilder.cpp similarity index 95% rename from src/tpkg/package/CMakeArgumentBuilder.cpp rename to src/rhodium/package/CMakeArgumentBuilder.cpp index c1faceb..f0d1a1d 100644 --- a/src/tpkg/package/CMakeArgumentBuilder.cpp +++ b/src/rhodium/package/CMakeArgumentBuilder.cpp @@ -4,12 +4,12 @@ * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/package/CMakeArgumentBuilder.hpp" +#include "rhodium/package/CMakeArgumentBuilder.hpp" -#include "tpkg/core/StringUtil.hpp" -#include "tpkg/package/BuildVariableExpander.hpp" +#include "rhodium/core/StringUtil.hpp" +#include "rhodium/package/BuildVariableExpander.hpp" -namespace toolkit +namespace rhodium { std::string CMakeArgs::runtime(const std::string &value) { @@ -123,4 +123,4 @@ namespace toolkit return wrapped; } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/package/CMakeArgumentBuilder.hpp b/src/rhodium/package/CMakeArgumentBuilder.hpp similarity index 89% rename from src/tpkg/package/CMakeArgumentBuilder.hpp rename to src/rhodium/package/CMakeArgumentBuilder.hpp index 2039cc1..733d58d 100644 --- a/src/tpkg/package/CMakeArgumentBuilder.hpp +++ b/src/rhodium/package/CMakeArgumentBuilder.hpp @@ -6,15 +6,15 @@ #pragma once -#include "tpkg/model/DependencyDesc.hpp" -#include "tpkg/package/PackageBuilderUtil.hpp" +#include "rhodium/model/DependencyDesc.hpp" +#include "rhodium/package/PackageBuilderUtil.hpp" #include #include #include #include -namespace toolkit +namespace rhodium { class CMakeArgs { @@ -33,4 +33,4 @@ namespace toolkit const std::string &key, const std::string &value); }; -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/package/CMakePackageBuilder.cpp b/src/rhodium/package/CMakePackageBuilder.cpp similarity index 96% rename from src/tpkg/package/CMakePackageBuilder.cpp rename to src/rhodium/package/CMakePackageBuilder.cpp index 68e09ef..2d72b30 100644 --- a/src/tpkg/package/CMakePackageBuilder.cpp +++ b/src/rhodium/package/CMakePackageBuilder.cpp @@ -3,18 +3,18 @@ * @LastEditors: cubevlmu khfahqp@gmail.com * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/package/CMakePackageBuilder.hpp" +#include "rhodium/package/CMakePackageBuilder.hpp" -#include "tpkg/core/FileSystem.hpp" -#include "tpkg/core/Process.hpp" -#include "tpkg/diagnostics/DiagnosticSink.hpp" -#include "tpkg/package/PackageBuilderUtil.hpp" +#include "rhodium/core/FileSystem.hpp" +#include "rhodium/core/Process.hpp" +#include "rhodium/diagnostics/DiagnosticSink.hpp" +#include "rhodium/package/PackageBuilderUtil.hpp" #include #include #include -namespace toolkit +namespace rhodium { bool CMakePackageBuilder::run(const std::string &cmake, @@ -189,4 +189,4 @@ namespace toolkit return true; } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/package/CMakePackageBuilder.hpp b/src/rhodium/package/CMakePackageBuilder.hpp similarity index 93% rename from src/tpkg/package/CMakePackageBuilder.hpp rename to src/rhodium/package/CMakePackageBuilder.hpp index 2b0971d..38f3a5e 100644 --- a/src/tpkg/package/CMakePackageBuilder.hpp +++ b/src/rhodium/package/CMakePackageBuilder.hpp @@ -6,12 +6,12 @@ #pragma once -#include "tpkg/package/PackageBuilder.hpp" +#include "rhodium/package/PackageBuilder.hpp" #include #include -namespace toolkit +namespace rhodium { class CMakePackageBuilder final : public PackageBuilder @@ -36,4 +36,4 @@ namespace toolkit DiagnosticSink &diagnostics); }; -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/package/ConfigureMakePackageBuilder.cpp b/src/rhodium/package/ConfigureMakePackageBuilder.cpp similarity index 90% rename from src/tpkg/package/ConfigureMakePackageBuilder.cpp rename to src/rhodium/package/ConfigureMakePackageBuilder.cpp index 8f1a957..e9c75f5 100644 --- a/src/tpkg/package/ConfigureMakePackageBuilder.cpp +++ b/src/rhodium/package/ConfigureMakePackageBuilder.cpp @@ -4,18 +4,18 @@ * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/package/ConfigureMakePackageBuilder.hpp" +#include "rhodium/package/ConfigureMakePackageBuilder.hpp" -#include "tpkg/core/FileSystem.hpp" -#include "tpkg/core/Process.hpp" -#include "tpkg/diagnostics/DiagnosticSink.hpp" -#include "tpkg/package/MakePackageBuilder.hpp" -#include "tpkg/package/PackageBuilderUtil.hpp" +#include "rhodium/core/FileSystem.hpp" +#include "rhodium/core/Process.hpp" +#include "rhodium/diagnostics/DiagnosticSink.hpp" +#include "rhodium/package/MakePackageBuilder.hpp" +#include "rhodium/package/PackageBuilderUtil.hpp" #include #include -namespace toolkit +namespace rhodium { bool ConfigureMakePackageBuilder::build(const DependencyDesc &dependency, @@ -77,4 +77,4 @@ namespace toolkit return make.build(makeDependency, sourceDir, buildDir, artifactDir, commit, workspaceRoot, preferredToolchain, config, options, artifact, diagnostics); } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/package/ConfigureMakePackageBuilder.hpp b/src/rhodium/package/ConfigureMakePackageBuilder.hpp similarity index 88% rename from src/tpkg/package/ConfigureMakePackageBuilder.hpp rename to src/rhodium/package/ConfigureMakePackageBuilder.hpp index e705864..bcefe25 100644 --- a/src/tpkg/package/ConfigureMakePackageBuilder.hpp +++ b/src/rhodium/package/ConfigureMakePackageBuilder.hpp @@ -6,9 +6,9 @@ #pragma once -#include "tpkg/package/PackageBuilder.hpp" +#include "rhodium/package/PackageBuilder.hpp" -namespace toolkit +namespace rhodium { class ConfigureMakePackageBuilder final : public PackageBuilder @@ -27,4 +27,4 @@ namespace toolkit DiagnosticSink &diagnostics) const override; }; -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/package/CustomPackageBuilder.cpp b/src/rhodium/package/CustomPackageBuilder.cpp similarity index 88% rename from src/tpkg/package/CustomPackageBuilder.cpp rename to src/rhodium/package/CustomPackageBuilder.cpp index de70a9a..26d2dca 100644 --- a/src/tpkg/package/CustomPackageBuilder.cpp +++ b/src/rhodium/package/CustomPackageBuilder.cpp @@ -4,12 +4,12 @@ * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/package/CustomPackageBuilder.hpp" +#include "rhodium/package/CustomPackageBuilder.hpp" -#include "tpkg/core/FileSystem.hpp" -#include "tpkg/core/Process.hpp" -#include "tpkg/diagnostics/DiagnosticSink.hpp" -#include "tpkg/package/PackageBuilderUtil.hpp" +#include "rhodium/core/FileSystem.hpp" +#include "rhodium/core/Process.hpp" +#include "rhodium/diagnostics/DiagnosticSink.hpp" +#include "rhodium/package/PackageBuilderUtil.hpp" #include #include @@ -17,7 +17,7 @@ #include #include -namespace toolkit +namespace rhodium { std::string CustomPackageBuilder::listing(const std::filesystem::path &path) @@ -57,10 +57,10 @@ namespace toolkit diagnostics.info("custom package " + phase + ": " + expanded); #ifdef _WIN32 - const auto scriptPath = context.buildDir / ("tkb-custom-" + phase + "-" + std::to_string(index) + ".cmd"); + const auto scriptPath = context.buildDir / ("rhodium-custom-" + phase + "-" + std::to_string(index) + ".cmd"); const std::string script = "@echo off\r\n" + expanded + "\r\n"; #else - const auto scriptPath = context.buildDir / ("tkb-custom-" + phase + "-" + std::to_string(index) + ".sh"); + const auto scriptPath = context.buildDir / ("rhodium-custom-" + phase + "-" + std::to_string(index) + ".sh"); const std::string script = "#!/bin/sh\nset -e\n" + expanded + "\n"; #endif std::string error; @@ -148,4 +148,4 @@ namespace toolkit return true; } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/package/CustomPackageBuilder.hpp b/src/rhodium/package/CustomPackageBuilder.hpp similarity index 89% rename from src/tpkg/package/CustomPackageBuilder.hpp rename to src/rhodium/package/CustomPackageBuilder.hpp index 7f0e28a..bdfd343 100644 --- a/src/tpkg/package/CustomPackageBuilder.hpp +++ b/src/rhodium/package/CustomPackageBuilder.hpp @@ -6,12 +6,12 @@ #pragma once -#include "tpkg/package/PackageBuilder.hpp" -#include "tpkg/package/PackageBuilderUtil.hpp" +#include "rhodium/package/PackageBuilder.hpp" +#include "rhodium/package/PackageBuilderUtil.hpp" #include -namespace toolkit +namespace rhodium { class CustomPackageBuilder final : public PackageBuilder { @@ -36,4 +36,4 @@ namespace toolkit DiagnosticSink &diagnostics); }; -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/package/GitFetcher.cpp b/src/rhodium/package/GitFetcher.cpp similarity index 88% rename from src/tpkg/package/GitFetcher.cpp rename to src/rhodium/package/GitFetcher.cpp index 27ef12d..38d2aaa 100644 --- a/src/tpkg/package/GitFetcher.cpp +++ b/src/rhodium/package/GitFetcher.cpp @@ -4,12 +4,13 @@ * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/package/GitFetcher.hpp" +#include "rhodium/package/GitFetcher.hpp" -#include "tpkg/core/FileSystem.hpp" -#include "tpkg/diagnostics/DiagnosticSink.hpp" +#include "rhodium/core/FileSystem.hpp" +#include "rhodium/diagnostics/DiagnosticSink.hpp" #include +#include #include #include @@ -17,7 +18,7 @@ #include #include -namespace toolkit +namespace rhodium { class GitFetch @@ -44,6 +45,7 @@ namespace toolkit static bool fetch(git_repository *repo, const std::string &packageName, DiagnosticSink &diagnostics); static bool resolve(git_repository *repo, const std::string &ref, git_object **object); static bool checkout(git_repository *repo, git_object *object, std::string &commit, DiagnosticSink &diagnostics); + static bool submodules(git_repository *repo, const std::string &packageName, DiagnosticSink &diagnostics); }; std::string GitFetch::error(const std::string &prefix) @@ -400,6 +402,42 @@ namespace toolkit return true; } + bool GitFetch::submodules(git_repository *repo, const std::string &packageName, DiagnosticSink &diagnostics) + { + struct Payload + { + DiagnosticSink *diagnostics; + std::string *proxyUrl; + int count; + }; + std::string proxyUrl = proxyEnv(); + Payload payload = {&diagnostics, &proxyUrl, 0}; + + git_submodule_foreach(repo, [](git_submodule *sm, const char *name, void *payload) -> int { + auto *ctx = static_cast(payload); + ctx->count++; + git_submodule_init(sm, 0); + git_submodule_update_options opts = GIT_SUBMODULE_UPDATE_OPTIONS_INIT; + if (!ctx->proxyUrl->empty()) + { + opts.fetch_opts.proxy_opts.type = GIT_PROXY_SPECIFIED; + opts.fetch_opts.proxy_opts.url = ctx->proxyUrl->c_str(); + } + if (git_submodule_update(sm, 1, &opts) != 0) + { + const git_error *e = git_error_last(); + ctx->diagnostics->warning(std::string("failed to update submodule ") + name + ": " + (e && e->message ? e->message : "unknown error")); + } + return 0; + }, &payload); + + if (payload.count > 0) + { + diagnostics.info("initialized " + std::to_string(payload.count) + " git submodule(s) for " + packageName); + } + return true; + } + bool GitFetcher::initialize(DiagnosticSink &diagnostics) const { const int result = git_libgit2_init(); @@ -439,6 +477,10 @@ namespace toolkit { ok = GitFetch::checkout(repo, object, commit, diagnostics); } + if (ok) + { + GitFetch::submodules(repo, dependency.name, diagnostics); + } if (object) { @@ -454,4 +496,4 @@ namespace toolkit return ok; } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/package/GitFetcher.hpp b/src/rhodium/package/GitFetcher.hpp similarity index 87% rename from src/tpkg/package/GitFetcher.hpp rename to src/rhodium/package/GitFetcher.hpp index 8e84dba..8e140c8 100644 --- a/src/tpkg/package/GitFetcher.hpp +++ b/src/rhodium/package/GitFetcher.hpp @@ -6,11 +6,11 @@ #pragma once -#include "tpkg/model/DependencyDesc.hpp" +#include "rhodium/model/DependencyDesc.hpp" #include -namespace toolkit +namespace rhodium { class DiagnosticSink; @@ -23,4 +23,4 @@ namespace toolkit bool fetch(const DependencyDesc &dependency, const std::filesystem::path &destination, std::string &commit, DiagnosticSink &diagnostics) const; }; -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/package/HeaderOnlyPackageBuilder.cpp b/src/rhodium/package/HeaderOnlyPackageBuilder.cpp similarity index 90% rename from src/tpkg/package/HeaderOnlyPackageBuilder.cpp rename to src/rhodium/package/HeaderOnlyPackageBuilder.cpp index 8b03e23..f03c6a3 100644 --- a/src/tpkg/package/HeaderOnlyPackageBuilder.cpp +++ b/src/rhodium/package/HeaderOnlyPackageBuilder.cpp @@ -4,13 +4,13 @@ * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/package/HeaderOnlyPackageBuilder.hpp" +#include "rhodium/package/HeaderOnlyPackageBuilder.hpp" -#include "tpkg/core/FileSystem.hpp" -#include "tpkg/diagnostics/DiagnosticSink.hpp" -#include "tpkg/package/PackageBuilderUtil.hpp" +#include "rhodium/core/FileSystem.hpp" +#include "rhodium/diagnostics/DiagnosticSink.hpp" +#include "rhodium/package/PackageBuilderUtil.hpp" -namespace toolkit +namespace rhodium { bool HeaderOnlyPackageBuilder::build(const DependencyDesc &dependency, @@ -58,4 +58,4 @@ namespace toolkit return true; } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/package/HeaderOnlyPackageBuilder.hpp b/src/rhodium/package/HeaderOnlyPackageBuilder.hpp similarity index 88% rename from src/tpkg/package/HeaderOnlyPackageBuilder.hpp rename to src/rhodium/package/HeaderOnlyPackageBuilder.hpp index a5c11f9..d6c1b66 100644 --- a/src/tpkg/package/HeaderOnlyPackageBuilder.hpp +++ b/src/rhodium/package/HeaderOnlyPackageBuilder.hpp @@ -6,9 +6,9 @@ #pragma once -#include "tpkg/package/PackageBuilder.hpp" +#include "rhodium/package/PackageBuilder.hpp" -namespace toolkit +namespace rhodium { class HeaderOnlyPackageBuilder final : public PackageBuilder @@ -27,4 +27,4 @@ namespace toolkit DiagnosticSink &diagnostics) const override; }; -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/package/MakePackageBuilder.cpp b/src/rhodium/package/MakePackageBuilder.cpp similarity index 91% rename from src/tpkg/package/MakePackageBuilder.cpp rename to src/rhodium/package/MakePackageBuilder.cpp index 95ea362..3c34f75 100644 --- a/src/tpkg/package/MakePackageBuilder.cpp +++ b/src/rhodium/package/MakePackageBuilder.cpp @@ -4,17 +4,17 @@ * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/package/MakePackageBuilder.hpp" +#include "rhodium/package/MakePackageBuilder.hpp" -#include "tpkg/core/FileSystem.hpp" -#include "tpkg/core/Process.hpp" -#include "tpkg/diagnostics/DiagnosticSink.hpp" -#include "tpkg/package/PackageBuilderUtil.hpp" +#include "rhodium/core/FileSystem.hpp" +#include "rhodium/core/Process.hpp" +#include "rhodium/diagnostics/DiagnosticSink.hpp" +#include "rhodium/package/PackageBuilderUtil.hpp" #include #include -namespace toolkit +namespace rhodium { bool MakePackageBuilder::run(const std::filesystem::path &workingDir, @@ -111,4 +111,4 @@ namespace toolkit return true; } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/package/MakePackageBuilder.hpp b/src/rhodium/package/MakePackageBuilder.hpp similarity index 90% rename from src/tpkg/package/MakePackageBuilder.hpp rename to src/rhodium/package/MakePackageBuilder.hpp index 4788669..c1cd85f 100644 --- a/src/tpkg/package/MakePackageBuilder.hpp +++ b/src/rhodium/package/MakePackageBuilder.hpp @@ -6,12 +6,12 @@ #pragma once -#include "tpkg/package/PackageBuilder.hpp" -#include "tpkg/package/PackageBuilderUtil.hpp" +#include "rhodium/package/PackageBuilder.hpp" +#include "rhodium/package/PackageBuilderUtil.hpp" #include -namespace toolkit +namespace rhodium { class MakePackageBuilder final : public PackageBuilder @@ -38,4 +38,4 @@ namespace toolkit DiagnosticSink &diagnostics); }; -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/package/PackageArtifact.hpp b/src/rhodium/package/PackageArtifact.hpp similarity index 83% rename from src/tpkg/package/PackageArtifact.hpp rename to src/rhodium/package/PackageArtifact.hpp index c4ef0fe..6bb7982 100644 --- a/src/tpkg/package/PackageArtifact.hpp +++ b/src/rhodium/package/PackageArtifact.hpp @@ -6,12 +6,12 @@ #pragma once -#include "tpkg/model/DependencyDesc.hpp" +#include "rhodium/model/DependencyDesc.hpp" #include #include -namespace toolkit +namespace rhodium { struct PackageArtifact @@ -24,4 +24,4 @@ namespace toolkit DependencyArtifacts artifacts; }; -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/package/PackageArtifactStore.cpp b/src/rhodium/package/PackageArtifactStore.cpp similarity index 95% rename from src/tpkg/package/PackageArtifactStore.cpp rename to src/rhodium/package/PackageArtifactStore.cpp index 14d1d47..a5df11f 100644 --- a/src/tpkg/package/PackageArtifactStore.cpp +++ b/src/rhodium/package/PackageArtifactStore.cpp @@ -4,10 +4,10 @@ * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/package/PackageArtifactStore.hpp" +#include "rhodium/package/PackageArtifactStore.hpp" -#include "tpkg/core/FileSystem.hpp" -#include "tpkg/diagnostics/DiagnosticSink.hpp" +#include "rhodium/core/FileSystem.hpp" +#include "rhodium/diagnostics/DiagnosticSink.hpp" #include #include @@ -15,7 +15,7 @@ #include #include -namespace toolkit +namespace rhodium { void ArtifactStore::writeArray(std::ostringstream &stream, const char *key, const std::vector &values) { @@ -115,4 +115,4 @@ namespace toolkit } } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/package/PackageArtifactStore.hpp b/src/rhodium/package/PackageArtifactStore.hpp similarity index 90% rename from src/tpkg/package/PackageArtifactStore.hpp rename to src/rhodium/package/PackageArtifactStore.hpp index 895dc7c..3d1dbbc 100644 --- a/src/tpkg/package/PackageArtifactStore.hpp +++ b/src/rhodium/package/PackageArtifactStore.hpp @@ -6,13 +6,13 @@ #pragma once -#include "tpkg/package/PackageArtifact.hpp" +#include "rhodium/package/PackageArtifact.hpp" #include #include #include -namespace toolkit +namespace rhodium { class DiagnosticSink; @@ -30,4 +30,4 @@ namespace toolkit static std::vector readArray(const toml::table &table, const char *key); }; -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/package/PackageBuilder.hpp b/src/rhodium/package/PackageBuilder.hpp similarity index 89% rename from src/tpkg/package/PackageBuilder.hpp rename to src/rhodium/package/PackageBuilder.hpp index 684fa22..41696f7 100644 --- a/src/tpkg/package/PackageBuilder.hpp +++ b/src/rhodium/package/PackageBuilder.hpp @@ -6,12 +6,12 @@ #pragma once -#include "tpkg/model/DependencyDesc.hpp" -#include "tpkg/package/PackageArtifact.hpp" +#include "rhodium/model/DependencyDesc.hpp" +#include "rhodium/package/PackageArtifact.hpp" #include -namespace toolkit +namespace rhodium { class DiagnosticSink; @@ -39,4 +39,4 @@ namespace toolkit DiagnosticSink &diagnostics) const = 0; }; -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/package/PackageBuilderUtil.cpp b/src/rhodium/package/PackageBuilderUtil.cpp similarity index 86% rename from src/tpkg/package/PackageBuilderUtil.cpp rename to src/rhodium/package/PackageBuilderUtil.cpp index 394fb02..150bc44 100644 --- a/src/tpkg/package/PackageBuilderUtil.cpp +++ b/src/rhodium/package/PackageBuilderUtil.cpp @@ -4,19 +4,19 @@ * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/package/PackageBuilderUtil.hpp" +#include "rhodium/package/PackageBuilderUtil.hpp" -#include "tpkg/core/FileSystem.hpp" -#include "tpkg/diagnostics/DiagnosticSink.hpp" -#include "tpkg/package/ArtifactMaterializer.hpp" -#include "tpkg/package/ArtifactValidator.hpp" -#include "tpkg/package/BuildVariableExpander.hpp" -#include "tpkg/package/CMakeArgumentBuilder.hpp" -#include "tpkg/package/ToolchainContextResolver.hpp" +#include "rhodium/core/FileSystem.hpp" +#include "rhodium/diagnostics/DiagnosticSink.hpp" +#include "rhodium/package/ArtifactMaterializer.hpp" +#include "rhodium/package/ArtifactValidator.hpp" +#include "rhodium/package/BuildVariableExpander.hpp" +#include "rhodium/package/CMakeArgumentBuilder.hpp" +#include "rhodium/package/ToolchainContextResolver.hpp" #include -namespace toolkit +namespace rhodium { bool BuildUtil::toolchain(Context &context, @@ -86,4 +86,4 @@ namespace toolkit return ArtifactCheck::validate(context, artifacts, diagnostics); } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/package/PackageBuilderUtil.hpp b/src/rhodium/package/PackageBuilderUtil.hpp similarity index 96% rename from src/tpkg/package/PackageBuilderUtil.hpp rename to src/rhodium/package/PackageBuilderUtil.hpp index 4a33e90..13b698f 100644 --- a/src/tpkg/package/PackageBuilderUtil.hpp +++ b/src/rhodium/package/PackageBuilderUtil.hpp @@ -5,19 +5,19 @@ */ #pragma once -#include "tpkg/model/DependencyDesc.hpp" +#include "rhodium/model/DependencyDesc.hpp" #include #include #include #include -namespace toolkit +namespace rhodium { class DiagnosticSink; } -namespace toolkit +namespace rhodium { class BuildUtil { @@ -66,4 +66,4 @@ namespace toolkit const DependencyArtifacts &artifacts, DiagnosticSink &diagnostics); }; -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/package/PackageCache.cpp b/src/rhodium/package/PackageCache.cpp similarity index 93% rename from src/tpkg/package/PackageCache.cpp rename to src/rhodium/package/PackageCache.cpp index 2d09241..d8b0b76 100644 --- a/src/tpkg/package/PackageCache.cpp +++ b/src/rhodium/package/PackageCache.cpp @@ -4,15 +4,15 @@ * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/package/PackageCache.hpp" +#include "rhodium/package/PackageCache.hpp" -#include "tpkg/core/FileSystem.hpp" -#include "tpkg/core/Hash.hpp" -#include "tpkg/core/Path.hpp" +#include "rhodium/core/FileSystem.hpp" +#include "rhodium/core/Hash.hpp" +#include "rhodium/core/Path.hpp" #include -namespace toolkit +namespace rhodium { std::string PackageCache::sourceName(const DependencyDesc &dependency) { @@ -91,4 +91,4 @@ namespace toolkit return File::mkdir(root_, error); } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/package/PackageCache.hpp b/src/rhodium/package/PackageCache.hpp similarity index 92% rename from src/tpkg/package/PackageCache.hpp rename to src/rhodium/package/PackageCache.hpp index 13a9825..ac76a7c 100644 --- a/src/tpkg/package/PackageCache.hpp +++ b/src/rhodium/package/PackageCache.hpp @@ -6,11 +6,11 @@ #pragma once -#include "tpkg/model/DependencyDesc.hpp" +#include "rhodium/model/DependencyDesc.hpp" #include -namespace toolkit +namespace rhodium { class PackageCache @@ -33,4 +33,4 @@ namespace toolkit std::filesystem::path root_; }; -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/package/PatchApplier.cpp b/src/rhodium/package/PatchApplier.cpp similarity index 95% rename from src/tpkg/package/PatchApplier.cpp rename to src/rhodium/package/PatchApplier.cpp index eaa9188..4aba58c 100644 --- a/src/tpkg/package/PatchApplier.cpp +++ b/src/rhodium/package/PatchApplier.cpp @@ -4,18 +4,18 @@ * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/package/PatchApplier.hpp" +#include "rhodium/package/PatchApplier.hpp" -#include "tpkg/core/FileSystem.hpp" -#include "tpkg/core/Process.hpp" -#include "tpkg/diagnostics/DiagnosticSink.hpp" -#include "tpkg/toolchain/ToolchainDetector.hpp" -#include "tpkg/utils/Sha256.hpp" +#include "rhodium/core/FileSystem.hpp" +#include "rhodium/core/Process.hpp" +#include "rhodium/diagnostics/DiagnosticSink.hpp" +#include "rhodium/toolchain/ToolchainDetector.hpp" +#include "rhodium/utils/Sha256.hpp" #include #include -namespace toolkit +namespace rhodium { std::filesystem::path PatchApplier::path(const std::filesystem::path &workspaceRoot, const std::string &patch) { diff --git a/src/tpkg/package/PatchApplier.hpp b/src/rhodium/package/PatchApplier.hpp similarity index 98% rename from src/tpkg/package/PatchApplier.hpp rename to src/rhodium/package/PatchApplier.hpp index cb1edb4..373dac6 100644 --- a/src/tpkg/package/PatchApplier.hpp +++ b/src/rhodium/package/PatchApplier.hpp @@ -10,7 +10,7 @@ #include #include -namespace toolkit +namespace rhodium { class DiagnosticSink; diff --git a/src/tpkg/package/PrebuiltPackageBuilder.cpp b/src/rhodium/package/PrebuiltPackageBuilder.cpp similarity index 92% rename from src/tpkg/package/PrebuiltPackageBuilder.cpp rename to src/rhodium/package/PrebuiltPackageBuilder.cpp index 2d5f92a..aa53f32 100644 --- a/src/tpkg/package/PrebuiltPackageBuilder.cpp +++ b/src/rhodium/package/PrebuiltPackageBuilder.cpp @@ -4,15 +4,15 @@ * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/package/PrebuiltPackageBuilder.hpp" +#include "rhodium/package/PrebuiltPackageBuilder.hpp" -#include "tpkg/core/FileSystem.hpp" -#include "tpkg/diagnostics/DiagnosticSink.hpp" -#include "tpkg/package/PackageBuilderUtil.hpp" +#include "rhodium/core/FileSystem.hpp" +#include "rhodium/diagnostics/DiagnosticSink.hpp" +#include "rhodium/package/PackageBuilderUtil.hpp" #include -namespace toolkit +namespace rhodium { bool PrebuiltPackageBuilder::dirs(const std::filesystem::path &root, @@ -80,4 +80,4 @@ namespace toolkit return true; } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/package/PrebuiltPackageBuilder.hpp b/src/rhodium/package/PrebuiltPackageBuilder.hpp similarity index 92% rename from src/tpkg/package/PrebuiltPackageBuilder.hpp rename to src/rhodium/package/PrebuiltPackageBuilder.hpp index c24e382..32bf7b9 100644 --- a/src/tpkg/package/PrebuiltPackageBuilder.hpp +++ b/src/rhodium/package/PrebuiltPackageBuilder.hpp @@ -6,11 +6,11 @@ #pragma once -#include "tpkg/package/PackageBuilder.hpp" +#include "rhodium/package/PackageBuilder.hpp" #include -namespace toolkit +namespace rhodium { class PrebuiltPackageBuilder final : public PackageBuilder @@ -35,4 +35,4 @@ namespace toolkit DiagnosticSink &diagnostics); }; -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/package/ToolchainContextResolver.cpp b/src/rhodium/package/ToolchainContextResolver.cpp similarity index 76% rename from src/tpkg/package/ToolchainContextResolver.cpp rename to src/rhodium/package/ToolchainContextResolver.cpp index a90a219..1770204 100644 --- a/src/tpkg/package/ToolchainContextResolver.cpp +++ b/src/rhodium/package/ToolchainContextResolver.cpp @@ -4,15 +4,64 @@ * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/package/ToolchainContextResolver.hpp" +#include "rhodium/package/ToolchainContextResolver.hpp" -#include "tpkg/core/StringUtil.hpp" -#include "tpkg/diagnostics/DiagnosticSink.hpp" -#include "tpkg/toolchain/ToolchainDetector.hpp" -#include "tpkg/toolchain/ToolchainRegistry.hpp" +#include "rhodium/core/StringUtil.hpp" +#include "rhodium/diagnostics/DiagnosticSink.hpp" +#include "rhodium/toolchain/ToolchainDetector.hpp" +#include "rhodium/toolchain/ToolchainRegistry.hpp" -namespace toolkit +#include +#include +#include + +namespace rhodium { + namespace + { + std::vector availableProfiles(const std::filesystem::path &workspaceRoot, + DiagnosticSink &diagnostics) + { + std::vector profiles = detectHostToolchains(workspaceRoot, diagnostics); + if (workspaceRoot.empty()) + { + return profiles; + } + + std::map byId; + for (std::size_t index = 0; index < profiles.size(); ++index) + { + if (!profiles[index].id.empty()) + { + byId[profiles[index].id] = index; + } + } + + for (const auto &loaded : loadMergedToolchains(workspaceRoot, diagnostics)) + { + if (loaded.profile.id.empty()) + { + continue; + } + const auto found = byId.find(loaded.profile.id); + if (loaded.source == ToolchainSource::AutoDetected && found != byId.end()) + { + continue; + } + if (found == byId.end()) + { + byId[loaded.profile.id] = profiles.size(); + profiles.push_back(loaded.profile); + } + else + { + profiles[found->second] = loaded.profile; + } + } + return profiles; + } + } + bool BuildToolchain::matches(const ToolchainProfile &profile, const ToolchainRequirements &requirements) { const auto family = StringUtils::toLower(requirements.family); @@ -106,7 +155,7 @@ namespace toolkit NullDiagnosticSink diagnostics; DiagnosticSink &sink = providedDiagnostics ? *providedDiagnostics : diagnostics; - const auto profiles = detectHostToolchains(sink); + const auto profiles = availableProfiles(context.workspaceRoot, sink); if (profiles.empty()) { return false; @@ -189,4 +238,4 @@ namespace toolkit return true; } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/package/ToolchainContextResolver.hpp b/src/rhodium/package/ToolchainContextResolver.hpp similarity index 78% rename from src/tpkg/package/ToolchainContextResolver.hpp rename to src/rhodium/package/ToolchainContextResolver.hpp index 8b29216..4337848 100644 --- a/src/tpkg/package/ToolchainContextResolver.hpp +++ b/src/rhodium/package/ToolchainContextResolver.hpp @@ -6,18 +6,18 @@ #pragma once -#include "tpkg/model/DependencyDesc.hpp" -#include "tpkg/package/PackageBuilderUtil.hpp" -#include "tpkg/toolchain/Toolchain.hpp" +#include "rhodium/model/DependencyDesc.hpp" +#include "rhodium/package/PackageBuilderUtil.hpp" +#include "rhodium/toolchain/Toolchain.hpp" #include -namespace toolkit +namespace rhodium { class DiagnosticSink; } -namespace toolkit +namespace rhodium { class BuildToolchain { @@ -31,4 +31,4 @@ namespace toolkit static bool matches(const ToolchainProfile &profile, const ToolchainRequirements &requirements); static bool has(const ToolchainRequirements &requirements); }; -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/resolve/DependencyBuildStep.cpp b/src/rhodium/resolve/DependencyBuildStep.cpp similarity index 92% rename from src/tpkg/resolve/DependencyBuildStep.cpp rename to src/rhodium/resolve/DependencyBuildStep.cpp index bc1dbf7..b8add05 100644 --- a/src/tpkg/resolve/DependencyBuildStep.cpp +++ b/src/rhodium/resolve/DependencyBuildStep.cpp @@ -1,24 +1,26 @@ -#include "tpkg/resolve/DependencyBuildStep.hpp" +#include "rhodium/core/Path.hpp" -#include "tpkg/config/BuildConfig.hpp" -#include "tpkg/config/LockFile.hpp" -#include "tpkg/core/FileSystem.hpp" -#include "tpkg/core/StringUtil.hpp" -#include "tpkg/diagnostics/DiagnosticSink.hpp" -#include "tpkg/package/CMakePackageBuilder.hpp" -#include "tpkg/package/ConfigureMakePackageBuilder.hpp" -#include "tpkg/package/CustomPackageBuilder.hpp" -#include "tpkg/package/HeaderOnlyPackageBuilder.hpp" -#include "tpkg/package/MakePackageBuilder.hpp" -#include "tpkg/package/PackageCache.hpp" -#include "tpkg/package/PrebuiltPackageBuilder.hpp" -#include "tpkg/resolve/DependencyExportStep.hpp" -#include "tpkg/resolve/DependencyLockStep.hpp" +#include "rhodium/resolve/DependencyBuildStep.hpp" + +#include "rhodium/config/BuildConfig.hpp" +#include "rhodium/config/LockFile.hpp" +#include "rhodium/core/FileSystem.hpp" +#include "rhodium/core/StringUtil.hpp" +#include "rhodium/diagnostics/DiagnosticSink.hpp" +#include "rhodium/package/CMakePackageBuilder.hpp" +#include "rhodium/package/ConfigureMakePackageBuilder.hpp" +#include "rhodium/package/CustomPackageBuilder.hpp" +#include "rhodium/package/HeaderOnlyPackageBuilder.hpp" +#include "rhodium/package/MakePackageBuilder.hpp" +#include "rhodium/package/PackageCache.hpp" +#include "rhodium/package/PrebuiltPackageBuilder.hpp" +#include "rhodium/resolve/DependencyExportStep.hpp" +#include "rhodium/resolve/DependencyLockStep.hpp" #include #include -namespace toolkit +namespace rhodium { bool DepBuild::run(const DependencyDesc &dependency, @@ -40,7 +42,7 @@ namespace toolkit const auto buildKey = key(context.effectiveConfig, context.preferredToolchain); const auto buildDir = context.cache.build(dependency, buildKey); - result.artifactDir = context.workspaceRoot / ".tpkg" / "artifacts" / result.updated.artifactId; + result.artifactDir = Path::stateRoot(context.workspaceRoot) / "artifacts" / result.updated.artifactId; const bool artifactReusable = !dependency.local && locked && !wantsUpdate && @@ -309,4 +311,4 @@ namespace toolkit return File::exists(buildDir / ".tpkg_build_complete"); } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/resolve/DependencyBuildStep.hpp b/src/rhodium/resolve/DependencyBuildStep.hpp similarity index 90% rename from src/tpkg/resolve/DependencyBuildStep.hpp rename to src/rhodium/resolve/DependencyBuildStep.hpp index 1ddb401..576a9ca 100644 --- a/src/tpkg/resolve/DependencyBuildStep.hpp +++ b/src/rhodium/resolve/DependencyBuildStep.hpp @@ -1,17 +1,17 @@ #pragma once -#include "tpkg/config/LockFile.hpp" -#include "tpkg/model/DependencyDesc.hpp" -#include "tpkg/package/PackageArtifact.hpp" -#include "tpkg/package/PackageBuilder.hpp" -#include "tpkg/resolve/DependencyResolver.hpp" +#include "rhodium/config/LockFile.hpp" +#include "rhodium/model/DependencyDesc.hpp" +#include "rhodium/package/PackageArtifact.hpp" +#include "rhodium/package/PackageBuilder.hpp" +#include "rhodium/resolve/DependencyResolver.hpp" #include #include #include #include -namespace toolkit +namespace rhodium { class DiagnosticSink; @@ -70,4 +70,4 @@ namespace toolkit static bool completed(const std::filesystem::path &buildDir); }; -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/resolve/DependencyExportStep.cpp b/src/rhodium/resolve/DependencyExportStep.cpp similarity index 92% rename from src/tpkg/resolve/DependencyExportStep.cpp rename to src/rhodium/resolve/DependencyExportStep.cpp index 0e38e9d..1866457 100644 --- a/src/tpkg/resolve/DependencyExportStep.cpp +++ b/src/rhodium/resolve/DependencyExportStep.cpp @@ -1,13 +1,13 @@ -#include "tpkg/resolve/DependencyExportStep.hpp" +#include "rhodium/resolve/DependencyExportStep.hpp" -#include "tpkg/config/BuildConfig.hpp" -#include "tpkg/core/FileSystem.hpp" -#include "tpkg/diagnostics/DiagnosticSink.hpp" -#include "tpkg/package/ArtifactGc.hpp" -#include "tpkg/package/PackageArtifactStore.hpp" -#include "tpkg/package/PackageBuilderUtil.hpp" +#include "rhodium/config/BuildConfig.hpp" +#include "rhodium/core/FileSystem.hpp" +#include "rhodium/diagnostics/DiagnosticSink.hpp" +#include "rhodium/package/ArtifactGc.hpp" +#include "rhodium/package/PackageArtifactStore.hpp" +#include "rhodium/package/PackageBuilderUtil.hpp" -namespace toolkit +namespace rhodium { bool DepExport::write(PackageArtifact &artifact, @@ -117,4 +117,4 @@ namespace toolkit ArtifactGc::runSourceCaches(lockFile, workspaceRoot, true, packageName, diagnostics); } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/resolve/DependencyExportStep.hpp b/src/rhodium/resolve/DependencyExportStep.hpp similarity index 92% rename from src/tpkg/resolve/DependencyExportStep.hpp rename to src/rhodium/resolve/DependencyExportStep.hpp index 8f964cb..1980ef9 100644 --- a/src/tpkg/resolve/DependencyExportStep.hpp +++ b/src/rhodium/resolve/DependencyExportStep.hpp @@ -1,11 +1,11 @@ #pragma once -#include "tpkg/config/LockFile.hpp" +#include "rhodium/config/LockFile.hpp" #include #include -namespace toolkit +namespace rhodium { class DiagnosticSink; @@ -32,4 +32,4 @@ namespace toolkit static bool artifactsEqual(const DependencyArtifacts &left, const DependencyArtifacts &right); }; -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/resolve/DependencyFetchStep.cpp b/src/rhodium/resolve/DependencyFetchStep.cpp similarity index 93% rename from src/tpkg/resolve/DependencyFetchStep.cpp rename to src/rhodium/resolve/DependencyFetchStep.cpp index c77691d..43f101e 100644 --- a/src/tpkg/resolve/DependencyFetchStep.cpp +++ b/src/rhodium/resolve/DependencyFetchStep.cpp @@ -1,16 +1,18 @@ -#include "tpkg/resolve/DependencyFetchStep.hpp" +#include "rhodium/core/Path.hpp" -#include "tpkg/core/FileSystem.hpp" -#include "tpkg/diagnostics/DiagnosticSink.hpp" -#include "tpkg/package/Archive.hpp" -#include "tpkg/package/GitFetcher.hpp" -#include "tpkg/package/PackageCache.hpp" -#include "tpkg/resolve/DependencyExportStep.hpp" -#include "tpkg/resolve/DependencyLockStep.hpp" +#include "rhodium/resolve/DependencyFetchStep.hpp" + +#include "rhodium/core/FileSystem.hpp" +#include "rhodium/diagnostics/DiagnosticSink.hpp" +#include "rhodium/package/Archive.hpp" +#include "rhodium/package/GitFetcher.hpp" +#include "rhodium/package/PackageCache.hpp" +#include "rhodium/resolve/DependencyExportStep.hpp" +#include "rhodium/resolve/DependencyLockStep.hpp" #include -namespace toolkit +namespace rhodium { bool DepFetch::source(DependencyDesc &dependency, @@ -55,7 +57,7 @@ namespace toolkit context.preferredToolchain, context.options.toolchainContentHash); expected.source = DepLock::source(context.workspaceRoot, dependency); - if (DepExport::reusable(*locked, expected, context.workspaceRoot / ".tpkg" / "artifacts" / expected.artifactId)) + if (DepExport::reusable(*locked, expected, Path::stateRoot(context.workspaceRoot) / "artifacts" / expected.artifactId)) { diagnostics.info("package artifact is up to date; skipping archive build: " + dependency.name); if (!DepExport::gc(context.lockFile, @@ -94,7 +96,7 @@ namespace toolkit context.preferredToolchain, context.options.toolchainContentHash); expected.source = DepLock::source(context.workspaceRoot, dependency); - if (DepExport::reusable(*locked, expected, context.workspaceRoot / ".tpkg" / "artifacts" / expected.artifactId)) + if (DepExport::reusable(*locked, expected, Path::stateRoot(context.workspaceRoot) / "artifacts" / expected.artifactId)) { diagnostics.info("package artifact is up to date; skipping git sync and build: " + dependency.name); if (!DepExport::gc(context.lockFile, @@ -287,4 +289,4 @@ namespace toolkit return fetchDependency; } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/resolve/DependencyFetchStep.hpp b/src/rhodium/resolve/DependencyFetchStep.hpp similarity index 92% rename from src/tpkg/resolve/DependencyFetchStep.hpp rename to src/rhodium/resolve/DependencyFetchStep.hpp index 815f2d0..1fbb2db 100644 --- a/src/tpkg/resolve/DependencyFetchStep.hpp +++ b/src/rhodium/resolve/DependencyFetchStep.hpp @@ -1,13 +1,13 @@ #pragma once -#include "tpkg/config/LockFile.hpp" -#include "tpkg/model/DependencyDesc.hpp" -#include "tpkg/resolve/DependencyResolver.hpp" +#include "rhodium/config/LockFile.hpp" +#include "rhodium/model/DependencyDesc.hpp" +#include "rhodium/resolve/DependencyResolver.hpp" #include #include -namespace toolkit +namespace rhodium { class DiagnosticSink; @@ -61,4 +61,4 @@ namespace toolkit const DependencyDesc &dependency); }; -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/resolve/DependencyGraph.cpp b/src/rhodium/resolve/DependencyGraph.cpp similarity index 93% rename from src/tpkg/resolve/DependencyGraph.cpp rename to src/rhodium/resolve/DependencyGraph.cpp index 4edb045..bd808f3 100644 --- a/src/tpkg/resolve/DependencyGraph.cpp +++ b/src/rhodium/resolve/DependencyGraph.cpp @@ -1,12 +1,12 @@ -#include "tpkg/resolve/DependencyGraph.hpp" +#include "rhodium/resolve/DependencyGraph.hpp" -#include "tpkg/diagnostics/DiagnosticSink.hpp" +#include "rhodium/diagnostics/DiagnosticSink.hpp" #include #include #include -namespace toolkit +namespace rhodium { bool DepGraph::build(const BuildModel &model, @@ -72,4 +72,4 @@ namespace toolkit return true; } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/resolve/DependencyGraph.hpp b/src/rhodium/resolve/DependencyGraph.hpp similarity index 78% rename from src/tpkg/resolve/DependencyGraph.hpp rename to src/rhodium/resolve/DependencyGraph.hpp index 2f994a6..1fd44ed 100644 --- a/src/tpkg/resolve/DependencyGraph.hpp +++ b/src/rhodium/resolve/DependencyGraph.hpp @@ -1,10 +1,10 @@ #pragma once -#include "tpkg/model/BuildModel.hpp" +#include "rhodium/model/BuildModel.hpp" #include -namespace toolkit +namespace rhodium { class DiagnosticSink; @@ -17,4 +17,4 @@ namespace toolkit DiagnosticSink &diagnostics); }; -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/resolve/DependencyLockStep.cpp b/src/rhodium/resolve/DependencyLockStep.cpp similarity index 94% rename from src/tpkg/resolve/DependencyLockStep.cpp rename to src/rhodium/resolve/DependencyLockStep.cpp index 5dbda1b..5dda1f5 100644 --- a/src/tpkg/resolve/DependencyLockStep.cpp +++ b/src/rhodium/resolve/DependencyLockStep.cpp @@ -1,11 +1,11 @@ -#include "tpkg/resolve/DependencyLockStep.hpp" +#include "rhodium/resolve/DependencyLockStep.hpp" -#include "tpkg/config/BuildConfig.hpp" -#include "tpkg/resolve/DependencyFetchStep.hpp" +#include "rhodium/config/BuildConfig.hpp" +#include "rhodium/resolve/DependencyFetchStep.hpp" #include -namespace toolkit +namespace rhodium { bool DepLock::same(const LockedPackage &package, const DependencyDesc &dependency) @@ -107,4 +107,4 @@ namespace toolkit return path.generic_string(); } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/resolve/DependencyLockStep.hpp b/src/rhodium/resolve/DependencyLockStep.hpp similarity index 92% rename from src/tpkg/resolve/DependencyLockStep.hpp rename to src/rhodium/resolve/DependencyLockStep.hpp index b48db85..c5c9bce 100644 --- a/src/tpkg/resolve/DependencyLockStep.hpp +++ b/src/rhodium/resolve/DependencyLockStep.hpp @@ -1,11 +1,11 @@ #pragma once -#include "tpkg/config/LockFile.hpp" +#include "rhodium/config/LockFile.hpp" #include #include -namespace toolkit +namespace rhodium { class DepLock @@ -29,4 +29,4 @@ namespace toolkit const std::string &config); }; -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/resolve/DependencyResolver.cpp b/src/rhodium/resolve/DependencyResolver.cpp similarity index 79% rename from src/tpkg/resolve/DependencyResolver.cpp rename to src/rhodium/resolve/DependencyResolver.cpp index f0275cd..9588a73 100644 --- a/src/tpkg/resolve/DependencyResolver.cpp +++ b/src/rhodium/resolve/DependencyResolver.cpp @@ -1,15 +1,17 @@ -#include "tpkg/resolve/DependencyResolver.hpp" - -#include "tpkg/config/BuildConfig.hpp" -#include "tpkg/config/LockFile.hpp" -#include "tpkg/diagnostics/DiagnosticSink.hpp" -#include "tpkg/package/GitFetcher.hpp" -#include "tpkg/package/PackageCache.hpp" -#include "tpkg/resolve/DependencyBuildStep.hpp" -#include "tpkg/resolve/DependencyExportStep.hpp" -#include "tpkg/resolve/DependencyFetchStep.hpp" -#include "tpkg/resolve/DependencyGraph.hpp" -#include "tpkg/resolve/DependencyLockStep.hpp" +#include "rhodium/core/Path.hpp" + +#include "rhodium/resolve/DependencyResolver.hpp" + +#include "rhodium/config/BuildConfig.hpp" +#include "rhodium/config/LockFile.hpp" +#include "rhodium/diagnostics/DiagnosticSink.hpp" +#include "rhodium/package/GitFetcher.hpp" +#include "rhodium/package/PackageCache.hpp" +#include "rhodium/resolve/DependencyBuildStep.hpp" +#include "rhodium/resolve/DependencyExportStep.hpp" +#include "rhodium/resolve/DependencyFetchStep.hpp" +#include "rhodium/resolve/DependencyGraph.hpp" +#include "rhodium/resolve/DependencyLockStep.hpp" #include #include @@ -17,7 +19,7 @@ #include #include -namespace toolkit +namespace rhodium { bool DependencyResolver::restore(const BuildModel &model, @@ -34,11 +36,11 @@ namespace toolkit return false; } - PackageCache cache(workspaceRoot / ".tpkg" / "packages"); + PackageCache cache(Path::stateRoot(workspaceRoot) / "packages"); std::string error; if (!cache.mkdir(&error)) { - diagnostics.error("failed to create .tpkg/packages: " + error); + diagnostics.error("failed to create source cache: " + error); return false; } @@ -61,6 +63,39 @@ namespace toolkit { auto dependency = originalDependency; DepBuild::applyConfig(dependency, effectiveConfig); + + if (!dependency.dependencies.empty()) + { + std::vector prefixPaths; + for (const auto &depName : dependency.dependencies) + { + for (const auto &entry : lockFile.packages) + { + if (entry.name == depName && + BuildConfig::normalize(entry.config) == BuildConfig::normalize(effectiveConfig) && + entry.toolchainId == preferredToolchain) + { + auto depArtifactDir = Path::stateRoot(workspaceRoot) / "artifacts" / entry.artifactId; + if (std::filesystem::is_directory(depArtifactDir)) + { + prefixPaths.push_back(depArtifactDir.string()); + } + break; + } + } + } + if (!prefixPaths.empty()) + { + std::string prefixArg = "-DCMAKE_PREFIX_PATH="; + for (size_t i = 0; i < prefixPaths.size(); ++i) + { + if (i > 0) prefixArg += ";"; + prefixArg += prefixPaths[i]; + } + dependency.cmake.configureArgs.insert(dependency.cmake.configureArgs.begin(), prefixArg); + } + } + const auto overrideIt = overrides.overrides.find(dependency.name); if (overrideIt != overrides.overrides.end()) { @@ -226,4 +261,4 @@ namespace toolkit return options.locked ? true : LockFile::write(lockPath, lockFile, diagnostics); } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/resolve/DependencyResolver.hpp b/src/rhodium/resolve/DependencyResolver.hpp similarity index 85% rename from src/tpkg/resolve/DependencyResolver.hpp rename to src/rhodium/resolve/DependencyResolver.hpp index 970d860..47d15d0 100644 --- a/src/tpkg/resolve/DependencyResolver.hpp +++ b/src/rhodium/resolve/DependencyResolver.hpp @@ -1,12 +1,12 @@ #pragma once -#include "tpkg/model/BuildModel.hpp" -#include "tpkg/model/DependencyOverride.hpp" +#include "rhodium/model/BuildModel.hpp" +#include "rhodium/model/DependencyOverride.hpp" #include #include -namespace toolkit { +namespace rhodium { class DiagnosticSink; @@ -33,4 +33,4 @@ class DependencyResolver { const DependencyRestoreOptions& options = {}) const; }; -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/resolve/GitResolver.cpp b/src/rhodium/resolve/GitResolver.cpp similarity index 76% rename from src/tpkg/resolve/GitResolver.cpp rename to src/rhodium/resolve/GitResolver.cpp index e5e007b..b927526 100644 --- a/src/tpkg/resolve/GitResolver.cpp +++ b/src/rhodium/resolve/GitResolver.cpp @@ -3,11 +3,11 @@ * @LastEditors: cubevlmu khfahqp@gmail.com * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/resolve/GitResolver.hpp" +#include "rhodium/resolve/GitResolver.hpp" #include -namespace toolkit +namespace rhodium { bool GitResolver::available() const @@ -15,4 +15,4 @@ namespace toolkit return git_libgit2_features() >= 0; } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/resolve/GitResolver.hpp b/src/rhodium/resolve/GitResolver.hpp similarity index 63% rename from src/tpkg/resolve/GitResolver.hpp rename to src/rhodium/resolve/GitResolver.hpp index 42b7f54..14671c7 100644 --- a/src/tpkg/resolve/GitResolver.hpp +++ b/src/rhodium/resolve/GitResolver.hpp @@ -1,10 +1,10 @@ #pragma once -namespace toolkit { +namespace rhodium { class GitResolver { public: bool available() const; }; -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/resolve/PackageArtifactResolver.cpp b/src/rhodium/resolve/PackageArtifactResolver.cpp similarity index 91% rename from src/tpkg/resolve/PackageArtifactResolver.cpp rename to src/rhodium/resolve/PackageArtifactResolver.cpp index 23ee6e4..70a17f9 100644 --- a/src/tpkg/resolve/PackageArtifactResolver.cpp +++ b/src/rhodium/resolve/PackageArtifactResolver.cpp @@ -1,17 +1,19 @@ -#include "tpkg/resolve/PackageArtifactResolver.hpp" +#include "rhodium/core/Path.hpp" -#include "tpkg/config/BuildConfig.hpp" -#include "tpkg/core/FileSystem.hpp" -#include "tpkg/diagnostics/DiagnosticSink.hpp" -#include "tpkg/package/PackageArtifactStore.hpp" -#include "tpkg/package/PackageBuilderUtil.hpp" +#include "rhodium/resolve/PackageArtifactResolver.hpp" + +#include "rhodium/config/BuildConfig.hpp" +#include "rhodium/core/FileSystem.hpp" +#include "rhodium/diagnostics/DiagnosticSink.hpp" +#include "rhodium/package/PackageArtifactStore.hpp" +#include "rhodium/package/PackageBuilderUtil.hpp" #include #include #include #include -namespace toolkit +namespace rhodium { bool PackageArtifactResolver::shouldLoad(const LockedPackage &locked, const std::string &config, @@ -90,7 +92,7 @@ namespace toolkit for (const auto *lockedPackage : selectedPackages) { const auto &locked = *lockedPackage; - const auto artifactRoot = workspaceRoot / ".tpkg" / "artifacts" / locked.artifactId; + const auto artifactRoot = Path::stateRoot(workspaceRoot) / "artifacts" / locked.artifactId; DependencyArtifacts artifacts; if (!ArtifactStore::read(artifactRoot / "artifact.toml", artifacts, diagnostics)) { @@ -100,7 +102,7 @@ namespace toolkit context.artifactDir = artifactRoot; if (!BuildUtil::validate(context, artifacts, diagnostics)) { - diagnostics.error("package artifact is invalid; run tpkg restore: " + locked.name); + diagnostics.error("package artifact is invalid; run rhodium restore: " + locked.name); return false; } @@ -139,4 +141,4 @@ namespace toolkit return result; } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/resolve/PackageArtifactResolver.hpp b/src/rhodium/resolve/PackageArtifactResolver.hpp similarity index 89% rename from src/tpkg/resolve/PackageArtifactResolver.hpp rename to src/rhodium/resolve/PackageArtifactResolver.hpp index db0a962..6b2e173 100644 --- a/src/tpkg/resolve/PackageArtifactResolver.hpp +++ b/src/rhodium/resolve/PackageArtifactResolver.hpp @@ -5,16 +5,16 @@ */ #pragma once -#include "tpkg/config/LockFile.hpp" -#include "tpkg/model/DependencyOverride.hpp" -#include "tpkg/resolve/ResolvedDependencyArtifacts.hpp" +#include "rhodium/config/LockFile.hpp" +#include "rhodium/model/DependencyOverride.hpp" +#include "rhodium/resolve/ResolvedDependencyArtifacts.hpp" #include #include #include #include -namespace toolkit +namespace rhodium { class DiagnosticSink; @@ -48,4 +48,4 @@ namespace toolkit std::unordered_map packages_; }; -} // namespace toolkit +} // namespace rhodium diff --git a/src/rhodium/resolve/PackageResolver.cpp b/src/rhodium/resolve/PackageResolver.cpp new file mode 100644 index 0000000..358d67f --- /dev/null +++ b/src/rhodium/resolve/PackageResolver.cpp @@ -0,0 +1,11 @@ +#include "rhodium/resolve/PackageResolver.hpp" + +namespace rhodium +{ + + bool PackageResolver::available() const + { + return true; + } + +} // namespace rhodium diff --git a/src/tpkg/resolve/PackageResolver.hpp b/src/rhodium/resolve/PackageResolver.hpp similarity index 64% rename from src/tpkg/resolve/PackageResolver.hpp rename to src/rhodium/resolve/PackageResolver.hpp index da09ccb..d3b44f3 100644 --- a/src/tpkg/resolve/PackageResolver.hpp +++ b/src/rhodium/resolve/PackageResolver.hpp @@ -1,10 +1,10 @@ #pragma once -namespace toolkit { +namespace rhodium { class PackageResolver { public: bool available() const; }; -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/resolve/ResolvedDependencyArtifacts.hpp b/src/rhodium/resolve/ResolvedDependencyArtifacts.hpp similarity index 94% rename from src/tpkg/resolve/ResolvedDependencyArtifacts.hpp rename to src/rhodium/resolve/ResolvedDependencyArtifacts.hpp index e903242..4d1ab9c 100644 --- a/src/tpkg/resolve/ResolvedDependencyArtifacts.hpp +++ b/src/rhodium/resolve/ResolvedDependencyArtifacts.hpp @@ -4,7 +4,7 @@ #include #include -namespace toolkit { +namespace rhodium { struct ResolvedDependencyArtifact { std::string name; @@ -25,4 +25,4 @@ struct ResolvedDependencyArtifacts { std::vector packages; }; -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/script/LuaBindings.cpp b/src/rhodium/script/LuaBindings.cpp similarity index 94% rename from src/tpkg/script/LuaBindings.cpp rename to src/rhodium/script/LuaBindings.cpp index 501b195..febdaa1 100644 --- a/src/tpkg/script/LuaBindings.cpp +++ b/src/rhodium/script/LuaBindings.cpp @@ -4,15 +4,15 @@ * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/script/LuaBindings.hpp" +#include "rhodium/script/LuaBindings.hpp" -#include "tpkg/core/Environment.hpp" -#include "tpkg/core/StringUtil.hpp" -#include "tpkg/diagnostics/DiagnosticSink.hpp" -#include "tpkg/script/LuaCondition.hpp" -#include "tpkg/script/LuaDependencyReader.hpp" -#include "tpkg/script/LuaDslDiagnostics.hpp" -#include "tpkg/script/LuaValueReader.hpp" +#include "rhodium/core/Environment.hpp" +#include "rhodium/core/StringUtil.hpp" +#include "rhodium/diagnostics/DiagnosticSink.hpp" +#include "rhodium/script/LuaCondition.hpp" +#include "rhodium/script/LuaDependencyReader.hpp" +#include "rhodium/script/LuaDslDiagnostics.hpp" +#include "rhodium/script/LuaValueReader.hpp" #include @@ -23,7 +23,7 @@ #include #include -namespace toolkit +namespace rhodium { namespace { @@ -168,4 +168,4 @@ namespace toolkit } }); } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/script/LuaBindings.hpp b/src/rhodium/script/LuaBindings.hpp similarity index 87% rename from src/tpkg/script/LuaBindings.hpp rename to src/rhodium/script/LuaBindings.hpp index d673d38..69c54de 100644 --- a/src/tpkg/script/LuaBindings.hpp +++ b/src/rhodium/script/LuaBindings.hpp @@ -6,7 +6,7 @@ #pragma once -#include "tpkg/model/BuildModel.hpp" +#include "rhodium/model/BuildModel.hpp" #include #include @@ -16,7 +16,7 @@ namespace sol class state; } -namespace toolkit +namespace rhodium { class DiagnosticSink; @@ -28,4 +28,4 @@ namespace toolkit const std::filesystem::path &workspaceRoot = {}, const std::filesystem::path &manifestPath = {}); -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/script/LuaCondition.cpp b/src/rhodium/script/LuaCondition.cpp similarity index 77% rename from src/tpkg/script/LuaCondition.cpp rename to src/rhodium/script/LuaCondition.cpp index efe189a..022bd1e 100644 --- a/src/tpkg/script/LuaCondition.cpp +++ b/src/rhodium/script/LuaCondition.cpp @@ -4,11 +4,11 @@ * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/script/LuaCondition.hpp" +#include "rhodium/script/LuaCondition.hpp" -#include "tpkg/core/StringUtil.hpp" +#include "rhodium/core/StringUtil.hpp" -namespace toolkit +namespace rhodium { bool conditionMatches(const std::string &condition, const std::string &activePlatform) @@ -18,6 +18,10 @@ namespace toolkit { return true; } + if (normalized == "unix") + { + return activePlatform == "linux" || activePlatform == "macos"; + } if (normalized == "mac") { return activePlatform == "macos"; @@ -30,6 +34,7 @@ namespace toolkit const auto normalized = StringUtils::toLower(condition); return normalized == "all" || normalized == "*" || + normalized == "unix" || normalized == "windows" || normalized == "linux" || normalized == "mac" || @@ -38,4 +43,4 @@ namespace toolkit normalized == "ios"; } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/script/LuaCondition.hpp b/src/rhodium/script/LuaCondition.hpp similarity index 89% rename from src/tpkg/script/LuaCondition.hpp rename to src/rhodium/script/LuaCondition.hpp index a729b35..e933ed8 100644 --- a/src/tpkg/script/LuaCondition.hpp +++ b/src/rhodium/script/LuaCondition.hpp @@ -8,10 +8,10 @@ #include -namespace toolkit +namespace rhodium { bool conditionMatches(const std::string &condition, const std::string &activePlatform); bool isValidCondition(const std::string &condition); -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/script/LuaDependencyReader.cpp b/src/rhodium/script/LuaDependencyReader.cpp similarity index 98% rename from src/tpkg/script/LuaDependencyReader.cpp rename to src/rhodium/script/LuaDependencyReader.cpp index 34fad9c..b121347 100644 --- a/src/tpkg/script/LuaDependencyReader.cpp +++ b/src/rhodium/script/LuaDependencyReader.cpp @@ -4,17 +4,17 @@ * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/script/LuaDependencyReader.hpp" +#include "rhodium/script/LuaDependencyReader.hpp" -#include "tpkg/core/StringUtil.hpp" -#include "tpkg/diagnostics/DiagnosticSink.hpp" -#include "tpkg/script/LuaOverlayReader.hpp" -#include "tpkg/script/LuaValueReader.hpp" +#include "rhodium/core/StringUtil.hpp" +#include "rhodium/diagnostics/DiagnosticSink.hpp" +#include "rhodium/script/LuaOverlayReader.hpp" +#include "rhodium/script/LuaValueReader.hpp" #include #include -namespace toolkit +namespace rhodium { bool hasArchiveExtension(const std::string &source) { @@ -376,4 +376,4 @@ namespace toolkit } } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/script/LuaDependencyReader.hpp b/src/rhodium/script/LuaDependencyReader.hpp similarity index 90% rename from src/tpkg/script/LuaDependencyReader.hpp rename to src/rhodium/script/LuaDependencyReader.hpp index 51c102e..362d305 100644 --- a/src/tpkg/script/LuaDependencyReader.hpp +++ b/src/rhodium/script/LuaDependencyReader.hpp @@ -6,14 +6,14 @@ #pragma once -#include "tpkg/model/BuildModel.hpp" +#include "rhodium/model/BuildModel.hpp" #include #include #include -namespace toolkit +namespace rhodium { class DiagnosticSink; @@ -26,4 +26,4 @@ namespace toolkit void overlayDependencyOptions(sol::table options, DependencyDesc &dependency); void readDependencyOverrides(sol::table table, BuildModel &model, DiagnosticSink &diagnostics); -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/script/LuaDslDiagnostics.cpp b/src/rhodium/script/LuaDslDiagnostics.cpp similarity index 57% rename from src/tpkg/script/LuaDslDiagnostics.cpp rename to src/rhodium/script/LuaDslDiagnostics.cpp index e399e27..d3d1d07 100644 --- a/src/tpkg/script/LuaDslDiagnostics.cpp +++ b/src/rhodium/script/LuaDslDiagnostics.cpp @@ -4,16 +4,16 @@ * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/script/LuaDslDiagnostics.hpp" +#include "rhodium/script/LuaDslDiagnostics.hpp" -#include "tpkg/diagnostics/DiagnosticSink.hpp" +#include "rhodium/diagnostics/DiagnosticSink.hpp" -namespace toolkit +namespace rhodium { void reportUnsupportedProjectDsl(DiagnosticSink &diagnostics, const std::string &name) { - diagnostics.error("project build DSL '" + name + "' is not supported in tpkg.lua; use require()/require_local() to declare dependencies"); + diagnostics.error("project build DSL '" + name + "' is not supported in rhodium.lua or tpkg.lua; use require()/require_local() to declare dependencies"); } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/script/LuaDslDiagnostics.hpp b/src/rhodium/script/LuaDslDiagnostics.hpp similarity index 88% rename from src/tpkg/script/LuaDslDiagnostics.hpp rename to src/rhodium/script/LuaDslDiagnostics.hpp index 6b54c68..301fcda 100644 --- a/src/tpkg/script/LuaDslDiagnostics.hpp +++ b/src/rhodium/script/LuaDslDiagnostics.hpp @@ -8,11 +8,11 @@ #include -namespace toolkit +namespace rhodium { class DiagnosticSink; void reportUnsupportedProjectDsl(DiagnosticSink &diagnostics, const std::string &name); -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/script/LuaOverlayReader.cpp b/src/rhodium/script/LuaOverlayReader.cpp similarity index 92% rename from src/tpkg/script/LuaOverlayReader.cpp rename to src/rhodium/script/LuaOverlayReader.cpp index 01fe89e..c549731 100644 --- a/src/tpkg/script/LuaOverlayReader.cpp +++ b/src/rhodium/script/LuaOverlayReader.cpp @@ -4,14 +4,14 @@ * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/script/LuaOverlayReader.hpp" +#include "rhodium/script/LuaOverlayReader.hpp" -#include "tpkg/script/LuaDependencyReader.hpp" -#include "tpkg/script/LuaValueReader.hpp" +#include "rhodium/script/LuaDependencyReader.hpp" +#include "rhodium/script/LuaValueReader.hpp" #include -namespace toolkit +namespace rhodium { std::optional findPlatformTable(sol::table options, const char *field, const std::string &activePlatform) @@ -71,4 +71,4 @@ namespace toolkit } } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/script/LuaOverlayReader.hpp b/src/rhodium/script/LuaOverlayReader.hpp similarity index 89% rename from src/tpkg/script/LuaOverlayReader.hpp rename to src/rhodium/script/LuaOverlayReader.hpp index 1a57fd8..aae62c5 100644 --- a/src/tpkg/script/LuaOverlayReader.hpp +++ b/src/rhodium/script/LuaOverlayReader.hpp @@ -6,14 +6,14 @@ #pragma once -#include "tpkg/model/DependencyDesc.hpp" +#include "rhodium/model/DependencyDesc.hpp" #include #include #include -namespace toolkit +namespace rhodium { std::optional findPlatformTable(sol::table options, const char *field, const std::string &activePlatform); @@ -21,4 +21,4 @@ namespace toolkit std::optional findCustomCompileOverlay(sol::table options, const std::string &activePlatform); void applyDependencyOverlays(sol::table options, DependencyDesc &dependency, const std::string &activePlatform); -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/script/LuaRuntime.cpp b/src/rhodium/script/LuaRuntime.cpp similarity index 85% rename from src/tpkg/script/LuaRuntime.cpp rename to src/rhodium/script/LuaRuntime.cpp index cff8166..8d152f2 100644 --- a/src/tpkg/script/LuaRuntime.cpp +++ b/src/rhodium/script/LuaRuntime.cpp @@ -4,11 +4,11 @@ * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/script/LuaRuntime.hpp" +#include "rhodium/script/LuaRuntime.hpp" #include -namespace toolkit +namespace rhodium { LuaRuntime::LuaRuntime() @@ -24,4 +24,4 @@ namespace toolkit return *m_state; } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/script/LuaRuntime.hpp b/src/rhodium/script/LuaRuntime.hpp similarity index 90% rename from src/tpkg/script/LuaRuntime.hpp rename to src/rhodium/script/LuaRuntime.hpp index 48326b3..8b75883 100644 --- a/src/tpkg/script/LuaRuntime.hpp +++ b/src/rhodium/script/LuaRuntime.hpp @@ -13,7 +13,7 @@ namespace sol class state; } -namespace toolkit +namespace rhodium { class LuaRuntime @@ -28,4 +28,4 @@ namespace toolkit std::unique_ptr m_state; }; -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/script/LuaValueReader.cpp b/src/rhodium/script/LuaValueReader.cpp similarity index 97% rename from src/tpkg/script/LuaValueReader.cpp rename to src/rhodium/script/LuaValueReader.cpp index 4f82996..5911948 100644 --- a/src/tpkg/script/LuaValueReader.cpp +++ b/src/rhodium/script/LuaValueReader.cpp @@ -4,13 +4,13 @@ * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/script/LuaValueReader.hpp" +#include "rhodium/script/LuaValueReader.hpp" -#include "tpkg/core/StringUtil.hpp" +#include "rhodium/core/StringUtil.hpp" #include -namespace toolkit +namespace rhodium { std::string getStringOr(sol::table table, const char *key, const std::string &fallback) @@ -197,4 +197,4 @@ namespace toolkit } } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/script/LuaValueReader.hpp b/src/rhodium/script/LuaValueReader.hpp similarity index 97% rename from src/tpkg/script/LuaValueReader.hpp rename to src/rhodium/script/LuaValueReader.hpp index 368f3f8..2207e7a 100644 --- a/src/tpkg/script/LuaValueReader.hpp +++ b/src/rhodium/script/LuaValueReader.hpp @@ -12,7 +12,7 @@ #include #include -namespace toolkit +namespace rhodium { std::string getStringOr(sol::table table, const char *key, const std::string &fallback = {}); @@ -32,4 +32,4 @@ namespace toolkit std::vector &arrayDestination, std::map> &mapDestination); -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/script/ManifestLoader.cpp b/src/rhodium/script/ManifestLoader.cpp similarity index 79% rename from src/tpkg/script/ManifestLoader.cpp rename to src/rhodium/script/ManifestLoader.cpp index 58ce678..39c9dc4 100644 --- a/src/tpkg/script/ManifestLoader.cpp +++ b/src/rhodium/script/ManifestLoader.cpp @@ -4,19 +4,19 @@ * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/script/ManifestLoader.hpp" +#include "rhodium/script/ManifestLoader.hpp" -#include "tpkg/core/Environment.hpp" -#include "tpkg/core/FileSystem.hpp" -#include "tpkg/diagnostics/Diagnostic.hpp" -#include "tpkg/diagnostics/DiagnosticSink.hpp" -#include "tpkg/model/BuildModel.hpp" -#include "tpkg/script/LuaBindings.hpp" -#include "tpkg/script/LuaRuntime.hpp" +#include "rhodium/core/Environment.hpp" +#include "rhodium/core/FileSystem.hpp" +#include "rhodium/diagnostics/Diagnostic.hpp" +#include "rhodium/diagnostics/DiagnosticSink.hpp" +#include "rhodium/model/BuildModel.hpp" +#include "rhodium/script/LuaBindings.hpp" +#include "rhodium/script/LuaRuntime.hpp" #include -namespace toolkit +namespace rhodium { class CountingDiagnosticSink final : public DiagnosticSink { @@ -48,10 +48,11 @@ namespace toolkit ManifestLoadResult ManifestLoader::load(const std::filesystem::path &manifestPath, DiagnosticSink &diagnostics) { ManifestLoadResult result; + result.model.manifestName = manifestPath.filename().string(); CountingDiagnosticSink countedDiagnostics(diagnostics); if (!File::exists(manifestPath)) { - countedDiagnostics.error("missing tpkg.lua: " + manifestPath.string()); + countedDiagnostics.error("missing dependency manifest (rhodium.lua or tpkg.lua): " + manifestPath.string()); return result; } @@ -87,4 +88,4 @@ namespace toolkit } } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/script/ManifestLoader.hpp b/src/rhodium/script/ManifestLoader.hpp similarity index 85% rename from src/tpkg/script/ManifestLoader.hpp rename to src/rhodium/script/ManifestLoader.hpp index 6780dd1..cca782d 100644 --- a/src/tpkg/script/ManifestLoader.hpp +++ b/src/rhodium/script/ManifestLoader.hpp @@ -6,11 +6,11 @@ #pragma once -#include "tpkg/model/BuildModel.hpp" +#include "rhodium/model/BuildModel.hpp" #include -namespace toolkit +namespace rhodium { class DiagnosticSink; @@ -27,4 +27,4 @@ namespace toolkit ManifestLoadResult load(const std::filesystem::path &manifestPath, DiagnosticSink &diagnostics); }; -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/toolchain/AndroidToolchainDetector.cpp b/src/rhodium/toolchain/AndroidToolchainDetector.cpp similarity index 97% rename from src/tpkg/toolchain/AndroidToolchainDetector.cpp rename to src/rhodium/toolchain/AndroidToolchainDetector.cpp index 3b30f1f..5f80b68 100644 --- a/src/tpkg/toolchain/AndroidToolchainDetector.cpp +++ b/src/rhodium/toolchain/AndroidToolchainDetector.cpp @@ -4,11 +4,11 @@ * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/toolchain/ToolchainProbe.hpp" +#include "rhodium/toolchain/ToolchainProbe.hpp" -#include "tpkg/core/Environment.hpp" -#include "tpkg/core/FileSystem.hpp" -#include "tpkg/diagnostics/DiagnosticSink.hpp" +#include "rhodium/core/Environment.hpp" +#include "rhodium/core/FileSystem.hpp" +#include "rhodium/diagnostics/DiagnosticSink.hpp" #include #include @@ -16,7 +16,7 @@ #include #include -namespace toolkit +namespace rhodium { struct AndroidAbi { @@ -208,10 +208,10 @@ namespace toolkit std::string AndroidTc::api(const std::filesystem::path &sdkRoot, const std::filesystem::path &ndkRoot) { (void)ndkRoot; - const auto tkbApi = ToolProbe::env("TKB_ANDROID_API"); - if (!tkbApi.empty()) + const auto rhodiumApi = ToolProbe::env("RHODIUM_ANDROID_API"); + if (!rhodiumApi.empty()) { - return tkbApi; + return rhodiumApi; } const auto androidApi = ToolProbe::env("ANDROID_API"); if (!androidApi.empty()) @@ -395,4 +395,4 @@ namespace toolkit AndroidTc::add(profiles, workspaceRoot, diagnostics); } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/toolchain/Toolchain.cpp b/src/rhodium/toolchain/Toolchain.cpp similarity index 94% rename from src/tpkg/toolchain/Toolchain.cpp rename to src/rhodium/toolchain/Toolchain.cpp index 91fb9f1..30d342b 100644 --- a/src/tpkg/toolchain/Toolchain.cpp +++ b/src/rhodium/toolchain/Toolchain.cpp @@ -7,13 +7,13 @@ #include "Toolchain.hpp" #include "ToolchainSerializer.hpp" -#include "tpkg/config/BuildConfig.hpp" -#include "tpkg/core/Hash.hpp" +#include "rhodium/config/BuildConfig.hpp" +#include "rhodium/core/Hash.hpp" #include #include -namespace toolkit +namespace rhodium { std::string toolchainContentHash(const ToolchainProfile &profile, const std::string &config) { diff --git a/src/tpkg/toolchain/Toolchain.hpp b/src/rhodium/toolchain/Toolchain.hpp similarity index 96% rename from src/tpkg/toolchain/Toolchain.hpp rename to src/rhodium/toolchain/Toolchain.hpp index e4fa4db..b00e7ee 100644 --- a/src/tpkg/toolchain/Toolchain.hpp +++ b/src/rhodium/toolchain/Toolchain.hpp @@ -6,7 +6,7 @@ #pragma once -#include +#include #include #include @@ -14,7 +14,7 @@ #include #include -namespace toolkit +namespace rhodium { struct ToolchainProfile { @@ -72,4 +72,4 @@ namespace toolkit }; std::string toolchainContentHash(const ToolchainProfile &profile, const std::string &config); -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/toolchain/ToolchainDetector.cpp b/src/rhodium/toolchain/ToolchainDetector.cpp similarity index 86% rename from src/tpkg/toolchain/ToolchainDetector.cpp rename to src/rhodium/toolchain/ToolchainDetector.cpp index def57f0..21aef29 100644 --- a/src/tpkg/toolchain/ToolchainDetector.cpp +++ b/src/rhodium/toolchain/ToolchainDetector.cpp @@ -4,17 +4,19 @@ * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/toolchain/ToolchainDetector.hpp" +#include "rhodium/core/Path.hpp" -#include "tpkg/core/Environment.hpp" -#include "tpkg/diagnostics/DiagnosticSink.hpp" -#include "tpkg/toolchain/ToolchainProbe.hpp" -#include "tpkg/toolchain/ToolchainRegistry.hpp" +#include "rhodium/toolchain/ToolchainDetector.hpp" + +#include "rhodium/core/Environment.hpp" +#include "rhodium/diagnostics/DiagnosticSink.hpp" +#include "rhodium/toolchain/ToolchainProbe.hpp" +#include "rhodium/toolchain/ToolchainRegistry.hpp" #include #include -namespace toolkit +namespace rhodium { class ToolDetect { @@ -47,7 +49,7 @@ namespace toolkit std::filesystem::path ToolDetect::cache(const std::filesystem::path &workspaceRoot) { - return workspaceRoot / ".tpkg" / "toolchains" / "host.toml"; + return Path::stateRoot(workspaceRoot) / "toolchains" / "host.toml"; } bool ToolDetect::writeHost(const std::filesystem::path &workspaceRoot, std::vector &profiles, DiagnosticSink &diagnostics) diff --git a/src/tpkg/toolchain/ToolchainDetector.hpp b/src/rhodium/toolchain/ToolchainDetector.hpp similarity index 96% rename from src/tpkg/toolchain/ToolchainDetector.hpp rename to src/rhodium/toolchain/ToolchainDetector.hpp index 3a6981f..dd8e5d3 100644 --- a/src/tpkg/toolchain/ToolchainDetector.hpp +++ b/src/rhodium/toolchain/ToolchainDetector.hpp @@ -6,12 +6,12 @@ #pragma once -#include "tpkg/toolchain/Toolchain.hpp" +#include "rhodium/toolchain/Toolchain.hpp" #include #include -namespace toolkit +namespace rhodium { class DiagnosticSink; diff --git a/src/tpkg/toolchain/ToolchainProbe.cpp b/src/rhodium/toolchain/ToolchainProbe.cpp similarity index 99% rename from src/tpkg/toolchain/ToolchainProbe.cpp rename to src/rhodium/toolchain/ToolchainProbe.cpp index b08ebcf..5ea16dc 100644 --- a/src/tpkg/toolchain/ToolchainProbe.cpp +++ b/src/rhodium/toolchain/ToolchainProbe.cpp @@ -4,11 +4,11 @@ * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/toolchain/ToolchainProbe.hpp" +#include "rhodium/toolchain/ToolchainProbe.hpp" -#include "tpkg/core/Environment.hpp" -#include "tpkg/core/FileSystem.hpp" -#include "tpkg/core/StringUtil.hpp" +#include "rhodium/core/Environment.hpp" +#include "rhodium/core/FileSystem.hpp" +#include "rhodium/core/StringUtil.hpp" #include #include @@ -18,7 +18,7 @@ #include #include -namespace toolkit +namespace rhodium { std::vector ToolProbe::paths(const std::string &value) { @@ -633,4 +633,4 @@ namespace toolkit return {}; } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/toolchain/ToolchainProbe.hpp b/src/rhodium/toolchain/ToolchainProbe.hpp similarity index 97% rename from src/tpkg/toolchain/ToolchainProbe.hpp rename to src/rhodium/toolchain/ToolchainProbe.hpp index 2630180..5b76836 100644 --- a/src/tpkg/toolchain/ToolchainProbe.hpp +++ b/src/rhodium/toolchain/ToolchainProbe.hpp @@ -6,13 +6,13 @@ #pragma once -#include "tpkg/toolchain/ToolchainDetector.hpp" +#include "rhodium/toolchain/ToolchainDetector.hpp" #include #include #include -namespace toolkit +namespace rhodium { class ToolProbe { diff --git a/src/tpkg/toolchain/ToolchainRegistry.cpp b/src/rhodium/toolchain/ToolchainRegistry.cpp similarity index 98% rename from src/tpkg/toolchain/ToolchainRegistry.cpp rename to src/rhodium/toolchain/ToolchainRegistry.cpp index b479557..8228fd3 100644 --- a/src/tpkg/toolchain/ToolchainRegistry.cpp +++ b/src/rhodium/toolchain/ToolchainRegistry.cpp @@ -4,10 +4,12 @@ * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/toolchain/ToolchainRegistry.hpp" +#include "rhodium/core/Path.hpp" -#include "tpkg/core/FileSystem.hpp" -#include "tpkg/diagnostics/DiagnosticSink.hpp" +#include "rhodium/toolchain/ToolchainRegistry.hpp" + +#include "rhodium/core/FileSystem.hpp" +#include "rhodium/diagnostics/DiagnosticSink.hpp" #include #include @@ -20,7 +22,7 @@ #include #include -namespace toolkit +namespace rhodium { static void writePathArray(std::ostringstream &stream, const char *key, const std::vector &values) { @@ -495,7 +497,7 @@ namespace toolkit std::filesystem::path localToolchainConfigPath(const std::filesystem::path &workspaceRoot) { - return workspaceRoot / ".tpkg" / "local.toml"; + return Path::stateRoot(workspaceRoot) / "local.toml"; } bool readLocalToolchainConfig(const std::filesystem::path &workspaceRoot, LocalToolchainConfig &config, DiagnosticSink &diagnostics) @@ -577,18 +579,18 @@ namespace toolkit std::filesystem::path projectUserToolchainsPath(const std::filesystem::path &workspaceRoot) { - return workspaceRoot / ".tpkg" / "toolchains" / "user.toml"; + return Path::stateRoot(workspaceRoot) / "toolchains" / "user.toml"; } std::filesystem::path globalUserToolchainsPath() { - return homePath() / ".tpkg" / "toolchains.toml"; + return Path::stateRoot(homePath()) / "toolchains.toml"; } static std::vector> toolchainSourceFiles(const std::filesystem::path &workspaceRoot) { return { - {ToolchainSource::AutoDetected, workspaceRoot / ".tpkg" / "toolchains" / "host.toml"}, + {ToolchainSource::AutoDetected, Path::stateRoot(workspaceRoot) / "toolchains" / "host.toml"}, {ToolchainSource::GlobalUser, globalUserToolchainsPath()}, {ToolchainSource::Workspace, workspaceRoot / "config" / "toolchains.toml"}, {ToolchainSource::Workspace, workspaceRoot / "toolchains.toml"}, diff --git a/src/tpkg/toolchain/ToolchainRegistry.hpp b/src/rhodium/toolchain/ToolchainRegistry.hpp similarity index 97% rename from src/tpkg/toolchain/ToolchainRegistry.hpp rename to src/rhodium/toolchain/ToolchainRegistry.hpp index 0baf7ad..3f77dc1 100644 --- a/src/tpkg/toolchain/ToolchainRegistry.hpp +++ b/src/rhodium/toolchain/ToolchainRegistry.hpp @@ -6,13 +6,13 @@ #pragma once -#include "tpkg/toolchain/Toolchain.hpp" +#include "rhodium/toolchain/Toolchain.hpp" #include #include #include -namespace toolkit +namespace rhodium { class DiagnosticSink; diff --git a/src/tpkg/toolchain/ToolchainSerializer.cpp b/src/rhodium/toolchain/ToolchainSerializer.cpp similarity index 97% rename from src/tpkg/toolchain/ToolchainSerializer.cpp rename to src/rhodium/toolchain/ToolchainSerializer.cpp index 89b5e39..eef7648 100644 --- a/src/tpkg/toolchain/ToolchainSerializer.cpp +++ b/src/rhodium/toolchain/ToolchainSerializer.cpp @@ -6,7 +6,7 @@ #include "ToolchainSerializer.hpp" -namespace toolkit +namespace rhodium { void ToolchainSerializer::appendPath(std::ostringstream &stream, const char *name, @@ -62,4 +62,4 @@ namespace toolkit stream << "]\n"; } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/toolchain/ToolchainSerializer.hpp b/src/rhodium/toolchain/ToolchainSerializer.hpp similarity index 97% rename from src/tpkg/toolchain/ToolchainSerializer.hpp rename to src/rhodium/toolchain/ToolchainSerializer.hpp index 9c79320..a0cc0d5 100644 --- a/src/tpkg/toolchain/ToolchainSerializer.hpp +++ b/src/rhodium/toolchain/ToolchainSerializer.hpp @@ -11,7 +11,7 @@ #include #include -namespace toolkit +namespace rhodium { // Utility class for toolchain configuration serialization class ToolchainSerializer @@ -41,4 +41,4 @@ namespace toolkit ToolchainSerializer() = delete; // Utility class, no instances }; -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/toolchain/UnixToolchainDetector.cpp b/src/rhodium/toolchain/UnixToolchainDetector.cpp similarity index 98% rename from src/tpkg/toolchain/UnixToolchainDetector.cpp rename to src/rhodium/toolchain/UnixToolchainDetector.cpp index cf51c7c..6897338 100644 --- a/src/tpkg/toolchain/UnixToolchainDetector.cpp +++ b/src/rhodium/toolchain/UnixToolchainDetector.cpp @@ -4,10 +4,10 @@ * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/toolchain/ToolchainProbe.hpp" +#include "rhodium/toolchain/ToolchainProbe.hpp" -#include "tpkg/core/Environment.hpp" -#include "tpkg/core/Process.hpp" +#include "rhodium/core/Environment.hpp" +#include "rhodium/core/Process.hpp" #include #include @@ -15,7 +15,7 @@ #include #include -namespace toolkit +namespace rhodium { class UnixTc { @@ -300,4 +300,4 @@ namespace toolkit UnixTc::add(profiles); } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/toolchain/WindowsToolchainDetector.cpp b/src/rhodium/toolchain/WindowsToolchainDetector.cpp similarity index 80% rename from src/tpkg/toolchain/WindowsToolchainDetector.cpp rename to src/rhodium/toolchain/WindowsToolchainDetector.cpp index afd27dc..54ba7dd 100644 --- a/src/tpkg/toolchain/WindowsToolchainDetector.cpp +++ b/src/rhodium/toolchain/WindowsToolchainDetector.cpp @@ -4,11 +4,11 @@ * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/toolchain/ToolchainProbe.hpp" +#include "rhodium/toolchain/ToolchainProbe.hpp" -#include "tpkg/core/FileSystem.hpp" -#include "tpkg/core/Process.hpp" -#include "tpkg/diagnostics/DiagnosticSink.hpp" +#include "rhodium/core/FileSystem.hpp" +#include "rhodium/core/Process.hpp" +#include "rhodium/diagnostics/DiagnosticSink.hpp" #include #include @@ -19,7 +19,7 @@ #include #include -namespace toolkit +namespace rhodium { struct WindowsTargetArch { @@ -46,7 +46,10 @@ namespace toolkit private: static std::filesystem::path vswhere(); static std::vector vsRoots(); + static std::filesystem::path trimTrailingSeparator(std::filesystem::path path); static std::filesystem::path reg(const std::string &key, const std::string &valueName); + static std::vector> regPaths(const std::string &key); + static std::filesystem::path vsRootFromCompiler(const std::filesystem::path &compiler); static std::filesystem::path sdkRoot(const std::map &env = {}); static std::filesystem::path sdkVersionDir(const std::filesystem::path &sdkRoot); static void addSdkRoot(ToolchainProfile &profile, const std::filesystem::path &sdkRoot); @@ -83,31 +86,76 @@ namespace toolkit return File::exists(standard) ? standard : std::filesystem::path{}; } + std::filesystem::path WinTc::trimTrailingSeparator(std::filesystem::path path) + { + while (!path.empty() && path.filename().empty()) + { + path = path.parent_path(); + } + return path; + } + std::vector WinTc::vsRoots() { std::vector roots; + const auto addRoot = [&roots](const std::filesystem::path &path) { + if (std::filesystem::is_directory(path)) + { + ToolProbe::appendUnique(roots, path); + } + }; + + addRoot(ToolProbe::env("VSINSTALLDIR")); + const auto vcInstallDir = trimTrailingSeparator(ToolProbe::env("VCINSTALLDIR")); + if (!vcInstallDir.empty()) + { + addRoot(vcInstallDir.parent_path()); + } + auto vcToolsInstallDir = trimTrailingSeparator(ToolProbe::env("VCToolsInstallDir")); + if (!vcToolsInstallDir.empty()) + { + addRoot(vcToolsInstallDir.parent_path().parent_path().parent_path().parent_path()); + } + addRoot(vsRootFromCompiler(findExecutableOnPath("cl"))); + const auto vswherePath = WinTc::vswhere(); if (!vswherePath.empty()) { - auto result = Process::run(vswherePath.string(), {"-latest", "-products", "*", "-requires", "Microsoft.VisualStudio.Component.VC.Tools.x86.x64", "-property", "installationPath"}); + auto result = Process::run(vswherePath.string(), {"-products", "*", "-requires", "Microsoft.VisualStudio.Component.VC.Tools.x86.x64", "-property", "installationPath"}); std::stringstream stream(result.output); std::string line; while (std::getline(stream, line)) { - if (!line.empty() && std::filesystem::is_directory(line)) + if (!line.empty() && line.back() == '\r') { - roots.emplace_back(line); + line.pop_back(); } + addRoot(line); } } - const auto base = ToolProbe::programFiles() / "Microsoft Visual Studio" / "2022"; - for (const auto &edition : {"Community", "Professional", "Enterprise", "BuildTools"}) + for (const auto &key : { + std::string("HKLM\\SOFTWARE\\Microsoft\\VisualStudio\\SxS\\VS7"), + std::string("HKLM\\SOFTWARE\\WOW6432Node\\Microsoft\\VisualStudio\\SxS\\VS7"), + }) { - auto path = base / edition; - if (std::filesystem::is_directory(path)) + for (const auto &[_, path] : regPaths(key)) { - roots.push_back(path); + addRoot(path); + } + } + + for (const auto &base : { + ToolProbe::programFiles() / "Microsoft Visual Studio", + ToolProbe::programFilesX86() / "Microsoft Visual Studio", + }) + { + for (const auto &version : {"2022", "2019", "2017"}) + { + for (const auto &edition : {"Community", "Professional", "Enterprise", "BuildTools"}) + { + addRoot(base / version / edition); + } } } for (const auto &path : { @@ -115,10 +163,7 @@ namespace toolkit std::filesystem::path("C:/Applications/Visual Studio"), }) { - if (std::filesystem::is_directory(path)) - { - roots.push_back(path); - } + addRoot(path); } return roots; } @@ -159,27 +204,101 @@ namespace toolkit return {}; } - std::filesystem::path WinTc::sdkRoot(const std::map &env) + std::vector> WinTc::regPaths(const std::string &key) + { + std::vector> paths; +#ifdef _WIN32 + auto result = Process::run("reg", {"query", key}); + if (result.exitCode != 0) + { + return paths; + } + std::stringstream stream(result.output); + std::string line; + while (std::getline(stream, line)) + { + std::stringstream parts(line); + std::string name; + std::string type; + std::string data; + parts >> name >> type; + if (type != "REG_SZ" && type != "REG_EXPAND_SZ") + { + continue; + } + std::getline(parts, data); + data.erase(data.begin(), std::find_if(data.begin(), data.end(), [](unsigned char c) + { return std::isspace(c) == 0; })); + if (!name.empty() && !data.empty()) + { + paths.emplace_back(name, data); + } + } +#else + (void)key; +#endif + return paths; + } + + std::filesystem::path WinTc::vsRootFromCompiler(const std::filesystem::path &compiler) { - auto envIt = env.find("WindowsSdkDir"); - if (envIt != env.end() && std::filesystem::is_directory(envIt->second)) + if (compiler.empty() || compiler.filename() != "cl.exe") { - return envIt->second; + return {}; + } + const auto targetDir = compiler.parent_path(); + const auto hostDir = targetDir.parent_path(); + const auto binDir = hostDir.parent_path(); + const auto versionDir = binDir.parent_path(); + const auto msvcDir = versionDir.parent_path(); + const auto toolsDir = msvcDir.parent_path(); + const auto vcDir = toolsDir.parent_path(); + const auto vsRoot = vcDir.parent_path(); + if (binDir.filename() == "bin" && + msvcDir.filename() == "MSVC" && + toolsDir.filename() == "Tools" && + vcDir.filename() == "VC" && + std::filesystem::is_directory(vsRoot)) + { + return vsRoot; } - auto envValue = ToolProbe::env("WindowsSdkDir"); - if (!envValue.empty() && std::filesystem::is_directory(envValue)) + return {}; + } + + std::filesystem::path WinTc::sdkRoot(const std::map &env) + { + for (const auto *key : {"WindowsSdkDir", "WindowsSDKDir", "WINDOWSSDKDIR", "KitsRoot10", "WindowsSdkRoot"}) { - return envValue; + auto envIt = env.find(key); + if (envIt != env.end() && std::filesystem::is_directory(envIt->second)) + { + return envIt->second; + } + auto envValue = ToolProbe::env(key); + if (!envValue.empty() && std::filesystem::is_directory(envValue)) + { + return envValue; + } } for (const auto &key : { std::string("HKLM\\SOFTWARE\\Microsoft\\Windows Kits\\Installed Roots"), - std::string("HKLM\\SOFTWARE\\WOW6432Node\\Microsoft\\Windows Kits\\Installed Roots"), + std::string("HKLM\\SOFTWARE\\WOW6432Node\\Microsoft\\Windows Kits\\Installed Roots"), }) { - const auto value = reg(key, "KitsRoot10"); - if (!value.empty() && std::filesystem::is_directory(value)) + for (const auto *valueName : {"KitsRoot10", "KitsRoot81", "KitsRoot"}) { - return value; + const auto value = reg(key, valueName); + if (!value.empty() && std::filesystem::is_directory(value)) + { + return value; + } + } + for (const auto &[name, path] : regPaths(key)) + { + if (name.rfind("KitsRoot", 0) == 0 && std::filesystem::is_directory(path)) + { + return path; + } } } for (const auto &standard : { @@ -632,4 +751,4 @@ namespace toolkit WinTc::add(profiles, diagnostics); } -} // namespace toolkit +} // namespace rhodium diff --git a/src/tpkg/utils/Sha256.cpp b/src/rhodium/utils/Sha256.cpp similarity index 98% rename from src/tpkg/utils/Sha256.cpp rename to src/rhodium/utils/Sha256.cpp index c61e573..964c0c3 100644 --- a/src/tpkg/utils/Sha256.cpp +++ b/src/rhodium/utils/Sha256.cpp @@ -4,8 +4,8 @@ * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/utils/Sha256.hpp" -#include "tpkg/common.hpp" +#include "rhodium/utils/Sha256.hpp" +#include "rhodium/common.hpp" #include #include @@ -15,7 +15,7 @@ #include #include -namespace toolkit +namespace rhodium { constexpr std::array k = { 0x428a2f98u, 0x71374491u, 0xb5c0fbcfu, 0xe9b5dba5u, 0x3956c25bu, 0x59f111f1u, 0x923f82a4u, 0xab1c5ed5u, diff --git a/src/tpkg/utils/Sha256.hpp b/src/rhodium/utils/Sha256.hpp similarity index 95% rename from src/tpkg/utils/Sha256.hpp rename to src/rhodium/utils/Sha256.hpp index da83a3c..f8842b1 100644 --- a/src/tpkg/utils/Sha256.hpp +++ b/src/rhodium/utils/Sha256.hpp @@ -9,7 +9,7 @@ #include #include -namespace toolkit +namespace rhodium { std::string sha256File(const std::filesystem::path &path, std::string *error = nullptr); bool sha256Equals(const std::string &left, const std::string &right); diff --git a/src/tpkg/cli/CommandContext.cpp b/src/tpkg/cli/CommandContext.cpp deleted file mode 100644 index 2a831d9..0000000 --- a/src/tpkg/cli/CommandContext.cpp +++ /dev/null @@ -1 +0,0 @@ -#include "tpkg/cli/CommandContext.hpp" diff --git a/src/tpkg/core/Path.hpp b/src/tpkg/core/Path.hpp deleted file mode 100644 index 301ab73..0000000 --- a/src/tpkg/core/Path.hpp +++ /dev/null @@ -1,14 +0,0 @@ -#pragma once - -#include -#include - -namespace toolkit -{ - class Path - { - public: - static std::string normalizePath(const std::filesystem::path &path); - static std::string sanitizePackagePath(std::string value); - }; -} // namespace toolkit diff --git a/src/tpkg/resolve/PackageResolver.cpp b/src/tpkg/resolve/PackageResolver.cpp deleted file mode 100644 index 471d27e..0000000 --- a/src/tpkg/resolve/PackageResolver.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include "tpkg/resolve/PackageResolver.hpp" - -namespace toolkit -{ - - bool PackageResolver::available() const - { - return true; - } - -} // namespace toolkit diff --git a/tests/tpkg/ArchiveTests.cpp b/tests/rhodium/ArchiveTests.cpp similarity index 75% rename from tests/tpkg/ArchiveTests.cpp rename to tests/rhodium/ArchiveTests.cpp index 34c5918..21dcc44 100644 --- a/tests/tpkg/ArchiveTests.cpp +++ b/tests/rhodium/ArchiveTests.cpp @@ -1,7 +1,7 @@ -#include "tpkg/package/Archive.hpp" -#include "tpkg/utils/Sha256.hpp" -#include "tpkg/core/FileSystem.hpp" -#include "tpkg/diagnostics/JsonDiagnosticSink.hpp" +#include "rhodium/package/Archive.hpp" +#include "rhodium/utils/Sha256.hpp" +#include "rhodium/core/FileSystem.hpp" +#include "rhodium/diagnostics/JsonDiagnosticSink.hpp" #include #include @@ -17,14 +17,14 @@ namespace std::filesystem::path tempDir(const std::string &name) { const auto stamp = std::chrono::steady_clock::now().time_since_epoch().count(); - auto path = std::filesystem::temp_directory_path() / ("tkb-" + name + "-" + std::to_string(stamp)); + auto path = std::filesystem::temp_directory_path() / ("rhodium-" + name + "-" + std::to_string(stamp)); std::filesystem::create_directories(path); return path; } void writeFile(const std::filesystem::path &path, const std::string &text) { - ASSERT_TRUE(toolkit::File::write(path, text, nullptr)); + ASSERT_TRUE(rhodium::File::write(path, text, nullptr)); } void addZipEntry(struct archive *zip, const std::string &name, const std::string &content) @@ -57,8 +57,8 @@ TEST(ArchiveTests, Sha256FileComputesExpectedHash) { const auto dir = tempDir("sha256"); writeFile(dir / "hello.txt", "hello\n"); - EXPECT_EQ(toolkit::sha256File(dir / "hello.txt"), "5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03"); - EXPECT_TRUE(toolkit::sha256Equals("ABCDEF", "abcdef")); + EXPECT_EQ(rhodium::sha256File(dir / "hello.txt"), "5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03"); + EXPECT_TRUE(rhodium::sha256Equals("ABCDEF", "abcdef")); std::filesystem::remove_all(dir); } @@ -68,10 +68,10 @@ TEST(ArchiveTests, ExtractZipWithStripComponents) const auto zip = dir / "hello.zip"; createZip(zip, {{"hello-1.0/include/hello.hpp", "#pragma once\n"}}); - toolkit::ArchiveExtractor extractor; - toolkit::JsonDiagnosticSink diagnostics; + rhodium::ArchiveExtractor extractor; + rhodium::JsonDiagnosticSink diagnostics; ASSERT_TRUE(extractor.extract(zip, dir / "out", 1, diagnostics)) << diagnostics.diagnostics().dump(); - EXPECT_TRUE(toolkit::File::exists(dir / "out" / "include" / "hello.hpp")); + EXPECT_TRUE(rhodium::File::exists(dir / "out" / "include" / "hello.hpp")); std::filesystem::remove_all(dir); } @@ -81,8 +81,8 @@ TEST(ArchiveTests, RejectsPathTraversalEntry) const auto zip = dir / "bad.zip"; createZip(zip, {{"../escape.txt", "bad"}}); - toolkit::ArchiveExtractor extractor; - toolkit::JsonDiagnosticSink diagnostics; + rhodium::ArchiveExtractor extractor; + rhodium::JsonDiagnosticSink diagnostics; EXPECT_FALSE(extractor.extract(zip, dir / "out", 0, diagnostics)); EXPECT_NE(diagnostics.diagnostics().dump().find("unsafe archive entry"), std::string::npos); std::filesystem::remove_all(dir); @@ -94,21 +94,21 @@ TEST(ArchiveTests, FetcherReusesExtractedArchiveWhenMarkerMatches) const auto zip = dir / "hello.zip"; createZip(zip, {{"hello-1.0/include/hello.hpp", "#pragma once\n"}}); - toolkit::DependencyDesc dep; + rhodium::DependencyDesc dep; dep.name = "hello"; dep.source = zip.string(); dep.sourceType = "archive"; - dep.sha256 = toolkit::sha256File(zip); + dep.sha256 = rhodium::sha256File(zip); dep.stripComponents = 1; - toolkit::ArchiveFetcher fetcher; - toolkit::ArchiveFetchResult first; - toolkit::JsonDiagnosticSink diagnostics; + rhodium::ArchiveFetcher fetcher; + rhodium::ArchiveFetchResult first; + rhodium::JsonDiagnosticSink diagnostics; ASSERT_TRUE(fetcher.fetchAndExtract(dep, dir, dir / ".tpkg" / "packages", first, diagnostics)) << diagnostics.diagnostics().dump(); - const auto marker = toolkit::File::read(first.sourceDir / ".tpkg_archive_marker"); + const auto marker = rhodium::File::read(first.sourceDir / ".tpkg_archive_marker"); - toolkit::ArchiveFetchResult second; + rhodium::ArchiveFetchResult second; ASSERT_TRUE(fetcher.fetchAndExtract(dep, dir, dir / ".tpkg" / "packages", second, diagnostics)) << diagnostics.diagnostics().dump(); - EXPECT_EQ(toolkit::File::read(second.sourceDir / ".tpkg_archive_marker"), marker); + EXPECT_EQ(rhodium::File::read(second.sourceDir / ".tpkg_archive_marker"), marker); std::filesystem::remove_all(dir); } diff --git a/tests/tpkg/ArtifactGcTests.cpp b/tests/rhodium/ArtifactGcTests.cpp similarity index 64% rename from tests/tpkg/ArtifactGcTests.cpp rename to tests/rhodium/ArtifactGcTests.cpp index 574349e..f7ae54c 100644 --- a/tests/tpkg/ArtifactGcTests.cpp +++ b/tests/rhodium/ArtifactGcTests.cpp @@ -1,8 +1,8 @@ -#include "tpkg/core/FileSystem.hpp" -#include "tpkg/core/Hash.hpp" -#include "tpkg/diagnostics/JsonDiagnosticSink.hpp" -#include "tpkg/package/ArtifactGc.hpp" -#include "tpkg/package/PackageCache.hpp" +#include "rhodium/core/FileSystem.hpp" +#include "rhodium/core/Hash.hpp" +#include "rhodium/diagnostics/JsonDiagnosticSink.hpp" +#include "rhodium/package/ArtifactGc.hpp" +#include "rhodium/package/PackageCache.hpp" #include @@ -14,7 +14,7 @@ namespace std::filesystem::path makeGcTempDir() { const auto stamp = std::chrono::steady_clock::now().time_since_epoch().count(); - auto path = std::filesystem::temp_directory_path() / ("tkb-artifact-gc-" + std::to_string(stamp)); + auto path = std::filesystem::temp_directory_path() / ("rhodium-artifact-gc-" + std::to_string(stamp)); std::filesystem::create_directories(path); return path; } @@ -29,9 +29,9 @@ namespace std::filesystem::create_directories(root / ".tpkg" / "build-packages" / package / cache); } - toolkit::LockedPackage lockedPackage(const std::string &name) + rhodium::LockedPackage lockedPackage(const std::string &name) { - toolkit::LockedPackage package; + rhodium::LockedPackage package; package.name = name; package.artifactId = name + "/live"; package.sourceType = "git"; @@ -48,15 +48,15 @@ namespace makeArtifactDir(root, "fmt/live"); makeArtifactDir(root, "fmt/stale"); - toolkit::LockFile lockFile; - toolkit::LockedPackage package; + rhodium::LockFile lockFile; + rhodium::LockedPackage package; package.name = "fmt"; package.artifactId = "fmt/live"; lockFile.packages.push_back(package); - toolkit::JsonDiagnosticSink diagnostics; - ASSERT_TRUE(toolkit::garbageCollectArtifacts(lockFile, root, false, {}, diagnostics)) << diagnostics.diagnostics().dump(); - EXPECT_TRUE(toolkit::File::dir(root / ".tpkg" / "artifacts" / "fmt" / "stale")); + rhodium::JsonDiagnosticSink diagnostics; + ASSERT_TRUE(rhodium::garbageCollectArtifacts(lockFile, root, false, {}, diagnostics)) << diagnostics.diagnostics().dump(); + EXPECT_TRUE(rhodium::File::dir(root / ".tpkg" / "artifacts" / "fmt" / "stale")); std::filesystem::remove_all(root); } @@ -67,16 +67,16 @@ namespace makeArtifactDir(root, "fmt/live"); makeArtifactDir(root, "fmt/stale"); - toolkit::LockFile lockFile; - toolkit::LockedPackage package; + rhodium::LockFile lockFile; + rhodium::LockedPackage package; package.name = "fmt"; package.artifactId = "fmt/live"; lockFile.packages.push_back(package); - toolkit::JsonDiagnosticSink diagnostics; - ASSERT_TRUE(toolkit::garbageCollectArtifacts(lockFile, root, true, "fmt", diagnostics)) << diagnostics.diagnostics().dump(); - EXPECT_TRUE(toolkit::File::dir(root / ".tpkg" / "artifacts" / "fmt" / "live")); - EXPECT_FALSE(toolkit::File::dir(root / ".tpkg" / "artifacts" / "fmt" / "stale")); + rhodium::JsonDiagnosticSink diagnostics; + ASSERT_TRUE(rhodium::garbageCollectArtifacts(lockFile, root, true, "fmt", diagnostics)) << diagnostics.diagnostics().dump(); + EXPECT_TRUE(rhodium::File::dir(root / ".tpkg" / "artifacts" / "fmt" / "live")); + EXPECT_FALSE(rhodium::File::dir(root / ".tpkg" / "artifacts" / "fmt" / "stale")); std::filesystem::remove_all(root); } @@ -88,14 +88,14 @@ namespace makeBuildCacheDir(root, "fmt", "release-windows-msvc-x64"); makeBuildCacheDir(root, "old", "debug-windows-msvc-x64"); - toolkit::LockFile lockFile; + rhodium::LockFile lockFile; lockFile.packages.push_back(lockedPackage("fmt")); - toolkit::JsonDiagnosticSink diagnostics; - ASSERT_TRUE(toolkit::garbageCollectPkgCaches(lockFile, root, "debug", "windows-msvc-x64", true, {}, diagnostics)) << diagnostics.diagnostics().dump(); - EXPECT_TRUE(toolkit::File::dir(root / ".tpkg" / "build-packages" / "fmt" / "debug-windows-msvc-x64")); - EXPECT_FALSE(toolkit::File::dir(root / ".tpkg" / "build-packages" / "fmt" / "release-windows-msvc-x64")); - EXPECT_FALSE(toolkit::File::dir(root / ".tpkg" / "build-packages" / "old" / "debug-windows-msvc-x64")); + rhodium::JsonDiagnosticSink diagnostics; + ASSERT_TRUE(rhodium::garbageCollectPkgCaches(lockFile, root, "debug", "windows-msvc-x64", true, {}, diagnostics)) << diagnostics.diagnostics().dump(); + EXPECT_TRUE(rhodium::File::dir(root / ".tpkg" / "build-packages" / "fmt" / "debug-windows-msvc-x64")); + EXPECT_FALSE(rhodium::File::dir(root / ".tpkg" / "build-packages" / "fmt" / "release-windows-msvc-x64")); + EXPECT_FALSE(rhodium::File::dir(root / ".tpkg" / "build-packages" / "old" / "debug-windows-msvc-x64")); std::filesystem::remove_all(root); } @@ -106,12 +106,12 @@ namespace makeBuildCacheDir(root, "fmt", "debug-windows-msvc-x64"); makeBuildCacheDir(root, "fmt", "release-windows-msvc-x64"); - toolkit::LockFile lockFile; + rhodium::LockFile lockFile; lockFile.packages.push_back(lockedPackage("fmt")); - toolkit::JsonDiagnosticSink diagnostics; - ASSERT_TRUE(toolkit::garbageCollectPkgCaches(lockFile, root, "debug", "windows-msvc-x64", false, {}, diagnostics)) << diagnostics.diagnostics().dump(); - EXPECT_TRUE(toolkit::File::dir(root / ".tpkg" / "build-packages" / "fmt" / "release-windows-msvc-x64")); + rhodium::JsonDiagnosticSink diagnostics; + ASSERT_TRUE(rhodium::garbageCollectPkgCaches(lockFile, root, "debug", "windows-msvc-x64", false, {}, diagnostics)) << diagnostics.diagnostics().dump(); + EXPECT_TRUE(rhodium::File::dir(root / ".tpkg" / "build-packages" / "fmt" / "release-windows-msvc-x64")); std::filesystem::remove_all(root); } @@ -119,23 +119,23 @@ namespace TEST(ArtifactGcTests, ApplyDeletesStaleGitSourceCachesForPackage) { const auto root = makeGcTempDir(); - toolkit::LockFile lockFile; + rhodium::LockFile lockFile; auto package = lockedPackage("fmt"); package.ref = "v2"; lockFile.packages.push_back(package); - toolkit::DependencyDesc dependency; + rhodium::DependencyDesc dependency; dependency.name = package.name; dependency.source = package.source; dependency.ref = package.ref; - toolkit::PackageCache cache(root / ".tpkg" / "packages"); + rhodium::PackageCache cache(root / ".tpkg" / "packages"); std::filesystem::create_directories(cache.source(dependency) / ".git"); std::filesystem::create_directories(cache.sourceRoot(dependency) / "v1" / ".git"); - toolkit::JsonDiagnosticSink diagnostics; - ASSERT_TRUE(toolkit::garbageCollectSourceCaches(lockFile, root, true, "fmt", diagnostics)) << diagnostics.diagnostics().dump(); - EXPECT_TRUE(toolkit::File::dir(cache.source(dependency))); - EXPECT_FALSE(toolkit::File::dir(cache.sourceRoot(dependency) / "v1")); + rhodium::JsonDiagnosticSink diagnostics; + ASSERT_TRUE(rhodium::garbageCollectSourceCaches(lockFile, root, true, "fmt", diagnostics)) << diagnostics.diagnostics().dump(); + EXPECT_TRUE(rhodium::File::dir(cache.source(dependency))); + EXPECT_FALSE(rhodium::File::dir(cache.sourceRoot(dependency) / "v1")); std::filesystem::remove_all(root); } @@ -143,24 +143,24 @@ namespace TEST(ArtifactGcTests, ApplyDeletesStaleArchiveSourceCachesForPackage) { const auto root = makeGcTempDir(); - toolkit::LockFile lockFile; - toolkit::LockedPackage package; + rhodium::LockFile lockFile; + rhodium::LockedPackage package; package.name = "zlib"; package.sourceType = "archive"; package.source = "https://example.invalid/zlib.tar.gz"; - package.resolvedArchiveHash = toolkit::Hash::xxhash64Hex("live"); + package.resolvedArchiveHash = rhodium::Hash::xxhash64Hex("live"); package.artifactId = "zlib/live"; lockFile.packages.push_back(package); const auto archiveRoot = root / ".tpkg" / "packages" / "_archives" / "zlib"; - const auto liveCacheKey = toolkit::Hash::xxhash64Hex(package.source); + const auto liveCacheKey = rhodium::Hash::xxhash64Hex(package.source); std::filesystem::create_directories(archiveRoot / liveCacheKey / "src"); - std::filesystem::create_directories(archiveRoot / toolkit::Hash::xxhash64Hex("stale") / "src"); + std::filesystem::create_directories(archiveRoot / rhodium::Hash::xxhash64Hex("stale") / "src"); - toolkit::JsonDiagnosticSink diagnostics; - ASSERT_TRUE(toolkit::garbageCollectSourceCaches(lockFile, root, true, "zlib", diagnostics)) << diagnostics.diagnostics().dump(); - EXPECT_TRUE(toolkit::File::dir(archiveRoot / liveCacheKey)); - EXPECT_FALSE(toolkit::File::dir(archiveRoot / toolkit::Hash::xxhash64Hex("stale"))); + rhodium::JsonDiagnosticSink diagnostics; + ASSERT_TRUE(rhodium::garbageCollectSourceCaches(lockFile, root, true, "zlib", diagnostics)) << diagnostics.diagnostics().dump(); + EXPECT_TRUE(rhodium::File::dir(archiveRoot / liveCacheKey)); + EXPECT_FALSE(rhodium::File::dir(archiveRoot / rhodium::Hash::xxhash64Hex("stale"))); std::filesystem::remove_all(root); } diff --git a/tests/tpkg/BuildModelTests.cpp b/tests/rhodium/BuildModelTests.cpp similarity index 63% rename from tests/tpkg/BuildModelTests.cpp rename to tests/rhodium/BuildModelTests.cpp index ec32343..af9026d 100644 --- a/tests/tpkg/BuildModelTests.cpp +++ b/tests/rhodium/BuildModelTests.cpp @@ -1,5 +1,5 @@ -#include "tpkg/config/JsonModelWriter.hpp" -#include "tpkg/model/BuildModel.hpp" +#include "rhodium/config/JsonModelWriter.hpp" +#include "rhodium/model/BuildModel.hpp" #include #include @@ -9,11 +9,11 @@ namespace TEST(BuildModelTests, JsonWriterUsesDependencyManifestShape) { - toolkit::BuildModel model; - model.rootPackage.name = "toolkit-deps"; + rhodium::BuildModel model; + model.rootPackage.name = "rhodium-deps"; model.workspace.defaultConfig = "debug"; - toolkit::DependencyDesc dep; + rhodium::DependencyDesc dep; dep.name = "fmt"; dep.source = "https://github.com/fmtlib/fmt.git"; dep.sourceType = "git"; @@ -22,10 +22,10 @@ namespace dep.artifacts.includeDirs.push_back("include"); model.rootPackage.dependencies.push_back(dep); - auto json = toolkit::JsonModel::from(model); + auto json = rhodium::JsonModel::from(model); - EXPECT_EQ(json["manifest"], "tpkg.lua"); - EXPECT_EQ(json["package"]["name"], "toolkit-deps"); + EXPECT_EQ(json["manifest"], "rhodium.lua"); + EXPECT_EQ(json["package"]["name"], "rhodium-deps"); ASSERT_EQ(json["package"]["dependencies"].size(), 1u); EXPECT_EQ(json["package"]["dependencies"][0]["name"], "fmt"); } diff --git a/tests/tpkg/CMakeDependencyExporterTests.cpp b/tests/rhodium/CMakeDependencyExporterTests.cpp similarity index 71% rename from tests/tpkg/CMakeDependencyExporterTests.cpp rename to tests/rhodium/CMakeDependencyExporterTests.cpp index 86245ac..ec2cba7 100644 --- a/tests/tpkg/CMakeDependencyExporterTests.cpp +++ b/tests/rhodium/CMakeDependencyExporterTests.cpp @@ -3,9 +3,9 @@ * @LastEditors: cubevlmu khfahqp@gmail.com * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/cmake/CMakeDependencyExporter.hpp" -#include "tpkg/core/FileSystem.hpp" -#include "tpkg/diagnostics/JsonDiagnosticSink.hpp" +#include "rhodium/cmake/CMakeDependencyExporter.hpp" +#include "rhodium/core/FileSystem.hpp" +#include "rhodium/diagnostics/JsonDiagnosticSink.hpp" #include @@ -18,7 +18,7 @@ namespace std::filesystem::path makeTempDir() { const auto stamp = std::chrono::steady_clock::now().time_since_epoch().count(); - auto path = std::filesystem::temp_directory_path() / ("tkb-cmake-deps-" + std::to_string(stamp)); + auto path = std::filesystem::temp_directory_path() / ("rhodium-cmake-deps-" + std::to_string(stamp)); std::filesystem::create_directories(path); return path; } @@ -28,7 +28,7 @@ namespace const auto root = makeTempDir(); const auto output = root / ".tpkg/generated/cmake"; - toolkit::ResolvedDependencyArtifact package; + rhodium::ResolvedDependencyArtifact package; package.name = "fmt"; package.includeDirs.push_back(root / "artifacts/fmt/include"); const auto libDir = root / "artifacts/fmt/lib"; @@ -41,7 +41,7 @@ namespace package.defines.push_back("FMT_HEADER_ONLY=0"); package.systemLibs.push_back("pthread"); - toolkit::CMakeDependencyExportMetadata metadata; + rhodium::CMakeDependencyExportMetadata metadata; metadata.toolchainId = "windows-msvc-x64"; metadata.compilerKind = "msvc"; metadata.config = "debug"; @@ -49,23 +49,23 @@ namespace metadata.runtime = "dynamic"; metadata.linkage = "static"; - toolkit::JsonDiagnosticSink diagnostics; - ASSERT_TRUE(toolkit::CMakeDependency::writeFiles({package}, output, metadata, diagnostics)) + rhodium::JsonDiagnosticSink diagnostics; + ASSERT_TRUE(rhodium::CMakeDependency::writeFiles({package}, output, metadata, diagnostics)) << diagnostics.diagnostics().dump(); - const auto config = toolkit::File::read(output / "tpkgConfig.cmake"); - EXPECT_NE(config.find("tpkgTargets.cmake"), std::string::npos); + const auto config = rhodium::File::read(output / "rhodiumConfig.cmake"); + EXPECT_NE(config.find("rhodiumTargets.cmake"), std::string::npos); - const auto targets = toolkit::File::read(output / "tpkgTargets.cmake"); - EXPECT_NE(targets.find("add_library(tpkg::fmt INTERFACE IMPORTED)"), std::string::npos); + const auto targets = rhodium::File::read(output / "rhodiumTargets.cmake"); + EXPECT_NE(targets.find("add_library(rhodium::fmt INTERFACE IMPORTED)"), std::string::npos); EXPECT_NE(targets.find("INTERFACE_INCLUDE_DIRECTORIES"), std::string::npos); EXPECT_EQ(targets.find("INTERFACE_LINK_DIRECTORIES"), std::string::npos); EXPECT_NE(targets.find("fmt.lib"), std::string::npos); EXPECT_NE(targets.find("fmtd.lib"), std::string::npos); EXPECT_NE(targets.find("\"pthread\""), std::string::npos); - EXPECT_NE(config.find("TPKG_CONFIG"), std::string::npos); - EXPECT_NE(config.find("TPKG_COMPILER_KIND"), std::string::npos); + EXPECT_NE(config.find("RHODIUM_CONFIG"), std::string::npos); + EXPECT_NE(config.find("RHODIUM_COMPILER_KIND"), std::string::npos); EXPECT_NE(config.find("CMAKE_CONFIGURATION_TYPES"), std::string::npos); EXPECT_NE(config.find("CMAKE_MSVC_RUNTIME_LIBRARY"), std::string::npos); @@ -79,13 +79,13 @@ namespace const auto libDir = root / "artifacts/fmt/lib"; std::filesystem::create_directories(libDir); - toolkit::ResolvedDependencyArtifact package; + rhodium::ResolvedDependencyArtifact package; package.name = "fmt"; package.libDirs.push_back(libDir); package.libs.push_back("fmt"); - toolkit::JsonDiagnosticSink diagnostics; - EXPECT_FALSE(toolkit::CMakeDependency::writeFiles({package}, output, diagnostics)); + rhodium::JsonDiagnosticSink diagnostics; + EXPECT_FALSE(rhodium::CMakeDependency::writeFiles({package}, output, diagnostics)); const auto text = diagnostics.diagnostics().dump(); EXPECT_NE(text.find("no matching library file was found"), std::string::npos); diff --git a/tests/tpkg/DependencyResolverTests.cpp b/tests/rhodium/DependencyResolverTests.cpp similarity index 78% rename from tests/tpkg/DependencyResolverTests.cpp rename to tests/rhodium/DependencyResolverTests.cpp index 64901a9..9d280c7 100644 --- a/tests/tpkg/DependencyResolverTests.cpp +++ b/tests/rhodium/DependencyResolverTests.cpp @@ -1,11 +1,11 @@ -#include "tpkg/config/LockFile.hpp" -#include "tpkg/core/FileSystem.hpp" -#include "tpkg/core/Process.hpp" -#include "tpkg/diagnostics/JsonDiagnosticSink.hpp" -#include "tpkg/model/BuildModel.hpp" -#include "tpkg/package/PackageCache.hpp" -#include "tpkg/resolve/DependencyResolver.hpp" -#include "tpkg/utils/Sha256.hpp" +#include "rhodium/config/LockFile.hpp" +#include "rhodium/core/FileSystem.hpp" +#include "rhodium/core/Process.hpp" +#include "rhodium/diagnostics/JsonDiagnosticSink.hpp" +#include "rhodium/model/BuildModel.hpp" +#include "rhodium/package/PackageCache.hpp" +#include "rhodium/resolve/DependencyResolver.hpp" +#include "rhodium/utils/Sha256.hpp" #include #include @@ -23,7 +23,7 @@ namespace std::filesystem::path makeTempDir() { const auto stamp = std::chrono::steady_clock::now().time_since_epoch().count(); - auto path = std::filesystem::temp_directory_path() / ("tkb-resolve-" + std::to_string(stamp)); + auto path = std::filesystem::temp_directory_path() / ("rhodium-resolve-" + std::to_string(stamp)); std::filesystem::create_directories(path); return path; } @@ -37,7 +37,7 @@ namespace bool runRequiredProcess(const std::string &executable, const std::vector &args, std::string &output) { - auto result = toolkit::Process::run(executable, args); + auto result = rhodium::Process::run(executable, args); output = result.output; return result.exitCode == 0; } @@ -68,10 +68,10 @@ namespace return count; } - toolkit::BuildModel localHeaderOnlyModel(const std::string &name = "HeaderOnly") + rhodium::BuildModel localHeaderOnlyModel(const std::string &name = "HeaderOnly") { - toolkit::BuildModel model; - toolkit::DependencyDesc dependency; + rhodium::BuildModel model; + rhodium::DependencyDesc dependency; dependency.name = name; dependency.source = "third_party/" + name; dependency.sourceType = "local"; @@ -113,8 +113,8 @@ namespace std::filesystem::create_directories(dir / "third_party/Prebuilt/bin"); writeText(dir / "third_party/Prebuilt/lib/Prebuilt.lib", ""); - toolkit::BuildModel model; - toolkit::DependencyDesc headerOnly; + rhodium::BuildModel model; + rhodium::DependencyDesc headerOnly; headerOnly.name = "HeaderOnly"; headerOnly.source = "third_party/HeaderOnly"; headerOnly.sourceType = "local"; @@ -123,7 +123,7 @@ namespace headerOnly.artifacts.includeDirs.push_back("include"); model.rootPackage.dependencies.push_back(headerOnly); - toolkit::DependencyDesc prebuilt; + rhodium::DependencyDesc prebuilt; prebuilt.name = "Prebuilt"; prebuilt.source = "third_party/Prebuilt"; prebuilt.sourceType = "local"; @@ -135,22 +135,22 @@ namespace prebuilt.artifacts.libs.push_back("Prebuilt"); model.rootPackage.dependencies.push_back(prebuilt); - toolkit::JsonDiagnosticSink diagnostics; - toolkit::DependencyResolver resolver; + rhodium::JsonDiagnosticSink diagnostics; + rhodium::DependencyResolver resolver; ASSERT_TRUE(resolver.restore(model, dir, diagnostics)) << diagnostics.diagnostics().dump(); - EXPECT_TRUE(toolkit::File::exists(dir / "tpkg.lock.toml")); - toolkit::LockFile lockFile; - ASSERT_TRUE(toolkit::LockFile::read(dir / "tpkg.lock.toml", lockFile, diagnostics)) << diagnostics.diagnostics().dump(); + EXPECT_TRUE(rhodium::File::exists(dir / "tpkg.lock.toml")); + rhodium::LockFile lockFile; + ASSERT_TRUE(rhodium::LockFile::read(dir / "tpkg.lock.toml", lockFile, diagnostics)) << diagnostics.diagnostics().dump(); ASSERT_EQ(lockFile.packages.size(), 2u); for (const auto &locked : lockFile.packages) { EXPECT_FALSE(locked.buildHash.empty()); EXPECT_EQ(locked.artifactId, locked.name + "/" + locked.commit + "-" + locked.buildHash); - EXPECT_TRUE(toolkit::File::exists(dir / ".tpkg/artifacts" / locked.artifactId / "artifact.toml")); + EXPECT_TRUE(rhodium::File::exists(dir / ".rhodium/artifacts" / locked.artifactId / "artifact.toml")); } - EXPECT_EQ(toolkit::File::read(dir / "tpkg.lock.toml").find("E:"), std::string::npos); - EXPECT_EQ(toolkit::File::read(dir / "tpkg.lock.toml").find("cache_path"), std::string::npos); + EXPECT_EQ(rhodium::File::read(dir / "tpkg.lock.toml").find("E:"), std::string::npos); + EXPECT_EQ(rhodium::File::read(dir / "tpkg.lock.toml").find("cache_path"), std::string::npos); std::filesystem::remove_all(dir); } @@ -197,8 +197,8 @@ int value() { ASSERT_TRUE(runRequiredProcess("git", {"-C", repo.string(), "add", "."}, processOutput)) << processOutput; ASSERT_TRUE(runRequiredProcess("git", {"-C", repo.string(), "commit", "-m", "init tiny cmake lib"}, processOutput)) << processOutput; - toolkit::BuildModel model; - toolkit::DependencyDesc dependency; + rhodium::BuildModel model; + rhodium::DependencyDesc dependency; dependency.name = "TinyCMakeLib"; dependency.source = "TinyCMakeLib"; dependency.sourceType = "git"; @@ -210,12 +210,12 @@ int value() { dependency.artifacts.libs.push_back("TinyCMakeLib"); model.rootPackage.dependencies.push_back(dependency); - toolkit::JsonDiagnosticSink diagnostics; - toolkit::DependencyResolver resolver; + rhodium::JsonDiagnosticSink diagnostics; + rhodium::DependencyResolver resolver; ASSERT_TRUE(resolver.restore(model, dir, diagnostics)) << diagnostics.diagnostics().dump(); - toolkit::LockFile lockFile; - ASSERT_TRUE(toolkit::LockFile::read(dir / "tpkg.lock.toml", lockFile, diagnostics)) << diagnostics.diagnostics().dump(); + rhodium::LockFile lockFile; + ASSERT_TRUE(rhodium::LockFile::read(dir / "tpkg.lock.toml", lockFile, diagnostics)) << diagnostics.diagnostics().dump(); ASSERT_EQ(lockFile.packages.size(), 1u); const auto &locked = lockFile.packages[0]; EXPECT_EQ(locked.name, "TinyCMakeLib"); @@ -225,23 +225,23 @@ int value() { EXPECT_FALSE(locked.buildHash.empty()); EXPECT_EQ(locked.artifactId, "TinyCMakeLib/" + locked.commit + "-" + locked.buildHash); - toolkit::PackageCache cache(dir / ".tpkg/packages"); - EXPECT_TRUE(toolkit::File::dir(cache.source(dependency))); - EXPECT_FALSE(toolkit::File::dir(cache.path(dependency, locked.commit))); - EXPECT_TRUE(toolkit::File::dir(cache.build(dependency, "debug-default"))); - const auto artifactPath = dir / ".tpkg" / "artifacts" / locked.artifactId; - EXPECT_TRUE(toolkit::File::dir(artifactPath / "include")); - EXPECT_TRUE(toolkit::File::dir(artifactPath / "lib")); + rhodium::PackageCache cache(dir / ".rhodium/packages"); + EXPECT_TRUE(rhodium::File::dir(cache.source(dependency))); + EXPECT_FALSE(rhodium::File::dir(cache.path(dependency, locked.commit))); + EXPECT_TRUE(rhodium::File::dir(cache.build(dependency, "debug-default"))); + const auto artifactPath = dir / ".rhodium" / "artifacts" / locked.artifactId; + EXPECT_TRUE(rhodium::File::dir(artifactPath / "include")); + EXPECT_TRUE(rhodium::File::dir(artifactPath / "lib")); EXPECT_TRUE(directoryHasFiles(artifactPath / "lib")); - EXPECT_TRUE(toolkit::File::exists(artifactPath / "artifact.toml")); + EXPECT_TRUE(rhodium::File::exists(artifactPath / "artifact.toml")); - const auto lockText = toolkit::File::read(dir / "tpkg.lock.toml"); + const auto lockText = rhodium::File::read(dir / "tpkg.lock.toml"); EXPECT_EQ(lockText.find("cache_path"), std::string::npos); EXPECT_EQ(lockText.find(dir.generic_string()), std::string::npos); - toolkit::JsonDiagnosticSink secondDiagnostics; + rhodium::JsonDiagnosticSink secondDiagnostics; ASSERT_TRUE(resolver.restore(model, dir, secondDiagnostics)) << secondDiagnostics.diagnostics().dump(); - EXPECT_EQ(toolkit::File::read(dir / "tpkg.lock.toml"), lockText); + EXPECT_EQ(rhodium::File::read(dir / "tpkg.lock.toml"), lockText); const auto secondLog = secondDiagnostics.diagnostics().dump(); EXPECT_NE(secondLog.find("skipping git sync and build"), std::string::npos); EXPECT_EQ(secondLog.find("fetching package"), std::string::npos); @@ -264,8 +264,8 @@ int value() { ASSERT_TRUE(runRequiredProcess("git", {"-C", repo.string(), "add", "."}, processOutput)) << processOutput; ASSERT_TRUE(runRequiredProcess("git", {"-C", repo.string(), "commit", "-m", "init broken prebuilt"}, processOutput)) << processOutput; - toolkit::BuildModel model; - toolkit::DependencyDesc dependency; + rhodium::BuildModel model; + rhodium::DependencyDesc dependency; dependency.name = "BrokenPrebuilt"; dependency.source = "BrokenPrebuilt"; dependency.sourceType = "git"; @@ -274,30 +274,30 @@ int value() { dependency.artifacts.includeDirs.push_back("missing-include"); model.rootPackage.dependencies.push_back(dependency); - toolkit::DependencyResolver resolver; - toolkit::JsonDiagnosticSink firstDiagnostics; + rhodium::DependencyResolver resolver; + rhodium::JsonDiagnosticSink firstDiagnostics; ASSERT_FALSE(resolver.restore(model, dir, firstDiagnostics, "windows-msvc-x64", "debug")); - toolkit::PackageCache cache(dir / ".tpkg/packages"); + rhodium::PackageCache cache(dir / ".rhodium/packages"); const auto sourcePath = cache.source(dependency); - EXPECT_TRUE(toolkit::File::dir(sourcePath / ".git")); + EXPECT_TRUE(rhodium::File::dir(sourcePath / ".git")); EXPECT_EQ(directoryCount(cache.sourceRoot(dependency)), 1u); const auto buildDir = cache.build(dependency, "debug-windows-msvc-x64"); writeText(buildDir / "stale.txt", "stale build cache\n"); - toolkit::JsonDiagnosticSink secondDiagnostics; + rhodium::JsonDiagnosticSink secondDiagnostics; ASSERT_FALSE(resolver.restore(model, dir, secondDiagnostics, "windows-msvc-x64", "debug")); - EXPECT_TRUE(toolkit::File::dir(sourcePath / ".git")); + EXPECT_TRUE(rhodium::File::dir(sourcePath / ".git")); EXPECT_EQ(directoryCount(cache.sourceRoot(dependency)), 1u); EXPECT_EQ(secondDiagnostics.diagnostics().dump().find("cloning package"), std::string::npos); - EXPECT_TRUE(toolkit::File::exists(buildDir / "stale.txt")); + EXPECT_TRUE(rhodium::File::exists(buildDir / "stale.txt")); - toolkit::DependencyRestoreOptions rebuild; + rhodium::DependencyRestoreOptions rebuild; rebuild.rebuild = true; - toolkit::JsonDiagnosticSink rebuildDiagnostics; + rhodium::JsonDiagnosticSink rebuildDiagnostics; ASSERT_FALSE(resolver.restore(model, dir, rebuildDiagnostics, "windows-msvc-x64", "debug", {}, rebuild)); - EXPECT_FALSE(toolkit::File::exists(buildDir / "stale.txt")); + EXPECT_FALSE(rhodium::File::exists(buildDir / "stale.txt")); std::filesystem::remove_all(dir); } @@ -309,23 +309,23 @@ int value() { const auto archivePath = dir / "third_party" / "hello-lib.zip"; createHelloZip(archivePath); - toolkit::BuildModel model; - toolkit::DependencyDesc dependency; + rhodium::BuildModel model; + rhodium::DependencyDesc dependency; dependency.name = "hello-lib"; dependency.source = "third_party/hello-lib.zip"; dependency.sourceType = "archive"; - dependency.sha256 = toolkit::sha256File(archivePath); + dependency.sha256 = rhodium::sha256File(archivePath); dependency.stripComponents = 1; dependency.buildType = "header_only"; dependency.artifacts.includeDirs.push_back("include"); model.rootPackage.dependencies.push_back(dependency); - toolkit::JsonDiagnosticSink diagnostics; - toolkit::DependencyResolver resolver; + rhodium::JsonDiagnosticSink diagnostics; + rhodium::DependencyResolver resolver; ASSERT_TRUE(resolver.restore(model, dir, diagnostics, "windows-msvc-x64", "debug")) << diagnostics.diagnostics().dump(); - toolkit::LockFile lockFile; - ASSERT_TRUE(toolkit::LockFile::read(dir / "tpkg.lock.toml", lockFile, diagnostics)) << diagnostics.diagnostics().dump(); + rhodium::LockFile lockFile; + ASSERT_TRUE(rhodium::LockFile::read(dir / "tpkg.lock.toml", lockFile, diagnostics)) << diagnostics.diagnostics().dump(); ASSERT_EQ(lockFile.packages.size(), 1u); const auto &locked = lockFile.packages[0]; EXPECT_EQ(locked.sourceType, "archive"); @@ -333,7 +333,7 @@ int value() { EXPECT_EQ(locked.resolvedArchiveHash, dependency.sha256); EXPECT_EQ(locked.stripComponents, 1); EXPECT_FALSE(locked.buildHash.empty()); - EXPECT_TRUE(toolkit::File::exists(dir / ".tpkg" / "artifacts" / locked.artifactId / "include" / "hello" / "hello.hpp")); + EXPECT_TRUE(rhodium::File::exists(dir / ".rhodium" / "artifacts" / locked.artifactId / "include" / "hello" / "hello.hpp")); std::filesystem::remove_all(dir); } @@ -343,14 +343,14 @@ int value() { const auto dir = makeTempDir(); std::filesystem::create_directories(dir / "third_party/HeaderOnly/include"); - toolkit::JsonDiagnosticSink diagnostics; - toolkit::DependencyResolver resolver; + rhodium::JsonDiagnosticSink diagnostics; + rhodium::DependencyResolver resolver; const auto model = localHeaderOnlyModel(); ASSERT_TRUE(resolver.restore(model, dir, diagnostics, "windows-msvc-x64", "debug")) << diagnostics.diagnostics().dump(); ASSERT_TRUE(resolver.restore(model, dir, diagnostics, "windows-msvc-x64", "release")) << diagnostics.diagnostics().dump(); - toolkit::LockFile lockFile; - ASSERT_TRUE(toolkit::LockFile::read(dir / "tpkg.lock.toml", lockFile, diagnostics)) << diagnostics.diagnostics().dump(); + rhodium::LockFile lockFile; + ASSERT_TRUE(rhodium::LockFile::read(dir / "tpkg.lock.toml", lockFile, diagnostics)) << diagnostics.diagnostics().dump(); ASSERT_EQ(lockFile.packages.size(), 2u); EXPECT_NE(lockFile.packages[0].config, lockFile.packages[1].config); EXPECT_NE(lockFile.packages[0].artifactId, lockFile.packages[1].artifactId); @@ -363,14 +363,14 @@ int value() { const auto dir = makeTempDir(); std::filesystem::create_directories(dir / "third_party/HeaderOnly/include"); - toolkit::JsonDiagnosticSink diagnostics; - toolkit::DependencyResolver resolver; + rhodium::JsonDiagnosticSink diagnostics; + rhodium::DependencyResolver resolver; const auto model = localHeaderOnlyModel(); ASSERT_TRUE(resolver.restore(model, dir, diagnostics, "windows-msvc-x64", "debug")) << diagnostics.diagnostics().dump(); ASSERT_TRUE(resolver.restore(model, dir, diagnostics, "android-clang-arm64", "debug")) << diagnostics.diagnostics().dump(); - toolkit::LockFile lockFile; - ASSERT_TRUE(toolkit::LockFile::read(dir / "tpkg.lock.toml", lockFile, diagnostics)) << diagnostics.diagnostics().dump(); + rhodium::LockFile lockFile; + ASSERT_TRUE(rhodium::LockFile::read(dir / "tpkg.lock.toml", lockFile, diagnostics)) << diagnostics.diagnostics().dump(); ASSERT_EQ(lockFile.packages.size(), 2u); EXPECT_NE(lockFile.packages[0].toolchainId, lockFile.packages[1].toolchainId); EXPECT_NE(lockFile.packages[0].artifactId, lockFile.packages[1].artifactId); @@ -384,17 +384,17 @@ int value() { std::filesystem::create_directories(dir / "third_party/HeaderOnly/include"); std::filesystem::create_directories(dir / "override/HeaderOnly/include"); - toolkit::JsonDiagnosticSink diagnostics; - toolkit::DependencyResolver resolver; + rhodium::JsonDiagnosticSink diagnostics; + rhodium::DependencyResolver resolver; const auto model = localHeaderOnlyModel(); ASSERT_TRUE(resolver.restore(model, dir, diagnostics, "windows-msvc-x64", "debug")) << diagnostics.diagnostics().dump(); - toolkit::DependencyOverrideSet overrides; + rhodium::DependencyOverrideSet overrides; overrides.overrides["HeaderOnly"].path = dir / "override/HeaderOnly"; ASSERT_TRUE(resolver.restore(model, dir, diagnostics, "windows-msvc-x64", "debug", overrides)) << diagnostics.diagnostics().dump(); - toolkit::LockFile lockFile; - ASSERT_TRUE(toolkit::LockFile::read(dir / "tpkg.lock.toml", lockFile, diagnostics)) << diagnostics.diagnostics().dump(); + rhodium::LockFile lockFile; + ASSERT_TRUE(rhodium::LockFile::read(dir / "tpkg.lock.toml", lockFile, diagnostics)) << diagnostics.diagnostics().dump(); ASSERT_EQ(lockFile.packages.size(), 2u); EXPECT_NE(lockFile.packages[0].overridden, lockFile.packages[1].overridden); EXPECT_NE(lockFile.packages[0].artifactId, lockFile.packages[1].artifactId); @@ -408,9 +408,9 @@ int value() { auto model = localHeaderOnlyModel(); std::filesystem::create_directories(dir / "third_party" / "HeaderOnly" / "include"); - toolkit::JsonDiagnosticSink diagnostics; - toolkit::DependencyResolver resolver; - toolkit::DependencyRestoreOptions options; + rhodium::JsonDiagnosticSink diagnostics; + rhodium::DependencyResolver resolver; + rhodium::DependencyRestoreOptions options; options.locked = true; EXPECT_FALSE(resolver.restore(model, dir, diagnostics, "windows-msvc-x64", "debug", {}, options)); EXPECT_NE(diagnostics.diagnostics().dump().find("restore --locked requires an existing lock entry"), std::string::npos); @@ -424,18 +424,18 @@ int value() { auto model = localHeaderOnlyModel(); std::filesystem::create_directories(dir / "third_party" / "HeaderOnly" / "include"); - toolkit::JsonDiagnosticSink diagnostics; - toolkit::DependencyResolver resolver; - toolkit::DependencyRestoreOptions options; + rhodium::JsonDiagnosticSink diagnostics; + rhodium::DependencyResolver resolver; + rhodium::DependencyRestoreOptions options; options.toolchainContentHash = "toolchain-a"; ASSERT_TRUE(resolver.restore(model, dir, diagnostics, "windows-msvc-x64", "debug", {}, options)) << diagnostics.diagnostics().dump(); - const auto before = toolkit::File::read(dir / "tpkg.lock.toml"); + const auto before = rhodium::File::read(dir / "tpkg.lock.toml"); - toolkit::DependencyRestoreOptions locked; + rhodium::DependencyRestoreOptions locked; locked.locked = true; locked.toolchainContentHash = "toolchain-a"; ASSERT_TRUE(resolver.restore(model, dir, diagnostics, "windows-msvc-x64", "debug", {}, locked)) << diagnostics.diagnostics().dump(); - EXPECT_EQ(toolkit::File::read(dir / "tpkg.lock.toml"), before); + EXPECT_EQ(rhodium::File::read(dir / "tpkg.lock.toml"), before); std::filesystem::remove_all(dir); } @@ -451,25 +451,25 @@ int value() { std::filesystem::create_directories(dir / "third_party" / "A" / "include"); std::filesystem::create_directories(dir / "third_party" / "B" / "include"); - toolkit::JsonDiagnosticSink diagnostics; - toolkit::DependencyResolver resolver; - toolkit::DependencyRestoreOptions firstOptions; + rhodium::JsonDiagnosticSink diagnostics; + rhodium::DependencyResolver resolver; + rhodium::DependencyRestoreOptions firstOptions; firstOptions.toolchainContentHash = "toolchain-a"; ASSERT_TRUE(resolver.restore(model, dir, diagnostics, "windows-msvc-x64", "debug", {}, firstOptions)) << diagnostics.diagnostics().dump(); - toolkit::LockFile before; - ASSERT_TRUE(toolkit::LockFile::read(dir / "tpkg.lock.toml", before, diagnostics)) << diagnostics.diagnostics().dump(); + rhodium::LockFile before; + ASSERT_TRUE(rhodium::LockFile::read(dir / "tpkg.lock.toml", before, diagnostics)) << diagnostics.diagnostics().dump(); ASSERT_EQ(before.packages.size(), 2u); - toolkit::DependencyRestoreOptions updateOptions; + rhodium::DependencyRestoreOptions updateOptions; updateOptions.updatePackage = "A"; updateOptions.toolchainContentHash = "toolchain-b"; ASSERT_TRUE(resolver.restore(model, dir, diagnostics, "windows-msvc-x64", "debug", {}, updateOptions)) << diagnostics.diagnostics().dump(); - toolkit::LockFile after; - ASSERT_TRUE(toolkit::LockFile::read(dir / "tpkg.lock.toml", after, diagnostics)) << diagnostics.diagnostics().dump(); + rhodium::LockFile after; + ASSERT_TRUE(rhodium::LockFile::read(dir / "tpkg.lock.toml", after, diagnostics)) << diagnostics.diagnostics().dump(); ASSERT_EQ(after.packages.size(), 2u); - const auto findHash = [](const toolkit::LockFile &lock, const std::string &name) { + const auto findHash = [](const rhodium::LockFile &lock, const std::string &name) { for (const auto &package : lock.packages) { if (package.name == name) diff --git a/tests/tpkg/LockFileTests.cpp b/tests/rhodium/LockFileTests.cpp similarity index 77% rename from tests/tpkg/LockFileTests.cpp rename to tests/rhodium/LockFileTests.cpp index 9023370..d4eaae8 100644 --- a/tests/tpkg/LockFileTests.cpp +++ b/tests/rhodium/LockFileTests.cpp @@ -1,7 +1,7 @@ -#include "tpkg/config/LockFile.hpp" -#include "tpkg/core/FileSystem.hpp" -#include "tpkg/diagnostics/JsonDiagnosticSink.hpp" -#include "tpkg/package/PackageCache.hpp" +#include "rhodium/config/LockFile.hpp" +#include "rhodium/core/FileSystem.hpp" +#include "rhodium/diagnostics/JsonDiagnosticSink.hpp" +#include "rhodium/package/PackageCache.hpp" #include @@ -14,12 +14,12 @@ namespace TEST(LockFileTests, WritesAndReadsPackages) { const auto stamp = std::chrono::steady_clock::now().time_since_epoch().count(); - const auto dir = std::filesystem::temp_directory_path() / ("tkb-lock-" + std::to_string(stamp)); + const auto dir = std::filesystem::temp_directory_path() / ("rhodium-lock-" + std::to_string(stamp)); std::filesystem::create_directories(dir); const auto path = dir / "tpkg.lock.toml"; - toolkit::LockFile lock; - toolkit::LockedPackage package; + rhodium::LockFile lock; + rhodium::LockedPackage package; package.name = "fmt"; package.source = "github.com/fmtlib/fmt"; package.sourceType = "git"; @@ -36,11 +36,11 @@ namespace package.artifacts.libs.push_back("fmt"); lock.packages.push_back(package); - toolkit::JsonDiagnosticSink diagnostics; - ASSERT_TRUE(toolkit::LockFile::write(path, lock, diagnostics)) << diagnostics.diagnostics().dump(); + rhodium::JsonDiagnosticSink diagnostics; + ASSERT_TRUE(rhodium::LockFile::write(path, lock, diagnostics)) << diagnostics.diagnostics().dump(); - toolkit::LockFile loaded; - ASSERT_TRUE(toolkit::LockFile::read(path, loaded, diagnostics)) << diagnostics.diagnostics().dump(); + rhodium::LockFile loaded; + ASSERT_TRUE(rhodium::LockFile::read(path, loaded, diagnostics)) << diagnostics.diagnostics().dump(); ASSERT_EQ(loaded.packages.size(), 1u); EXPECT_EQ(loaded.packages[0].name, "fmt"); @@ -53,19 +53,19 @@ namespace EXPECT_EQ(loaded.packages[0].buildOptions["FMT_TEST"], "OFF"); EXPECT_EQ(loaded.packages[0].artifacts.includeDirs[0], "include"); EXPECT_EQ(loaded.packages[0].artifacts.libs[0], "fmt"); - EXPECT_EQ(toolkit::File::read(path).find("E:"), std::string::npos); + EXPECT_EQ(rhodium::File::read(path).find("E:"), std::string::npos); std::filesystem::remove_all(dir); } TEST(LockFileTests, PackageCacheUsesShortSourceHashAndRefForRemoteDependencies) { - toolkit::DependencyDesc dependency; + rhodium::DependencyDesc dependency; dependency.name = "fmt"; dependency.source = "github.com/fmtlib/fmt"; dependency.ref = "10.2.1"; - toolkit::PackageCache cache(".tpkg/packages"); + rhodium::PackageCache cache(".tpkg/packages"); const auto path = cache.source(dependency).generic_string(); EXPECT_NE(path.find(".tpkg/packages/fmt/"), std::string::npos); @@ -75,16 +75,16 @@ namespace TEST(LockFileTests, ArtifactIdIncludesBuildHash) { - toolkit::DependencyDesc dependency; + rhodium::DependencyDesc dependency; dependency.name = "fmt"; dependency.source = "github.com/fmtlib/fmt"; dependency.ref = "10.2.1"; dependency.buildType = "cmake"; dependency.cmake.options["FMT_TEST"] = "OFF"; - const auto first = toolkit::LockedPackage::from(dependency, "abcdef", "debug", "windows-msvc-x64"); + const auto first = rhodium::LockedPackage::from(dependency, "abcdef", "debug", "windows-msvc-x64"); dependency.cmake.options["FMT_TEST"] = "ON"; - const auto second = toolkit::LockedPackage::from(dependency, "abcdef", "debug", "windows-msvc-x64"); + const auto second = rhodium::LockedPackage::from(dependency, "abcdef", "debug", "windows-msvc-x64"); EXPECT_NE(first.buildHash, second.buildHash); EXPECT_NE(first.artifactId, second.artifactId); @@ -94,11 +94,11 @@ namespace TEST(LockFileTests, WritesAndReadsConfigToolchainFields) { const auto stamp = std::chrono::steady_clock::now().time_since_epoch().count(); - const auto dir = std::filesystem::temp_directory_path() / ("tkb-lock-matrix-" + std::to_string(stamp)); + const auto dir = std::filesystem::temp_directory_path() / ("rhodium-lock-matrix-" + std::to_string(stamp)); std::filesystem::create_directories(dir); - toolkit::LockFile lock; - toolkit::LockedPackage package; + rhodium::LockFile lock; + rhodium::LockedPackage package; package.name = "fmt"; package.source = "github.com/fmtlib/fmt"; package.sourceType = "git"; @@ -107,11 +107,11 @@ namespace package.artifactId = "fmt/hash"; lock.packages.push_back(package); - toolkit::JsonDiagnosticSink diagnostics; - ASSERT_TRUE(toolkit::LockFile::write(dir / "tpkg.lock.toml", lock, diagnostics)) << diagnostics.diagnostics().dump(); + rhodium::JsonDiagnosticSink diagnostics; + ASSERT_TRUE(rhodium::LockFile::write(dir / "tpkg.lock.toml", lock, diagnostics)) << diagnostics.diagnostics().dump(); - toolkit::LockFile loaded; - ASSERT_TRUE(toolkit::LockFile::read(dir / "tpkg.lock.toml", loaded, diagnostics)) << diagnostics.diagnostics().dump(); + rhodium::LockFile loaded; + ASSERT_TRUE(rhodium::LockFile::read(dir / "tpkg.lock.toml", loaded, diagnostics)) << diagnostics.diagnostics().dump(); ASSERT_EQ(loaded.packages.size(), 1u); EXPECT_EQ(loaded.packages[0].config, "debug"); EXPECT_EQ(loaded.packages[0].toolchainId, "android-clang-arm64"); @@ -121,13 +121,13 @@ namespace TEST(LockFileTests, SamePackageDebugReleaseCanCoexist) { - toolkit::DependencyDesc dependency; + rhodium::DependencyDesc dependency; dependency.name = "fmt"; dependency.source = "github.com/fmtlib/fmt"; dependency.ref = "10.2.1"; - const auto debug = toolkit::LockedPackage::from(dependency, "abcdef", "debug", "windows-msvc-x64"); - const auto release = toolkit::LockedPackage::from(dependency, "abcdef", "release", "windows-msvc-x64"); + const auto debug = rhodium::LockedPackage::from(dependency, "abcdef", "debug", "windows-msvc-x64"); + const auto release = rhodium::LockedPackage::from(dependency, "abcdef", "release", "windows-msvc-x64"); EXPECT_EQ(debug.name, release.name); EXPECT_EQ(debug.toolchainId, release.toolchainId); @@ -138,13 +138,13 @@ namespace TEST(LockFileTests, SamePackageDifferentToolchainsCanCoexist) { - toolkit::DependencyDesc dependency; + rhodium::DependencyDesc dependency; dependency.name = "fmt"; dependency.source = "github.com/fmtlib/fmt"; dependency.ref = "10.2.1"; - const auto windows = toolkit::LockedPackage::from(dependency, "abcdef", "debug", "windows-msvc-x64"); - const auto android = toolkit::LockedPackage::from(dependency, "abcdef", "debug", "android-clang-arm64"); + const auto windows = rhodium::LockedPackage::from(dependency, "abcdef", "debug", "windows-msvc-x64"); + const auto android = rhodium::LockedPackage::from(dependency, "abcdef", "debug", "android-clang-arm64"); EXPECT_EQ(windows.name, android.name); EXPECT_EQ(windows.config, android.config); @@ -155,15 +155,15 @@ namespace TEST(LockFileTests, ToolchainContentHashChangesArtifactId) { - toolkit::DependencyDesc dependency; + rhodium::DependencyDesc dependency; dependency.name = "fmt"; dependency.source = "github.com/fmtlib/fmt"; dependency.sourceType = "git"; dependency.ref = "10.2.1"; dependency.buildType = "cmake"; - const auto first = toolkit::LockedPackage::from(dependency, "abcdef", "debug", "windows-msvc-x64", "toolchain-content-a"); - const auto second = toolkit::LockedPackage::from(dependency, "abcdef", "debug", "windows-msvc-x64", "toolchain-content-b"); + const auto first = rhodium::LockedPackage::from(dependency, "abcdef", "debug", "windows-msvc-x64", "toolchain-content-a"); + const auto second = rhodium::LockedPackage::from(dependency, "abcdef", "debug", "windows-msvc-x64", "toolchain-content-b"); EXPECT_NE(first.buildHash, second.buildHash); EXPECT_NE(first.artifactId, second.artifactId); @@ -171,7 +171,7 @@ namespace TEST(LockFileTests, OverrideAndNormalCanCoexist) { - toolkit::DependencyDesc normal; + rhodium::DependencyDesc normal; normal.name = "fmt"; normal.source = "github.com/fmtlib/fmt"; normal.ref = "10.2.1"; @@ -183,8 +183,8 @@ namespace override.sourceType = "local"; override.ref.clear(); - const auto normalLock = toolkit::LockedPackage::from(normal, "abcdef", "debug", "windows-msvc-x64"); - const auto overrideLock = toolkit::LockedPackage::from(override, "override", "debug", "windows-msvc-x64"); + const auto normalLock = rhodium::LockedPackage::from(normal, "abcdef", "debug", "windows-msvc-x64"); + const auto overrideLock = rhodium::LockedPackage::from(override, "override", "debug", "windows-msvc-x64"); EXPECT_FALSE(normalLock.overridden); EXPECT_TRUE(overrideLock.overridden); @@ -194,12 +194,12 @@ namespace TEST(LockFileTests, WritesAndReadsArchiveDependencyLockEntry) { const auto stamp = std::chrono::steady_clock::now().time_since_epoch().count(); - const auto dir = std::filesystem::temp_directory_path() / ("tkb-lock-archive-" + std::to_string(stamp)); + const auto dir = std::filesystem::temp_directory_path() / ("rhodium-lock-archive-" + std::to_string(stamp)); std::filesystem::create_directories(dir); const auto path = dir / "tpkg.lock.toml"; - toolkit::LockFile lock; - toolkit::LockedPackage package; + rhodium::LockFile lock; + rhodium::LockedPackage package; package.name = "hello"; package.source = "third_party/hello.zip"; package.sourceType = "archive"; @@ -213,11 +213,11 @@ namespace package.artifactId = "hello/archive-sha-build-hash"; lock.packages.push_back(package); - toolkit::JsonDiagnosticSink diagnostics; - ASSERT_TRUE(toolkit::LockFile::write(path, lock, diagnostics)) << diagnostics.diagnostics().dump(); + rhodium::JsonDiagnosticSink diagnostics; + ASSERT_TRUE(rhodium::LockFile::write(path, lock, diagnostics)) << diagnostics.diagnostics().dump(); - toolkit::LockFile loaded; - ASSERT_TRUE(toolkit::LockFile::read(path, loaded, diagnostics)) << diagnostics.diagnostics().dump(); + rhodium::LockFile loaded; + ASSERT_TRUE(rhodium::LockFile::read(path, loaded, diagnostics)) << diagnostics.diagnostics().dump(); ASSERT_EQ(loaded.packages.size(), 1u); EXPECT_EQ(loaded.packages[0].sourceType, "archive"); EXPECT_EQ(loaded.packages[0].sha256, "archive-sha"); @@ -231,18 +231,18 @@ namespace TEST(LockFileTests, ArchiveHashAndPatchHashAffectPkgHash) { - toolkit::DependencyDesc dependency; + rhodium::DependencyDesc dependency; dependency.name = "hello"; dependency.source = "third_party/hello.zip"; dependency.sourceType = "archive"; dependency.resolvedArchiveHash = "archive-a"; dependency.patchHashes = {"patch-a"}; - const auto first = toolkit::LockedPackage::from(dependency, "archive-a", "debug", "windows-msvc-x64"); + const auto first = rhodium::LockedPackage::from(dependency, "archive-a", "debug", "windows-msvc-x64"); dependency.patchHashes = {"patch-b"}; - const auto second = toolkit::LockedPackage::from(dependency, "archive-a", "debug", "windows-msvc-x64"); + const auto second = rhodium::LockedPackage::from(dependency, "archive-a", "debug", "windows-msvc-x64"); dependency.resolvedArchiveHash = "archive-b"; - const auto third = toolkit::LockedPackage::from(dependency, "archive-b", "debug", "windows-msvc-x64"); + const auto third = rhodium::LockedPackage::from(dependency, "archive-b", "debug", "windows-msvc-x64"); EXPECT_NE(first.buildHash, second.buildHash); EXPECT_NE(second.buildHash, third.buildHash); diff --git a/tests/tpkg/LuaDslTests.cpp b/tests/rhodium/LuaDslTests.cpp similarity index 91% rename from tests/tpkg/LuaDslTests.cpp rename to tests/rhodium/LuaDslTests.cpp index f018471..f809830 100644 --- a/tests/tpkg/LuaDslTests.cpp +++ b/tests/rhodium/LuaDslTests.cpp @@ -1,5 +1,5 @@ -#include "tpkg/diagnostics/JsonDiagnosticSink.hpp" -#include "tpkg/script/ManifestLoader.hpp" +#include "rhodium/diagnostics/JsonDiagnosticSink.hpp" +#include "rhodium/script/ManifestLoader.hpp" #include @@ -13,7 +13,7 @@ namespace std::filesystem::path makeTempDir() { const auto stamp = std::chrono::steady_clock::now().time_since_epoch().count(); - auto path = std::filesystem::temp_directory_path() / ("tkb-tests-" + std::to_string(stamp)); + auto path = std::filesystem::temp_directory_path() / ("rhodium-tests-" + std::to_string(stamp)); std::filesystem::create_directories(path); return path; } @@ -21,11 +21,11 @@ namespace TEST(LuaDslTests, LoadsDependencyOnlyManifest) { const auto dir = makeTempDir(); - const auto manifest = dir / "tpkg.lua"; + const auto manifest = dir / "rhodium.lua"; std::ofstream out(manifest); out << R"lua( -package("toolkit-deps") +package("rhodium-deps") version("0.1.0") default_config("debug") default_platform("host") @@ -83,12 +83,12 @@ require_local("third_party/Local", { )lua"; out.close(); - toolkit::JsonDiagnosticSink diagnostics; - toolkit::ManifestLoader loader; + rhodium::JsonDiagnosticSink diagnostics; + rhodium::ManifestLoader loader; auto result = loader.load(manifest, diagnostics); ASSERT_TRUE(result.ok) << diagnostics.diagnostics().dump(); - EXPECT_EQ(result.model.rootPackage.name, "toolkit-deps"); + EXPECT_EQ(result.model.rootPackage.name, "rhodium-deps"); EXPECT_EQ(result.model.rootPackage.version, "0.1.0"); EXPECT_EQ(result.model.workspace.defaultConfig, "debug"); EXPECT_FALSE(result.model.workspace.defaultPlatform.empty()); @@ -127,8 +127,8 @@ module("Core") )lua"; out.close(); - toolkit::JsonDiagnosticSink diagnostics; - toolkit::ManifestLoader loader; + rhodium::JsonDiagnosticSink diagnostics; + rhodium::ManifestLoader loader; auto result = loader.load(manifest, diagnostics); EXPECT_FALSE(result.ok); @@ -152,8 +152,8 @@ custom_command({ "echo bad" }) )lua"; out.close(); - toolkit::JsonDiagnosticSink diagnostics; - toolkit::ManifestLoader loader; + rhodium::JsonDiagnosticSink diagnostics; + rhodium::ManifestLoader loader; auto result = loader.load(manifest, diagnostics); EXPECT_FALSE(result.ok); @@ -173,7 +173,7 @@ custom_command({ "echo bad" }) std::ofstream out(manifest); out << R"lua( -package("toolkit-deps") +package("rhodium-deps") require("fmt", { source = "https://github.com/fmtlib/fmt.git", @@ -187,8 +187,8 @@ require("fmt", { )lua"; out.close(); - toolkit::JsonDiagnosticSink diagnostics; - toolkit::ManifestLoader loader; + rhodium::JsonDiagnosticSink diagnostics; + rhodium::ManifestLoader loader; auto result = loader.load(manifest, diagnostics); ASSERT_TRUE(result.ok) << diagnostics.diagnostics().dump(); @@ -227,8 +227,8 @@ require("lua", { )lua"; out.close(); - toolkit::JsonDiagnosticSink diagnostics; - toolkit::ManifestLoader loader; + rhodium::JsonDiagnosticSink diagnostics; + rhodium::ManifestLoader loader; auto result = loader.load(manifest, diagnostics); ASSERT_TRUE(result.ok) << diagnostics.diagnostics().dump(); @@ -271,8 +271,8 @@ require("lua", { )lua"; out.close(); - toolkit::JsonDiagnosticSink diagnostics; - toolkit::ManifestLoader loader; + rhodium::JsonDiagnosticSink diagnostics; + rhodium::ManifestLoader loader; auto result = loader.load(manifest, diagnostics); ASSERT_TRUE(result.ok) << diagnostics.diagnostics().dump(); @@ -318,8 +318,8 @@ end) )lua"; out.close(); - toolkit::JsonDiagnosticSink diagnostics; - toolkit::ManifestLoader loader; + rhodium::JsonDiagnosticSink diagnostics; + rhodium::ManifestLoader loader; auto result = loader.load(manifest, diagnostics); ASSERT_TRUE(result.ok) << diagnostics.diagnostics().dump(); diff --git a/tests/tpkg/PackageArtifactResolverTests.cpp b/tests/rhodium/PackageArtifactResolverTests.cpp similarity index 80% rename from tests/tpkg/PackageArtifactResolverTests.cpp rename to tests/rhodium/PackageArtifactResolverTests.cpp index 6a2bc91..677193d 100644 --- a/tests/tpkg/PackageArtifactResolverTests.cpp +++ b/tests/rhodium/PackageArtifactResolverTests.cpp @@ -3,11 +3,11 @@ * @LastEditors: cubevlmu khfahqp@gmail.com * Copyright (c) 2026 by FlybirdGames, All Rights Reserved. */ -#include "tpkg/config/LockFile.hpp" -#include "tpkg/diagnostics/JsonDiagnosticSink.hpp" -#include "tpkg/package/PackageArtifact.hpp" -#include "tpkg/package/PackageArtifactStore.hpp" -#include "tpkg/resolve/PackageArtifactResolver.hpp" +#include "rhodium/config/LockFile.hpp" +#include "rhodium/diagnostics/JsonDiagnosticSink.hpp" +#include "rhodium/package/PackageArtifact.hpp" +#include "rhodium/package/PackageArtifactStore.hpp" +#include "rhodium/resolve/PackageArtifactResolver.hpp" #include @@ -22,14 +22,14 @@ namespace std::filesystem::path makeTempDir() { const auto stamp = std::chrono::steady_clock::now().time_since_epoch().count(); - auto path = std::filesystem::temp_directory_path() / ("tkb-artifact-resolve-" + std::to_string(stamp)); + auto path = std::filesystem::temp_directory_path() / ("rhodium-artifact-resolve-" + std::to_string(stamp)); std::filesystem::create_directories(path); return path; } void writeArtifact(const std::filesystem::path &root, const std::string &artifactId, const std::string &lib) { - toolkit::PackageArtifact artifact; + rhodium::PackageArtifact artifact; artifact.name = "Pkg"; artifact.commit = "local"; artifact.artifactId = artifactId; @@ -42,16 +42,16 @@ namespace #else std::ofstream(artifact.root / "lib" / ("lib" + lib + ".a")).put('\0'); #endif - toolkit::JsonDiagnosticSink diagnostics; - ASSERT_TRUE(toolkit::ArtifactStore::write(artifact, diagnostics)) << diagnostics.diagnostics().dump(); + rhodium::JsonDiagnosticSink diagnostics; + ASSERT_TRUE(rhodium::ArtifactStore::write(artifact, diagnostics)) << diagnostics.diagnostics().dump(); } - toolkit::LockedPackage lockedPackage(const std::string &artifactId, + rhodium::LockedPackage lockedPackage(const std::string &artifactId, const std::string &config, const std::string &toolchain, bool overridden = false) { - toolkit::LockedPackage locked; + rhodium::LockedPackage locked; locked.name = "Pkg"; locked.source = overridden ? "C:/override/Pkg" : "third_party/Pkg"; locked.sourceType = overridden ? "local" : "local"; @@ -67,7 +67,7 @@ namespace { const auto root = makeTempDir(); - toolkit::PackageArtifact artifact; + rhodium::PackageArtifact artifact; artifact.name = "Pkg"; artifact.commit = "local"; artifact.artifactId = "Pkg/local"; @@ -87,16 +87,16 @@ namespace std::ofstream(artifact.root / "lib" / "libPkg.a").put('\0'); #endif - toolkit::JsonDiagnosticSink diagnostics; - ASSERT_TRUE(toolkit::ArtifactStore::write(artifact, diagnostics)) << diagnostics.diagnostics().dump(); + rhodium::JsonDiagnosticSink diagnostics; + ASSERT_TRUE(rhodium::ArtifactStore::write(artifact, diagnostics)) << diagnostics.diagnostics().dump(); - toolkit::LockedPackage locked; + rhodium::LockedPackage locked; locked.name = "Pkg"; locked.artifactId = "Pkg/local"; - toolkit::LockFile lockFile; + rhodium::LockFile lockFile; lockFile.packages.push_back(locked); - toolkit::PackageArtifactResolver resolver; + rhodium::PackageArtifactResolver resolver; ASSERT_TRUE(resolver.load(lockFile, root, diagnostics)) << diagnostics.diagnostics().dump(); const auto *resolved = resolver.find("Pkg"); @@ -117,14 +117,14 @@ namespace writeArtifact(root, "Pkg/release-win", "PkgRelease"); writeArtifact(root, "Pkg/debug-android", "PkgAndroid"); - toolkit::LockFile lockFile; + rhodium::LockFile lockFile; lockFile.packages.push_back(lockedPackage("Pkg/release-win", "release", "windows-msvc-x64")); lockFile.packages.push_back(lockedPackage("Pkg/debug-android", "debug", "android-clang-arm64")); lockFile.packages.push_back(lockedPackage("Pkg/debug-win", "debug", "windows-msvc-x64")); - toolkit::JsonDiagnosticSink diagnostics; - toolkit::PackageArtifactResolver resolver; - ASSERT_TRUE(resolver.load(lockFile, root, "debug", "windows-msvc-x64", toolkit::DependencyOverrideSet{}, diagnostics)) << diagnostics.diagnostics().dump(); + rhodium::JsonDiagnosticSink diagnostics; + rhodium::PackageArtifactResolver resolver; + ASSERT_TRUE(resolver.load(lockFile, root, "debug", "windows-msvc-x64", rhodium::DependencyOverrideSet{}, diagnostics)) << diagnostics.diagnostics().dump(); const auto *resolved = resolver.find("Pkg"); ASSERT_NE(resolved, nullptr); ASSERT_EQ(resolved->libs.size(), 1u); @@ -139,17 +139,17 @@ namespace writeArtifact(root, "Pkg/normal", "PkgNormal"); writeArtifact(root, "Pkg/override", "PkgOverride"); - toolkit::LockFile lockFile; + rhodium::LockFile lockFile; lockFile.packages.push_back(lockedPackage("Pkg/normal", "debug", "windows-msvc-x64")); lockFile.packages.push_back(lockedPackage("Pkg/override", "debug", "windows-msvc-x64", true)); - toolkit::JsonDiagnosticSink diagnostics; - toolkit::PackageArtifactResolver resolver; - ASSERT_TRUE(resolver.load(lockFile, root, "debug", "windows-msvc-x64", toolkit::DependencyOverrideSet{}, diagnostics)) << diagnostics.diagnostics().dump(); + rhodium::JsonDiagnosticSink diagnostics; + rhodium::PackageArtifactResolver resolver; + ASSERT_TRUE(resolver.load(lockFile, root, "debug", "windows-msvc-x64", rhodium::DependencyOverrideSet{}, diagnostics)) << diagnostics.diagnostics().dump(); ASSERT_NE(resolver.find("Pkg"), nullptr); EXPECT_EQ(resolver.find("Pkg")->libs[0], "PkgNormal"); - toolkit::DependencyOverrideSet overrides; + rhodium::DependencyOverrideSet overrides; overrides.overrides["Pkg"].path = "C:/override/Pkg"; ASSERT_TRUE(resolver.load(lockFile, root, "debug", "windows-msvc-x64", overrides, diagnostics)) << diagnostics.diagnostics().dump(); ASSERT_NE(resolver.find("Pkg"), nullptr); diff --git a/tests/tpkg/PackageBuilderUtilTests.cpp b/tests/rhodium/PackageBuilderUtilTests.cpp similarity index 80% rename from tests/tpkg/PackageBuilderUtilTests.cpp rename to tests/rhodium/PackageBuilderUtilTests.cpp index f8d728a..d56285b 100644 --- a/tests/tpkg/PackageBuilderUtilTests.cpp +++ b/tests/rhodium/PackageBuilderUtilTests.cpp @@ -1,7 +1,7 @@ -#include "tpkg/package/PackageBuilderUtil.hpp" -#include "tpkg/package/CustomPackageBuilder.hpp" -#include "tpkg/package/PackageArtifactStore.hpp" -#include "tpkg/diagnostics/JsonDiagnosticSink.hpp" +#include "rhodium/package/PackageBuilderUtil.hpp" +#include "rhodium/package/CustomPackageBuilder.hpp" +#include "rhodium/package/PackageArtifactStore.hpp" +#include "rhodium/diagnostics/JsonDiagnosticSink.hpp" #include @@ -15,7 +15,7 @@ namespace { std::filesystem::path makeTempDir() { const auto stamp = std::chrono::steady_clock::now().time_since_epoch().count(); - auto path = std::filesystem::temp_directory_path() / ("tkb-builder-util-" + std::to_string(stamp)); + auto path = std::filesystem::temp_directory_path() / ("rhodium-builder-util-" + std::to_string(stamp)); std::filesystem::create_directories(path); return path; } @@ -27,21 +27,21 @@ void writeText(const std::filesystem::path& path, const std::string& content) { } TEST(PackageBuilderUtilTests, MapsCMakeAbstractionsToOptions) { - toolkit::DependencyDesc dependency; + rhodium::DependencyDesc dependency; dependency.name = "Pkg"; dependency.buildType = "cmake"; dependency.linkage = "static"; dependency.runtime = "static"; dependency.pic = "true"; - const auto options = toolkit::BuildUtil::cmakeOptions(dependency); + const auto options = rhodium::BuildUtil::cmakeOptions(dependency); EXPECT_EQ(options.at("BUILD_SHARED_LIBS"), "OFF"); EXPECT_EQ(options.at("CMAKE_MSVC_RUNTIME_LIBRARY"), "MultiThreaded$<$:Debug>"); EXPECT_EQ(options.at("CMAKE_POSITION_INDEPENDENT_CODE"), "ON"); } TEST(PackageBuilderUtilTests, CMakeOptionsOverrideAbstractions) { - toolkit::DependencyDesc dependency; + rhodium::DependencyDesc dependency; dependency.linkage = "static"; dependency.runtime = "static"; dependency.pic = "true"; @@ -49,21 +49,21 @@ TEST(PackageBuilderUtilTests, CMakeOptionsOverrideAbstractions) { dependency.cmake.options["CMAKE_MSVC_RUNTIME_LIBRARY"] = "MultiThreadedDLL"; dependency.cmake.options["CMAKE_POSITION_INDEPENDENT_CODE"] = "OFF"; - const auto options = toolkit::BuildUtil::cmakeOptions(dependency); + const auto options = rhodium::BuildUtil::cmakeOptions(dependency); EXPECT_EQ(options.at("BUILD_SHARED_LIBS"), "ON"); EXPECT_EQ(options.at("CMAKE_MSVC_RUNTIME_LIBRARY"), "MultiThreadedDLL"); EXPECT_EQ(options.at("CMAKE_POSITION_INDEPENDENT_CODE"), "OFF"); } TEST(PackageBuilderUtilTests, BuildsCMakeConfigureArgs) { - toolkit::DependencyDesc dependency; + rhodium::DependencyDesc dependency; dependency.name = "Pkg"; dependency.cmake.generator = "Ninja"; dependency.cmake.buildType = "Release"; dependency.cmake.toolchainFile = "$(source)/toolchain.cmake"; dependency.cmake.configureArgs.push_back("-DEXTRA=$(package)"); - toolkit::BuildUtil::Context context{ + rhodium::BuildUtil::Context context{ "S:/Pkg", "B:/Pkg", "A:/Pkg", @@ -73,7 +73,7 @@ TEST(PackageBuilderUtilTests, BuildsCMakeConfigureArgs) { "x64", }; - const auto args = toolkit::BuildUtil::cmakeArgs(dependency, context); + const auto args = rhodium::BuildUtil::cmakeArgs(dependency, context); EXPECT_NE(std::find(args.begin(), args.end(), "-G"), args.end()); EXPECT_NE(std::find(args.begin(), args.end(), "-DCMAKE_BUILD_TYPE=Release"), args.end()); EXPECT_NE(std::find(args.begin(), args.end(), "-DCMAKE_TOOLCHAIN_FILE=S:/Pkg/toolchain.cmake"), args.end()); @@ -81,7 +81,7 @@ TEST(PackageBuilderUtilTests, BuildsCMakeConfigureArgs) { } TEST(PackageBuilderUtilTests, WrapsMakeCommandWithWorkingDirectoryEnvAndArgs) { - const auto args = toolkit::BuildUtil::wrap( + const auto args = rhodium::BuildUtil::wrap( "S:/Pkg", {{"CC", "clang"}, {"PREFIX", "A:/Pkg"}}, "make", @@ -98,7 +98,7 @@ TEST(PackageBuilderUtilTests, WrapsMakeCommandWithWorkingDirectoryEnvAndArgs) { } TEST(PackageBuilderUtilTests, ExpandsCustomCommandVariables) { - toolkit::BuildUtil::Context context{ + rhodium::BuildUtil::Context context{ "S:/Pkg", "B:/Pkg", "A:/Pkg", @@ -111,7 +111,7 @@ TEST(PackageBuilderUtilTests, ExpandsCustomCommandVariables) { context.archiver = "llvm-lib"; context.workspaceRoot = "W:/Project"; EXPECT_EQ( - toolkit::BuildUtil::expand("$(cc) install.py --prefix=$(artifact) --name=$(package) --cfg=$(config) --ar=$(archiver) --ws={workspace} --root=$(workspace)", context), + rhodium::BuildUtil::expand("$(cc) install.py --prefix=$(artifact) --name=$(package) --cfg=$(config) --ar=$(archiver) --ws={workspace} --root=$(workspace)", context), "clang-cl install.py --prefix=A:/Pkg --name=Pkg --cfg=Debug --ar=llvm-lib --ws=W:/Project --root=W:/Project"); } @@ -124,7 +124,7 @@ TEST(PackageBuilderUtilTests, CopiesArtifactEntriesAndKeepsExportPathsRelative) writeText(build / "lib/Pkg.lib", ""); writeText(build / "bin/Pkg.dll", ""); - toolkit::BuildUtil::Context context{ + rhodium::BuildUtil::Context context{ source, build, artifact, @@ -133,16 +133,16 @@ TEST(PackageBuilderUtilTests, CopiesArtifactEntriesAndKeepsExportPathsRelative) "windows", "x64", }; - toolkit::DependencyArtifacts requested; + rhodium::DependencyArtifacts requested; requested.mode = "copy"; requested.includeDirs.push_back("include"); requested.libDirs.push_back("lib"); requested.binDirs.push_back("bin"); requested.libFiles.push_back("lib/Pkg.lib"); - toolkit::DependencyArtifacts exported; - toolkit::JsonDiagnosticSink diagnostics; - ASSERT_TRUE(toolkit::BuildUtil::materialize(context, requested, exported, diagnostics)) + rhodium::DependencyArtifacts exported; + rhodium::JsonDiagnosticSink diagnostics; + ASSERT_TRUE(rhodium::BuildUtil::materialize(context, requested, exported, diagnostics)) << diagnostics.diagnostics().dump(); EXPECT_TRUE(std::filesystem::exists(artifact / "include/Pkg.hpp")); @@ -162,7 +162,7 @@ TEST(PackageBuilderUtilTests, AcceptsWindowsCoffLogicalLibraryName) { writeText(artifact / "include/lua.h", "#pragma once\n"); writeText(artifact / "lib/lua_static.lib", ""); - toolkit::BuildUtil::Context context{ + rhodium::BuildUtil::Context context{ root / "source", root / "build", artifact, @@ -173,14 +173,14 @@ TEST(PackageBuilderUtilTests, AcceptsWindowsCoffLogicalLibraryName) { }; context.archiver = "D:/Sdks/llvm/bin/llvm-lib.exe"; - toolkit::DependencyArtifacts requested; + rhodium::DependencyArtifacts requested; requested.includeDirs.push_back("include"); requested.libDirs.push_back("lib"); requested.libs.push_back("lua_static"); - toolkit::DependencyArtifacts exported; - toolkit::JsonDiagnosticSink diagnostics; - ASSERT_TRUE(toolkit::BuildUtil::materialize(context, requested, exported, diagnostics)) + rhodium::DependencyArtifacts exported; + rhodium::JsonDiagnosticSink diagnostics; + ASSERT_TRUE(rhodium::BuildUtil::materialize(context, requested, exported, diagnostics)) << diagnostics.diagnostics().dump(); std::filesystem::remove_all(root); @@ -192,7 +192,7 @@ TEST(PackageBuilderUtilTests, AcceptsWindowsMingwLogicalLibraryName) { writeText(artifact / "include/lua.h", "#pragma once\n"); writeText(artifact / "lib/liblua.a", ""); - toolkit::BuildUtil::Context context{ + rhodium::BuildUtil::Context context{ root / "source", root / "build", artifact, @@ -203,14 +203,14 @@ TEST(PackageBuilderUtilTests, AcceptsWindowsMingwLogicalLibraryName) { }; context.archiver = "D:/Sdks/mingw64/bin/ar.exe"; - toolkit::DependencyArtifacts requested; + rhodium::DependencyArtifacts requested; requested.includeDirs.push_back("include"); requested.libDirs.push_back("lib"); requested.libs.push_back("lua"); - toolkit::DependencyArtifacts exported; - toolkit::JsonDiagnosticSink diagnostics; - ASSERT_TRUE(toolkit::BuildUtil::materialize(context, requested, exported, diagnostics)) + rhodium::DependencyArtifacts exported; + rhodium::JsonDiagnosticSink diagnostics; + ASSERT_TRUE(rhodium::BuildUtil::materialize(context, requested, exported, diagnostics)) << diagnostics.diagnostics().dump(); std::filesystem::remove_all(root); @@ -222,7 +222,7 @@ TEST(PackageBuilderUtilTests, ReportsAttemptedLibraryCandidatesWhenMissing) { writeText(artifact / "include/lua.h", "#pragma once\n"); std::filesystem::create_directories(artifact / "lib"); - toolkit::BuildUtil::Context context{ + rhodium::BuildUtil::Context context{ root / "source", root / "build", artifact, @@ -233,14 +233,14 @@ TEST(PackageBuilderUtilTests, ReportsAttemptedLibraryCandidatesWhenMissing) { }; context.archiver = "D:/Sdks/llvm/bin/llvm-lib.exe"; - toolkit::DependencyArtifacts requested; + rhodium::DependencyArtifacts requested; requested.includeDirs.push_back("include"); requested.libDirs.push_back("lib"); requested.libs.push_back("lua_static"); - toolkit::DependencyArtifacts exported; - toolkit::JsonDiagnosticSink diagnostics; - ASSERT_FALSE(toolkit::BuildUtil::materialize(context, requested, exported, diagnostics)); + rhodium::DependencyArtifacts exported; + rhodium::JsonDiagnosticSink diagnostics; + ASSERT_FALSE(rhodium::BuildUtil::materialize(context, requested, exported, diagnostics)); const auto text = diagnostics.diagnostics().dump(); EXPECT_NE(text.find("lua_static.lib"), std::string::npos); EXPECT_NE(text.find("liblua_static.lib"), std::string::npos); @@ -255,7 +255,7 @@ TEST(PackageBuilderUtilTests, CustomBuilderPreservesInstalledLibraryAndValidates const auto artifactDir = root / "artifact"; std::filesystem::create_directories(source); - toolkit::DependencyDesc dependency; + rhodium::DependencyDesc dependency; dependency.name = "lua-static"; dependency.buildType = "custom"; dependency.artifacts.includeDirs.push_back("include"); @@ -276,32 +276,32 @@ TEST(PackageBuilderUtilTests, CustomBuilderPreservesInstalledLibraryAndValidates const auto expectedLib = artifactDir / "lib/liblua_static.a"; #endif - toolkit::PackageArtifact artifact; - toolkit::JsonDiagnosticSink diagnostics; - toolkit::CustomPackageBuilder builder; - ASSERT_TRUE(builder.build(dependency, source, build, artifactDir, "local", root, {}, "debug", toolkit::PackageBuildOptions{}, artifact, diagnostics)) + rhodium::PackageArtifact artifact; + rhodium::JsonDiagnosticSink diagnostics; + rhodium::CustomPackageBuilder builder; + ASSERT_TRUE(builder.build(dependency, source, build, artifactDir, "local", root, {}, "debug", rhodium::PackageBuildOptions{}, artifact, diagnostics)) << diagnostics.diagnostics().dump(); - ASSERT_TRUE(toolkit::ArtifactStore::write(artifact, diagnostics)) << diagnostics.diagnostics().dump(); + ASSERT_TRUE(rhodium::ArtifactStore::write(artifact, diagnostics)) << diagnostics.diagnostics().dump(); EXPECT_TRUE(std::filesystem::is_regular_file(expectedLib)); EXPECT_TRUE(std::filesystem::is_regular_file(artifactDir / "artifact.toml")); - toolkit::DependencyArtifacts metadata; - ASSERT_TRUE(toolkit::ArtifactStore::read(artifactDir / "artifact.toml", metadata, diagnostics)) + rhodium::DependencyArtifacts metadata; + ASSERT_TRUE(rhodium::ArtifactStore::read(artifactDir / "artifact.toml", metadata, diagnostics)) << diagnostics.diagnostics().dump(); - toolkit::BuildUtil::Context context; + rhodium::BuildUtil::Context context; context.artifactDir = artifactDir; #ifdef _WIN32 context.platform = "windows"; #else context.platform = "linux"; #endif - ASSERT_TRUE(toolkit::BuildUtil::validate(context, metadata, diagnostics)) + ASSERT_TRUE(rhodium::BuildUtil::validate(context, metadata, diagnostics)) << diagnostics.diagnostics().dump(); std::filesystem::remove(expectedLib); - ASSERT_FALSE(toolkit::BuildUtil::validate(context, metadata, diagnostics)); + ASSERT_FALSE(rhodium::BuildUtil::validate(context, metadata, diagnostics)); const auto text = diagnostics.diagnostics().dump(); #ifdef _WIN32 EXPECT_NE(text.find("lua_static.lib"), std::string::npos); diff --git a/tests/tpkg/ToolchainTests.cpp b/tests/rhodium/ToolchainTests.cpp similarity index 83% rename from tests/tpkg/ToolchainTests.cpp rename to tests/rhodium/ToolchainTests.cpp index edd046a..75a1a15 100644 --- a/tests/tpkg/ToolchainTests.cpp +++ b/tests/rhodium/ToolchainTests.cpp @@ -1,8 +1,8 @@ -#include "tpkg/core/FileSystem.hpp" -#include "tpkg/core/Process.hpp" -#include "tpkg/diagnostics/JsonDiagnosticSink.hpp" -#include "tpkg/toolchain/ToolchainDetector.hpp" -#include "tpkg/toolchain/ToolchainRegistry.hpp" +#include "rhodium/core/FileSystem.hpp" +#include "rhodium/core/Process.hpp" +#include "rhodium/diagnostics/JsonDiagnosticSink.hpp" +#include "rhodium/toolchain/ToolchainDetector.hpp" +#include "rhodium/toolchain/ToolchainRegistry.hpp" #include @@ -19,7 +19,7 @@ namespace std::filesystem::path makeTempDir() { const auto stamp = std::chrono::steady_clock::now().time_since_epoch().count(); - auto path = std::filesystem::temp_directory_path() / ("tkb-toolchain-" + std::to_string(stamp)); + auto path = std::filesystem::temp_directory_path() / ("rhodium-toolchain-" + std::to_string(stamp)); std::filesystem::create_directories(path); return path; } @@ -42,7 +42,7 @@ namespace out << ""; } - bool hasMissing(const toolkit::ToolchainProfile &profile, const std::string &value) + bool hasMissing(const rhodium::ToolchainProfile &profile, const std::string &value) { return std::find(profile.missing.begin(), profile.missing.end(), value) != profile.missing.end(); } @@ -86,7 +86,7 @@ namespace touchFile(sdkRoot / "bin" / "10.0.26100.0" / "x64" / "mt.exe"); } - const toolkit::ToolchainProfile *findProfile(const std::vector &profiles, const std::string &id) + const rhodium::ToolchainProfile *findProfile(const std::vector &profiles, const std::string &id) { const auto it = std::find_if(profiles.begin(), profiles.end(), [&](const auto &profile) { return profile.id == id; @@ -106,7 +106,7 @@ namespace const auto dir = makeTempDir(); const auto path = dir / "host.toml"; - toolkit::ToolchainProfile profile; + rhodium::ToolchainProfile profile; profile.id = "windows-clangcl-x64"; profile.platform = "windows"; profile.hostArch = "x64"; @@ -139,11 +139,11 @@ namespace profile.complete = false; profile.missing = {"windows_sdk", "rc", "mt"}; - toolkit::JsonDiagnosticSink diagnostics; - ASSERT_TRUE(toolkit::writeToolchainProfiles(path, {profile}, diagnostics)) << diagnostics.diagnostics().dump(); + rhodium::JsonDiagnosticSink diagnostics; + ASSERT_TRUE(rhodium::writeToolchainProfiles(path, {profile}, diagnostics)) << diagnostics.diagnostics().dump(); - std::vector loaded; - ASSERT_TRUE(toolkit::readToolchainProfiles(path, loaded, diagnostics)) << diagnostics.diagnostics().dump(); + std::vector loaded; + ASSERT_TRUE(rhodium::readToolchainProfiles(path, loaded, diagnostics)) << diagnostics.diagnostics().dump(); ASSERT_EQ(loaded.size(), 1u); EXPECT_EQ(loaded[0].id, profile.id); EXPECT_EQ(loaded[0].compilerKind, "clang-cl"); @@ -185,7 +185,7 @@ namespace touchFile(bin / toolFileName("llvm-ar")); touchFile(bin / toolFileName("ninja")); - toolkit::ToolchainProfile profile; + rhodium::ToolchainProfile profile; profile.id = "manual-clang-x64"; profile.platform = "linux"; profile.compilerKind = "clang"; @@ -198,9 +198,9 @@ namespace profile.systemIncludeDirs.push_back(include); profile.systemLibDirs.push_back(lib); - toolkit::JsonDiagnosticSink diagnostics; - ASSERT_TRUE(toolkit::writeUserToolchainProfiles(dir, toolkit::ToolchainSource::ProjectUser, {profile}, diagnostics)) << diagnostics.diagnostics().dump(); - const auto loaded = toolkit::loadMergedToolchains(dir, diagnostics); + rhodium::JsonDiagnosticSink diagnostics; + ASSERT_TRUE(rhodium::writeUserToolchainProfiles(dir, rhodium::ToolchainSource::ProjectUser, {profile}, diagnostics)) << diagnostics.diagnostics().dump(); + const auto loaded = rhodium::loadMergedToolchains(dir, diagnostics); const auto manual = std::find_if(loaded.begin(), loaded.end(), [](const auto &loadedProfile) { return loadedProfile.profile.id == "manual-clang-x64"; }); @@ -218,9 +218,9 @@ namespace const auto sdkRoot = dir / "Windows Kits" / "10"; createFakeMsvcToolchain(vsRoot, sdkRoot, {"x64", "x86"}); - toolkit::JsonDiagnosticSink diagnostics; - std::vector profiles; - toolkit::addWindowsMsvcProfilesFromRoots(profiles, vsRoot, sdkRoot, diagnostics); + rhodium::JsonDiagnosticSink diagnostics; + std::vector profiles; + rhodium::addWindowsMsvcProfilesFromRoots(profiles, vsRoot, sdkRoot, diagnostics); const auto *x64 = findProfile(profiles, "windows-msvc-x64"); const auto *x86 = findProfile(profiles, "windows-msvc-x86"); @@ -248,9 +248,9 @@ namespace createFakeMsvcToolchain(vsRoot, sdkRoot, {"x86"}); std::filesystem::remove_all(sdkRoot / "Lib" / "10.0.26100.0" / "ucrt" / "x86"); - toolkit::JsonDiagnosticSink diagnostics; - std::vector profiles; - toolkit::addWindowsMsvcProfilesFromRoots(profiles, vsRoot, sdkRoot, diagnostics); + rhodium::JsonDiagnosticSink diagnostics; + std::vector profiles; + rhodium::addWindowsMsvcProfilesFromRoots(profiles, vsRoot, sdkRoot, diagnostics); const auto *x86 = findProfile(profiles, "windows-msvc-x86"); ASSERT_NE(x86, nullptr); @@ -262,22 +262,22 @@ namespace TEST(ToolchainTests, FindsExecutableOnPath) { - const auto cmake = toolkit::findExecutableOnPath("cmake"); - EXPECT_TRUE(cmake.empty() || toolkit::File::exists(cmake)); + const auto cmake = rhodium::findExecutableOnPath("cmake"); + EXPECT_TRUE(cmake.empty() || rhodium::File::exists(cmake)); } TEST(ToolchainTests, WritesAndReadsLocalToolchainConfig) { const auto dir = makeTempDir(); - toolkit::LocalToolchainConfig config; + rhodium::LocalToolchainConfig config; config.preferredToolchain = "windows-msvc-x64"; - toolkit::JsonDiagnosticSink diagnostics; - ASSERT_TRUE(toolkit::writeLocalToolchainConfig(dir, config, diagnostics)) << diagnostics.diagnostics().dump(); + rhodium::JsonDiagnosticSink diagnostics; + ASSERT_TRUE(rhodium::writeLocalToolchainConfig(dir, config, diagnostics)) << diagnostics.diagnostics().dump(); - toolkit::LocalToolchainConfig loaded; - ASSERT_TRUE(toolkit::readLocalToolchainConfig(dir, loaded, diagnostics)) << diagnostics.diagnostics().dump(); + rhodium::LocalToolchainConfig loaded; + ASSERT_TRUE(rhodium::readLocalToolchainConfig(dir, loaded, diagnostics)) << diagnostics.diagnostics().dump(); EXPECT_EQ(loaded.preferredToolchain, "windows-msvc-x64"); std::filesystem::remove_all(dir); @@ -285,14 +285,14 @@ namespace TEST(ToolchainTests, ProcessReceivesEnvironmentOverride) { - const std::map env{{"TKB_PROCESS_ENV_TEST", "tkb-env-ok"}}; + const std::map env{{"RHODIUM_PROCESS_ENV_TEST", "rhodium-env-ok"}}; #ifdef _WIN32 - const auto result = toolkit::Process::run("cmd.exe", {"/D", "/S", "/C", "echo %TKB_PROCESS_ENV_TEST%"}, env); + const auto result = rhodium::Process::run("cmd.exe", {"/D", "/S", "/C", "echo %RHODIUM_PROCESS_ENV_TEST%"}, env); #else - const auto result = toolkit::Process::run("sh", {"-c", "printf '%s' \"$TKB_PROCESS_ENV_TEST\""}, env); + const auto result = rhodium::Process::run("sh", {"-c", "printf '%s' \"$RHODIUM_PROCESS_ENV_TEST\""}, env); #endif ASSERT_EQ(result.exitCode, 0) << result.output; - EXPECT_NE(result.output.find("tkb-env-ok"), std::string::npos); + EXPECT_NE(result.output.find("rhodium-env-ok"), std::string::npos); } TEST(ToolchainTests, AndroidProfilesAreEmittedWhenSdkExistsButNdkMissing) @@ -302,9 +302,9 @@ namespace std::filesystem::create_directories(sdk / "platforms" / "android-35"); touchFile(sdk / "platform-tools" / "adb.exe"); - toolkit::JsonDiagnosticSink diagnostics; - std::vector profiles; - toolkit::addAndroidProfilesFromRoots(profiles, sdk, {}, diagnostics); + rhodium::JsonDiagnosticSink diagnostics; + std::vector profiles; + rhodium::addAndroidProfilesFromRoots(profiles, sdk, {}, diagnostics); ASSERT_EQ(profiles.size(), 4u); const auto arm64 = std::find_if(profiles.begin(), profiles.end(), [](const auto &profile) { @@ -350,9 +350,9 @@ namespace #endif ); - toolkit::JsonDiagnosticSink diagnostics; - std::vector profiles; - toolkit::addAndroidProfilesFromRoots(profiles, sdk, ndk, diagnostics); + rhodium::JsonDiagnosticSink diagnostics; + std::vector profiles; + rhodium::addAndroidProfilesFromRoots(profiles, sdk, ndk, diagnostics); const auto arm64 = std::find_if(profiles.begin(), profiles.end(), [](const auto &profile) { return profile.id == "android-clang-arm64"; @@ -393,9 +393,9 @@ namespace #endif ); - toolkit::JsonDiagnosticSink diagnostics; - std::vector profiles; - toolkit::addAndroidProfilesFromRoots(profiles, sdk, ndk, diagnostics); + rhodium::JsonDiagnosticSink diagnostics; + std::vector profiles; + rhodium::addAndroidProfilesFromRoots(profiles, sdk, ndk, diagnostics); const auto arm64 = std::find_if(profiles.begin(), profiles.end(), [](const auto &profile) { return profile.id == "android-clang-arm64"; diff --git a/tests/rhodium/WorkspaceCompatibilityTests.cpp b/tests/rhodium/WorkspaceCompatibilityTests.cpp new file mode 100644 index 0000000..81532f4 --- /dev/null +++ b/tests/rhodium/WorkspaceCompatibilityTests.cpp @@ -0,0 +1,106 @@ +#include "rhodium/cli/Commands.hpp" +#include "rhodium/config/DependencyOverrideFile.hpp" +#include "rhodium/config/JsonModelWriter.hpp" +#include "rhodium/core/Path.hpp" +#include "rhodium/diagnostics/JsonDiagnosticSink.hpp" +#include "rhodium/script/ManifestLoader.hpp" + +#include +#include + +#include +#include +#include +#include + +namespace +{ + class WorkspaceCompatibilityTests : public ::testing::Test + { + protected: + std::filesystem::path root; + + void SetUp() override + { + const auto stamp = std::chrono::steady_clock::now().time_since_epoch().count(); + root = std::filesystem::temp_directory_path() / ("rhodium-compatibility-" + std::to_string(stamp)); + std::filesystem::create_directories(root); + } + + void TearDown() override + { + std::error_code ec; + std::filesystem::remove_all(root, ec); + } + + void writeManifest(const char *name, const char *text = "package(\"example\")\n") + { + std::ofstream out(root / name); + out << text; + } + }; + + TEST_F(WorkspaceCompatibilityTests, NewWorkspaceUsesRhodiumNames) + { + EXPECT_EQ(rhodium::CliWorkspace::manifest(root), root / "rhodium.lua"); + EXPECT_EQ(rhodium::Path::stateRoot(root), root / ".rhodium"); + } + + TEST_F(WorkspaceCompatibilityTests, LegacyManifestAndStateRemainUsable) + { + writeManifest("tpkg.lua"); + std::filesystem::create_directories(root / ".tpkg"); + EXPECT_EQ(rhodium::CliWorkspace::manifest(root), root / "tpkg.lua"); + EXPECT_EQ(rhodium::Path::stateRoot(root), root / ".tpkg"); + EXPECT_EQ(rhodium::DependencyOverrides::path(root), root / ".tpkg" / "overrides.toml"); + + rhodium::ManifestLoader loader; + rhodium::JsonDiagnosticSink diagnostics; + const auto loaded = loader.load(rhodium::CliWorkspace::manifest(root), diagnostics); + ASSERT_TRUE(loaded.ok) << diagnostics.diagnostics().dump(); + EXPECT_EQ(rhodium::JsonModel::from(loaded.model)["manifest"], "tpkg.lua"); + } + + TEST_F(WorkspaceCompatibilityTests, RhodiumNamesTakePrecedenceWhenBothExist) + { + writeManifest("tpkg.lua", "package(\"legacy\")\n"); + writeManifest("rhodium.lua", "package(\"preferred\")\n"); + std::filesystem::create_directories(root / ".tpkg"); + std::filesystem::create_directories(root / ".rhodium"); + EXPECT_EQ(rhodium::Path::stateRoot(root), root / ".rhodium"); + EXPECT_EQ(rhodium::DependencyOverrides::path(root), root / ".rhodium" / "overrides.toml"); + + rhodium::ManifestLoader loader; + rhodium::JsonDiagnosticSink diagnostics; + const auto loaded = loader.load(rhodium::CliWorkspace::manifest(root), diagnostics); + ASSERT_TRUE(loaded.ok) << diagnostics.diagnostics().dump(); + EXPECT_EQ(loaded.model.rootPackage.name, "preferred"); + EXPECT_EQ(rhodium::JsonModel::from(loaded.model)["manifest"], "rhodium.lua"); + } + + TEST_F(WorkspaceCompatibilityTests, NewManifestReusesAnExistingLegacyCache) + { + writeManifest("rhodium.lua"); + std::filesystem::create_directories(root / ".tpkg"); + EXPECT_EQ(rhodium::CliWorkspace::manifest(root), root / "rhodium.lua"); + EXPECT_EQ(rhodium::Path::stateRoot(root), root / ".tpkg"); + } + + TEST_F(WorkspaceCompatibilityTests, InvalidPreferredManifestDoesNotFallBackToLegacy) + { + writeManifest("tpkg.lua"); + writeManifest("rhodium.lua", "this is invalid Lua\n"); + rhodium::ManifestLoader loader; + rhodium::JsonDiagnosticSink diagnostics; + EXPECT_FALSE(loader.load(rhodium::CliWorkspace::manifest(root), diagnostics).ok); + } + + TEST_F(WorkspaceCompatibilityTests, CleaningOnlyRemovesTheSelectedStateDirectory) + { + std::filesystem::create_directories(root / ".tpkg"); + std::filesystem::create_directories(root / ".rhodium"); + EXPECT_EQ(rhodium::Commands::clean(root, true, false, false, false, ""), 0); + EXPECT_FALSE(std::filesystem::exists(root / ".rhodium")); + EXPECT_TRUE(std::filesystem::exists(root / ".tpkg")); + } +} diff --git a/vcpkg.json b/vcpkg.json index 931a9f8..b9bf832 100644 --- a/vcpkg.json +++ b/vcpkg.json @@ -1,5 +1,6 @@ { - "name": "toolkit-build", + "name": "rhodium", + "builtin-baseline": "301856f5f2824f788a3ffa6332293861cccd23b4", "version-string": "0.1.0", "dependencies": [ "lua",