From 4b4004f407a271c7ec4ac8cf2bc0dae5819a5bd9 Mon Sep 17 00:00:00 2001 From: Marius Elvert Date: Wed, 28 Apr 2021 15:51:00 +0200 Subject: [PATCH 01/18] Basic build of libuca using conan --- CMakeLists.txt | 47 +++++-------- bin/CMakeLists.txt | 4 +- bin/tools/CMakeLists.txt | 11 +-- conanfile.py | 32 +++++++++ src/CMakeLists.txt | 141 +++++++++++++++++++++------------------ src/uca-camera.h | 6 +- test/CMakeLists.txt | 6 +- 7 files changed, 135 insertions(+), 112 deletions(-) create mode 100644 conanfile.py diff --git a/CMakeLists.txt b/CMakeLists.txt index 350091a4..f78f3d41 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,14 +1,12 @@ -cmake_minimum_required(VERSION 2.6) - -if (POLICY CMP0053) -cmake_policy(SET CMP0053 OLD) -endif () +cmake_minimum_required(VERSION 3.11) +project(uca C) -if (POLICY CMP0054) -cmake_policy(SET CMP0054 OLD) -endif () +if (NOT EXISTS ${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) + message(FATAL_ERROR "Please run 'conan install' first!") +endif() +include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) -project(uca C) +conan_basic_setup(TARGETS) #{{{ CMake list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") @@ -35,7 +33,7 @@ set(UCA_ABI_VERSION "2") macro(create_enums prefix template_prefix header_list) add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${prefix}.h - COMMAND ${GLIB2_MKENUMS} + COMMAND python ${GLIB2_MKENUMS} ARGS --template ${template_prefix}.h.template ${header_list} > ${CMAKE_CURRENT_BINARY_DIR}/${prefix}.h @@ -44,7 +42,7 @@ macro(create_enums prefix template_prefix header_list) add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${prefix}.c - COMMAND ${GLIB2_MKENUMS} + COMMAND python ${GLIB2_MKENUMS} ARGS --template ${template_prefix}.c.template ${header_list} > ${CMAKE_CURRENT_BINARY_DIR}/${prefix}.c @@ -55,7 +53,7 @@ macro(create_enums prefix template_prefix header_list) endmacro() #}}} #{{{ Configure -include(PkgConfigVars) +#include(PkgConfigVars) include(GNUInstallDirs) set(CMAKE_INSTALL_GIRDIR "${CMAKE_INSTALL_DATAROOTDIR}/gir-1.0") @@ -67,43 +65,28 @@ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/package.sh.in ${CMAKE_CURRENT_BINARY_DIR}/package.sh) #}}} #{{{ Common dependencies -find_package(PkgConfig) find_program(GLIB2_MKENUMS glib-mkenums REQUIRED) -pkg_check_modules(GLIB2 glib-2.0>=2.38 REQUIRED) -pkg_check_modules(GOBJECT2 gobject-2.0>=2.38 REQUIRED) -pkg_check_modules(GMODULE2 gmodule-2.0>=2.38 REQUIRED) -pkg_check_modules(GIO2 gio-2.0>=2.38 REQUIRED) set(GLIB_VERSION_MIN_REQUIRED "GLIB_VERSION_2_38") set(GLIB_VERSION_MAX_ALLOWED "GLIB_VERSION_2_38") link_directories(${GLIB2_LIBRARY_DIRS}) #}}} -#{{{ Common includes -include_directories( - ${CMAKE_CURRENT_SOURCE_DIR}/src - ${GLIB2_INCLUDE_DIRS} - ${GOBJECT2_INCLUDE_DIRS} - ${GMODULE2_INCLUDE_DIRS} - ${GIO2_INCLUDE_DIRS}) -#}}} + #{{{ Common variables -set(UCA_DEPS - ${GLIB2_LIBRARIES} - ${GOBJECT2_LIBRARIES} - ${GMODULE2_LIBRARIES} - ${GIO2_LIBRARIES}) set(UCA_ENUM_HDRS ${CMAKE_CURRENT_SOURCE_DIR}/src/uca-camera.h ${CMAKE_CURRENT_SOURCE_DIR}/plugins/pco/uca-pco-camera.h) #}}} #{{{ Common definitions -add_definitions("-std=c99 -Wall -fPIC") +if (GNU) + add_definitions("-std=c99 -Wall -fPIC") +endif() #}}} #{{{ Subdirectories add_subdirectory(src) -add_subdirectory(plugins) +#add_subdirectory(plugins) add_subdirectory(test) add_subdirectory(bin) #}}} diff --git a/bin/CMakeLists.txt b/bin/CMakeLists.txt index cb2d9207..7f139872 100644 --- a/bin/CMakeLists.txt +++ b/bin/CMakeLists.txt @@ -1,4 +1,2 @@ -cmake_minimum_required(VERSION 2.6) - -add_subdirectory(gui) +#add_subdirectory(gui) add_subdirectory(tools) diff --git a/bin/tools/CMakeLists.txt b/bin/tools/CMakeLists.txt index 3f0044b8..c17a7723 100644 --- a/bin/tools/CMakeLists.txt +++ b/bin/tools/CMakeLists.txt @@ -1,5 +1,3 @@ -cmake_minimum_required(VERSION 2.6) - #{{{ Variables set(libs uca) #}}} @@ -23,11 +21,16 @@ set(BINARIES "benchmark" "gen-doc" "info") foreach (BINARY ${BINARIES}) add_executable(uca-${BINARY} ${BINARY}.c common.c) - target_link_libraries(uca-${BINARY} ${libs}) + target_link_libraries(uca-${BINARY} PUBLIC ${libs}) endforeach () add_executable(uca-grab grab.c common.c) -target_link_libraries(uca-grab ${libs} m) +target_link_libraries(uca-grab PUBLIC ${libs}) + +if (GNU) + target_link_libraries(uca-grab PUBLIC m) +endif() + install(TARGETS uca-benchmark uca-grab uca-gen-doc uca-info RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} diff --git a/conanfile.py b/conanfile.py new file mode 100644 index 00000000..9300e0ff --- /dev/null +++ b/conanfile.py @@ -0,0 +1,32 @@ +from conans import ConanFile, CMake, tools + + +class UcaConan(ConanFile): + name = "libuca" + version = "2.3.0" + license = "MIT" + author = "Marius Elvert marius.elvert@softwareschneiderei.de" + url = "https://github.com/ufo-kit/libuca" + description = "GLib-based C library for unified camera access ." + topics = ("utilities",) + settings = "os", "compiler", "build_type", "arch" + options = {"shared": [True, False]} + default_options = "shared=False" + generators = "cmake" + exports_sources = "src/*", "include/*", "test/*", "bin/*", "CMakeLists.txt", "package.sh.in" + requires = "glib/2.68.1", + + def _configured_cmake(self): + cmake = CMake(self) + cmake.configure(source_folder=".") + return cmake + + def build(self): + self._configured_cmake().build() + + def package(self): + self._configured_cmake().install() + + def package_info(self): + self.cpp_info.libs = ["libuca"] + diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 2d047003..76a6bca1 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,6 +1,3 @@ -cmake_minimum_required(VERSION 2.6) -project(uca C) - #{{{ Sources set(uca_SRCS uca-camera.c @@ -24,26 +21,40 @@ if (CI_INSTALL_PREFIX) endif() #}}} #{{{ Target -include_directories(${CMAKE_CURRENT_BINARY_DIR} - ${CMAKE_CURRENT_SOURCE_DIR}) - -add_library(uca SHARED - ${uca_SRCS} - ${CMAKE_CURRENT_BINARY_DIR}/uca-enums.c) +add_library(uca STATIC + ${uca_SRCS} + ${CMAKE_CURRENT_BINARY_DIR}/uca-enums.c) set_target_properties(uca PROPERTIES - VERSION ${UCA_VERSION_STRING} - SOVERSION ${UCA_ABI_VERSION}) + VERSION ${UCA_VERSION_STRING} + SOVERSION ${UCA_ABI_VERSION}) + +target_include_directories(uca + PUBLIC . + PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) + +target_link_libraries(uca + PUBLIC CONAN_PKG::glib) -target_link_libraries(uca ${UCA_DEPS}) #}}} #{{{ Python -pkg_check_modules(PYTHON python3-embed) - -if (NOT PYTHON_FOUND) - pkg_check_modules(PYTHON python3) -endif () +#TODO: Reenable +#option(WITH_PYTHON_MULTITHREADING "Enable Python multithreading support" ON) +#pkg_check_modules(PYTHON python) +# +#if (PYTHON_FOUND) +# +# if (WITH_PYTHON_MULTITHREADING) +# include_directories(${PYTHON_INCLUDE_DIRS}) +# target_link_libraries(uca ${PYTHON_LIBRARIES}) +# endif () +#endif () +#pkg_check_modules(PYTHON python3-embed) + +#if (NOT PYTHON_FOUND) + # pkg_check_modules(PYTHON python3) +#endif () if (PYTHON_FOUND) option(WITH_PYTHON_MULTITHREADING "Enable Python multithreading support" ON) @@ -56,54 +67,54 @@ endif () #}}} #{{{ GObject introspection -pkg_check_modules(GOBJECT_INTROSPECTION gobject-introspection-1.0) - -if (GOBJECT_INTROSPECTION_FOUND) - option(WITH_GIR "Build introspection files" ON) - - if (WITH_GIR) - pkg_check_variable(gobject-introspection-1.0 g_ir_scanner) - pkg_check_variable(gobject-introspection-1.0 g_ir_compiler) - - set(GIR_PREFIX "Uca-${UCA_ABI_VERSION}.0") - set(GIR_XML "${GIR_PREFIX}.gir") - set(GIR_TYPELIB "${GIR_PREFIX}.typelib") - set(_gir_input) - - foreach(_src ${uca_SRCS} ${uca_HDRS}) - list(APPEND _gir_input "${CMAKE_CURRENT_SOURCE_DIR}/${_src}") - endforeach() - - list(APPEND _gir_input "${CMAKE_CURRENT_BINARY_DIR}/uca-enums.h") - list(APPEND _gir_input "${CMAKE_CURRENT_BINARY_DIR}/uca-enums.c") - - add_custom_command(OUTPUT ${GIR_XML} - COMMAND ${GOBJECT_INTROSPECTION_1.0_G_IR_SCANNER} - --namespace=Uca - --nsversion=${UCA_ABI_VERSION}.0 - --library=uca - --no-libtool - --include=GObject-2.0 - --include=GModule-2.0 - --output ${GIR_XML} - --warn-all - --quiet - ${_gir_input} - DEPENDS ${uca_SRCS} - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) - - add_custom_command(OUTPUT ${GIR_TYPELIB} - COMMAND ${GOBJECT_INTROSPECTION_1.0_G_IR_COMPILER} - -o ${GIR_TYPELIB} - ${GIR_XML} - DEPENDS ${GIR_XML} - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) - - add_custom_target(gir ALL DEPENDS ${GIR_XML} ${GIR_TYPELIB}) - add_dependencies(gir uca) - - endif() -endif() +#pkg_check_modules(GOBJECT_INTROSPECTION gobject-introspection-1.0) +# +#if (GOBJECT_INTROSPECTION_FOUND) +# option(WITH_GIR "Build introspection files" ON) +# +# if (WITH_GIR) +# pkg_check_variable(gobject-introspection-1.0 g_ir_scanner) +# pkg_check_variable(gobject-introspection-1.0 g_ir_compiler) +# +# set(GIR_PREFIX "Uca-${UCA_ABI_VERSION}.0") +# set(GIR_XML "${GIR_PREFIX}.gir") +# set(GIR_TYPELIB "${GIR_PREFIX}.typelib") +# set(_gir_input) +# +# foreach(_src ${uca_SRCS} ${uca_HDRS}) +# list(APPEND _gir_input "${CMAKE_CURRENT_SOURCE_DIR}/${_src}") +# endforeach() +# +# list(APPEND _gir_input "${CMAKE_CURRENT_BINARY_DIR}/uca-enums.h") +# list(APPEND _gir_input "${CMAKE_CURRENT_BINARY_DIR}/uca-enums.c") +# +# add_custom_command(OUTPUT ${GIR_XML} +# COMMAND ${GOBJECT_INTROSPECTION_1.0_G_IR_SCANNER} +# --namespace=Uca +# --nsversion=${UCA_ABI_VERSION}.0 +# --library=uca +# --no-libtool +# --include=GObject-2.0 +# --include=GModule-2.0 +# --output ${GIR_XML} +# --warn-all +# --quiet +# ${_gir_input} +# DEPENDS ${uca_SRCS} +# WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) +# +# add_custom_command(OUTPUT ${GIR_TYPELIB} +# COMMAND ${GOBJECT_INTROSPECTION_1.0_G_IR_COMPILER} +# -o ${GIR_TYPELIB} +# ${GIR_XML} +# DEPENDS ${GIR_XML} +# WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) +# +# add_custom_target(gir ALL DEPENDS ${GIR_XML} ${GIR_TYPELIB}) +# add_dependencies(gir uca) +# +# endif() +#endif() #}}} #{{{ Installation install(TARGETS uca diff --git a/src/uca-camera.h b/src/uca-camera.h index 7fcd632b..438d35b9 100644 --- a/src/uca-camera.h +++ b/src/uca-camera.h @@ -172,13 +172,11 @@ void uca_camera_write (UcaCamera *camera, GError **error); gboolean uca_camera_grab (UcaCamera *camera, gpointer data, - GError **error) - __attribute__((nonnull (2))); + GError **error); gboolean uca_camera_readout (UcaCamera *camera, gpointer data, guint index, - GError **error) - __attribute__((nonnull (2))); + GError **error); void uca_camera_set_grab_func (UcaCamera *camera, UcaCameraGrabFunc func, gpointer user_data); diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 0e8cfadd..952c00a1 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,10 +1,8 @@ -cmake_minimum_required(VERSION 2.6) - configure_file(${CMAKE_CURRENT_SOURCE_DIR}/gtester.xsl ${CMAKE_CURRENT_BINARY_DIR}/gtester.xsl) add_executable(test-mock test-mock.c) add_executable(test-ring-buffer test-ring-buffer.c) -target_link_libraries(test-mock uca ${UCA_DEPS}) -target_link_libraries(test-ring-buffer uca ${UCA_DEPS}) +target_link_libraries(test-mock PUBLIC uca) +target_link_libraries(test-ring-buffer PUBLIC uca) From a0f974b81e34ab3ed805ebb6b453835ac3440e2a Mon Sep 17 00:00:00 2001 From: Marius Elvert Date: Wed, 28 Apr 2021 16:03:09 +0200 Subject: [PATCH 02/18] Copy in the dependency dlls --- conanfile.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/conanfile.py b/conanfile.py index 9300e0ff..e168dedb 100644 --- a/conanfile.py +++ b/conanfile.py @@ -30,3 +30,6 @@ def package(self): def package_info(self): self.cpp_info.libs = ["libuca"] + def imports(self): + self.copy("*.dll", "bin", "bin") + self.copy("*.dylib", "lib", "lib") From d8a014dd6165f897dd481772574a667b6c77daf8 Mon Sep 17 00:00:00 2001 From: Marius Elvert Date: Wed, 28 Apr 2021 16:29:17 +0200 Subject: [PATCH 03/18] Corrected license --- conanfile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conanfile.py b/conanfile.py index e168dedb..10581909 100644 --- a/conanfile.py +++ b/conanfile.py @@ -4,7 +4,7 @@ class UcaConan(ConanFile): name = "libuca" version = "2.3.0" - license = "MIT" + license = "LGPL-2.1" author = "Marius Elvert marius.elvert@softwareschneiderei.de" url = "https://github.com/ufo-kit/libuca" description = "GLib-based C library for unified camera access ." From bce24fcc5efea591d120084ba5f9161fa1f8edbe Mon Sep 17 00:00:00 2001 From: Marius Elvert Date: Wed, 28 Apr 2021 16:40:24 +0200 Subject: [PATCH 04/18] Export the correct library name --- conanfile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conanfile.py b/conanfile.py index 10581909..ab1624d0 100644 --- a/conanfile.py +++ b/conanfile.py @@ -28,7 +28,7 @@ def package(self): self._configured_cmake().install() def package_info(self): - self.cpp_info.libs = ["libuca"] + self.cpp_info.libs = ["uca"] def imports(self): self.copy("*.dll", "bin", "bin") From 1f7058cc2d6316d8e66a243e7a1fdebd9940b830 Mon Sep 17 00:00:00 2001 From: Marcus Zuber Date: Thu, 16 Feb 2023 11:14:10 +0100 Subject: [PATCH 05/18] Fix naming of plugin files for windows --- src/uca-plugin-manager.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/uca-plugin-manager.c b/src/uca-plugin-manager.c index b4c70487..105e2dd2 100644 --- a/src/uca-plugin-manager.c +++ b/src/uca-plugin-manager.c @@ -48,7 +48,11 @@ struct _UcaPluginManagerPrivate { GList *funcs; }; -static const gchar *MODULE_PATTERN = "libuca([A-Za-z0-9]+)"; +#ifdef _WIN32 + static const gchar *MODULE_PATTERN = "uca([A-Za-z0-9]+)"; +#else + static const gchar *MODULE_PATTERN = "libuca([A-Za-z0-9]+)"; +#endif typedef GType (*GetTypeFunc) (void); @@ -199,7 +203,7 @@ find_camera_module_path (GList *search_paths, const gchar *name) GList *paths; #ifdef _WIN32 - modname = g_strdup_printf ("libuca%s.dll", name); + modname = g_strdup_printf ("uca%s.dll", name); #else modname = g_strdup_printf ("libuca%s.so", name); #endif From b9d2059ed9049232da4f9a416f75310bd54f9530 Mon Sep 17 00:00:00 2001 From: Marcus Zuber Date: Tue, 21 Feb 2023 10:54:09 +0100 Subject: [PATCH 06/18] add automatic tests --- .github/workflows/tests.yml | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 .github/workflows/tests.yml diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml new file mode 100644 index 00000000..75aa5625 --- /dev/null +++ b/.github/workflows/tests.yml @@ -0,0 +1,36 @@ +name: libuca tests + +on: + push: + +permissions: + contents: read + +jobs: + build: + strategy: + matrix: + os: [ubuntu-22.04, ubuntu-20.04] + fail-fast: false + runs-on: ${{ matrix.os }} + + steps: + - uses: actions/checkout@v2 + - name: Set up ubuntu ${{ matrix.os }} + run: | + sudo apt install -y libglib2.0-dev cmake gcc gobject-introspection + - name: build + run: | + mkdir build + cd build + cmake .. + make + sudo make install + - name: run test-mock + run: | + pwd + ls + build/test/test-mock + - name: run test-ring-buffer + run: | + build/test/test-ring-buffer \ No newline at end of file From bee69fd4712536c6491ac30fb02d1ffcc54c99d1 Mon Sep 17 00:00:00 2001 From: Marius Elvert Date: Wed, 28 Apr 2021 15:51:00 +0200 Subject: [PATCH 07/18] Basic build of libuca using conan --- CMakeLists.txt | 47 +++++-------- bin/CMakeLists.txt | 4 +- bin/tools/CMakeLists.txt | 11 +-- conanfile.py | 32 +++++++++ src/CMakeLists.txt | 141 +++++++++++++++++++++------------------ src/uca-camera.h | 6 +- test/CMakeLists.txt | 6 +- 7 files changed, 135 insertions(+), 112 deletions(-) create mode 100644 conanfile.py diff --git a/CMakeLists.txt b/CMakeLists.txt index 350091a4..f78f3d41 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,14 +1,12 @@ -cmake_minimum_required(VERSION 2.6) - -if (POLICY CMP0053) -cmake_policy(SET CMP0053 OLD) -endif () +cmake_minimum_required(VERSION 3.11) +project(uca C) -if (POLICY CMP0054) -cmake_policy(SET CMP0054 OLD) -endif () +if (NOT EXISTS ${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) + message(FATAL_ERROR "Please run 'conan install' first!") +endif() +include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) -project(uca C) +conan_basic_setup(TARGETS) #{{{ CMake list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") @@ -35,7 +33,7 @@ set(UCA_ABI_VERSION "2") macro(create_enums prefix template_prefix header_list) add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${prefix}.h - COMMAND ${GLIB2_MKENUMS} + COMMAND python ${GLIB2_MKENUMS} ARGS --template ${template_prefix}.h.template ${header_list} > ${CMAKE_CURRENT_BINARY_DIR}/${prefix}.h @@ -44,7 +42,7 @@ macro(create_enums prefix template_prefix header_list) add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${prefix}.c - COMMAND ${GLIB2_MKENUMS} + COMMAND python ${GLIB2_MKENUMS} ARGS --template ${template_prefix}.c.template ${header_list} > ${CMAKE_CURRENT_BINARY_DIR}/${prefix}.c @@ -55,7 +53,7 @@ macro(create_enums prefix template_prefix header_list) endmacro() #}}} #{{{ Configure -include(PkgConfigVars) +#include(PkgConfigVars) include(GNUInstallDirs) set(CMAKE_INSTALL_GIRDIR "${CMAKE_INSTALL_DATAROOTDIR}/gir-1.0") @@ -67,43 +65,28 @@ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/package.sh.in ${CMAKE_CURRENT_BINARY_DIR}/package.sh) #}}} #{{{ Common dependencies -find_package(PkgConfig) find_program(GLIB2_MKENUMS glib-mkenums REQUIRED) -pkg_check_modules(GLIB2 glib-2.0>=2.38 REQUIRED) -pkg_check_modules(GOBJECT2 gobject-2.0>=2.38 REQUIRED) -pkg_check_modules(GMODULE2 gmodule-2.0>=2.38 REQUIRED) -pkg_check_modules(GIO2 gio-2.0>=2.38 REQUIRED) set(GLIB_VERSION_MIN_REQUIRED "GLIB_VERSION_2_38") set(GLIB_VERSION_MAX_ALLOWED "GLIB_VERSION_2_38") link_directories(${GLIB2_LIBRARY_DIRS}) #}}} -#{{{ Common includes -include_directories( - ${CMAKE_CURRENT_SOURCE_DIR}/src - ${GLIB2_INCLUDE_DIRS} - ${GOBJECT2_INCLUDE_DIRS} - ${GMODULE2_INCLUDE_DIRS} - ${GIO2_INCLUDE_DIRS}) -#}}} + #{{{ Common variables -set(UCA_DEPS - ${GLIB2_LIBRARIES} - ${GOBJECT2_LIBRARIES} - ${GMODULE2_LIBRARIES} - ${GIO2_LIBRARIES}) set(UCA_ENUM_HDRS ${CMAKE_CURRENT_SOURCE_DIR}/src/uca-camera.h ${CMAKE_CURRENT_SOURCE_DIR}/plugins/pco/uca-pco-camera.h) #}}} #{{{ Common definitions -add_definitions("-std=c99 -Wall -fPIC") +if (GNU) + add_definitions("-std=c99 -Wall -fPIC") +endif() #}}} #{{{ Subdirectories add_subdirectory(src) -add_subdirectory(plugins) +#add_subdirectory(plugins) add_subdirectory(test) add_subdirectory(bin) #}}} diff --git a/bin/CMakeLists.txt b/bin/CMakeLists.txt index cb2d9207..7f139872 100644 --- a/bin/CMakeLists.txt +++ b/bin/CMakeLists.txt @@ -1,4 +1,2 @@ -cmake_minimum_required(VERSION 2.6) - -add_subdirectory(gui) +#add_subdirectory(gui) add_subdirectory(tools) diff --git a/bin/tools/CMakeLists.txt b/bin/tools/CMakeLists.txt index 3f0044b8..c17a7723 100644 --- a/bin/tools/CMakeLists.txt +++ b/bin/tools/CMakeLists.txt @@ -1,5 +1,3 @@ -cmake_minimum_required(VERSION 2.6) - #{{{ Variables set(libs uca) #}}} @@ -23,11 +21,16 @@ set(BINARIES "benchmark" "gen-doc" "info") foreach (BINARY ${BINARIES}) add_executable(uca-${BINARY} ${BINARY}.c common.c) - target_link_libraries(uca-${BINARY} ${libs}) + target_link_libraries(uca-${BINARY} PUBLIC ${libs}) endforeach () add_executable(uca-grab grab.c common.c) -target_link_libraries(uca-grab ${libs} m) +target_link_libraries(uca-grab PUBLIC ${libs}) + +if (GNU) + target_link_libraries(uca-grab PUBLIC m) +endif() + install(TARGETS uca-benchmark uca-grab uca-gen-doc uca-info RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} diff --git a/conanfile.py b/conanfile.py new file mode 100644 index 00000000..9300e0ff --- /dev/null +++ b/conanfile.py @@ -0,0 +1,32 @@ +from conans import ConanFile, CMake, tools + + +class UcaConan(ConanFile): + name = "libuca" + version = "2.3.0" + license = "MIT" + author = "Marius Elvert marius.elvert@softwareschneiderei.de" + url = "https://github.com/ufo-kit/libuca" + description = "GLib-based C library for unified camera access ." + topics = ("utilities",) + settings = "os", "compiler", "build_type", "arch" + options = {"shared": [True, False]} + default_options = "shared=False" + generators = "cmake" + exports_sources = "src/*", "include/*", "test/*", "bin/*", "CMakeLists.txt", "package.sh.in" + requires = "glib/2.68.1", + + def _configured_cmake(self): + cmake = CMake(self) + cmake.configure(source_folder=".") + return cmake + + def build(self): + self._configured_cmake().build() + + def package(self): + self._configured_cmake().install() + + def package_info(self): + self.cpp_info.libs = ["libuca"] + diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 2d047003..76a6bca1 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,6 +1,3 @@ -cmake_minimum_required(VERSION 2.6) -project(uca C) - #{{{ Sources set(uca_SRCS uca-camera.c @@ -24,26 +21,40 @@ if (CI_INSTALL_PREFIX) endif() #}}} #{{{ Target -include_directories(${CMAKE_CURRENT_BINARY_DIR} - ${CMAKE_CURRENT_SOURCE_DIR}) - -add_library(uca SHARED - ${uca_SRCS} - ${CMAKE_CURRENT_BINARY_DIR}/uca-enums.c) +add_library(uca STATIC + ${uca_SRCS} + ${CMAKE_CURRENT_BINARY_DIR}/uca-enums.c) set_target_properties(uca PROPERTIES - VERSION ${UCA_VERSION_STRING} - SOVERSION ${UCA_ABI_VERSION}) + VERSION ${UCA_VERSION_STRING} + SOVERSION ${UCA_ABI_VERSION}) + +target_include_directories(uca + PUBLIC . + PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) + +target_link_libraries(uca + PUBLIC CONAN_PKG::glib) -target_link_libraries(uca ${UCA_DEPS}) #}}} #{{{ Python -pkg_check_modules(PYTHON python3-embed) - -if (NOT PYTHON_FOUND) - pkg_check_modules(PYTHON python3) -endif () +#TODO: Reenable +#option(WITH_PYTHON_MULTITHREADING "Enable Python multithreading support" ON) +#pkg_check_modules(PYTHON python) +# +#if (PYTHON_FOUND) +# +# if (WITH_PYTHON_MULTITHREADING) +# include_directories(${PYTHON_INCLUDE_DIRS}) +# target_link_libraries(uca ${PYTHON_LIBRARIES}) +# endif () +#endif () +#pkg_check_modules(PYTHON python3-embed) + +#if (NOT PYTHON_FOUND) + # pkg_check_modules(PYTHON python3) +#endif () if (PYTHON_FOUND) option(WITH_PYTHON_MULTITHREADING "Enable Python multithreading support" ON) @@ -56,54 +67,54 @@ endif () #}}} #{{{ GObject introspection -pkg_check_modules(GOBJECT_INTROSPECTION gobject-introspection-1.0) - -if (GOBJECT_INTROSPECTION_FOUND) - option(WITH_GIR "Build introspection files" ON) - - if (WITH_GIR) - pkg_check_variable(gobject-introspection-1.0 g_ir_scanner) - pkg_check_variable(gobject-introspection-1.0 g_ir_compiler) - - set(GIR_PREFIX "Uca-${UCA_ABI_VERSION}.0") - set(GIR_XML "${GIR_PREFIX}.gir") - set(GIR_TYPELIB "${GIR_PREFIX}.typelib") - set(_gir_input) - - foreach(_src ${uca_SRCS} ${uca_HDRS}) - list(APPEND _gir_input "${CMAKE_CURRENT_SOURCE_DIR}/${_src}") - endforeach() - - list(APPEND _gir_input "${CMAKE_CURRENT_BINARY_DIR}/uca-enums.h") - list(APPEND _gir_input "${CMAKE_CURRENT_BINARY_DIR}/uca-enums.c") - - add_custom_command(OUTPUT ${GIR_XML} - COMMAND ${GOBJECT_INTROSPECTION_1.0_G_IR_SCANNER} - --namespace=Uca - --nsversion=${UCA_ABI_VERSION}.0 - --library=uca - --no-libtool - --include=GObject-2.0 - --include=GModule-2.0 - --output ${GIR_XML} - --warn-all - --quiet - ${_gir_input} - DEPENDS ${uca_SRCS} - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) - - add_custom_command(OUTPUT ${GIR_TYPELIB} - COMMAND ${GOBJECT_INTROSPECTION_1.0_G_IR_COMPILER} - -o ${GIR_TYPELIB} - ${GIR_XML} - DEPENDS ${GIR_XML} - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) - - add_custom_target(gir ALL DEPENDS ${GIR_XML} ${GIR_TYPELIB}) - add_dependencies(gir uca) - - endif() -endif() +#pkg_check_modules(GOBJECT_INTROSPECTION gobject-introspection-1.0) +# +#if (GOBJECT_INTROSPECTION_FOUND) +# option(WITH_GIR "Build introspection files" ON) +# +# if (WITH_GIR) +# pkg_check_variable(gobject-introspection-1.0 g_ir_scanner) +# pkg_check_variable(gobject-introspection-1.0 g_ir_compiler) +# +# set(GIR_PREFIX "Uca-${UCA_ABI_VERSION}.0") +# set(GIR_XML "${GIR_PREFIX}.gir") +# set(GIR_TYPELIB "${GIR_PREFIX}.typelib") +# set(_gir_input) +# +# foreach(_src ${uca_SRCS} ${uca_HDRS}) +# list(APPEND _gir_input "${CMAKE_CURRENT_SOURCE_DIR}/${_src}") +# endforeach() +# +# list(APPEND _gir_input "${CMAKE_CURRENT_BINARY_DIR}/uca-enums.h") +# list(APPEND _gir_input "${CMAKE_CURRENT_BINARY_DIR}/uca-enums.c") +# +# add_custom_command(OUTPUT ${GIR_XML} +# COMMAND ${GOBJECT_INTROSPECTION_1.0_G_IR_SCANNER} +# --namespace=Uca +# --nsversion=${UCA_ABI_VERSION}.0 +# --library=uca +# --no-libtool +# --include=GObject-2.0 +# --include=GModule-2.0 +# --output ${GIR_XML} +# --warn-all +# --quiet +# ${_gir_input} +# DEPENDS ${uca_SRCS} +# WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) +# +# add_custom_command(OUTPUT ${GIR_TYPELIB} +# COMMAND ${GOBJECT_INTROSPECTION_1.0_G_IR_COMPILER} +# -o ${GIR_TYPELIB} +# ${GIR_XML} +# DEPENDS ${GIR_XML} +# WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) +# +# add_custom_target(gir ALL DEPENDS ${GIR_XML} ${GIR_TYPELIB}) +# add_dependencies(gir uca) +# +# endif() +#endif() #}}} #{{{ Installation install(TARGETS uca diff --git a/src/uca-camera.h b/src/uca-camera.h index 7fcd632b..438d35b9 100644 --- a/src/uca-camera.h +++ b/src/uca-camera.h @@ -172,13 +172,11 @@ void uca_camera_write (UcaCamera *camera, GError **error); gboolean uca_camera_grab (UcaCamera *camera, gpointer data, - GError **error) - __attribute__((nonnull (2))); + GError **error); gboolean uca_camera_readout (UcaCamera *camera, gpointer data, guint index, - GError **error) - __attribute__((nonnull (2))); + GError **error); void uca_camera_set_grab_func (UcaCamera *camera, UcaCameraGrabFunc func, gpointer user_data); diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 0e8cfadd..952c00a1 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,10 +1,8 @@ -cmake_minimum_required(VERSION 2.6) - configure_file(${CMAKE_CURRENT_SOURCE_DIR}/gtester.xsl ${CMAKE_CURRENT_BINARY_DIR}/gtester.xsl) add_executable(test-mock test-mock.c) add_executable(test-ring-buffer test-ring-buffer.c) -target_link_libraries(test-mock uca ${UCA_DEPS}) -target_link_libraries(test-ring-buffer uca ${UCA_DEPS}) +target_link_libraries(test-mock PUBLIC uca) +target_link_libraries(test-ring-buffer PUBLIC uca) From e6433cbc140bd851c8c55fe6c4f2da3f4e790ab2 Mon Sep 17 00:00:00 2001 From: Marius Elvert Date: Wed, 28 Apr 2021 16:03:09 +0200 Subject: [PATCH 08/18] Copy in the dependency dlls --- conanfile.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/conanfile.py b/conanfile.py index 9300e0ff..e168dedb 100644 --- a/conanfile.py +++ b/conanfile.py @@ -30,3 +30,6 @@ def package(self): def package_info(self): self.cpp_info.libs = ["libuca"] + def imports(self): + self.copy("*.dll", "bin", "bin") + self.copy("*.dylib", "lib", "lib") From e5307ad28fdb19089348bcc86dd27c7778580fef Mon Sep 17 00:00:00 2001 From: Marius Elvert Date: Wed, 28 Apr 2021 16:29:17 +0200 Subject: [PATCH 09/18] Corrected license --- conanfile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conanfile.py b/conanfile.py index e168dedb..10581909 100644 --- a/conanfile.py +++ b/conanfile.py @@ -4,7 +4,7 @@ class UcaConan(ConanFile): name = "libuca" version = "2.3.0" - license = "MIT" + license = "LGPL-2.1" author = "Marius Elvert marius.elvert@softwareschneiderei.de" url = "https://github.com/ufo-kit/libuca" description = "GLib-based C library for unified camera access ." From 226d2981a8523c49f7e4acbc5299af54b843baf4 Mon Sep 17 00:00:00 2001 From: Marius Elvert Date: Wed, 28 Apr 2021 16:40:24 +0200 Subject: [PATCH 10/18] Export the correct library name --- conanfile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conanfile.py b/conanfile.py index 10581909..ab1624d0 100644 --- a/conanfile.py +++ b/conanfile.py @@ -28,7 +28,7 @@ def package(self): self._configured_cmake().install() def package_info(self): - self.cpp_info.libs = ["libuca"] + self.cpp_info.libs = ["uca"] def imports(self): self.copy("*.dll", "bin", "bin") From b468b0478bbc53a14092a612cf83b062fe3e039b Mon Sep 17 00:00:00 2001 From: Marcus Zuber Date: Thu, 16 Feb 2023 11:14:10 +0100 Subject: [PATCH 11/18] Fix naming of plugin files for windows --- src/uca-plugin-manager.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/uca-plugin-manager.c b/src/uca-plugin-manager.c index b4c70487..105e2dd2 100644 --- a/src/uca-plugin-manager.c +++ b/src/uca-plugin-manager.c @@ -48,7 +48,11 @@ struct _UcaPluginManagerPrivate { GList *funcs; }; -static const gchar *MODULE_PATTERN = "libuca([A-Za-z0-9]+)"; +#ifdef _WIN32 + static const gchar *MODULE_PATTERN = "uca([A-Za-z0-9]+)"; +#else + static const gchar *MODULE_PATTERN = "libuca([A-Za-z0-9]+)"; +#endif typedef GType (*GetTypeFunc) (void); @@ -199,7 +203,7 @@ find_camera_module_path (GList *search_paths, const gchar *name) GList *paths; #ifdef _WIN32 - modname = g_strdup_printf ("libuca%s.dll", name); + modname = g_strdup_printf ("uca%s.dll", name); #else modname = g_strdup_printf ("libuca%s.so", name); #endif From 4d24d769fcc485bafbaa73dbe05985205a122994 Mon Sep 17 00:00:00 2001 From: Marcus Zuber Date: Tue, 21 Feb 2023 11:31:49 +0100 Subject: [PATCH 12/18] adjust tests for conan --- .github/workflows/tests.yml | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 75aa5625..46cd644c 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -10,22 +10,24 @@ jobs: build: strategy: matrix: - os: [ubuntu-22.04, ubuntu-20.04] + os: [ubuntu-22.04, ubuntu-20.04, windows-latest] fail-fast: false runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v2 - - name: Set up ubuntu ${{ matrix.os }} - run: | - sudo apt install -y libglib2.0-dev cmake gcc gobject-introspection + - name: get conan + uses: turtlebrowser/get-conan@v1.0 + - name: create conan profile + run: conan profile new default --detect - name: build run: | mkdir build cd build + conan install .. --build missing cmake .. - make - sudo make install + cmake --build . + cmake --install . - name: run test-mock run: | pwd From 9f7e4e7785b03f164ccaaa4d787be91e0016f71c Mon Sep 17 00:00:00 2001 From: Marcus Zuber Date: Tue, 21 Feb 2023 13:39:35 +0100 Subject: [PATCH 13/18] remove external trigger from mock --- CMakeLists.txt | 2 +- plugins/mock/uca-mock-camera.c | 15 --------------- 2 files changed, 1 insertion(+), 16 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f78f3d41..0d811d8d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -86,7 +86,7 @@ endif() #}}} #{{{ Subdirectories add_subdirectory(src) -#add_subdirectory(plugins) +add_subdirectory(plugins) add_subdirectory(test) add_subdirectory(bin) #}}} diff --git a/plugins/mock/uca-mock-camera.c b/plugins/mock/uca-mock-camera.c index 8d7aed5d..e49ff3c6 100644 --- a/plugins/mock/uca-mock-camera.c +++ b/plugins/mock/uca-mock-camera.c @@ -19,7 +19,6 @@ #include #include #include -#include #include "uca-mock-camera.h" #define UCA_MOCK_CAMERA_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), UCA_TYPE_MOCK_CAMERA, UcaMockCameraPrivate)) @@ -262,13 +261,6 @@ mock_grab_func(gpointer data) return NULL; } -static void -handle_sigusr1 (int signum) -{ - g_mutex_lock (&signal_mutex); - g_cond_signal (&signal_cond); - g_mutex_unlock (&signal_mutex); -} static void uca_mock_camera_start_recording(UcaCamera *camera, GError **error) @@ -278,7 +270,6 @@ uca_mock_camera_start_recording(UcaCamera *camera, GError **error) g_return_if_fail(UCA_IS_MOCK_CAMERA(camera)); priv = UCA_MOCK_CAMERA_GET_PRIVATE(camera); - signal (SIGUSR1, handle_sigusr1); /* TODO: check that roi_x + roi_width < priv->width */ priv->dummy_data = (guint8 *) g_malloc0(priv->roi_width * priv->roi_height * priv->bytes); @@ -356,12 +347,6 @@ uca_mock_camera_grab (UcaCamera *camera, gpointer data, GError **error) if (trigger_source == UCA_CAMERA_TRIGGER_SOURCE_SOFTWARE) g_free (g_async_queue_pop (priv->trigger_queue)); - if (trigger_source == UCA_CAMERA_TRIGGER_SOURCE_EXTERNAL) { - /* wait for signal to arrive */ - g_mutex_lock (&signal_mutex); - g_cond_wait (&signal_cond, &signal_mutex); - g_mutex_unlock (&signal_mutex); - } g_usleep (G_USEC_PER_SEC * exposure_time); From 602ea134b8acd06dc693a6f24372f04eed10eeae Mon Sep 17 00:00:00 2001 From: Marcus Zuber Date: Tue, 21 Feb 2023 14:02:03 +0100 Subject: [PATCH 14/18] fix mock link for windows --- plugins/mock/CMakeLists.txt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/plugins/mock/CMakeLists.txt b/plugins/mock/CMakeLists.txt index 48a11beb..8236bbd5 100644 --- a/plugins/mock/CMakeLists.txt +++ b/plugins/mock/CMakeLists.txt @@ -13,7 +13,10 @@ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../package-plugin.sh.in add_library(ucamock SHARED uca-mock-camera.c) -target_link_libraries(ucamock uca m ${UCA_DEPS}) +target_link_libraries(ucamock uca ${UCA_DEPS}) +if (NOT WIN32) + target_link_libraries(ucamock m) +endif() install(TARGETS ucamock LIBRARY DESTINATION ${CMAKE_INSTALL_PLUGINDIR} From 8bd31dcc848b2b6641a3071b01389e574042fae0 Mon Sep 17 00:00:00 2001 From: Marcus Zuber Date: Tue, 21 Feb 2023 14:26:44 +0100 Subject: [PATCH 15/18] fix tests.yml for windows --- .github/workflows/tests.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 46cd644c..b7cf8a69 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -31,8 +31,8 @@ jobs: - name: run test-mock run: | pwd - ls - build/test/test-mock + dir + build\test\test-mock.exe - name: run test-ring-buffer run: | - build/test/test-ring-buffer \ No newline at end of file + build\test\test-ring-buffer \ No newline at end of file From 5958a7650aae7357125e69a3b88afe45ee9e73ff Mon Sep 17 00:00:00 2001 From: Marcus Zuber Date: Tue, 21 Feb 2023 14:47:57 +0100 Subject: [PATCH 16/18] fix tests.yml for windows --- .github/workflows/tests.yml | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index b7cf8a69..3dfaa68a 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -28,11 +28,14 @@ jobs: cmake .. cmake --build . cmake --install . + - name: build + uses: actions/upload-artifact@v3 + with: + name: build_folder + path: build - name: run test-mock run: | - pwd - dir - build\test\test-mock.exe + build\bin\test-mock.exe - name: run test-ring-buffer run: | - build\test\test-ring-buffer \ No newline at end of file + build\bin\test-ring-buffer \ No newline at end of file From 590e21b94075b44771b2ebe551bae10773ea266f Mon Sep 17 00:00:00 2001 From: Marcus Zuber Date: Mon, 13 Mar 2023 10:37:18 +0100 Subject: [PATCH 17/18] Build libuca lib shared --- .github/workflows/tests.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 3dfaa68a..b7b29d2c 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -24,7 +24,7 @@ jobs: run: | mkdir build cd build - conan install .. --build missing + conan install .. -o libuca:shared=True --build missing cmake .. cmake --build . cmake --install . @@ -38,4 +38,4 @@ jobs: build\bin\test-mock.exe - name: run test-ring-buffer run: | - build\bin\test-ring-buffer \ No newline at end of file + build\bin\test-ring-buffer From 2f8e8595dcd06943a886ec59cc183313300c8be4 Mon Sep 17 00:00:00 2001 From: Marcus Zuber Date: Mon, 13 Mar 2023 10:39:29 +0100 Subject: [PATCH 18/18] keep conan 1.59 --- .github/workflows/tests.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index b7b29d2c..a98e6213 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -19,7 +19,9 @@ jobs: - name: get conan uses: turtlebrowser/get-conan@v1.0 - name: create conan profile - run: conan profile new default --detect + run: | + pip install --force-reinstall -v "conan==1.59.0" + conan profile new default --detect - name: build run: | mkdir build