From 7efcf4f935d0466b6ada44bed62d729cd2cddbc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D9=85=D9=87=D8=AF=D9=8A=20=D8=B4=D9=8A=D9=86=D9=88=D9=86?= =?UTF-8?q?=20=28Mehdi=20Chinoune=29?= <79349457+MehdiChinoune@users.noreply.github.com> Date: Fri, 15 Apr 2022 09:34:24 +0100 Subject: [PATCH] Some fixes for MINGW (#828) * Enable webpng on MINGW * Detect GD version using cmake language * Use _aligned_malloc instead of posix_memalign on Windows * Include missing "errno.h" * Fix finding WEBP on MINGW * Fix finding XPM on MINGW * Use PkgConfig to find packages on MINGW * CI: Enable more options for MINGW --- .github/workflows/ci_windows_mingw.yml | 40 +++++++++++++------------- CMakeLists.txt | 8 +++--- cmake/modules/FindFontConfig.cmake | 4 +-- cmake/modules/FindHEIF.cmake | 4 +-- cmake/modules/FindWEBP.cmake | 9 +++--- cmake/modules/FindXPM.cmake | 7 +++-- src/CMakeLists.txt | 9 ++---- src/gd_topal.c | 4 +++ tests/gdtest/gdtest.c | 1 + 9 files changed, 43 insertions(+), 43 deletions(-) diff --git a/.github/workflows/ci_windows_mingw.yml b/.github/workflows/ci_windows_mingw.yml index dccb723..9fcedfa 100644 --- a/.github/workflows/ci_windows_mingw.yml +++ b/.github/workflows/ci_windows_mingw.yml @@ -21,16 +21,14 @@ jobs: fail-fast: false matrix: include: - - { icon: '⬛', sys: mingw32, env: i686 } - - { icon: '🟦', sys: mingw64, env: x86_64 } - - { icon: '🟨', sys: ucrt64, env: ucrt-x86_64 } # Experimental! -# - { icon: '🟧', sys: clang64, env: clang-x86_64 } # Experimental! + - { icon: '⬛', sys: MINGW32 } + - { icon: '🟦', sys: MINGW64 } + - { icon: '🟨', sys: UCRT64 } # Experimental! + - { icon: '🟧', sys: CLANG64 } # Experimental! name: 🚧${{ matrix.icon }}-${{ matrix.sys }} defaults: run: shell: msys2 {0} - env: - MINGW_ARCH: ${{ matrix.sys }} steps: - name: '⚙️ git config' @@ -51,24 +49,26 @@ jobs: git base-devel tree - mingw-w64-${{ matrix.env }}-toolchain - mingw-w64-${{ matrix.env }}-libpng - mingw-w64-${{ matrix.env }}-libjpeg-turbo - mingw-w64-${{ matrix.env }}-freetype - mingw-w64-${{ matrix.env }}-libtiff - mingw-w64-${{ matrix.env }}-libwebp - mingw-w64-${{ matrix.env }}-libheif - mingw-w64-${{ matrix.env }}-libraqm - mingw-w64-${{ matrix.env }}-libimagequant - mingw-w64-${{ matrix.env }}-libavif - mingw-w64-${{ matrix.env }}-cmake + pacboy: > + toolchain:p + libpng:p + libjpeg-turbo:p + freetype:p + libtiff:p + libwebp:p + libheif:p + libraqm:p + libavif:p + xpm-nox:p + cmake:p + ninja:p - name: '🚧 Cmake Configure' run: | - MSYSTEM=MINGW64 cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Debug -DENABLE_PNG=1 -DENABLE_FREETYPE=1 -DENABLE_XPM=0 -DENABLE_JPEG=1 -DENABLE_WEBP=0 -DENABLE_TIFF=1 -DENABLE_XPM=0 -DENABLE_GD_FORMATS=1 -DENABLE_HEIF=1 -DENABLE_RAQM=1 -DBUILD_TEST=1 -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -B. + cmake -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DENABLE_PNG=1 -DENABLE_FREETYPE=1 -DENABLE_XPM=1 -DENABLE_JPEG=1 -DENABLE_WEBP=1 -DENABLE_TIFF=1 -DENABLE_GD_FORMATS=1 -DENABLE_HEIF=1 -DENABLE_RAQM=1 -DENABLE_ICONV=1 -DENABLE_CPP=1 -DBUILD_TEST=1 -B. - name: Build - run: cmake --build . --config ${{env.BUILD_TYPE}} --parallel 4 + run: cmake --build . - name: Run tests working-directory: ${{github.workspace}} @@ -76,4 +76,4 @@ jobs: mkdir tmp export TMP=${{github.workspace}}\\tmp export CTEST_OUTPUT_ON_FAILURE=1 - ctest -C ${{env.BUILD_TYPE}} + ctest diff --git a/CMakeLists.txt b/CMakeLists.txt index 979d1cc..0f48851 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -86,10 +86,10 @@ if (USE_EXT_GD) else (USE_EXT_GD) MACRO(GV VER VAR) - execute_process( - COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/config/getver.sh ${VER} - OUTPUT_VARIABLE ${VAR} - ) + file (STRINGS "src/gd.h" _VERSION_LINE REGEX "define[ ]+GD_${VER}_VERSION") + if ( _VERSION_LINE ) + string ( REGEX REPLACE ".*define[ ]+GD_${VER}_VERSION[ ]+\"?([^ \"]*)\"?[ ]+.*" "\\1" ${VAR} "${_VERSION_LINE}" ) + endif () ENDMACRO(GV) GV(MAJOR GDLIB_MAJOR) diff --git a/cmake/modules/FindFontConfig.cmake b/cmake/modules/FindFontConfig.cmake index afe967e..14c251c 100644 --- a/cmake/modules/FindFontConfig.cmake +++ b/cmake/modules/FindFontConfig.cmake @@ -37,11 +37,11 @@ endif ( FONTCONFIG_INCLUDE_DIR AND FONTCONFIG_LIBRARY ) # use pkg-config to get the directories and then use these values # in the FIND_PATH() and FIND_LIBRARY() calls -if( NOT WIN32 ) +if( NOT MSVC ) find_package(PkgConfig) pkg_check_modules(FONTCONFIG_PKG QUIET fontconfig) -endif( NOT WIN32 ) +endif( NOT MSVC ) FIND_PATH(FONTCONFIG_INCLUDE_DIR NAMES fontconfig/fontconfig.h PATHS diff --git a/cmake/modules/FindHEIF.cmake b/cmake/modules/FindHEIF.cmake index 1751a84..da544de 100644 --- a/cmake/modules/FindHEIF.cmake +++ b/cmake/modules/FindHEIF.cmake @@ -41,10 +41,10 @@ SET(HEIF_FOUND "NO") # use pkg-config to get the directories and then use these values # in the FIND_PATH() and FIND_LIBRARY() calls -if( NOT WIN32 ) +if( NOT MSVC ) find_package(PkgConfig) pkg_check_modules(HEIF_PKG libheif>=1.7.0 QUIET) -endif( NOT WIN32 ) +endif( NOT MSVC ) FIND_PATH(HEIF_INCLUDE_DIR NAMES libheif/heif.h PATHS diff --git a/cmake/modules/FindWEBP.cmake b/cmake/modules/FindWEBP.cmake index cc93552..11076ed 100644 --- a/cmake/modules/FindWEBP.cmake +++ b/cmake/modules/FindWEBP.cmake @@ -37,11 +37,10 @@ # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -include(FindZLIB) - -find_path(WEBP_INCLUDE_DIR decode.h -/usr/local/include/webp -/usr/include/webp +find_path(WEBP_INCLUDE_DIR + NAMES decode.h + PATHS /usr/local/include /usr/include + PATH_SUFFIXES webp ) set(WEBP_NAMES ${WEBP_NAMES} webp) diff --git a/cmake/modules/FindXPM.cmake b/cmake/modules/FindXPM.cmake index 2cb0c22..8207103 100644 --- a/cmake/modules/FindXPM.cmake +++ b/cmake/modules/FindXPM.cmake @@ -40,9 +40,10 @@ SET(XPM_FOUND "NO") -FIND_PATH(XPM_XPM_INCLUDE_DIR xpm.h -/usr/local/include/X11 -/usr/include/X11 +FIND_PATH(XPM_XPM_INCLUDE_DIR + NAMES xpm.h + PATHS /usr/local/include /usr/include + PATH_SUFFIXES X11 ) SET(XPM_NAMES ${XPM_NAMES} Xpm libXpm) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 3839bc7..1069c4f 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -132,9 +132,9 @@ set(GD_PROGRAMS gdcmpgif) if (PNG_FOUND) set(GD_PROGRAMS ${GD_PROGRAMS} gdtopng pngtogd) - if (NOT WIN32) + if (NOT MSVC) set(GD_PROGRAMS ${GD_PROGRAMS} webpng) - endif (NOT WIN32) + endif (NOT MSVC) if (ZLIB_FOUND) set(GD_PROGRAMS ${GD_PROGRAMS} gdparttopng gd2topng pngtogd2) endif() @@ -152,11 +152,6 @@ endif() foreach(program ${GD_PROGRAMS}) add_executable(${program} ${program}.c) - if (WIN32) - list(REMOVE_ITEM program webpng.c annotate.c) - list(REMOVE_ITEM GD_PROGRAMS webpng) - list(REMOVE_ITEM GD_PROGRAMS annotate) - endif (WIN32) if (BUILD_SHARED_LIBS) target_link_libraries(${program} ${GD_LIB}) diff --git a/src/gd_topal.c b/src/gd_topal.c index 0fff552..eb0b063 100644 --- a/src/gd_topal.c +++ b/src/gd_topal.c @@ -1527,8 +1527,12 @@ static void free_truecolor_image_data(gdImagePtr oim) /* liq requires 16 byte aligned heap memory */ static void *malloc16(size_t size) { +#ifndef _WIN32 void *p; return posix_memalign(&p, 16, size) == 0 ? p : NULL; +#else + return _aligned_malloc(16, size); +#endif } #endif diff --git a/tests/gdtest/gdtest.c b/tests/gdtest/gdtest.c index 72b3758..f373469 100644 --- a/tests/gdtest/gdtest.c +++ b/tests/gdtest/gdtest.c @@ -9,6 +9,7 @@ #include #include #include +#include #ifdef HAVE_DIRENT_H #include