From aac08f5d967081f543320732de9b179dbe4fe4f3 Mon Sep 17 00:00:00 2001 From: Rye Date: Tue, 27 Oct 2026 03:49:53 -0400 Subject: [PATCH 1/2] Format llui/utils and llcorehttp's CMake files with gersemi Whitespace and one wrapped call only, so the change that follows reads on its own. Co-Authored-By: Claude Opus 5.5 --- indra/llcorehttp/CMakeLists.txt | 5 +- indra/llui/utils/CMakeLists.txt | 110 ++++++++++++++++---------------- 2 files changed, 59 insertions(+), 56 deletions(-) diff --git a/indra/llcorehttp/CMakeLists.txt b/indra/llcorehttp/CMakeLists.txt index 6c58c81d5b..e69486eb0e 100644 --- a/indra/llcorehttp/CMakeLists.txt +++ b/indra/llcorehttp/CMakeLists.txt @@ -79,7 +79,10 @@ if(AL_BUILD_TESTS) # The state guard's checks on what llcorehttp keeps for the process, for # every test binary that links it. add_library(llcorehttp_test_checks OBJECT tests/llcorehttp_test_checks.cpp) - target_link_libraries(llcorehttp_test_checks PRIVATE al::flags al_test_support llcorehttp llmessage) + target_link_libraries( + llcorehttp_test_checks + PRIVATE al::flags al_test_support llcorehttp llmessage + ) set_target_properties(llcorehttp_test_checks PROPERTIES FOLDER "Tests/llcorehttp") # The suites run under a Python peer that serves the requests they make. diff --git a/indra/llui/utils/CMakeLists.txt b/indra/llui/utils/CMakeLists.txt index 2566468869..fd69f1b335 100644 --- a/indra/llui/utils/CMakeLists.txt +++ b/indra/llui/utils/CMakeLists.txt @@ -3,68 +3,68 @@ # The console utilities over the UI. What each is for, and how it is run, # is at the top of its own file. if(AL_BUILD_TESTS) - add_executable(llui_libtest) + add_executable(llui_libtest) - target_sources( - llui_libtest - PRIVATE - alparamfingerprint.cpp - llui_libtest.cpp - llwidgetreg.cpp - alparamfingerprint.h - llui_libtest.h - llwidgetreg.h - ) + target_sources( + llui_libtest + PRIVATE + alparamfingerprint.cpp + llui_libtest.cpp + llwidgetreg.cpp + alparamfingerprint.h + llui_libtest.h + llwidgetreg.h + ) - target_link_libraries( - llui_libtest - PRIVATE al::flags llui llinventory llmessage llrender llimage - ) + target_link_libraries( + llui_libtest + PRIVATE al::flags llui llinventory llmessage llrender llimage + ) - set_target_properties( - llui_libtest - PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${EXE_STAGING_DIR}" FOLDER "Utils" - ) + set_target_properties( + llui_libtest + PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${EXE_STAGING_DIR}" FOLDER "Utils" + ) - # The app-data directory used to be reached with a relative path guessed from - # the executable's location, which stopped matching the build layout long ago. - # Bake in the real one instead. - target_compile_definitions( - llui_libtest - PRIVATE "LLUI_LIBTEST_APP_RO_DIR=\"${INDRA_SOURCE_DIR}/newview\"" - ) + # The app-data directory used to be reached with a relative path guessed from + # the executable's location, which stopped matching the build layout long ago. + # Bake in the real one instead. + target_compile_definitions( + llui_libtest + PRIVATE "LLUI_LIBTEST_APP_RO_DIR=\"${INDRA_SOURCE_DIR}/newview\"" + ) - # The viewer used to depend on this one, from a directory configured after - # newview; beside the library it is about, that target does not exist yet. - # It builds with the tests instead, which is where it is run from. + # The viewer used to depend on this one, from a directory configured after + # newview; beside the library it is about, that target does not exist yet. + # It builds with the tests instead, which is where it is run from. - # The overlay census: the viewer's own merge over every skin and language - # of the source tree, printed by language and gated by the committed - # baseline. It writes nothing but its own report, so it is the ctest that - # guards the merge as well as the instrument a repair pass is measured - # with. - add_executable(xui_overlay_check xui_overlay_check.cpp) - target_link_libraries( - xui_overlay_check - PRIVATE al::flags llxml llmessage llcorehttp llcommon - ) - set_target_properties( - xui_overlay_check - PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${EXE_STAGING_DIR}" FOLDER "Utils" - ) + # The overlay census: the viewer's own merge over every skin and language + # of the source tree, printed by language and gated by the committed + # baseline. It writes nothing but its own report, so it is the ctest that + # guards the merge as well as the instrument a repair pass is measured + # with. + add_executable(xui_overlay_check xui_overlay_check.cpp) + target_link_libraries( + xui_overlay_check + PRIVATE al::flags llxml llmessage llcorehttp llcommon + ) + set_target_properties( + xui_overlay_check + PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${EXE_STAGING_DIR}" FOLDER "Utils" + ) - # The translation repair over a whole language, which is XUI Studio's - # own action from a console: a repair pass is then a command and the diff - # it leaves. - add_executable(xui_translate_repair xui_translate_repair.cpp) - target_link_libraries( - xui_translate_repair - PRIVATE al::flags llui llmessage llcorehttp llxml llrender llcommon - ) - set_target_properties( - xui_translate_repair - PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${EXE_STAGING_DIR}" FOLDER "Utils" - ) + # The translation repair over a whole language, which is XUI Studio's + # own action from a console: a repair pass is then a command and the diff + # it leaves. + add_executable(xui_translate_repair xui_translate_repair.cpp) + target_link_libraries( + xui_translate_repair + PRIVATE al::flags llui llmessage llcorehttp llxml llrender llcommon + ) + set_target_properties( + xui_translate_repair + PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${EXE_STAGING_DIR}" FOLDER "Utils" + ) add_dependencies(BUILD_TESTS llui_libtest xui_overlay_check xui_translate_repair) add_test( From acd9a2ecd284966aa070dcfbcb06711c5417d47b Mon Sep 17 00:00:00 2001 From: Rye Date: Tue, 27 Oct 2026 03:54:29 -0400 Subject: [PATCH 2/2] Stop running vcpkg's app-local step on the tools a tests build makes The Windows ARM Tests build stopped at the link of xui_translate_repair (#581, #584) and of llui_libtest (#578) with "The process cannot access the file because it is being used by another process." The half of the command that failed is the POST_BUILD "vcpkg z-applocal" that vcpkg's toolchain hangs on every executable declared while VCPKG_APPLOCAL_DEPS is on, and the three llui utilities, ready at the same moment, link together. The directory they share, sharedlibs/, is not what fails. They import no port's DLL on Windows, where the spell checker is the system's, so z-applocal copies nothing. Eighty concurrent z-applocal runs, each into a directory of its own, fail the same way 3 times in 640, and eighty concurrent "vcpkg version" runs 6 times in 640: a start of vcpkg.exe beside another fails now and then, as d5095f9a8c found for the test binaries. So these are declared with the step off, as al_add_test_binary declares a test: the three utilities, http_texture_load (the other executable in sharedlibs/) and llimage_libtest. Each exists only in a tests build and runs from the build tree; xui_overlay_check's ctest entry still runs with AL_TEST_ENVIRONMENT's PATH. Serializing them instead would leave them racing every other launch of vcpkg.exe in the build, and a Ninja job pool does nothing under MSBuild. With AL_USE_WINSPELLCHECK turned off, llui links Hunspell's DLL, which llui_libtest and xui_translate_repair no longer copy into sharedlibs/; the llui tests, whose PATH names that directory, would then need vcpkg's bin directory on it. No CI row builds that way. Proof: a tests-on vs2026-os configure leaves z-applocal on five projects, alchemy-bin, dullahan_host, media_plugin_cef, media_plugin_libvlc and template_verifier, and on none of these; the three utilities build in Release and ctest -R xui_overlay_check passes. Co-Authored-By: Claude Opus 5.5 --- indra/integration_tests/llimage_libtest/CMakeLists.txt | 3 +++ indra/llcorehttp/CMakeLists.txt | 3 +++ indra/llui/utils/CMakeLists.txt | 5 +++++ 3 files changed, 11 insertions(+) diff --git a/indra/integration_tests/llimage_libtest/CMakeLists.txt b/indra/integration_tests/llimage_libtest/CMakeLists.txt index ed23d592e4..5137e866d6 100644 --- a/indra/integration_tests/llimage_libtest/CMakeLists.txt +++ b/indra/integration_tests/llimage_libtest/CMakeLists.txt @@ -2,6 +2,9 @@ # Integration tests of the llimage library (JPEG2000, PNG, jpeg, etc... images reading and writing) if(AL_BUILD_TESTS) + # Run from the build tree, as a test binary is, so without vcpkg's + # app-local step. + set(VCPKG_APPLOCAL_DEPS OFF) add_executable(llimage_libtest) target_sources(llimage_libtest PRIVATE llimage_libtest.cpp llimage_libtest.h) diff --git a/indra/llcorehttp/CMakeLists.txt b/indra/llcorehttp/CMakeLists.txt index e69486eb0e..2ebb9da223 100644 --- a/indra/llcorehttp/CMakeLists.txt +++ b/indra/llcorehttp/CMakeLists.txt @@ -112,6 +112,9 @@ if(AL_BUILD_TESTS) # # Example Programs # + # Run from the build tree, as a test binary is, so without vcpkg's + # app-local step. + set(VCPKG_APPLOCAL_DEPS OFF) add_executable(http_texture_load examples/http_texture_load.cpp) set_target_properties( http_texture_load diff --git a/indra/llui/utils/CMakeLists.txt b/indra/llui/utils/CMakeLists.txt index fd69f1b335..f2acfa4b23 100644 --- a/indra/llui/utils/CMakeLists.txt +++ b/indra/llui/utils/CMakeLists.txt @@ -3,6 +3,11 @@ # The console utilities over the UI. What each is for, and how it is run, # is at the top of its own file. if(AL_BUILD_TESTS) + # Run from the build tree, as a test binary is, so without vcpkg's + # app-local step: it is a run of vcpkg.exe after each link, and runs + # started together fail now and then with the file in use. + set(VCPKG_APPLOCAL_DEPS OFF) + add_executable(llui_libtest) target_sources(