diff --git a/.github/workflows/test-msys2.yaml b/.github/workflows/test-msys2.yaml new file mode 100644 index 0000000..320c44d --- /dev/null +++ b/.github/workflows/test-msys2.yaml @@ -0,0 +1,36 @@ +name: Run tests on Windows + +on: + workflow_dispatch: + +env: + IMAGE_MAGICK_LIBS: "MagickCore-7.Q16HDRI;MagickWand-7.Q16HDRI" + +jobs: + build: + runs-on: windows-latest + steps: + - uses: actions/checkout@v4 + - name: Install dependencies + shell: C:\msys64\usr\bin\bash.exe --login '{0}' + run: | + export PATH="/mingw64/bin:$PATH" + pacman --noconfirm -S mingw-w64-x86_64-imagemagick mingw-w64-x86_64-pkg-config + cd /mingw64/lib + mv libMagickCore-7.Q16HDRI.dll.a MagickCore-7.Q16HDRI.lib + mv libMagickWand-7.Q16HDRI.dll.a MagickWand-7.Q16HDRI.lib + + - name: Set environment variables + shell: C:\msys64\usr\bin\bash.exe --login '{0}' + run: | + export PATH="/mingw64/bin:$PATH" + echo "BINDGEN_EXTRA_CLANG_ARGS=$(MagickCore-config --cppflags)" >> $GITHUB_ENV + + - uses: Swatinem/rust-cache@v2 + with: + cache-on-failure: true + - name: Test + run: | + echo $env:BINDGEN_EXTRA_CLANG_ARGS + $env:PATH = "C:\msys64\mingw64\bin;C:\msys64\usr\bin;$env:PATH" + cargo test test_new_drop -- --nocapture diff --git a/build.rs b/build.rs index 9753b5c..bbe0936 100644 --- a/build.rs +++ b/build.rs @@ -26,6 +26,19 @@ use std::process::Command; const MIN_VERSION: &str = "7.0"; const MAX_VERSION: &str = "7.2"; +#[cfg(windows)] +static HEADER: &str = r#" +#if !defined(ssize_t) && !defined(__MINGW32__) +#if defined(_WIN64) +typedef __int64 ssize_t; +#else +typedef long ssize_t; +#endif +#endif + +#include +"#; +#[cfg(not(windows))] static HEADER: &str = "#include \n"; //on windows path env always contain : like c: @@ -35,7 +48,18 @@ pub const PATH_SEPARATOR: &str = match cfg!(target_os = "windows") { }; fn main() { - let check_cppflags = Command::new("MagickCore-config").arg("--cppflags").output(); + let check_cppflags = if cfg!(target_os = "windows") { + // Resolve bash from directories listed in the PATH environment variable in the + // order they appear. + Command::new("cmd") + .arg("/C") + .arg("bash") + .arg("MagickCore-config") + .arg("--cppflags") + .output() + } else { + Command::new("MagickCore-config").arg("--cppflags").output() + }; if let Ok(ok_cppflags) = check_cppflags { let cppflags = ok_cppflags.stdout; let cppflags = String::from_utf8(cppflags).unwrap();