Merge pull request #114 from gyk/fix/msys2
Support building with ImageMagick from MSYS2
This commit is contained in:
25
.github/workflows/test-msys2.yaml
vendored
Normal file
25
.github/workflows/test-msys2.yaml
vendored
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
name: Run tests on Windows
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
env:
|
||||||
|
IMAGE_MAGICK_LIBS: "libMagickCore-7.Q16HDRI.dll.a;libMagickWand-7.Q16HDRI.dll.a"
|
||||||
|
|
||||||
|
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
|
||||||
|
- uses: Swatinem/rust-cache@v2
|
||||||
|
with:
|
||||||
|
cache-on-failure: true
|
||||||
|
- name: Test
|
||||||
|
run: |
|
||||||
|
$env:PATH = "C:\msys64\usr\bin;C:\msys64\mingw64\bin;$env:PATH"
|
||||||
|
cargo test -- --skip background --skip negate_image
|
||||||
31
build.rs
31
build.rs
@ -26,6 +26,19 @@ use std::process::Command;
|
|||||||
const MIN_VERSION: &str = "7.0";
|
const MIN_VERSION: &str = "7.0";
|
||||||
const MAX_VERSION: &str = "7.2";
|
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 <MagickWand/MagickWand.h>
|
||||||
|
"#;
|
||||||
|
#[cfg(not(windows))]
|
||||||
static HEADER: &str = "#include <MagickWand/MagickWand.h>\n";
|
static HEADER: &str = "#include <MagickWand/MagickWand.h>\n";
|
||||||
|
|
||||||
//on windows path env always contain : like c:
|
//on windows path env always contain : like c:
|
||||||
@ -35,7 +48,18 @@ pub const PATH_SEPARATOR: &str = match cfg!(target_os = "windows") {
|
|||||||
};
|
};
|
||||||
|
|
||||||
fn main() {
|
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 {
|
if let Ok(ok_cppflags) = check_cppflags {
|
||||||
let cppflags = ok_cppflags.stdout;
|
let cppflags = ok_cppflags.stdout;
|
||||||
let cppflags = String::from_utf8(cppflags).unwrap();
|
let cppflags = String::from_utf8(cppflags).unwrap();
|
||||||
@ -236,6 +260,11 @@ fn determine_mode<T: AsRef<str>>(libdirs: &Vec<PathBuf>, libs: &[T]) -> &'static
|
|||||||
(true, false) => return "static",
|
(true, false) => return "static",
|
||||||
(false, true) => return "dylib",
|
(false, true) => return "dylib",
|
||||||
(false, false) => {
|
(false, false) => {
|
||||||
|
let can_static_verbatim = libs.iter().all(|l| files.contains(l.as_ref()));
|
||||||
|
if can_static_verbatim {
|
||||||
|
return "static:+verbatim";
|
||||||
|
}
|
||||||
|
|
||||||
panic!(
|
panic!(
|
||||||
"ImageMagick libdirs at `{:?}` do not contain the required files \
|
"ImageMagick libdirs at `{:?}` do not contain the required files \
|
||||||
to either statically or dynamically link ImageMagick",
|
to either statically or dynamically link ImageMagick",
|
||||||
|
|||||||
Reference in New Issue
Block a user