diff --git a/CI/build_win.ps1 b/CI/build_win.ps1 index 9f244ddbe..56f745279 100644 --- a/CI/build_win.ps1 +++ b/CI/build_win.ps1 @@ -7,5 +7,5 @@ $src_dir=$pwd mkdir build cd build -cmake -G "$COMPILER" -A "$ARCH" -DPYTHON_BINDINGS=ON -DLIBXML2_LIBRARIES="$src_dir\deps\lib\libxml2.dll.a" .. +cmake -G "$COMPILER" -A "$ARCH" -DENABLE_IPV6=OFF -DWITH_USB_BACKEND=OFF -DWITH_SERIAL_BACKEND=OFF -DPYTHON_BINDINGS=ON -DLIBXML2_LIBRARIES="$src_dir\deps\lib\libxml2.dll.a" .. cmake --build . --config Release diff --git a/CI/travis/before_install_darwin b/CI/travis/before_install_darwin index 166077203..bf6cfc25d 100755 --- a/CI/travis/before_install_darwin +++ b/CI/travis/before_install_darwin @@ -2,4 +2,4 @@ . CI/travis/lib.sh -brew_install_if_not_exists cmake doxygen libusb libxml2 ncurses cdk +brew_install_if_not_exists cmake doxygen libusb libxml2 ncurses cdk zstd diff --git a/CI/travis/before_install_linux b/CI/travis/before_install_linux index 3cdc3844f..db248fd65 100755 --- a/CI/travis/before_install_linux +++ b/CI/travis/before_install_linux @@ -27,7 +27,7 @@ handle_centos() { # FIXME: see about adding `libserialport-dev` from EPEL ; maybe libusb-1.0.0-devel... yum -y groupinstall 'Development Tools' yum -y install cmake libxml2-devel libusb1-devel libaio-devel \ - bzip2 gzip rpm rpm-build + bzip2 gzip rpm rpm-build libzstd-devel if [ "$(get_version | head -c 1)" = "7" ] ; then # install Cmake3, and make it the default @@ -66,7 +66,7 @@ handle_generic_docker() { handle_default() { sudo apt-get -qq update sudo DEBIAN_FRONTEND=noninteractive apt-get install -y cmake graphviz \ - libaio-dev libavahi-client-dev libserialport-dev \ + libaio-dev libavahi-client-dev libserialport-dev libzstd-dev \ libavahi-common-dev libusb-1.0-0-dev libxml2-dev rpm tar \ bzip2 gzip flex bison git libncurses5-dev libcdk5-dev \ doxygen man2html python3 python3-pip python3-setuptools diff --git a/CI/travis/make_darwin b/CI/travis/make_darwin index be729ebaa..52902598c 100755 --- a/CI/travis/make_darwin +++ b/CI/travis/make_darwin @@ -1,5 +1,7 @@ #!/bin/sh -e +LIBIIO_BUILD_CONF="-DWITH_SERIAL_BACKEND=OFF -DWITH_ZSTD=ON" + if [ "x${COVERITY_SCAN_PROJECT_NAME}" != "x" ] ; then exit 0; fi @@ -18,13 +20,13 @@ build_osx() { mkdir -p build cd build -build_osx "-DOSX_PACKAGE=ON -DPYTHON_BINDINGS=ON -DWITH_EXAMPLES=ON" +build_osx "-DOSX_PACKAGE=ON -DPYTHON_BINDINGS=ON -DWITH_EXAMPLES=ON ${LIBIIO_BUILD_CONF}" cd .. mkdir -p build_tar cd build_tar -build_osx "-DOSX_PACKAGE=OFF -DENABLE_PACKAGING=ON -DPYTHON_BINDINGS=ON" +build_osx "-DOSX_PACKAGE=OFF -DENABLE_PACKAGING=ON -DPYTHON_BINDINGS=ON ${LIBIIO_BUILD_CONF}" echo "### make package" make package echo "### files are" diff --git a/CI/travis/make_linux b/CI/travis/make_linux index d215d4d6f..cf732d5d1 100755 --- a/CI/travis/make_linux +++ b/CI/travis/make_linux @@ -44,6 +44,13 @@ handle_default() { FLAGS="-DENABLE_PACKAGING=ON -DDEB_DETECT_DEPENDENCIES=ON -DWITH_EXAMPLES=ON ${PYTHON_HELP} ${DOC_HELP} ${MAN_HELP}" + # Ubuntu Xenial's libserialport and libzstd are too old + if [ "${OS_VERSION}" = xenial ] ; then + FLAGS="${FLAGS} -DWITH_SERIAL_BACKEND=OFF" + else + FLAGS="${FLAGS} -DWITH_ZSTD=ON" + fi + echo "### cmake ${FLAGS}" cmake ${FLAGS} .. @@ -103,7 +110,13 @@ handle_centos() { echo "handle centos" mkdir -p build cd build - cmake -DENABLE_PACKAGING=ON -DPYTHON_BINDINGS=ON .. + + FLAGS="-DENABLE_PACKAGING=ON -DPYTHON_BINDINGS=ON -DWITH_SERIAL_BACKEND=OFF -DWITH_ZSTD=ON" + + # CentOS 7's kernel headers are too old for USB support in IIOD + [ "${OS_VERSION}" = centos7 ] && FLAGS="${FLAGS} -DWITH_IIOD_USBD=OFF" + + cmake ${FLAGS} .. make make package cd .. diff --git a/CMakeLists.txt b/CMakeLists.txt index 6eac89549..d3ed0a2cd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -37,7 +37,7 @@ if (NOT CMAKE_BUILD_TYPE) set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS None Debug Release RelWithDebInfo MinSizeRel) endif() -set(BUILD_SHARED_LIBS ON CACHE BOOL "Build shared libraries") +option(BUILD_SHARED_LIBS "Build shared libraries" ON) if (NOT BUILD_SHARED_LIBS) add_definitions(-DLIBIIO_STATIC=1) @@ -120,9 +120,6 @@ endif() if(APPLE) #full Single Unix Standard v3 (SUSv3) conformance (the Unix API) add_definitions(-D_DARWIN_C_SOURCE) -elseif (${CMAKE_SYSTEM_NAME} MATCHES "Linux") - set(CMAKE_REQUIRED_DEFINITIONS "-D_GNU_SOURCE=1") - add_definitions(-D_GNU_SOURCE=1) elseif (${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD|DragonFly|OpenBSD|NetBSD") set(CMAKE_REQUIRED_DEFINITIONS "-D__BSD_VISIBLE") add_definitions(-D__BSD_VISIBLE=1) @@ -135,29 +132,25 @@ check_symbol_exists(strndup "string.h" HAS_STRNDUP) check_symbol_exists(strerror_r "string.h" HAS_STRERROR_R) check_symbol_exists(newlocale "locale.h" HAS_NEWLOCALE) -if (NOT WIN32) - find_library(PTHREAD_LIBRARIES pthread) - set(CMAKE_REQUIRED_LIBRARIES ${PTHREAD_LIBRARIES}) - check_symbol_exists(pthread_setname_np "pthread.h" HAS_PTHREAD_SETNAME_NP) - set(CMAKE_REQUIRED_LIBRARIES) -endif() - option(ENABLE_IPV6 "Define if you want to enable IPv6 support" ON) if (ENABLE_IPV6) check_symbol_exists(in6addr_any "netinet/in.h" HAVE_IPV6) if (NOT HAVE_IPV6) - message(WARNING "IPv6 is not available in your system.") + message(SEND_ERROR "IPv6 is not available in your system.") endif() endif() -#Handle FreeBSD libusb and Linux libusb-1.0 libraries -find_library(LIBUSB_LIBRARIES NAMES usb-1.0 usb) -find_path(LIBUSB_INCLUDE_DIR libusb.h PATH_SUFFIXES libusb-1.0) -if (LIBUSB_LIBRARIES AND LIBUSB_INCLUDE_DIR) - message(STATUS "Looking for libusb-1.0 : Found") - option(WITH_USB_BACKEND "Enable the libusb backend" ON) +option(WITH_USB_BACKEND "Enable the libusb backend" ON) +if (WITH_USB_BACKEND) + #Handle FreeBSD libusb and Linux libusb-1.0 libraries + find_library(LIBUSB_LIBRARIES NAMES usb-1.0 usb) + find_path(LIBUSB_INCLUDE_DIR libusb.h PATH_SUFFIXES libusb-1.0) + if (NOT LIBUSB_LIBRARIES OR NOT LIBUSB_INCLUDE_DIR) + message(SEND_ERROR "Unable to find libusb-1.0 dependency.\n" + "If you want to disable the USB backend, set WITH_USB_BACKEND=OFF.") + else() + message(STATUS "Looking for libusb-1.0 : Found") - if(WITH_USB_BACKEND) set(IIOD_CLIENT 1) set(NEED_LIBXML2 1) set(NEED_THREADS 1) @@ -168,13 +161,10 @@ if (LIBUSB_LIBRARIES AND LIBUSB_INCLUDE_DIR) set(TEMP1 ${CMAKE_REQUIRED_INCLUDES}) list(APPEND CMAKE_REQUIRED_LIBRARIES ${LIBUSB_LIBRARIES}) list(APPEND CMAKE_REQUIRED_INCLUDES ${LIBUSB_INCLUDE_DIR}) - check_symbol_exists(libusb_get_version libusb.h - HAS_LIBUSB_GETVERSION) + check_symbol_exists(libusb_get_version libusb.h HAS_LIBUSB_GETVERSION) set(CMAKE_REQUIRED_LIBRARIES ${TEMP}) - set(CMAKE_REQUIRED_INCLUDES ${TEMP1}) + set(CMAKE_REQUIRED_INCLUDES ${TEMP1}) endif() -else() - message(STATUS "Looking for libusb-1.0 : Failed; building without usb") endif() # make sure all check_symbol_exists are before this point, otherwise they fail @@ -260,31 +250,31 @@ if(WITH_LOCAL_BACKEND) endif() endif() -find_library(LIBSERIALPORT_LIBRARIES serialport) -find_path(LIBSERIALPORT_INCLUDE_DIR libserialport.h) -if (LIBSERIALPORT_LIBRARIES AND LIBSERIALPORT_INCLUDE_DIR) - option(WITH_SERIAL_BACKEND "Enable the serial backend" ON) +option(WITH_SERIAL_BACKEND "Enable the serial backend" ON) +if (WITH_SERIAL_BACKEND) + find_library(LIBSERIALPORT_LIBRARIES serialport) + find_path(LIBSERIALPORT_INCLUDE_DIR libserialport.h) + if (NOT LIBSERIALPORT_LIBRARIES OR NOT LIBSERIALPORT_INCLUDE_DIR) + message(SEND_ERROR "Unable to find libserialport dependency.\n" + "If you want to disable the serial backend, set WITH_SERIAL_BACKEND=OFF.") + else() + message(STATUS "Looking for libserialport : Found") - if (WITH_SERIAL_BACKEND) file(STRINGS ${LIBSERIALPORT_INCLUDE_DIR}/libserialport.h LIBSERIALPORT_VERSION_STR REGEX "SP_PACKAGE_VERSION_STRING") string(REGEX REPLACE "#define SP_PACKAGE_VERSION_STRING \"(.*)\"" "\\1" LIBSERIALPORT_VERSION ${LIBSERIALPORT_VERSION_STR}) if ("${LIBSERIALPORT_VERSION}" VERSION_LESS 0.1.1) - message(WARNING "The installed version of libserialport is too old. The minimum version supported is 0.1.1. Disabling Serial support.") - SET(WITH_SERIAL_BACKEND OFF) - else() - message(STATUS "Looking for libserialport : Found") - list(APPEND LIBIIO_CFILES serial.c) - list(APPEND LIBS_TO_LINK ${LIBSERIALPORT_LIBRARIES}) - - set(NEED_THREADS 1) - set(IIOD_CLIENT 1) - set(NEED_LIBXML2 1) - - include_directories(${LIBSERIALPORT_INCLUDE_DIR}) + message(SEND_ERROR "The installed version of libserialport is too old. The minimum version supported is 0.1.1.") endif() + + list(APPEND LIBIIO_CFILES serial.c) + list(APPEND LIBS_TO_LINK ${LIBSERIALPORT_LIBRARIES}) + + set(NEED_THREADS 1) + set(IIOD_CLIENT 1) + set(NEED_LIBXML2 1) + + include_directories(${LIBSERIALPORT_INCLUDE_DIR}) endif() -else() - message(STATUS "Looking for libserialport : Failed; building without serial") endif() option(WITH_ZSTD "Support for ZSTD compressed metadata" OFF) @@ -293,7 +283,8 @@ if (WITH_ZSTD) find_path(LIBZSTD_INCLUDE_DIR zstd.h) if (NOT LIBZSTD_LIBRARIES OR NOT LIBZSTD_INCLUDE_DIR) - message(SEND_ERROR "Unable to find libzstd") + message(SEND_ERROR "Unable to find libzstd dependency.\n" + "If you want to disable ZSTD compression support, set WITH_ZSTD=OFF.") endif() list(APPEND LIBS_TO_LINK ${LIBZSTD_LIBRARIES}) @@ -309,12 +300,15 @@ if(WITH_NETWORK_BACKEND) endif() if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") - include(CheckCSourceCompiles) - check_c_source_compiles("#include \nint main(void) { return O_TMPFILE; }" HAS_O_TMPFILE) - - if (HAS_O_TMPFILE) - option(WITH_NETWORK_GET_BUFFER "Enable experimental zero-copy transfers" OFF) - endif(HAS_O_TMPFILE) + option(WITH_NETWORK_GET_BUFFER "Enable experimental zero-copy transfers" OFF) + if (WITH_NETWORK_GET_BUFFER) + include(CheckCSourceCompiles) + check_c_source_compiles("#include \nint main(void) { return O_TMPFILE; }" HAS_O_TMPFILE) + + if (NOT HAS_O_TMPFILE) + message(SEND_ERROR "Zero-copy requires the O_TMPFILE flag, which is not available on the system.") + endif() + endif() check_c_source_compiles("#include \nint main(void) { return eventfd(0, EFD_CLOEXEC | EFD_NONBLOCK); }" WITH_NETWORK_EVENTFD) endif() @@ -331,34 +325,37 @@ if(WITH_NETWORK_BACKEND) list(APPEND LIBIIO_CFILES network-unix.c) endif() - find_library(AVAHI_CLIENT_LIBRARIES avahi-client) - find_library(AVAHI_COMMON_LIBRARIES avahi-common) - if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + option(HAVE_DNS_SD "Enable DNS-SD (ZeroConf) support" ON) + if (NOT HAVE_DNS_SD) + message(STATUS "Building without DNS-SD (ZeroConf) support") + elseif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") find_library(CORE_SERVICES CoreServices) message(STATUS "Building with CFNetServices, an Apple DNS SD implementation") - set(HAVE_DNS_SD ON) list(APPEND LIBIIO_CFILES dns_sd_bonjour.c dns_sd.c) list(APPEND LIBS_TO_LINK ${CORE_SERVICES} ) - elseif(AVAHI_CLIENT_LIBRARIES AND AVAHI_COMMON_LIBRARIES) - message(STATUS "Building with Avahi, a DNS SD implementation") - set(HAVE_DNS_SD ON) - set(HAVE_AVAHI ON) - - list(APPEND LIBIIO_CFILES dns_sd_avahi.c dns_sd.c) - set(AVAHI_LIBRARIES ${AVAHI_CLIENT_LIBRARIES} ${AVAHI_COMMON_LIBRARIES}) - list(APPEND LIBS_TO_LINK ${AVAHI_LIBRARIES}) elseif(WIN32) - set(HAVE_DNS_SD ON) list(APPEND LIBIIO_CFILES dns_sd_windows.c dns_sd.c) if (CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang") set_source_files_properties(dns_sd_windows.c PROPERTIES COMPILE_FLAGS "-Wno-unused-function") endif() message(STATUS "Building with mdns, A Public domain mDNS/DNS-SD library in C ") else() - message(STATUS "Building without DNS-SD (Zeroconf) support") + find_library(AVAHI_CLIENT_LIBRARIES avahi-client) + find_library(AVAHI_COMMON_LIBRARIES avahi-common) + if (NOT AVAHI_CLIENT_LIBRARIES OR NOT AVAHI_COMMON_LIBRARIES) + message(SEND_ERROR "Unable to find libavahi-common / libavahi-client dependencies.\n" + "If you want to disable DNS-SD (ZeroConf) support, set HAVE_DNS_SD=OFF.") + endif() + + message(STATUS "Building with Avahi, a DNS-SD (ZeroConf) implementation") + set(HAVE_AVAHI ON) + + list(APPEND LIBIIO_CFILES dns_sd_avahi.c dns_sd.c) + set(AVAHI_LIBRARIES ${AVAHI_CLIENT_LIBRARIES} ${AVAHI_COMMON_LIBRARIES}) + list(APPEND LIBS_TO_LINK ${AVAHI_LIBRARIES}) endif() set(NEED_THREADS 1) @@ -368,42 +365,47 @@ else() message(STATUS "Building without network support") endif() -# Since libxml2-2.9.2, libxml2 provides its own LibXml2-config.cmake, with all -# variables correctly set. -# So, try first to find the CMake module provided by libxml2 package, then fallback -# on the CMake's FindLibXml2.cmake module (which can lack some definition, especially -# in static build case). -find_package(LibXml2 QUIET NO_MODULE) -if(DEFINED LIBXML2_VERSION_STRING) - set(LIBXML2_FOUND ON) - set(LIBXML2_INCLUDE_DIR ${LIBXML2_INCLUDE_DIRS}) -else() - include(FindLibXml2) -endif() - -if (LIBXML2_FOUND) - option(WITH_XML_BACKEND "Enable the XML backend" ON) - if (WITH_XML_BACKEND) - list(APPEND LIBIIO_CFILES xml.c) +option(WITH_XML_BACKEND "Enable the XML backend" ON) +if (WITH_XML_BACKEND) + # Since libxml2-2.9.2, libxml2 provides its own LibXml2-config.cmake, with all + # variables correctly set. + # So, try first to find the CMake module provided by libxml2 package, then fallback + # on the CMake's FindLibXml2.cmake module (which can lack some definition, especially + # in static build case). + find_package(LibXml2 QUIET NO_MODULE) + if(DEFINED LIBXML2_VERSION_STRING) + set(LIBXML2_FOUND ON) + set(LIBXML2_INCLUDE_DIR ${LIBXML2_INCLUDE_DIRS}) + else() + include(FindLibXml2) + endif() - include_directories(${LIBXML2_INCLUDE_DIR}) - list(APPEND LIBS_TO_LINK ${LIBXML2_LIBRARIES}) + if (NOT LIBXML2_FOUND) + message(SEND_ERROR "Unable to find libxml2 dependency.\n" + "If you want to disable the XML backend, set WITH_XML_BACKEND=OFF.") endif() -endif() -if (NEED_LIBXML2 AND NOT (LIBXML2_FOUND AND WITH_XML_BACKEND)) - message(SEND_ERROR "The selected backends require libxml2 and the XML backend to be enabled") + list(APPEND LIBIIO_CFILES xml.c) + + include_directories(${LIBXML2_INCLUDE_DIR}) + list(APPEND LIBS_TO_LINK ${LIBXML2_LIBRARIES}) +elseif(NEED_LIBXML2) + message(SEND_ERROR "Enabled backends require the XML backend to be enabled as well.\n" + "If you want to enable the XML backend, set WITH_XML_BACKEND=ON.") endif() -if (NEED_THREADS) +option(NO_THREADS "Disable multi-threading support" OFF) +if (NEED_THREADS AND NOT NO_THREADS) if (NOT WIN32) - if (PTHREAD_LIBRARIES) - list(APPEND LIBS_TO_LINK ${PTHREAD_LIBRARIES}) - else() - message(WARNING "pthread library not found; support for threads will be disabled") - set(NO_THREADS ON) + find_library(PTHREAD_LIBRARIES pthread) + + if (NOT PTHREAD_LIBRARIES) + message(SEND_ERROR "Unable to find pthread dependency.\n" + "If you want to disable multi-threading support, set NO_THREADS=ON.") endif() + + list(APPEND LIBS_TO_LINK ${PTHREAD_LIBRARIES}) endif() list(APPEND LIBIIO_CFILES lock.c) @@ -577,8 +579,8 @@ if(WITH_IIOD) set(UPSTART_CONF_INSTALL_DIR /etc/init CACHE PATH "default install path for upstart conf files") if (NOT PTHREAD_LIBRARIES) - message(WARNING "IIOD requires threads support; disabling") - set(WITH_IIOD OFF CACHE BOOL "" FORCE) + message(SEND_ERROR "IIOD requires pthread support\n." + "If you want to disable IIOD, set WITH_IIOD=OFF.") else() add_subdirectory(iiod) endif() diff --git a/iio-config.h.cmakein b/iio-config.h.cmakein index 39a9c73bc..781bfb6cc 100644 --- a/iio-config.h.cmakein +++ b/iio-config.h.cmakein @@ -17,9 +17,9 @@ #cmakedefine01 WITH_NETWORK_EVENTFD #cmakedefine01 WITH_IIOD_USBD #cmakedefine01 WITH_LOCAL_CONFIG +#cmakedefine01 WITH_AIO #cmakedefine01 HAVE_DNS_SD #cmakedefine01 HAVE_AVAHI -#cmakedefine01 ENABLE_AIO #cmakedefine01 WITH_ZSTD #cmakedefine HAS_PIPE2 diff --git a/iiod/CMakeLists.txt b/iiod/CMakeLists.txt index 22b699d5e..b91f00141 100644 --- a/iiod/CMakeLists.txt +++ b/iiod/CMakeLists.txt @@ -12,6 +12,13 @@ add_flex_bison_dependency(lexer parser) include_directories(${CMAKE_CURRENT_BINARY_DIR}) include_directories(${CMAKE_CURRENT_SOURCE_DIR}) +include(CheckSymbolExists) +set(CMAKE_REQUIRED_LIBRARIES ${PTHREAD_LIBRARIES}) +set(CMAKE_REQUIRED_DEFINITIONS -D_GNU_SOURCE) +check_symbol_exists(pthread_setname_np "pthread.h" HAS_PTHREAD_SETNAME_NP) +set(CMAKE_REQUIRED_LIBRARIES) +set(CMAKE_REQUIRED_DEFINITIONS) + if (CMAKE_C_COMPILER_ID STREQUAL "Clang" OR CMAKE_COMPILER_IS_GNUCC) # flex sometimes generates code which generate sign comparison errors set_source_files_properties(${FLEX_lexer_OUTPUTS} PROPERTIES COMPILE_FLAGS "-Wno-sign-compare") @@ -20,29 +27,33 @@ endif () set(IIOD_CFILES iiod.c ops.c thread-pool.c ${BISON_parser_OUTPUTS} ${FLEX_lexer_OUTPUTS}) -find_library(LIBAIO_LIBRARIES aio) -find_path(LIBAIO_INCLUDE_DIR libaio.h) - -if (LIBAIO_LIBRARIES AND LIBAIO_INCLUDE_DIR) - option(ENABLE_AIO "Build IIOD with async. I/O support" ON) -endif () +option(WITH_AIO "Build IIOD with async. I/O support" ON) +if (WITH_AIO) + find_library(LIBAIO_LIBRARIES aio) + find_path(LIBAIO_INCLUDE_DIR libaio.h) -include(CheckTypeSize) -set(CMAKE_EXTRA_INCLUDE_FILES linux/usb/functionfs.h) -check_type_size("struct usb_functionfs_descs_head_v2" FUNCTIONFS_V2) -set(CMAKE_EXTRA_INCLUDE_FILES) + if (NOT LIBAIO_LIBRARIES OR NOT LIBAIO_INCLUDE_DIR) + message(SEND_ERROR "Unable to find libaio dependency.\n" + "If you want to disable async. I/O support, set WITH_AIO=OFF.") + endif () -if (HAVE_FUNCTIONFS_V2) - OPTION(WITH_IIOD_USBD "Add support for USB through FunctionFS within IIOD" ${ENABLE_AIO}) + message(STATUS "Looking for libaio: Found") + option(WITH_IIOD_USBD "Add support for USB through FunctionFS within IIOD" ON) if (WITH_IIOD_USBD) - if (NOT ENABLE_AIO) - message(SEND_ERROR "USB support in IIOD requires async. I/O support") - endif (NOT ENABLE_AIO) + include(CheckTypeSize) + set(CMAKE_EXTRA_INCLUDE_FILES linux/usb/functionfs.h) + check_type_size("struct usb_functionfs_descs_head_v2" FUNCTIONFS_V2) + set(CMAKE_EXTRA_INCLUDE_FILES) + + if (NOT HAVE_FUNCTIONFS_V2) + message(SEND_ERROR "Linux kernel headers are too old.\n" + "If you want to disable USB support, set WITH_IIOD_USBD=OFF.") + endif() set(IIOD_CFILES ${IIOD_CFILES} usbd.c) - endif (WITH_IIOD_USBD) -endif (HAVE_FUNCTIONFS_V2) + endif() +endif() add_executable(iiod ${IIOD_CFILES}) set_target_properties(iiod PROPERTIES @@ -52,8 +63,7 @@ set_target_properties(iiod PROPERTIES ) target_link_libraries(iiod iio ${PTHREAD_LIBRARIES} ${AVAHI_LIBRARIES}) -if (ENABLE_AIO) - add_definitions(-DWITH_AIO=1) +if (WITH_AIO) include_directories(${LIBAIO_INCLUDE_DIR}) target_link_libraries(iiod ${LIBAIO_LIBRARIES}) endif () diff --git a/iiod/iiod.c b/iiod/iiod.c index b4dc3d889..178558b90 100644 --- a/iiod/iiod.c +++ b/iiod/iiod.c @@ -373,7 +373,7 @@ int main(int argc, char **argv) interactive = true; break; case 'a': - if (!ENABLE_AIO) { + if (!WITH_AIO) { IIO_ERROR("IIOD was not compiled with AIO support.\n"); return EXIT_FAILURE; } diff --git a/network-unix.c b/network-unix.c index 071f34b19..594ffc877 100644 --- a/network-unix.c +++ b/network-unix.c @@ -17,6 +17,7 @@ #include #include #include +#include #include int set_blocking_mode(int fd, bool blocking) diff --git a/network.c b/network.c index 5ae9b2b18..1ed580302 100644 --- a/network.c +++ b/network.c @@ -23,6 +23,14 @@ #include #include #else +/* + * Old OSes (CentOS 7, Ubuntu 16.04) require this for the + * IN6_IS_ADDR_LINKLOCAL() macro to work. + */ +#define __USE_MISC +#include +#undef __USE_MISC + #include #include #include