From f7e8bf906523f1cddbc0d287324084dda8d513b5 Mon Sep 17 00:00:00 2001 From: Rangi42 Date: Thu, 2 Jan 2025 13:50:32 -0500 Subject: [PATCH] Run internal tests in Cygwin --- .github/workflows/testing.yml | 37 +++++++++++++++++++ test/gfx/rgbgfx_test.cpp | 69 ++++++++++------------------------- test/run-tests.sh | 13 ++++++- 3 files changed, 68 insertions(+), 51 deletions(-) diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index dfcee3fb7..7642670fb 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -320,3 +320,40 @@ jobs: shell: bash run: | test/run-tests.sh + + cygwin: + strategy: + matrix: + bits: [32, 64] + include: + - bits: 32 + arch: x86 + - bits: 64 + arch: x86_64 + fail-fast: false + runs-on: windows-2019 + timeout-minutes: 30 + steps: + - name: Checkout repo + uses: actions/checkout@v4 + - name: Setup Cygwin + uses: cygwin/cygwin-install-action@v4 + with: + platform: ${{ matrix.arch }} + packages: >- + bison + gcc-g++ + git + libpng-devel + make + pkg-config + - name: Build & install using Make + shell: C:\cygwin\bin\env.exe CYGWIN_NOWINPATH=1 CHERE_INVOKING=1 C:\cygwin\bin\bash.exe -o igncr '{0}' + run: | # Cygwin does not support `make develop` sanitizers ASan or UBSan + make -kj Q= + make install -j Q= + - name: Run tests + shell: C:\cygwin\bin\env.exe CYGWIN_NOWINPATH=1 CHERE_INVOKING=1 C:\cygwin\bin\bash.exe -o igncr '{0}' + run: | # Allow asm/test.sh to run `git describe` for the version test + git config --global --add safe.directory '*' + test/run-tests.sh --only-internal diff --git a/test/gfx/rgbgfx_test.cpp b/test/gfx/rgbgfx_test.cpp index 68b4d266d..59578922b 100644 --- a/test/gfx/rgbgfx_test.cpp +++ b/test/gfx/rgbgfx_test.cpp @@ -1,21 +1,5 @@ /* SPDX-License-Identifier: MIT */ -// For `execProg` (Windows is its special little snowflake again) -#if !defined(_MSC_VER) && !defined(__MINGW32__) - #include - #include - - #include - #include - #include -#else - #define WIN32_LEAN_AND_MEAN // Include less from `windows.h` to avoid conflicts - #include - #include - #include - #undef max // This macro conflicts with `std::numeric_limits<...>::max()` -#endif - #include #include #include @@ -34,6 +18,22 @@ #include "gfx/rgba.hpp" // Reused from RGBGFX +// For `execProg` (Windows and POSIX spawn child processes differently) +#if !defined(_MSC_VER) && !defined(__MINGW32__) + #include + #include + + #include + #include + #include +#else + #define WIN32_LEAN_AND_MEAN // Include less from `windows.h` to avoid conflicts + #include + #include + #include + #undef max // This macro conflicts with `std::numeric_limits<...>::max()` +#endif + static uintmax_t nbErrors; static void warning(char const *fmt, ...) { @@ -308,23 +308,13 @@ static char *execProg(char const *name, char * const *argv) { return strerror(err); } - siginfo_t info; - if (waitid(P_PID, pid, &info, WEXITED) != 0) { + if (int info; waitpid(pid, &info, 0) == -1 || !WIFEXITED(info)) { fatal("Error waiting for %s: %s", name, strerror(errno)); - } else if (info.si_code != CLD_EXITED) { - assert(info.si_code == CLD_KILLED || info.si_code == CLD_DUMPED); - fatal( - "%s was terminated by signal %s%s\n\tThe command was: [%s]", - name, - strsignal(info.si_status), - info.si_code == CLD_DUMPED ? " (core dumped)" : "", - formatArgv() - ); - } else if (info.si_status != 0) { + } else if (int status = WEXITSTATUS(info); status != 0) { fatal( "%s returned with status %d\n\tThe command was: [%s]", name, - info.si_status, + status, formatArgv() ); } @@ -359,26 +349,7 @@ static char *execProg(char const *name, char * const *argv) { STARTUPINFOA startupInfo; GetStartupInfoA(&startupInfo); - STARTUPINFOA childStartupInfo{ - sizeof(startupInfo), - nullptr, - nullptr, - nullptr, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - nullptr, - 0, - 0, - 0, - }; + STARTUPINFOA childStartupInfo = {sizeof(startupInfo)}; PROCESS_INFORMATION child; if (CreateProcessA( diff --git a/test/run-tests.sh b/test/run-tests.sh index b6b3dda01..e29d3a601 100755 --- a/test/run-tests.sh +++ b/test/run-tests.sh @@ -6,13 +6,15 @@ cd "$(dirname "$0")" usage() { echo "Runs regression tests on RGBDS." echo "Options:" - echo " -h, --help show this help message" - echo " --only-free skip tests that build nonfree codebases" + echo " -h, --help show this help message" + echo " --only-free skip tests that build nonfree codebases" + echo " --only-internal skip tests that build external codebases" } # Parse options in pure Bash because macOS `getopt` is stuck # in what util-linux `getopt` calls `GETOPT_COMPATIBLE` mode nonfree=true +external=true FETCH_TEST_DEPS="fetch-test-deps.sh" while [[ $# -gt 0 ]]; do case "$1" in @@ -24,6 +26,9 @@ while [[ $# -gt 0 ]]; do nonfree=false FETCH_TEST_DEPS="fetch-test-deps.sh --only-free" ;; + --only-internal) + external=false + ;; --) break ;; @@ -49,6 +54,10 @@ for dir in asm link fix gfx; do popd done +if ! "$external"; then + exit +fi + # Test some significant external projects that use RGBDS # When adding new ones, don't forget to add them to the .gitignore! # When updating subprojects, change the commit being checked out, and set the `shallow-since`