From d82752fcfbe395062ddf51716baeb1cacdd0c139 Mon Sep 17 00:00:00 2001 From: Davide Gerhard Date: Thu, 16 May 2019 13:15:19 +0200 Subject: [PATCH] ICONV: back to internal cmake module; plutodevice require on macOS --- CMakeLists.txt | 3 +- cmake/Modules/FindICONV.cmake | 73 +++++++++++++++++++++++++++++++++ devices/plutosdr/CMakeLists.txt | 4 +- fcdhid/CMakeLists.txt | 4 +- 4 files changed, 79 insertions(+), 5 deletions(-) create mode 100644 cmake/Modules/FindICONV.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 3ca673264..2b05c371e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -242,7 +242,7 @@ find_package(OpenCV) # channeltx/modatv # macOS compatibility if(APPLE) - find_package(Iconv) + find_package(ICONV) endif() # include external cmake if needed @@ -333,7 +333,6 @@ endif() # includes needed by the following target include_directories( - ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_SOURCE_DIR}/sdrbase ${CMAKE_SOURCE_DIR}/exports ${CMAKE_SOURCE_DIR}/sdrgui diff --git a/cmake/Modules/FindICONV.cmake b/cmake/Modules/FindICONV.cmake new file mode 100644 index 000000000..94d6e740d --- /dev/null +++ b/cmake/Modules/FindICONV.cmake @@ -0,0 +1,73 @@ +set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true) +include(CheckFunctionExists) +if (ICONV_INCLUDE_DIR) + # Already in cache, be silent + set(ICONV_FIND_QUIETLY TRUE) +endif() + +find_path(ICONV_INCLUDE_DIR iconv.h + /usr/include + /usr/local/include + /opt/local/include) + +set(POTENTIAL_ICONV_LIBS iconv libiconv libiconv2) + +find_library(ICONV_LIBRARY NAMES ${POTENTIAL_ICONV_LIBS} + PATHS /usr/lib /usr/local/lib /opt/local/lib) + +if(WIN32) + set(ICONV_DLL_NAMES iconv.dll libiconv.dll libiconv2.dll) + find_file(ICONV_DLL + NAMES ${ICONV_DLL_NAMES} + PATHS ENV PATH + NO_DEFAULT_PATH) + find_file(ICONV_DLL_HELP + NAMES ${ICONV_DLL_NAMES} + PATHS ENV PATH + ${ICONV_INCLUDE_DIR}/../bin) + if(ICONV_FIND_REQUIRED) + if(NOT ICONV_DLL AND NOT ICONV_DLL_HELP) + message(FATAL_ERROR "Could not find iconv.dll, please add correct your PATH environment variable") + endif() + if(NOT ICONV_DLL AND ICONV_DLL_HELP) + get_filename_component(ICONV_DLL_HELP ${ICONV_DLL_HELP} PATH) + message(STATUS) + message(STATUS "Could not find iconv.dll in standard search path, please add ") + message(STATUS "${ICONV_DLL_HELP}") + message(STATUS "to your PATH environment variable.") + message(STATUS) + message(FATAL_ERROR "exit cmake") + endif() + endif() + if(ICONV_INCLUDE_DIR AND ICONV_LIBRARY AND ICONV_DLL) + set(ICONV_FOUND TRUE) + endif() +else() + check_function_exists(iconv HAVE_ICONV_IN_LIBC) + if(ICONV_INCLUDE_DIR AND HAVE_ICONV_IN_LIBC) + set(ICONV_FOUND TRUE) + set(ICONV_LIBRARY CACHE TYPE STRING FORCE) + endif() + if(ICONV_INCLUDE_DIR AND ICONV_LIBRARY) + set(ICONV_FOUND TRUE) + endif() +endif() + + + +if(ICONV_FOUND) + if(NOT ICONV_FIND_QUIETLY) + message(STATUS "Found iconv library: ${ICONV_LIBRARY}") + #message(STATUS "Found iconv dll : ${ICONV_DLL}") + endif() +else() + if(ICONV_FIND_REQUIRED) + message(STATUS "Looked for iconv library named ${POTENTIAL_ICONV_LIBS}.") + message(STATUS "Found no acceptable iconv library. This is fatal.") + message(STATUS "iconv header: ${ICONV_INCLUDE_DIR}") + message(STATUS "iconv lib : ${ICONV_LIBRARY}") + message(FATAL_ERROR "Could NOT find iconv library") + endif() +endif() + +mark_as_advanced(ICONV_LIBRARY ICONV_INCLUDE_DIR) diff --git a/devices/plutosdr/CMakeLists.txt b/devices/plutosdr/CMakeLists.txt index a8c4dcb51..02c0cd918 100644 --- a/devices/plutosdr/CMakeLists.txt +++ b/devices/plutosdr/CMakeLists.txt @@ -19,6 +19,7 @@ set(plutosdrdevice_HEADERS include_directories( ${CMAKE_CURRENT_BINARY_DIR} ${LIBIIO_INCLUDE_DIR} + ${ICONV_INCLUDE_DIR} ) add_library(plutosdrdevice SHARED @@ -29,8 +30,9 @@ set_target_properties(plutosdrdevice PROPERTIES DEFINE_SYMBOL "devices_EXPORTS") target_link_libraries(plutosdrdevice - ${LIBIIO_LIBRARIES} sdrbase + ${LIBIIO_LIBRARIES} + ${ICONV_LIBRARY} ) install(TARGETS plutosdrdevice DESTINATION ${INSTALL_LIB_DIR}) diff --git a/fcdhid/CMakeLists.txt b/fcdhid/CMakeLists.txt index 4040ba756..dbd80ccb5 100644 --- a/fcdhid/CMakeLists.txt +++ b/fcdhid/CMakeLists.txt @@ -16,7 +16,7 @@ set(fcdhid_HEADERS include_directories( ${CMAKE_CURRENT_BINARY_DIR} ${LIBUSB_INCLUDE_DIR} - ${Iconv_INCLUDE_DIR} + ${ICONV_INCLUDE_DIR} ) add_library(fcdhid SHARED @@ -25,7 +25,7 @@ add_library(fcdhid SHARED target_link_libraries(fcdhid ${LIBUSB_LIBRARIES} - ${Iconv_LIBRARY} + ${ICONV_LIBRARY} ) install(TARGETS fcdhid DESTINATION ${INSTALL_LIB_DIR})