Skip to content

Commit

Permalink
Run internal tests in Cygwin (#1592)
Browse files Browse the repository at this point in the history
  • Loading branch information
Rangi42 authored Jan 17, 2025
1 parent af9de81 commit e561f63
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 51 deletions.
37 changes: 37 additions & 0 deletions .github/workflows/testing.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
69 changes: 20 additions & 49 deletions test/gfx/rgbgfx_test.cpp
Original file line number Diff line number Diff line change
@@ -1,21 +1,5 @@
/* SPDX-License-Identifier: MIT */

// For `execProg` (Windows is its special little snowflake again)
#if !defined(_MSC_VER) && !defined(__MINGW32__)
#include <sys/stat.h>
#include <sys/wait.h>

#include <signal.h>
#include <spawn.h>
#include <unistd.h>
#else
#define WIN32_LEAN_AND_MEAN // Include less from `windows.h` to avoid conflicts
#include <windows.h>
#include <errhandlingapi.h>
#include <processthreadsapi.h>
#undef max // This macro conflicts with `std::numeric_limits<...>::max()`
#endif

#include <algorithm>
#include <array>
#include <cassert>
Expand All @@ -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 <sys/stat.h>
#include <sys/wait.h>

#include <signal.h>
#include <spawn.h>
#include <unistd.h>
#else
#define WIN32_LEAN_AND_MEAN // Include less from `windows.h` to avoid conflicts
#include <windows.h>
#include <errhandlingapi.h>
#include <processthreadsapi.h>
#undef max // This macro conflicts with `std::numeric_limits<...>::max()`
#endif

static uintmax_t nbErrors;

static void warning(char const *fmt, ...) {
Expand Down Expand Up @@ -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()
);
}
Expand Down Expand Up @@ -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(
Expand Down
13 changes: 11 additions & 2 deletions test/run-tests.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -24,6 +26,9 @@ while [[ $# -gt 0 ]]; do
nonfree=false
FETCH_TEST_DEPS="fetch-test-deps.sh --only-free"
;;
--only-internal)
external=false
;;
--)
break
;;
Expand All @@ -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`
Expand Down

0 comments on commit e561f63

Please sign in to comment.