Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 15 additions & 6 deletions .github/workflows/msys2.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,22 +18,31 @@ jobs:
msystem: MINGW64
update: true
path-type: minimal
install: git mingw-w64-x86_64-toolchain mingw-w64-x86_64-cmake
install:
git
mingw-w64-x86_64-toolchain
mingw-w64-x86_64-cmake
mingw-w64-x86_64-libiconv
mingw-w64-x86_64-libpng

- name: Create Build Environment
run: |
cmake -E make_directory build
pwd
ls
cd build
cmake -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DCMAKE_TOOLCHAIN_FILE=cmake/Toolchains/mingw64-x86_64.cmake -G 'MSYS Makefiles' -DWITH_TESTS=yes ..
cmake -DCMAKE_BUILD_TYPE=$BUILD_TYPE -G 'MinGW Makefiles' -DWITH_TESTS=yes ..

- name: Build
working-directory: ${{runner.workspace}}/build
shell: bash
run: cmake --build . --config $BUILD_TYPE -j 2
run: |
pwd
cd build
cmake --build . --config $BUILD_TYPE -j 2

- name: Test
working-directory: ${{runner.workspace}}/build
shell: bash
run: ctest -C $BUILD_TYPE
run: |
pwd
cd build
ctest -C $BUILD_TYPE
128 changes: 64 additions & 64 deletions cmake/FindIconv.cmake
Original file line number Diff line number Diff line change
@@ -1,115 +1,115 @@
include(CheckFunctionExists)

set(_ICONV_SEARCHES)
set(_Iconv_SEARCHES)

# Search ICONV_DIR first if it is set.
if(NOT ICONV_DIR AND ENV{ICONV_DIR})
set(ICONV_DIR $ENV{ICONV_DIR})
# Search Iconv_DIR first if it is set.
if(NOT Iconv_DIR AND ENV{Iconv_DIR})
set(Iconv_DIR $ENV{Iconv_DIR})
endif()

if(ICONV_DIR)
set(_ICONV_DIR_SEARCH PATHS ${ICONV_DIR} NO_DEFAULT_PATH)
list(APPEND _ICONV_SEARCHES _ICONV_DIR_SEARCH)
if(Iconv_DIR)
set(_Iconv_DIR_SEARCH PATHS ${Iconv_DIR} NO_DEFAULT_PATH)
list(APPEND _Iconv_SEARCHES _Iconv_DIR_SEARCH)
endif()

# Normal search.
set(_ICONV_SEARCH_NORMAL
set(_Iconv_SEARCH_NORMAL
PATHS "[HKEY_LOCAL_MACHINE\\SOFTWARE\\GnuWin32\\Iconv;InstallPath]"
"$ENV{PROGRAMFILES}/iconv"
ENV CPATH
ENV C_INCLUDE_PATH
ENV CPLUS_INCLUDE_PATH
ENV LIBRARY_PATH)
list(APPEND _ICONV_SEARCHES _ICONV_SEARCH_NORMAL)
list(APPEND _Iconv_SEARCHES _Iconv_SEARCH_NORMAL)

set(ICONV_NAMES iconv iconv2 libiconv iconv64)
set(ICONV_NAMES_DEBUG iconvd iconv64d)
set(Iconv_NAMES iconv iconv2 libiconv iconv64)
set(Iconv_NAMES_DEBUG iconvd iconv64d)

# Try each search configuration.
foreach(search ${_ICONV_SEARCHES})
find_path(ICONV_INCLUDE_DIR NAMES iconv.h ${${search}} PATH_SUFFIXES include)
foreach(search ${_Iconv_SEARCHES})
find_path(Iconv_INCLUDE_DIR NAMES iconv.h ${${search}} PATH_SUFFIXES include)
endforeach()

# Allow ICONV_LIBRARY to be set manually, as the location of the iconv library
if(NOT ICONV_LIBRARY)
foreach(search ${_ICONV_SEARCHES})
find_library(ICONV_LIBRARY_RELEASE NAMES ${ICONV_NAMES} ${${search}} PATH_SUFFIXES lib)
find_library(ICONV_LIBRARY_DEBUG NAMES ${ICONV_NAMES_DEBUG} ${${search}} PATH_SUFFIXES lib)
# Allow Iconv_LIBRARY to be set manually, as the location of the iconv library
if(NOT Iconv_LIBRARY)
foreach(search ${_Iconv_SEARCHES})
find_library(Iconv_LIBRARY_RELEASE NAMES ${Iconv_NAMES} ${${search}} PATH_SUFFIXES lib)
find_library(Iconv_LIBRARY_DEBUG NAMES ${Iconv_NAMES_DEBUG} ${${search}} PATH_SUFFIXES lib)
endforeach()

include(SelectLibraryConfigurations)
select_library_configurations(ICONV)
select_library_configurations(Iconv)
endif()

unset(ICONV_NAMES)
unset(ICONV_NAMES_DEBUG)
unset(Iconv_NAMES)
unset(Iconv_NAMES_DEBUG)

if(ICONV_INCLUDE_DIR AND EXISTS "${ICONV_INCLUDE_DIR}/iconv.h")
file(STRINGS "${ICONV_INCLUDE_DIR}/iconv.h" ICONV_H REGEX "^#define _LIBICONV_VERSION 0x([0-9]+)")
string(REGEX MATCH "q#define _LIBICONV_VERSION 0x([0-9][0-9])([0-9][0-9])?([0-9][0-9])?.*" temp_match "${ICONV_H}")
if(Iconv_INCLUDE_DIR AND EXISTS "${Iconv_INCLUDE_DIR}/iconv.h")
file(STRINGS "${Iconv_INCLUDE_DIR}/iconv.h" Iconv_H REGEX "^#define _LIBIconv_VERSION 0x([0-9]+)")
string(REGEX MATCH "q#define _LIBIconv_VERSION 0x([0-9][0-9])([0-9][0-9])?([0-9][0-9])?.*" temp_match "${Iconv_H}")
unset(temp_match)
if(CMAKE_MATCH_0)
set(ICONV_VERSION_MAJOR "${CMAKE_MATCH_1}")
set(ICONV_VERSION_MINOR "${CMAKE_MATCH_2}")
set(ICONV_VERSION_PATCH "${CMAKE_MATCH_3}")
string(REGEX REPLACE "0*([1-9][0-9]*).*" "\\1" ICONV_VERSION_MAJOR "${ICONV_VERSION_MAJOR}")
string(REGEX REPLACE "0*([1-9][0-9]*).*" "\\1" ICONV_VERSION_MINOR "${ICONV_VERSION_MINOR}")
string(REGEX REPLACE "0*([1-9][0-9]*).*" "\\1" ICONV_VERSION_PATCH "${ICONV_VERSION_PATCH}")

set(ICONV_VERSION_STRING "${ICONV_VERSION_MAJOR}.${ICONV_VERSION_MINOR}")
if(ICONV_VERSION_PATCH)
set(ICONV_VERSION_STRING "${ICONV_VERSION_STRING}.${ICONV_VERSION_PATCH}")
set(Iconv_VERSION_MAJOR "${CMAKE_MATCH_1}")
set(Iconv_VERSION_MINOR "${CMAKE_MATCH_2}")
set(Iconv_VERSION_PATCH "${CMAKE_MATCH_3}")
string(REGEX REPLACE "0*([1-9][0-9]*).*" "\\1" Iconv_VERSION_MAJOR "${Iconv_VERSION_MAJOR}")
string(REGEX REPLACE "0*([1-9][0-9]*).*" "\\1" Iconv_VERSION_MINOR "${Iconv_VERSION_MINOR}")
string(REGEX REPLACE "0*([1-9][0-9]*).*" "\\1" Iconv_VERSION_PATCH "${Iconv_VERSION_PATCH}")

set(Iconv_VERSION_STRING "${Iconv_VERSION_MAJOR}.${Iconv_VERSION_MINOR}")
if(Iconv_VERSION_PATCH)
set(Iconv_VERSION_STRING "${Iconv_VERSION_STRING}.${Iconv_VERSION_PATCH}")
endif()
endif()
endif()

check_function_exists(iconv_open ICONV_IN_GLIBC)
check_function_exists(iconv_open Iconv_IN_GLIBC)

set(ICONV_FOUND_ANY FALSE)
if(ICONV_IN_GLIBC OR ICONV_LIBRARY)
set(ICONV_FOUND_ANY TRUE)
set(Iconv_FOUND_ANY FALSE)
if(Iconv_IN_GLIBC OR Iconv_LIBRARY)
set(Iconv_FOUND_ANY TRUE)
endif()

# handle the QUIETLY and REQUIRED arguments and set ICONV_FOUND to TRUE if
# handle the QUIETLY and REQUIRED arguments and set Iconv_FOUND to TRUE if
# all listed variables are TRUE
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(ICONV
REQUIRED_VARS ICONV_FOUND_ANY ICONV_INCLUDE_DIR
VERSION_VAR ICONV_VERSION_STRING)
find_package_handle_standard_args(Iconv
REQUIRED_VARS Iconv_FOUND_ANY Iconv_INCLUDE_DIR
VERSION_VAR Iconv_VERSION_STRING)

mark_as_advanced(ICONV_LIBRARY ICONV_INCLUDE_DIR)
mark_as_advanced(Iconv_LIBRARY Iconv_INCLUDE_DIR)

if(NOT ICONV_FOUND)
if(NOT Iconv_FOUND)
return()
endif()

set(ICONV_INCLUDE_DIRS ${ICONV_INCLUDE_DIR})
set(Iconv_INCLUDE_DIRS ${Iconv_INCLUDE_DIR})

if(NOT ICONV_LIBRARIES)
set(ICONV_LIBRARIES ${ICONV_LIBRARY})
if(NOT Iconv_LIBRARIES)
set(Iconv_LIBRARIES ${Iconv_LIBRARY})
endif()

if(ICONV_LIBRARY AND NOT TARGET ICONV::ICONV)
add_library(ICONV::ICONV UNKNOWN IMPORTED)
set_target_properties(ICONV::ICONV PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${ICONV_INCLUDE_DIRS}"
IMPORTED_LOCATION "${ICONV_LIBRARY}")
if(Iconv_LIBRARY AND NOT TARGET Iconv::Iconv)
add_library(Iconv::Iconv UNKNOWN IMPORTED)
set_target_properties(Iconv::Iconv PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${Iconv_INCLUDE_DIRS}"
IMPORTED_LOCATION "${Iconv_LIBRARY}")

if(ICONV_LIBRARY_RELEASE)
set_property(TARGET ICONV::ICONV APPEND PROPERTY
if(Iconv_LIBRARY_RELEASE)
set_property(TARGET Iconv::Iconv APPEND PROPERTY
IMPORTED_CONFIGURATIONS RELEASE)
set_target_properties(ICONV::ICONV PROPERTIES
IMPORTED_LOCATION_RELEASE "${ICONV_LIBRARY_RELEASE}")
set_target_properties(Iconv::Iconv PROPERTIES
IMPORTED_LOCATION_RELEASE "${Iconv_LIBRARY_RELEASE}")
endif()

if(ICONV_LIBRARY_DEBUG)
set_property(TARGET ICONV::ICONV APPEND PROPERTY
if(Iconv_LIBRARY_DEBUG)
set_property(TARGET Iconv::Iconv APPEND PROPERTY
IMPORTED_CONFIGURATIONS DEBUG)
set_target_properties(ICONV::ICONV PROPERTIES
IMPORTED_LOCATION_DEBUG "${ICONV_LIBRARY_DEBUG}")
set_target_properties(Iconv::Iconv PROPERTIES
IMPORTED_LOCATION_DEBUG "${Iconv_LIBRARY_DEBUG}")
endif()
elseif(NOT TARGET ICONV::ICONV)
add_library(ICONV::ICONV INTERFACE IMPORTED)
set_target_properties(ICONV::ICONV PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${ICONV_INCLUDE_DIRS}")
elseif(NOT TARGET Iconv::Iconv)
add_library(Iconv::Iconv INTERFACE IMPORTED)
set_target_properties(Iconv::Iconv PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${Iconv_INCLUDE_DIRS}")
endif()