Skip to content

Commit

Permalink
fix: Fix compatibility with php 8.4 and newer ImageMagick library ver…
Browse files Browse the repository at this point in the history
…sions
  • Loading branch information
michalananapps committed Nov 30, 2024
1 parent ef495c0 commit 2ed2214
Show file tree
Hide file tree
Showing 6 changed files with 43 additions and 44 deletions.
26 changes: 4 additions & 22 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,10 @@ jobs:
fail-fast: false
matrix:
os: [ ubuntu-latest ]
# php: [ 5.4 ]
php: [ 8.3 ]
imagemagick: [
7.1.0-13,
6.8.7-0,
7.1.1-41,
6.9.2-0,
]
runs-on: ${{ matrix.os }}

Expand Down Expand Up @@ -80,7 +79,7 @@ jobs:
fail-fast: false
matrix:
os: [ ubuntu-latest ]
php: [5.4, 8.1, 8.0, 7.4, 7.3, 7.2, 7.1, 7.0, 5.6, 5.5]
php: [8.4, 8.3, 8.2, 8.1, 8.0, 7.4, 7.3, 7.2, 7.1, 7.0, 5.6, 5.5]
imagemagick: [
7.1.0-13,
7.0.10-27,
Expand All @@ -89,26 +88,9 @@ jobs:
git7,
6.9.2-0,
6.8.7-0,
6.7.8-0,
git6
6.7.8-0
]
exclude:
- php: 5.4
imagemagick: 6.8.7-0
- php: 7.4
imagemagick: git6
- php: 7.3
imagemagick: git6
- php: 7.2
imagemagick: git6
- php: 7.1
imagemagick: git6
- php: 7.0
imagemagick: git6
- php: 5.6
imagemagick: git6
- php: 5.5
imagemagick: git6
- php: 7.4
imagemagick: git7
- php: 7.3
Expand Down
5 changes: 3 additions & 2 deletions .github/workflows/windows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,15 @@ jobs:
uses: actions/checkout@v4
- name: Setup PHP
id: setup-php
uses: cmb69/setup-php-sdk@v0.7
uses: php/setup-php-sdk@v0.10
with:
version: ${{matrix.version}}
arch: ${{matrix.arch}}
ts: ${{matrix.ts}}
cache: true
- name: Download deps
run: |
curl -LO https://windows.php.net/downloads/pecl/deps/ImageMagick-7.1.0-18-vc15-${{matrix.arch}}.zip
curl -LO https://downloads.php.net/~windows/pecl/deps/ImageMagick-7.1.0-18-vc15-${{matrix.arch}}.zip
7z x ImageMagick-7.1.0-18-vc15-${{matrix.arch}}.zip -o..\deps
- name: Enable Developer Command Prompt
uses: ilammy/msvc-dev-cmd@v1
Expand Down
6 changes: 3 additions & 3 deletions imagick.c
Original file line number Diff line number Diff line change
Expand Up @@ -610,7 +610,7 @@ static zval *php_imagick_read_property(zend_object *object, zend_string *member,
if (format) {
retval = rv;
ZVAL_STRING(retval, format);
php_strtolower(Z_STRVAL_P(retval), Z_STRLEN_P(retval));
zend_str_tolower(Z_STRVAL_P(retval), Z_STRLEN_P(retval));
IMAGICK_FREE_MAGICK_MEMORY(format);
} else {
retval = rv;
Expand Down Expand Up @@ -683,7 +683,7 @@ static zval *php_imagick_read_property(zval *object, zval *member, int type, voi
if (format) {
retval = rv;
ZVAL_STRING(retval, format);
php_strtolower(Z_STRVAL_P(retval), Z_STRLEN_P(retval));
zend_str_tolower(Z_STRVAL_P(retval), Z_STRLEN_P(retval));
IMAGICK_FREE_MAGICK_MEMORY(format);
} else {
retval = rv;
Expand Down Expand Up @@ -766,7 +766,7 @@ static zval *php_imagick_read_property(zval *object, zval *member, int type, con

if (format) {
ZVAL_STRING(retval, format, 1);
php_strtolower(Z_STRVAL_P(retval), Z_STRLEN_P(retval));
zend_str_tolower(Z_STRVAL_P(retval), Z_STRLEN_P(retval));
IMAGICK_FREE_MAGICK_MEMORY(format);
} else {
ZVAL_STRING(retval, "", 1);
Expand Down
26 changes: 11 additions & 15 deletions imagick_helpers.c
Original file line number Diff line number Diff line change
Expand Up @@ -1197,6 +1197,11 @@ void php_imagick_initialize_constants(TSRMLS_D)
#if MagickLibVersion >= 0x707
IMAGICK_REGISTER_CONST_LONG("FILTER_CUBIC_SPLINE", CubicSplineFilter);
#endif
#if MAGICK_LIB_VERSION_GTE(7, 1, 1, 40)
IMAGICK_REGISTER_CONST_LONG("FILTER_MAGIC_KERNEL_SHARP_2013", MagicKernelSharp2013Filter);
IMAGICK_REGISTER_CONST_LONG("FILTER_MAGIC_KERNEL_SHARP_2021", MagicKernelSharp2021Filter);
#endif

IMAGICK_REGISTER_CONST_LONG("IMGTYPE_UNDEFINED", UndefinedType);
IMAGICK_REGISTER_CONST_LONG("IMGTYPE_BILEVEL", BilevelType);
IMAGICK_REGISTER_CONST_LONG("IMGTYPE_GRAYSCALE", GrayscaleType);
Expand Down Expand Up @@ -1279,9 +1284,7 @@ void php_imagick_initialize_constants(TSRMLS_D)
IMAGICK_REGISTER_CONST_LONG("COMPRESSION_WEBP", WebPCompression);
#endif

#if MagickLibVersion >= 0x711
// Technically >= 7.1.0-13 but we still don't have a mechanism for
// detecting patch versions.
#if MAGICK_LIB_VERSION_GTE(7, 1, 0, 13)
IMAGICK_REGISTER_CONST_LONG("COMPRESSION_BC5", BC5Compression);
IMAGICK_REGISTER_CONST_LONG("COMPRESSION_BC7", BC7Compression);
#endif
Expand All @@ -1291,8 +1294,7 @@ void php_imagick_initialize_constants(TSRMLS_D)
IMAGICK_REGISTER_CONST_LONG("COMPRESSION_DWAB", DWABCompression);
#endif

#if MagickLibVersion >= 0x712
// actually 7.1.1-16, but still can't test patch versions
#if MAGICK_LIB_VERSION_GTE(7, 1, 1, 16)
IMAGICK_REGISTER_CONST_LONG("COMPRESSION_LERC", LERCCompression);
#endif

Expand Down Expand Up @@ -1554,9 +1556,7 @@ void php_imagick_initialize_constants(TSRMLS_D)
IMAGICK_REGISTER_CONST_LONG("COLORSPACE_PROPHOTO", ProPhotoColorspace);
#endif

#if MagickLibVersion >= 0x712
// Technically >= 7.1.1-9 but we still don't have a mechanism for
// detecting patch versions.
#if MAGICK_LIB_VERSION_GTE(7, 1, 1, 9)
IMAGICK_REGISTER_CONST_LONG("COLORSPACE_OKLAB", OklabColorspace);
IMAGICK_REGISTER_CONST_LONG("COLORSPACE_OKLCH", OklchColorspace);
#endif
Expand Down Expand Up @@ -1823,9 +1823,7 @@ void php_imagick_initialize_constants(TSRMLS_D)
IMAGICK_REGISTER_CONST_LONG("ALPHACHANNEL_DISSOCIATE", DisassociateAlphaChannel);
#endif

#if MagickLibVersion >= 0x712
// Technically >= 7.1.1-26 but we still don't have a mechanism for
// detecting patch versions.
#if MAGICK_LIB_VERSION_GTE(7, 1, 1, 26)
IMAGICK_REGISTER_CONST_LONG("ALPHACHANNEL_OFF_IF_OPAQUE", OffIfOpaqueAlphaChannel);
#endif

Expand Down Expand Up @@ -1969,10 +1967,8 @@ IMAGICK_REGISTER_CONST_LONG("KERNEL_BINOMIAL", BinomialKernel);
IMAGICK_REGISTER_CONST_LONG("DIRECTION_LEFT_TO_RIGHT", LeftToRightDirection);
IMAGICK_REGISTER_CONST_LONG("DIRECTION_RIGHT_TO_LEFT", RightToLeftDirection);

#if MagickLibVersion >= 0x712
// Technically >= 7.1.1-14 but we still don't have a mechanism for
// detecting patch versions.
IMAGICK_REGISTER_CONST_LONG("DIRECTION_TOP_TO_BOTTOM", TopToBottomDirection);
#if MAGICK_LIB_VERSION_GTE(7, 1, 1, 14)
IMAGICK_REGISTER_CONST_LONG("DIRECTION_TOP_TO_BOTTOM", TopToBottomDirection);
#endif

// The kernel is scaled directly using given scaling factor without change.
Expand Down
19 changes: 19 additions & 0 deletions php_imagick_macros.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,25 @@
#ifndef PHP_IMAGICK_MACROS_H
# define PHP_IMAGICK_MACROS_H

#define EXTRACT_BUILD_NUMBER(str) ({ \
int build = 0; \
const char *s = str; \
while (*s && !isdigit(*s)) s++; \
if (*s) build = atoi(s); \
build; \
})

#define MAGICK_LIB_VERSION_MAJOR ((MagickLibVersion >> 8) & 0xFF)
#define MAGICK_LIB_VERSION_MINOR ((MagickLibVersion >> 4) & 0xF)
#define MAGICK_LIB_VERSION_PATCH (MagickLibVersion & 0xF)
#define MAGICK_LIB_VERSION_BUILD EXTRACT_BUILD_NUMBER(MagickLibAddendum)

#define MAGICK_LIB_VERSION_GTE(major, minor, patch, build) \
((VERSION_MAJOR > (major)) || \
(VERSION_MAJOR == (major) && VERSION_MINOR > (minor)) || \
(VERSION_MAJOR == (major) && VERSION_MINOR == (minor) && VERSION_PATCH > (patch)) || \
(VERSION_MAJOR == (major) && VERSION_MINOR == (minor) && VERSION_PATCH == (patch) && VERSION_BUILD >= (build)))

#define IMAGICK_FREE_MAGICK_MEMORY(value) \
do { \
if (value) { \
Expand Down
5 changes: 3 additions & 2 deletions util/calculate_cflags.php
Original file line number Diff line number Diff line change
Expand Up @@ -58,15 +58,16 @@

if ($PHP_VERSION == "5.4" || $PHP_VERSION == "5.5") {
$CFLAGS = array("-Wno-deprecated-declarations");
}
else if ($PHP_VERSION == "5.6") {
} elseif ($PHP_VERSION == "5.6") {
$CFLAGS = array(
"-Wno-deprecated-declarations",
"-Wdeclaration-after-statement",
"-Werror",
"-Wall",
"-Wimplicit-function-declaration"
);
} elseif ($PHP_VERSION == "8.4") {
$CFLAGS[] = "-Wno-missing-field-initializers";
}

$result = implode(" ", $CFLAGS);
Expand Down

0 comments on commit 2ed2214

Please sign in to comment.