diff options
author | Paul Elder <paul.elder@ideasonboard.com> | 2018-06-26 23:22:25 +0900 |
---|---|---|
committer | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2018-07-31 15:56:48 +0300 |
commit | 6a6e9d22b338bb2c290b7c7fd0ae434ad13232d9 (patch) | |
tree | 9f9a2a1d0f12881acc0f46e93a246eb90f39daba | |
parent | 35a4212180272b5dd648b99c07a692aab19a5e67 (diff) |
lib: Compile custom glob() implementation for Android
The Android C library doesn't provide the glob() function which we use
in the configfs code. Add conditional compilation to cmake such that a
local copy of glob is automatically compiled if glob isn't provided.
Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
-rw-r--r-- | CMakeLists.txt | 7 | ||||
-rw-r--r-- | include/config.h.in | 9 | ||||
-rw-r--r-- | include/glob.h | 20 | ||||
-rw-r--r-- | lib/CMakeLists.txt | 2 | ||||
-rw-r--r-- | lib/compat/CMakeLists.txt | 12 |
5 files changed, 50 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 79b78c4..29ab2c1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,7 +4,14 @@ set(CMAKE_BUILD_TYPE Release) #set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Wno-unused-parameter -Werror") +include_directories(${CMAKE_BINARY_DIR}/generated) + add_subdirectory(lib) + +# Generate config.h +configure_file(${CMAKE_SOURCE_DIR}/include/config.h.in + ${CMAKE_BINARY_DIR}/generated/config.h) + add_executable(uvc-gadget main.c) target_link_libraries(uvc-gadget uvcgadget) install(TARGETS uvc-gadget DESTINATION bin) diff --git a/include/config.h.in b/include/config.h.in new file mode 100644 index 0000000..c968271 --- /dev/null +++ b/include/config.h.in @@ -0,0 +1,9 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ + +#ifndef __UVC_GADGET_CONFIG_H__ +#define __UVC_GADGET_CONFIG_H__ + +#cmakedefine HAVE_DIRENT_H @HAVE_DIRENT_H@ +#cmakedefine HAVE_GLOB @HAVE_GLOB@ + +#endif diff --git a/include/glob.h b/include/glob.h new file mode 100644 index 0000000..d3ddcff --- /dev/null +++ b/include/glob.h @@ -0,0 +1,20 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * glob() compatibility + * + * Copyright (C) 2018 Laurent Pinchart + * + * Contact: Laurent Pinchart <laurent.pinchart@ideasonboard.com> + */ +#ifndef __UVC_GADGET_GLOB_H__ +#define __UVC_GADGET_GLOB_H__ + +#include "config.h" + +#ifdef HAVE_GLOB +#include_next <glob.h> +#else +#include "compat/glob.h" +#endif + +#endif /* __UVC_GADGET_GLOB_H__ */ diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index ca08fd7..eacfb9c 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -1,6 +1,8 @@ file(GLOB SOURCES "*.c" "*.h") file(GLOB HEADERS "../include/uvcgadget/*.h") +add_subdirectory(compat) + add_library(uvcgadget ${SOURCES}) set_target_properties(uvcgadget PROPERTIES PUBLIC_HEADER "${HEADERS}") diff --git a/lib/compat/CMakeLists.txt b/lib/compat/CMakeLists.txt new file mode 100644 index 0000000..5fd6db4 --- /dev/null +++ b/lib/compat/CMakeLists.txt @@ -0,0 +1,12 @@ +include(CheckFunctionExists) +include(CheckIncludeFile) + +check_include_file(dirent.h HAVE_DIRENT_H) + +check_function_exists(glob HAVE_GLOB) +if(NOT HAVE_GLOB) + set(SOURCES "${SOURCES}" + "${CMAKE_CURRENT_SOURCE_DIR}/glob.c" + "${CMAKE_SOURCE_DIR}/include/compat/glob.h" + PARENT_SCOPE) +endif() |