summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Elder <paul.elder@ideasonboard.com>2018-06-26 23:22:25 +0900
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2018-07-31 15:56:48 +0300
commit6a6e9d22b338bb2c290b7c7fd0ae434ad13232d9 (patch)
tree9f9a2a1d0f12881acc0f46e93a246eb90f39daba
parent35a4212180272b5dd648b99c07a692aab19a5e67 (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.txt7
-rw-r--r--include/config.h.in9
-rw-r--r--include/glob.h20
-rw-r--r--lib/CMakeLists.txt2
-rw-r--r--lib/compat/CMakeLists.txt12
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()