public inbox for linux-media@vger.kernel.org
 help / color / mirror / Atom feed
From: Mauro Carvalho Chehab <mchehab@redhat.com>
To: Hans Verkuil <hverkuil@xs4all.nl>
Cc: linux-media <linux-media@vger.kernel.org>
Subject: Re: [RFC] Merge v4l-utils. dvb-apps and mediactl to media-utils.git
Date: Thu, 06 Oct 2011 14:24:32 -0300	[thread overview]
Message-ID: <4E8DE450.7030302@redhat.com> (raw)
In-Reply-To: <4E8DACAF.5070207@redhat.com>

Em 06-10-2011 10:27, Mauro Carvalho Chehab escreveu:
> Em 06-10-2011 09:23, Hans Verkuil escreveu:
>> Currently we have three repositories containing libraries and utilities that
>> are relevant to the media drivers:
>>
>> dvb-apps (http://linuxtv.org/hg/dvb-apps/)
>> v4l-utils (http://git.linuxtv.org/v4l-utils.git)
>> media-ctl (git://git.ideasonboard.org/media-ctl.git)
>>
>> It makes no sense to me to have three separate repositories, one still using
>> mercurial and one that isn't even on linuxtv.org.
>>
>> I propose to combine them all to one media-utils.git repository. I think it
>> makes a lot of sense to do this.
>>
>> After the switch the other repositories are frozen (with perhaps a README
>> pointing to the new media-utils.git).
>>
>> I'm not sure if there are plans to make new stable releases of either of these
>> repositories any time soon. If there are, then it might make sense to wait
>> until that new stable release before merging.
>>
>> Comments?
>
> I like that idea. It helps to have the basic tools into one single repository,
> and to properly distribute it.
>
> I think through, that we should work to have an smart configure script that
> would allow enabling/disabling the several components of the utils, like the
> --enable/--disable approach used by autoconf scripts:
> --enable-libv4l
> --enable-dvb
> --enable-ir
> --enable-v4l
> --enable-mc
> ...
>
> Of course, using "--disable-libv4l" would mean that libv4l-aware utils would
> be statically linked with the current libv4l libraries.
>
> This would help distributions to migrate to it, as they can keep having separate
> packages for each component for the existing stable distros, while merging
> into a single source package for future distros.

A patch for the above ended by being simple to add. For now, I've just
added two options, to allow disabling dynamic libv4l compilation/install
and to allow disabling v4l-utils. It is not hard to add more flags there
to allow selecting other things.

-

Add support to disable libv4l and/or v4l-utils

Add some autogen magic to allow disabling the compilation of
v4l-utils or libv4l.

If libv4l is disabled but v4l-utils is enabled, it will still
build libv4l statically, and will linkedit the v4l-utils against
the static libraries.

This way distributions can ship v4l-utils on a separate package
from libv4l, and even having things like providing a v4l-utils
based on a different version of libv4l.

This changeset also opens space to add more libraries and other
packages, as the first step to turn it into a media-utils tree.

While here, adds a v4l-utils.spec rpm file, as found on Fedora.

Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>

diff --git a/.gitignore b/.gitignore
index 1f62182..2b7d617 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,7 @@
  *.so.0
  *.pc
  *.a
+config.log
+config.status
+Makefile
+configure
diff --git a/Make.rules b/Make.rules
index 13d8464..759c75b 100644
--- a/Make.rules
+++ b/Make.rules
@@ -1,5 +1,3 @@
-V4L_UTILS_VERSION=0.9.0-test
-
  # These ones can be overriden from the cmdline
  
  CFLAGS := -g -O1
@@ -17,7 +15,7 @@ MANDIR = $(PREFIX)/share/man
  
  # Note the -I../.. this assumes all sources live in a 2 level dir hierarchy!
  override CPPFLAGS += -I../../include -I../../lib/include -D_GNU_SOURCE -DV4L_UTILS_VERSION='"$(V4L_UTILS_VERSION)"'
-override LDFLAGS += -L../../lib/libv4l1 -L../../lib/libv4l2 -L../../lib/libv4lconvert
+override LDFLAGS += -L../../lib/libv4l1 -L../../lib/libv4l2 -L../../lib/libv4lconvert -ldl -ljpeg
  
  # And last various rules
  
diff --git a/Makefile b/Makefile
deleted file mode 100644
index fa0cb05..0000000
--- a/Makefile
+++ /dev/null
@@ -1,37 +0,0 @@
-all install:
-	$(MAKE) -C lib $@
-	$(MAKE) -C utils $@
-
-sync-with-kernel:
-	@if [ ! -f $(KERNEL_DIR)/include/linux/videodev2.h -o \
-	      ! -f $(KERNEL_DIR)/include/linux/ivtv.h -o \
-	      ! -f $(KERNEL_DIR)/include/media/v4l2-chip-ident.h ]; then \
-	  echo "Error you must set KERNEL_DIR to point to an extracted kernel source dir"; \
-	  exit 1; \
-	fi
-	cp -a $(KERNEL_DIR)/include/linux/videodev2.h include/linux
-	cp -a $(KERNEL_DIR)/include/linux/ivtv.h include/linux
-	cp -a $(KERNEL_DIR)/include/media/v4l2-chip-ident.h include/media
-	$(MAKE) -C utils $@
-
-clean::
-	rm -f include/*/*~
-	$(MAKE) -C lib $@
-	$(MAKE) -C utils $@
-
-tag:
-	@git tag -a -m "Tag as v4l-utils-$(V4L_UTILS_VERSION)" v4l-utils-$(V4L_UTILS_VERSION)
-	@echo "Tagged as v4l-utils-$(V4L_UTILS_VERSION)"
-
-archive-no-tag:
-	@git archive --format=tar --prefix=v4l-utils-$(V4L_UTILS_VERSION)/ v4l-utils-$(V4L_UTILS_VERSION) > v4l-utils-$(V4L_UTILS_VERSION).tar
-	@bzip2 -f v4l-utils-$(V4L_UTILS_VERSION).tar
-
-archive: clean tag archive-no-tag
-
-export: clean
-	tar --transform s/^\./v4l-utils-$(V4L_UTILS_VERSION)/g \
-		--exclude=.git -jcvf \
-		/tmp/v4l-utils-$(V4L_UTILS_VERSION).tar.bz2 .
-
-include Make.rules
diff --git a/Makefile.in b/Makefile.in
new file mode 100644
index 0000000..d38f9e7
--- /dev/null
+++ b/Makefile.in
@@ -0,0 +1,67 @@
+CC			= @CC@
+CXX			= @CXX@
+V4L_UTILS_VERSION	= @V4L_UTILS_VERSION@
+CFLAGS			= @CFLAGS@
+WITH_LIBV4		= @WITH_LIBV4L@
+WITH_V4LUTILS		= @WITH_V4LUTILS@
+
+LIBV4L_ARGS=
+ifeq ($(WITH_LIBV4L),no)
+ifeq ($(WITH_V4LUTILS),yes)
+	LIBV4L_ARGS="LINKTYPE=static"
+endif
+endif
+
+all:
+  ifeq ($(WITH_LIBV4L),yes)
+	echo with Libv4l $(LIBV4L_ARGS)
+	$(MAKE) -C lib $(LIBV4L_ARGS) $@
+  else ifeq ($(WITH_V4LUTILS),yes)
+	echo with Libv4l static
+	$(MAKE) -C lib $(LIBV4L_ARGS) $@
+  endif
+  ifeq ($(WITH_V4LUTILS),yes)
+	$(MAKE) -C utils $(LIBV4L_ARGS) $@
+  endif
+
+install:
+  ifeq ($(WITH_LIBV4L),yes)
+	$(MAKE) -C lib $@
+  endif
+  ifeq ($(WITH_V4LUTILS),yes)
+	$(MAKE) -C utils $@
+  endif
+
+sync-with-kernel:
+	@if [ ! -f $(KERNEL_DIR)/include/linux/videodev2.h -o \
+	      ! -f $(KERNEL_DIR)/include/linux/ivtv.h -o \
+	      ! -f $(KERNEL_DIR)/include/media/v4l2-chip-ident.h ]; then \
+	  echo "Error you must set KERNEL_DIR to point to an extracted kernel source dir"; \
+	  exit 1; \
+	fi
+	cp -a $(KERNEL_DIR)/include/linux/videodev2.h include/linux
+	cp -a $(KERNEL_DIR)/include/linux/ivtv.h include/linux
+	cp -a $(KERNEL_DIR)/include/media/v4l2-chip-ident.h include/media
+	$(MAKE) -C utils $@
+
+clean::
+	rm -f include/*/*~
+	$(MAKE) -C lib $@
+	$(MAKE) -C utils $@
+
+tag:
+	@git tag -a -m "Tag as v4l-utils-$(V4L_UTILS_VERSION)" v4l-utils-$(V4L_UTILS_VERSION)
+	@echo "Tagged as v4l-utils-$(V4L_UTILS_VERSION)"
+
+archive-no-tag:
+	@git archive --format=tar --prefix=v4l-utils-$(V4L_UTILS_VERSION)/ v4l-utils-$(V4L_UTILS_VERSION) > v4l-utils-$(V4L_UTILS_VERSION).tar
+	@bzip2 -f v4l-utils-$(V4L_UTILS_VERSION).tar
+
+archive: clean tag archive-no-tag
+
+export: clean
+	tar --transform s/^\./v4l-utils-$(V4L_UTILS_VERSION)/g \
+		--exclude=.git -jcvf \
+		/tmp/v4l-utils-$(V4L_UTILS_VERSION).tar.bz2 .
+
+include Make.rules
diff --git a/configure.in b/configure.in
new file mode 100644
index 0000000..0f9a058
--- /dev/null
+++ b/configure.in
@@ -0,0 +1,42 @@
+AC_INIT(v4l-utils.spec.in)
+
+V4L_UTILS_VERSION=0.9.0-test
+
+dnl ---------------------------------------------------------------------
+dnl Checks for programs.
+AC_PROG_CC
+AC_PROG_CXX
+AC_LANG_C
+AC_PROG_MAKE_SET
+AC_HEADER_STDC
+
+dnl ---------------------------------------------------------------------
+dnl Options
+
+AC_ARG_ENABLE(libv4l,
+  [  --disable-libv4l        disable dynamic libv4l compilation],
+  [case "${enableval}" in
+     yes | no ) WITH_LIBV4L="${enableval}" ;;
+     *) AC_MSG_ERROR(bad value ${enableval} for --disable-ctemplate) ;;
+   esac],
+  [WITH_LIBV4L="yes"]
+)
+
+AC_ARG_ENABLE(v4l-utils,
+  [  --disable-v4l-utils     disable v4l-utils compilation],
+  [case "${enableval}" in
+     yes | no ) WITH_V4LUTILS="${enableval}" ;;
+     *) AC_MSG_ERROR(bad value ${enableval} for --disable-ctemplate) ;;
+   esac],
+  [WITH_V4LUTILS="yes"]
+)
+
+dnl ---------------------------------------------------------------------
+dnl Substitute vars
+AC_SUBST(V4L_UTILS_VERSION)
+AC_SUBST(WITH_LIBV4L)
+AC_SUBST(WITH_V4LUTILS)
+
+dnl ---------------------------------------------------------------------
+dnl read Makefile.in and write Makefile
+AC_OUTPUT(Makefile)
diff --git a/makefile b/makefile
new file mode 100644
index 0000000..20c0822
--- /dev/null
+++ b/makefile
@@ -0,0 +1,23 @@
+.PHONY: default configure distclean
+
+ifeq ($(wildcard configure),)
+default: configure
+else
+default: all
+endif
+
+configure:
+	@set -ex; autoconf
+	@rm -rf autom4te.cache
+	@echo "*** You should now run ./configure or make ***"
+distclean:
+	-$(MAKE) -f Makefile clean
+	-rm Makefile configure config.h v4l-utils.spec
+
+-include Makefile
+
+ifeq ($(wildcard Makefile),)
+all:
+	./configure
+	@$(MAKE) -f Makefile all
+endif
diff --git a/utils/qv4l2/qv4l2.pro b/utils/qv4l2/qv4l2.pro
index 87cf097..939b71f 100644
--- a/utils/qv4l2/qv4l2.pro
+++ b/utils/qv4l2/qv4l2.pro
@@ -9,6 +9,6 @@ CONFIG += debug
  # Input
  HEADERS += qv4l2.h general-tab.h v4l2-api.h capture-win.h
  SOURCES += qv4l2.cpp general-tab.cpp ctrl-tab.cpp v4l2-api.cpp capture-win.cpp
-LIBS += -L../../lib/libv4l2 -lv4l2 -L../../lib/libv4lconvert -lv4lconvert -lrt -L../libv4l2util -lv4l2util
+LIBS += -L../../lib/libv4l2 -lv4l2 -L../../lib/libv4lconvert -lv4lconvert -lrt -L../libv4l2util -lv4l2util -ldl -ljpeg
  
  RESOURCES += qv4l2.qrc
diff --git a/v4l-utils.spec.in b/v4l-utils.spec.in
new file mode 100644
index 0000000..c37780f
--- /dev/null
+++ b/v4l-utils.spec.in
@@ -0,0 +1,167 @@
+Name:           v4l-utils
+Version:        @@V4L_UTILS_VERSION@@
+Release:        1%{?dist}
+Summary:        Utilities for video4linux and DVB devices
+Group:          Applications/System
+# ir-keytable and v4l2-sysfs-path are GPLv2 only
+License:        GPLv2+ and GPLv2
+URL:            http://www.linuxtv.org/downloads/v4l-utils/
+Source0:        http://linuxtv.org/downloads/v4l-utils/v4l-utils-%{version}.tar.bz2
+Source1:        qv4l2.desktop
+Source2:        qv4l2.svg
+BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
+BuildRequires:  qt4-devel libsysfs-devel kernel-headers desktop-file-utils
+# For /etc/udev/rules.d ownership
+Requires:       udev
+Requires:       libv4l = %{version}-%{release}
+
+%description
+v4l-utils is a collection of various video4linux (V4L) and DVB utilities. The
+main v4l-utils package contains cx18-ctl, ir-keytable, ivtv-ctl, v4l2-ctl and
+v4l2-sysfs-path.
+
+
+%package        devel-tools
+Summary:        Utilities for v4l2 / DVB driver development and debugging
+# decode_tm6000 is GPLv2 only
+License:        GPLv2+ and GPLv2
+Requires:       libv4l = %{version}-%{release}
+
+%description    devel-tools
+Utilities for v4l2 / DVB driver authors: decode_tm6000, v4l2-compliance and
+v4l2-dbg.
+
+
+%package -n     qv4l2
+Summary:        QT v4l2 test control and streaming test application
+License:        GPLv2+
+Requires:       libv4l = %{version}-%{release}
+
+%description -n qv4l2
+QT v4l2 test control and streaming test application.
+
+
+%package -n     libv4l
+Summary:        Collection of video4linux support libraries
+Group:          System Environment/Libraries
+# Some of the decompression helpers are GPLv2, the rest is LGPLv2+
+License:        LGPLv2+ and GPLv2
+URL:            http://hansdegoede.livejournal.com/3636.html
+
+%description -n libv4l
+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.
+
+libv4lconvert offers functions to convert from any (known) pixel-format
+to V4l2_PIX_FMT_BGR24 or V4l2_PIX_FMT_YUV420.
+
+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.
+
+
+%package -n     libv4l-devel
+Summary:        Development files for libv4l
+Group:          Development/Libraries
+License:        LGPLv2+
+URL:            http://hansdegoede.livejournal.com/3636.html
+Requires:       libv4l = %{version}-%{release}
+
+%description -n libv4l-devel
+The libv4l-devel package contains libraries and header files for
+developing applications that use libv4l.
+
+
+%prep
+%setup -q
+
+
+%build
+make %{?_smp_mflags} CFLAGS="$RPM_OPT_FLAGS" CXXFLAGS="$RPM_OPT_FLAGS" \
+  PREFIX=%{_prefix} LIBDIR=%{_libdir}
+
+
+%install
+rm -rf $RPM_BUILD_ROOT
+make install PREFIX=%{_prefix} LIBDIR=%{_libdir} DESTDIR=$RPM_BUILD_ROOT
+# below is the desktop file and icon stuff.
+mkdir -p $RPM_BUILD_ROOT%{_datadir}/applications
+desktop-file-install --dir $RPM_BUILD_ROOT%{_datadir}/applications \
+  %{SOURCE1}
+mkdir -p $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/scalable/apps
+install -p -m 644 %{SOURCE2} \
+  $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/scalable/apps
+
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+
+%post -n libv4l -p /sbin/ldconfig
+
+%postun -n libv4l -p /sbin/ldconfig
+
+%post -n qv4l2
+touch --no-create %{_datadir}/icons/hicolor &>/dev/null || :
+
+%postun -n qv4l2
+if [ $1 -eq 0 ] ; then
+    touch --no-create %{_datadir}/icons/hicolor &>/dev/null
+    gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
+fi
+
+%posttrans -n qv4l2
+gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
+
+
+%files
+%defattr(-,root,root,-)
+%doc README
+%dir %{_sysconfdir}/rc_keymaps
+%config(noreplace) %{_sysconfdir}/rc_keymaps/*
+%config(noreplace) %{_sysconfdir}/rc_maps.cfg
+%config(noreplace) %{_sysconfdir}/udev/rules.d/70-infrared.rules
+%{_bindir}/cx18-ctl
+%{_bindir}/ir-keytable
+%{_bindir}/ivtv-ctl
+%{_bindir}/v4l2-ctl
+%{_bindir}/v4l2-sysfs-path
+%{_mandir}/man1/ir-keytable.1*
+
+%files devel-tools
+%defattr(-,root,root,-)
+%doc README
+%{_bindir}/decode_tm6000
+%{_bindir}/v4l2-compliance
+%{_sbindir}/v4l2-dbg
+
+%files -n qv4l2
+%defattr(-,root,root,-)
+%doc README
+%{_bindir}/qv4l2
+%{_datadir}/applications/qv4l2.desktop
+%{_datadir}/icons/hicolor/scalable/apps/qv4l2.svg
+
+%files -n libv4l
+%defattr(-,root,root,-)
+%doc COPYING.LIB COPYING ChangeLog README.lib TODO
+%{_libdir}/libv4l*.so.*
+%{_libdir}/libv4l
+
+%files -n libv4l-devel
+%defattr(-,root,root,-)
+%doc README.lib-multi-threading
+%{_includedir}/libv4l*.h
+%{_libdir}/libv4l*.so
+%{_libdir}/pkgconfig/libv4l*.pc
+
+
+%changelog
+* Thr Oct 06 2011 Mauro Carvalho Chehab <mchehab@redhat.com> 0.9.0-test
+- Initial v4l-utils.spec file

  reply	other threads:[~2011-10-06 17:32 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-10-06 12:23 [RFC] Merge v4l-utils. dvb-apps and mediactl to media-utils.git Hans Verkuil
2011-10-06 13:27 ` Mauro Carvalho Chehab
2011-10-06 17:24   ` Mauro Carvalho Chehab [this message]
2011-10-07  2:07     ` Mauro Carvalho Chehab
2011-10-07  6:05       ` Hans Verkuil
2011-10-07 11:54         ` Mauro Carvalho Chehab
2011-10-07 13:02         ` Mauro Carvalho Chehab
2011-10-07 13:05           ` Hans de Goede
2011-10-07 13:46             ` Mauro Carvalho Chehab
2011-10-08  8:14               ` Hans de Goede
2011-10-07  8:21 ` Hans de Goede
2011-10-07 18:08 ` Manu Abraham
2011-10-08 12:12   ` Mauro Carvalho Chehab
2011-10-08 12:42     ` Manu Abraham

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4E8DE450.7030302@redhat.com \
    --to=mchehab@redhat.com \
    --cc=hverkuil@xs4all.nl \
    --cc=linux-media@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox