From: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
To: Hans Verkuil <hverkuil@xs4all.nl>
Cc: linux-media@vger.kernel.org, gjasny@googlemail.com,
Hans Verkuil <hansverk@cisco.com>
Subject: Re: [PATCH 2/2] v4l-utils: allow building even if argp.h is not present
Date: Thu, 3 Sep 2015 14:40:16 -0300 [thread overview]
Message-ID: <20150903144016.4c6f9dce@recife.lan> (raw)
In-Reply-To: <dd3bbf524477c868636605620b34a7acb32b1238.1441293195.git.hansverk@cisco.com>
Em Thu, 3 Sep 2015 17:23:16 +0200
Hans Verkuil <hverkuil@xs4all.nl> escreveu:
> From: Hans Verkuil <hansverk@cisco.com>
>
> The argp.h functionality is not always available on embedded systems
> (android!). A number of utilities depend on this and running configure
> will fail if argp.h is missing.
>
> Add a new configure option --without-argp to disable that argp.h check
> and instead skip any utilities that use argp.h.
Not sure about this patch. Maybe the better would be to see if we could
add a poor man's argp, instead, for those broken userspace systems.
Weird enough, a quick search on Google for "argp replacement android"
actually showed an argp.h at some android source:
https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6/+/jb-dev/sysroot/usr/include/argp.h
This site has an standalone argp imported from glibc-2.2, according
with its ChangeLog:
https://github.com/jahrome/argp-standalone
Static linking an standalone version is a little ugly. So, wee can do
something simpler than that, as there is just one important function at
argp: the one that calls a callback that will handle the command line
options (argp_parse). This can be trivial to be implemented, specially
if it would handle just the one letter parameters, as it would be just
a callback.
It can just ignore the help message functions like argp_help(),
giving some error message and giving up.
Eventually, just a small set of inline functions, plus adding the
argp structures on a header would be enough.
Regards,
Mauro
>
> Signed-off-by: Hans Verkuil <hansverk@cisco.com>
> ---
> configure.ac | 22 ++++++++++++++++------
> contrib/test/Makefile.am | 7 ++++++-
> utils/Makefile.am | 11 +++++++----
> 3 files changed, 29 insertions(+), 11 deletions(-)
>
> diff --git a/configure.ac b/configure.ac
> index 13df263..d645386 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -270,14 +270,24 @@ dl_saved_libs=$LIBS
> AC_SUBST([DLOPEN_LIBS])
> LIBS=$dl_saved_libs
>
> -AC_CHECK_HEADER([argp.h],,AC_MSG_ERROR(Cannot continue: argp.h not found))
> +AC_ARG_WITH([argp],
> + AS_HELP_STRING([--without-argp], [Do not use argp.h]),
> + [],
> + [with_argp=yes])
> +
> argp_saved_libs=$LIBS
> - AC_SEARCH_LIBS([argp_parse],
> - [argp],
> - [test "$ac_cv_search_argp_parse" = "none required" || ARGP_LIBS=$ac_cv_search_argp_parse],
> - [AC_MSG_ERROR([unable to find the argp_parse() function])])
> - AC_SUBST([ARGP_LIBS])
> +AS_IF([test "x$with_argp" != xno],
> + [
> + AC_CHECK_HEADER([argp.h],,AC_MSG_ERROR(Cannot continue: argp.h not found))]
> + AC_SEARCH_LIBS([argp_parse],
> + [argp],
> + [test "$ac_cv_search_argp_parse" = "none required" || ARGP_LIBS=$ac_cv_search_argp_parse],
> + [AC_MSG_ERROR([unable to find the argp_parse() function])])
> + AC_SUBST([ARGP_LIBS])
> + ],
> + )
> LIBS=$argp_saved_libs
> +AM_CONDITIONAL([HAVE_ARGP], [test "x$with_argp" != xno])
>
> AC_CHECK_HEADER([linux/i2c-dev.h], [linux_i2c_dev=yes], [linux_i2c_dev=no])
> AM_CONDITIONAL([HAVE_LINUX_I2C_DEV], [test x$linux_i2c_dev = xyes])
> diff --git a/contrib/test/Makefile.am b/contrib/test/Makefile.am
> index 7f84435..f223f68 100644
> --- a/contrib/test/Makefile.am
> +++ b/contrib/test/Makefile.am
> @@ -2,7 +2,6 @@ noinst_PROGRAMS = \
> ioctl-test \
> sliced-vbi-test \
> sliced-vbi-detect \
> - v4l2grab \
> driver-test \
> stress-buffer \
> capture-example
> @@ -12,8 +11,14 @@ noinst_PROGRAMS += pixfmt-test
> endif
>
> if HAVE_GLU
> +if HAVE_ARGP
> noinst_PROGRAMS += v4l2gl
> endif
> +endif
> +
> +if HAVE_ARGP
> +noinst_PROGRAMS += v4l2grab
> +endif
>
> driver_test_SOURCES = driver-test.c
> driver_test_LDADD = ../../utils/libv4l2util/libv4l2util.la
> diff --git a/utils/Makefile.am b/utils/Makefile.am
> index 5674c16..5645d55 100644
> --- a/utils/Makefile.am
> +++ b/utils/Makefile.am
> @@ -1,16 +1,12 @@
> SUBDIRS = \
> - dvb \
> libv4l2util \
> libmedia_dev \
> - decode_tm6000 \
> ivtv-ctl \
> cx18-ctl \
> - keytable \
> media-ctl \
> v4l2-compliance \
> v4l2-ctl \
> v4l2-dbg \
> - v4l2-sysfs-path \
> rds-ctl
>
> if LINUX_OS
> @@ -27,3 +23,10 @@ if WITH_QV4L2
> SUBDIRS += qv4l2
> endif
>
> +if HAVE_ARGP
> +SUBDIRS += \
> + dvb \
> + keytable \
> + decode_tm6000 \
> + v4l2-sysfs-path
> +endif
next prev parent reply other threads:[~2015-09-03 17:40 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-03 15:23 [PATCH 0/2] v4l-utils: new configure options Hans Verkuil
2015-09-03 15:23 ` [PATCH 1/2] v4l2-ctl/compliance: add configure option to disable libv4l use Hans Verkuil
2015-09-03 15:23 ` [PATCH 2/2] v4l-utils: allow building even if argp.h is not present Hans Verkuil
2015-09-03 17:40 ` Mauro Carvalho Chehab [this message]
2015-09-14 7:19 ` [PATCH 0/2] v4l-utils: new configure options Gregor Jasny
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=20150903144016.4c6f9dce@recife.lan \
--to=mchehab@osg.samsung.com \
--cc=gjasny@googlemail.com \
--cc=hansverk@cisco.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;
as well as URLs for NNTP newsgroup(s).