v4l-utils: merge with edid-decode
authorDaniel Golle <[email protected]>
Fri, 4 Jul 2025 15:20:37 +0000 (16:20 +0100)
committerDaniel Golle <[email protected]>
Sun, 13 Jul 2025 11:51:27 +0000 (12:51 +0100)
Make PKG_NAME and folder name consistent (v4l-utils) and build
edid-decode as subpackage. Unfortunately LTO breaks build of some
of the utils, so disable it.

Signed-off-by: Daniel Golle <[email protected]>
libs/libv4l/Makefile [deleted file]
libs/libv4l/patches/010-intl.patch [deleted file]
libs/libv4l/patches/020-musl.patch [deleted file]
libs/v4l-utils/Makefile [new file with mode: 0644]
libs/v4l-utils/patches/020-musl.patch [new file with mode: 0644]

diff --git a/libs/libv4l/Makefile b/libs/libv4l/Makefile
deleted file mode 100644 (file)
index 7f23f4d..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=v4l-utils
-PKG_VERSION:=1.28.0
-PKG_RELEASE:=1
-
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
-PKG_SOURCE_URL:=https://www.linuxtv.org/downloads/v4l-utils
-PKG_HASH:=fcb1ac1f22c1673e932b1779384f61cd6b7dd76e0e500bfb57e7a598588980b4
-
-PKG_MAINTAINER:=Ted Hess <[email protected]>
-
-PKG_BUILD_FLAGS:=no-mips16
-
-PKG_BUILD_DEPENDS:=!USE_GLIBC:argp-standalone
-PKG_CONFIG_DEPENDS:= \
-       CONFIG_BUILD_NLS \
-       CONFIG_PACKAGE_v4l-utils
-
-include $(INCLUDE_DIR)/package.mk
-include $(INCLUDE_DIR)/meson.mk
-include $(INCLUDE_DIR)/nls.mk
-
-define Package/libv4l/Default
-  TITLE:=Video 4 Linux
-  URL:=https://www.linuxtv.org/
-endef
-
-define Package/libv4l/Default/description
-  libv4l is a collection of libraries which adds a thin abstraction layer on
-  top of video4linux2 devices. The purpose of this (thin) layer is to make it
-  easy for application writers to support a wide variety of devices without
-  having to write separate code for different devices in the same class. libv4l
-  consists of 3 different libraries: libv4lconvert, libv4l1 and libv4l2.
-
-  libv4l1 offers the (deprecated) v4l1 API on top of v4l2 devices, independent
-  of the drivers for those devices supporting v4l1 compatibility (which many
-  v4l2 drivers do not).
-
-  libv4l2 offers the v4l2 API on top of v4l2 devices, while adding for the
-  application transparent libv4lconvert conversion where necessary.
-endef
-
-define Package/libv4l
-  $(call Package/libv4l/Default)
-  SECTION:=libs
-  CATEGORY:=Libraries
-  TITLE+= wrapper libraries
-  DEPENDS:=$(ICONV_DEPENDS)
-  LICENSE:=LGPL-2.1-or-later
-  LICENSE_FILES:=COPYING.libv4l
-endef
-
-define Package/libv4l/description
-  $(call Package/libv4l/Default/description)
-endef
-
-define Package/v4l-utils
-  $(call Package/libv4l/Default)
-  SECTION:=utils
-  CATEGORY:=Utilities
-  TITLE+= utilities
-  DEPENDS:=+libudev +libv4l +libstdcpp $(ICONV_DEPENDS) $(INTL_DEPENDS)
-  LICENSE:=GPL-2.0-or-later
-  LICENSE_FILES:=COPYING
-endef
-
-define Package/v4l-utils/description
-  $(call Package/libv4l/Default/description)
-  This package contains the video4linux utilities.
-endef
-
-MESON_ARGS += \
-       -Db_lto=true \
-       -Ddefault_library=both \
-       -Dbpf=disabled \
-       -Dgconv=disabled \
-       -Djpeg=disabled \
-       -Dlibdvbv5=disabled \
-       -Dqv4l2=disabled \
-       -Dqvidcap=disabled \
-       -Dv4l-utils=$(if $(CONFIG_PACKAGE_v4l-utils),true,false) \
-       -Ddoxygen-doc=disabled
-
-TARGET_LDFLAGS += -Wl,--gc-sections
-
-define Build/InstallDev
-       $(INSTALL_DIR) $(1)/usr/include
-       $(CP) $(PKG_INSTALL_DIR)/usr/include/*.h $(1)/usr/include/
-       $(INSTALL_DIR) $(1)/usr/lib
-       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libv4l{1,2,convert,2rds}.{a,so*} $(1)/usr/lib/
-       $(INSTALL_DIR) $(1)/usr/lib/pkgconfig
-       $(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/libv4l{1,2,convert,2rds}.pc $(1)/usr/lib/pkgconfig/
-endef
-
-define Package/libv4l/install
-       $(INSTALL_DIR) $(1)/usr/lib
-       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libv4l{1,2,convert,2rds}.so.* $(1)/usr/lib/
-       $(INSTALL_DIR) $(1)/usr/lib/libv4l
-       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libv4l/v4l{1compat,2convert}.so $(1)/usr/lib/libv4l/
-endef
-
-define Package/v4l-utils/install
-       $(INSTALL_DIR) $(1)/etc
-       $(CP) $(PKG_INSTALL_DIR)/etc/rc_maps.cfg $(1)/etc/
-       $(CP) $(PKG_INSTALL_DIR)/etc/rc_keymaps $(1)/etc/
-       $(INSTALL_DIR) $(1)/usr/bin
-       $(CP) $(PKG_INSTALL_DIR)/usr/bin/{rds,media,cx18,ivtv}-ctl $(1)/usr/bin/
-       $(CP) $(PKG_INSTALL_DIR)/usr/bin/decode_tm6000 $(1)/usr/bin/
-       $(CP) $(PKG_INSTALL_DIR)/usr/bin/ir-{ctl,keytable} $(1)/usr/bin/
-       $(CP) $(PKG_INSTALL_DIR)/usr/bin/v4l2-{compliance,ctl,sysfs-path} $(1)/usr/bin/
-       $(CP) $(PKG_INSTALL_DIR)/usr/bin/cec-{compliance,ctl,follower} $(1)/usr/bin/
-endef
-
-$(eval $(call BuildPackage,libv4l))
-$(eval $(call BuildPackage,v4l-utils))
diff --git a/libs/libv4l/patches/010-intl.patch b/libs/libv4l/patches/010-intl.patch
deleted file mode 100644 (file)
index b541f46..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
---- a/lib/libdvbv5/meson.build
-+++ b/lib/libdvbv5/meson.build
-@@ -124,6 +124,7 @@ install_headers(libdvbv5_api, subdir: 'l
- libdvbv5_deps = [
-     dep_iconv,
-+    dep_intl,
-     dep_libm,
-     dep_librt,
-     dep_libudev,
---- a/meson.build
-+++ b/meson.build
-@@ -202,6 +202,8 @@ size_t iconv (iconv_t cd, char * *inbuf,
-     endif
- endif
-+dep_intl = dependency('intl')
-+
- have_gconv = cc.has_header('gconv.h', required : get_option('gconv'))
- # Detect system gconv directory
---- a/utils/dvb/meson.build
-+++ b/utils/dvb/meson.build
-@@ -1,5 +1,6 @@
- dvb_common_deps =  [
-     dep_argp,
-+    dep_intl,
-     dep_libdvbv5,
-     dep_libudev,
-     dep_threads,
---- a/utils/ir-ctl/meson.build
-+++ b/utils/ir-ctl/meson.build
-@@ -12,6 +12,7 @@ ir_ctl_sources = files(
- ir_ctl_deps =  [
-     dep_argp,
-+    dep_intl,
- ]
- ir_ctl = executable('ir-ctl',
---- a/utils/keytable/meson.build
-+++ b/utils/keytable/meson.build
-@@ -11,6 +11,7 @@ ir_keytable_sources = files(
- ir_keytable_deps = [
-     dep_argp,
-+    dep_intl,
- ]
- ir_keytable_system_dir = udevdir
diff --git a/libs/libv4l/patches/020-musl.patch b/libs/libv4l/patches/020-musl.patch
deleted file mode 100644 (file)
index b96113e..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
---- a/utils/v4l2-tracer/retrace.cpp
-+++ b/utils/v4l2-tracer/retrace.cpp
-@@ -10,10 +10,7 @@ extern struct retrace_context ctx_retrac
- void retrace_mmap(json_object *mmap_obj, bool is_mmap64)
- {
-       json_object *mmap_args_obj;
--      if (is_mmap64)
--              json_object_object_get_ex(mmap_obj, "mmap64", &mmap_args_obj);
--      else
--              json_object_object_get_ex(mmap_obj, "mmap", &mmap_args_obj);
-+      json_object_object_get_ex(mmap_obj, "mmap", &mmap_args_obj);
-       json_object *len_obj;
-       json_object_object_get_ex(mmap_args_obj, "len", &len_obj);
-@@ -46,10 +43,7 @@ void retrace_mmap(json_object *mmap_obj,
-               return;
-       void *buf_address_retrace_pointer = nullptr;
--      if (is_mmap64)
--              buf_address_retrace_pointer = mmap64(0, len, prot, flags, fd_retrace, off);
--      else
--              buf_address_retrace_pointer = mmap(0, len, prot, flags, fd_retrace, off);
-+      buf_address_retrace_pointer = mmap(0, len, prot, flags, fd_retrace, off);
-       if (buf_address_retrace_pointer == MAP_FAILED) {
-               if (is_mmap64)
-@@ -116,10 +110,7 @@ void retrace_open(json_object *jobj, boo
-       int fd_trace = json_object_get_int(fd_trace_obj);
-       json_object *open_args_obj;
--      if (is_open64)
--              json_object_object_get_ex(jobj, "open64", &open_args_obj);
--      else
--              json_object_object_get_ex(jobj, "open", &open_args_obj);
-+      json_object_object_get_ex(jobj, "open", &open_args_obj);
-       json_object *path_obj;
-       std::string path_trace;
-@@ -148,10 +139,7 @@ void retrace_open(json_object *jobj, boo
-               mode = s2number(json_object_get_string(mode_obj));
-       int fd_retrace = 0;
--      if (is_open64)
--              fd_retrace = open64(path_retrace.c_str(), oflag, mode);
--      else
--              fd_retrace = open(path_retrace.c_str(), oflag, mode);
-+      fd_retrace = open(path_retrace.c_str(), oflag, mode);
-       if (fd_retrace <= 0) {
-               line_info("\n\tCan't open: %s", path_retrace.c_str());
diff --git a/libs/v4l-utils/Makefile b/libs/v4l-utils/Makefile
new file mode 100644 (file)
index 0000000..3e4d091
--- /dev/null
@@ -0,0 +1,139 @@
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=v4l-utils
+PKG_VERSION:=1.30.1
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
+PKG_SOURCE_URL:=https://www.linuxtv.org/downloads/v4l-utils
+PKG_HASH:=c1cf549c2ec3cf39eb5ec7bf15731349e61b26a21b5e963922db422333bae197
+
+PKG_MAINTAINER:=Ted Hess <[email protected]>
+
+PKG_BUILD_FLAGS:=no-mips16
+
+PKG_BUILD_DEPENDS:=!USE_GLIBC:argp-standalone
+PKG_CONFIG_DEPENDS:= \
+       CONFIG_BUILD_NLS \
+       CONFIG_PACKAGE_v4l-utils
+
+include $(INCLUDE_DIR)/package.mk
+include $(INCLUDE_DIR)/meson.mk
+include $(INCLUDE_DIR)/nls.mk
+
+define Package/libv4l/Default
+  TITLE:=Video 4 Linux
+  URL:=https://www.linuxtv.org/
+endef
+
+define Package/libv4l/Default/description
+  libv4l is a collection of libraries which adds a thin abstraction layer on
+  top of video4linux2 devices. The purpose of this (thin) layer is to make it
+  easy for application writers to support a wide variety of devices without
+  having to write separate code for different devices in the same class. libv4l
+  consists of 3 different libraries: libv4lconvert, libv4l1 and libv4l2.
+
+  libv4l1 offers the (deprecated) v4l1 API on top of v4l2 devices, independent
+  of the drivers for those devices supporting v4l1 compatibility (which many
+  v4l2 drivers do not).
+
+  libv4l2 offers the v4l2 API on top of v4l2 devices, while adding for the
+  application transparent libv4lconvert conversion where necessary.
+endef
+
+define Package/libv4l
+  $(call Package/libv4l/Default)
+  SECTION:=libs
+  CATEGORY:=Libraries
+  TITLE+= wrapper libraries
+  DEPENDS:=$(ICONV_DEPENDS)
+  LICENSE:=LGPL-2.1-or-later
+  LICENSE_FILES:=COPYING.libv4l
+endef
+
+define Package/libv4l/description
+  $(call Package/libv4l/Default/description)
+endef
+
+define Package/v4l-utils
+  $(call Package/libv4l/Default)
+  SECTION:=utils
+  CATEGORY:=Utilities
+  TITLE+= utilities
+  DEPENDS:=+libudev +libv4l +libstdcpp $(ICONV_DEPENDS) $(INTL_DEPENDS)
+  LICENSE:=GPL-2.0-or-later
+  LICENSE_FILES:=COPYING
+endef
+
+define Package/v4l-utils/description
+  $(call Package/libv4l/Default/description)
+  This package contains the video4linux utilities.
+endef
+
+define Package/edid-decode
+  $(call Package/libv4l/Default)
+  SECTION:=utils
+  CATEGORY:=Utilities
+  TITLE:=EDID decode
+  DEPENDS:=+libstdcpp
+endef
+
+define Package/edid-decode/description
+ Display EDID decoder application
+endef
+
+MESON_ARGS += \
+       -Db_lto=false \
+       -Ddefault_library=both \
+       -Dbpf=disabled \
+       -Dgconv=disabled \
+       -Djpeg=disabled \
+       -Dlibdvbv5=disabled \
+       -Dqv4l2=disabled \
+       -Dqvidcap=disabled \
+       -Dv4l-utils=$(if $(CONFIG_PACKAGE_v4l-utils)$(CONFIG_PACKAGE_edid-decode),true,false) \
+       -Ddoxygen-doc=disabled
+
+TARGET_LDFLAGS += -Wl,--gc-sections
+
+define Build/InstallDev
+       $(INSTALL_DIR) $(1)/usr/include
+       $(CP) $(PKG_INSTALL_DIR)/usr/include/*.h $(1)/usr/include/
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libv4l{1,2,convert,2rds}.{a,so*} $(1)/usr/lib/
+       $(INSTALL_DIR) $(1)/usr/lib/pkgconfig
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/libv4l{1,2,convert,2rds}.pc $(1)/usr/lib/pkgconfig/
+endef
+
+define Package/libv4l/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libv4l{1,2,convert,2rds}.so.* $(1)/usr/lib/
+       $(INSTALL_DIR) $(1)/usr/lib/libv4l
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libv4l/v4l{1compat,2convert}.so $(1)/usr/lib/libv4l/
+endef
+
+define Package/v4l-utils/install
+       $(INSTALL_DIR) $(1)/etc
+       $(CP) $(PKG_INSTALL_DIR)/etc/rc_maps.cfg $(1)/etc/
+       $(CP) $(PKG_INSTALL_DIR)/etc/rc_keymaps $(1)/etc/
+       $(INSTALL_DIR) $(1)/usr/bin
+       $(CP) $(PKG_INSTALL_DIR)/usr/bin/{rds,media,cx18,ivtv}-ctl $(1)/usr/bin/
+       $(CP) $(PKG_INSTALL_DIR)/usr/bin/decode_tm6000 $(1)/usr/bin/
+       $(CP) $(PKG_INSTALL_DIR)/usr/bin/ir-{ctl,keytable} $(1)/usr/bin/
+       $(CP) $(PKG_INSTALL_DIR)/usr/bin/v4l2-{compliance,ctl,sysfs-path} $(1)/usr/bin/
+       $(CP) $(PKG_INSTALL_DIR)/usr/bin/cec-{compliance,ctl,follower} $(1)/usr/bin/
+endef
+
+define Package/edid-decode/install
+       $(INSTALL_DIR) $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/edid-decode $(1)/usr/bin/
+endef
+
+$(eval $(call BuildPackage,libv4l))
+$(eval $(call BuildPackage,v4l-utils))
+$(eval $(call BuildPackage,edid-decode))
diff --git a/libs/v4l-utils/patches/020-musl.patch b/libs/v4l-utils/patches/020-musl.patch
new file mode 100644 (file)
index 0000000..b96113e
--- /dev/null
@@ -0,0 +1,50 @@
+--- a/utils/v4l2-tracer/retrace.cpp
++++ b/utils/v4l2-tracer/retrace.cpp
+@@ -10,10 +10,7 @@ extern struct retrace_context ctx_retrac
+ void retrace_mmap(json_object *mmap_obj, bool is_mmap64)
+ {
+       json_object *mmap_args_obj;
+-      if (is_mmap64)
+-              json_object_object_get_ex(mmap_obj, "mmap64", &mmap_args_obj);
+-      else
+-              json_object_object_get_ex(mmap_obj, "mmap", &mmap_args_obj);
++      json_object_object_get_ex(mmap_obj, "mmap", &mmap_args_obj);
+       json_object *len_obj;
+       json_object_object_get_ex(mmap_args_obj, "len", &len_obj);
+@@ -46,10 +43,7 @@ void retrace_mmap(json_object *mmap_obj,
+               return;
+       void *buf_address_retrace_pointer = nullptr;
+-      if (is_mmap64)
+-              buf_address_retrace_pointer = mmap64(0, len, prot, flags, fd_retrace, off);
+-      else
+-              buf_address_retrace_pointer = mmap(0, len, prot, flags, fd_retrace, off);
++      buf_address_retrace_pointer = mmap(0, len, prot, flags, fd_retrace, off);
+       if (buf_address_retrace_pointer == MAP_FAILED) {
+               if (is_mmap64)
+@@ -116,10 +110,7 @@ void retrace_open(json_object *jobj, boo
+       int fd_trace = json_object_get_int(fd_trace_obj);
+       json_object *open_args_obj;
+-      if (is_open64)
+-              json_object_object_get_ex(jobj, "open64", &open_args_obj);
+-      else
+-              json_object_object_get_ex(jobj, "open", &open_args_obj);
++      json_object_object_get_ex(jobj, "open", &open_args_obj);
+       json_object *path_obj;
+       std::string path_trace;
+@@ -148,10 +139,7 @@ void retrace_open(json_object *jobj, boo
+               mode = s2number(json_object_get_string(mode_obj));
+       int fd_retrace = 0;
+-      if (is_open64)
+-              fd_retrace = open64(path_retrace.c_str(), oflag, mode);
+-      else
+-              fd_retrace = open(path_retrace.c_str(), oflag, mode);
++      fd_retrace = open(path_retrace.c_str(), oflag, mode);
+       if (fd_retrace <= 0) {
+               line_info("\n\tCan't open: %s", path_retrace.c_str());