From 168abe554737277cde2911b8dc38cfc39bf06964 Mon Sep 17 00:00:00 2001 From: Yukun Guo Date: Wed, 22 Nov 2023 18:55:14 +0800 Subject: [PATCH 1/3] Support build on MSYS2 --- .github/workflows/test-msys2.yaml | 36 +++++++++++++++++++++++++++++++ build.rs | 26 +++++++++++++++++++++- 2 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/test-msys2.yaml 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(); From a72253ed25773304ae1b0a0872f40d8f2e747bcd Mon Sep 17 00:00:00 2001 From: Yukun Guo Date: Wed, 29 Nov 2023 12:14:15 +0800 Subject: [PATCH 2/3] Directly link to MSYS2's .dll.a files --- .github/workflows/test-msys2.yaml | 17 +++-------------- build.rs | 5 +++++ 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/.github/workflows/test-msys2.yaml b/.github/workflows/test-msys2.yaml index 320c44d..d33a496 100644 --- a/.github/workflows/test-msys2.yaml +++ b/.github/workflows/test-msys2.yaml @@ -4,7 +4,7 @@ on: workflow_dispatch: env: - IMAGE_MAGICK_LIBS: "MagickCore-7.Q16HDRI;MagickWand-7.Q16HDRI" + IMAGE_MAGICK_LIBS: "libMagickCore-7.Q16HDRI.dll.a;libMagickWand-7.Q16HDRI.dll.a" jobs: build: @@ -16,21 +16,10 @@ jobs: 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 + $env:PATH = "C:\msys64\usr\bin;C:\msys64\mingw64\bin;$env:PATH" + cargo test -- --skip test_set_background_color diff --git a/build.rs b/build.rs index bbe0936..97b393f 100644 --- a/build.rs +++ b/build.rs @@ -260,6 +260,11 @@ fn determine_mode>(libdirs: &Vec, libs: &[T]) -> &'static (true, false) => return "static", (false, true) => return "dylib", (false, false) => { + let can_static_verbatim = libs.iter().all(|l| files.contains(l.as_ref())); + if can_static_verbatim { + return "static:+verbatim"; + } + panic!( "ImageMagick libdirs at `{:?}` do not contain the required files \ to either statically or dynamically link ImageMagick", From 1d6c19d57b287ea037747c7d8a6acc229f0582d1 Mon Sep 17 00:00:00 2001 From: Yukun Guo Date: Wed, 29 Nov 2023 16:15:18 +0800 Subject: [PATCH 3/3] Skip some tests --- .github/workflows/test-msys2.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test-msys2.yaml b/.github/workflows/test-msys2.yaml index d33a496..bb3e8f2 100644 --- a/.github/workflows/test-msys2.yaml +++ b/.github/workflows/test-msys2.yaml @@ -22,4 +22,4 @@ jobs: - name: Test run: | $env:PATH = "C:\msys64\usr\bin;C:\msys64\mingw64\bin;$env:PATH" - cargo test -- --skip test_set_background_color + cargo test -- --skip background --skip negate_image