On Fri, Sep 09, 2016 at 08:08:55PM +0200, Janne Grunau wrote:
> On 2016-09-05 20:31:39 +0200, Diego Biurrun wrote:
> > Previously all external library dependencies were added as link-time
> > dependencies to all components. This adds bogus dependencies to some
> > components, so only add dependencies to components if said components
> > actually make use of a dependency.
> > ---
> > 
> > This can still be improved a bit I guess.  Better function names welcome for
> > starters. Janne had some more substantive comments. Our pkg-config files 
> > have
> > many more issues, even after this patch...
> 
> I don't think this is the right approach.  The fundamental problem in 
> this patch is that it mixes the checks functions/libraries with the 
> information which part of libav uses the library.  The basic idea would 
> be to set fn_$(func)_extralibs in check_lib(2) and have components 
> depend fn_$(func).  We can't check for multiple functions in 
> check_lib(2) after that at once but we don't do it atm.  The 
> dep_extralibs handling in check_deps() needs to be modified (looks like 
> it is missing in this patch).

I'm not sure if we're on the same page here. I attached a very rough sketch
of what I interpret to be your idea. It's not exactly turning out simpler,
so if I'm going down the wrong path, I'm all ears for better suggestions.

I just changed a few individual components to the new system to play with
it. Of course this would need to be extended, etc. I'd just like to get a
first round of feedback for now...

Diego
>From 8f381465390a7db652d0d131e355749e98445692 Mon Sep 17 00:00:00 2001
From: Diego Biurrun <[email protected]>
Date: Tue, 25 Oct 2016 23:26:16 +0200
Subject: [PATCH] [WIP] Janne's idea for fine-grained library dependencies

---
 configure | 70 +++++++++++++++++++++++++++++++++++++++++++++++----------------
 1 file changed, 52 insertions(+), 18 deletions(-)

diff --git a/configure b/configure
index 6a04c33..ba8e3c8 100755
--- a/configure
+++ b/configure
@@ -621,10 +621,11 @@ do_check_deps(){
         eval dep_sgs="\$${cfg}_suggest"
         eval dep_ifa="\$${cfg}_if"
         eval dep_ifn="\$${cfg}_if_any"
+        eval dep_lbs="\$${cfg}_libs"
 
-        pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
+        pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn dep_lbs
         do_check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
-        popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
+        popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn dep_lbs
 
         [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
         [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
@@ -635,6 +636,24 @@ do_check_deps(){
         if enabled $cfg; then
             enable_deep $dep_sel
             enable_deep_weak $dep_sgs
+            for lib in $dep_lbs; do
+                eval append dep_extralibs "\$${lib}_extralibs"
+            done
+            if test -n "$dep_extralibs"; then
+                case $cfg in
+                    *coder|*parser|*bsf)
+                        add_extralibs_lib avcodec $dep_extralibs ;;
+                    *muxer)
+                        add_extralibs_lib avformat $dep_extralibs ;;
+                    *indev|*outdev)
+                        add_extralibs_lib avdevice $dep_extralibs ;;
+                    *filter)
+                        add_extralibs_lib avfilter $dep_extralibs ;;
+                    *)
+                        add_extralibs $dep_extralibs ;;
+                esac
+                unset dep_extralibs
+            fi
         fi
 
         disable ${cfg}_checking
@@ -648,8 +667,6 @@ check_deps(){
 
     for cfg in $allopts; do
         enabled $cfg || continue
-        eval dep_extralibs="\$${cfg}_extralibs"
-        test -n "$dep_extralibs" && add_extralibs $dep_extralibs
     done
 }
 
@@ -739,6 +756,13 @@ add_extralibs(){
     prepend extralibs $($ldflags_filter "$@")
 }
 
+add_extralibs_lib(){
+    lib=$1
+    shift
+    prepend extralibs_${lib} $($ldflags_filter "$@")
+    unique  extralibs_${lib}
+}
+
 add_host_cppflags(){
     append host_cppflags "$@"
 }
@@ -1001,10 +1025,11 @@ EOF
 
 check_lib(){
     log check_lib "$@"
-    headers="$1"
-    funcs="$2"
-    shift 2
-    check_func_headers "$headers" "$funcs" "$@" && add_extralibs "$@"
+    name="$1"
+    headers="$2"
+    func="$3"
+    shift 3
+    check_func_headers "$headers" "$func" "$@" && eval ${name}_extralibs="\$@"
 }
 
 check_pkg_config(){
@@ -1100,7 +1125,7 @@ require(){
     headers="$2"
     func="$3"
     shift 3
-    check_lib "$headers" $func "$@" || die "ERROR: $name not found"
+    check_lib $name "$headers" $func "$@" || die "ERROR: $name not found"
 }
 
 require_pkg_config(){
@@ -2310,6 +2335,7 @@ ismv_muxer_select="mov_muxer"
 matroska_audio_muxer_select="matroska_muxer"
 matroska_demuxer_select="iso_media riffdec"
 matroska_demuxer_suggest="bzlib lzo zlib"
+matroska_demuxer_libs="bzlib zlib"
 matroska_muxer_select="iso_media riffenc"
 mmf_muxer_select="riffenc"
 mov_demuxer_select="iso_media riffdec"
@@ -2352,7 +2378,9 @@ xwma_demuxer_select="riffdec"
 
 # indevs / outdevs
 alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
+alsa_indev_libs="alsa"
 alsa_outdev_deps="alsa_asoundlib_h"
+alsa_outdev_libs="alsa"
 avfoundation_indev_deps="AVFoundation_AVFoundation_h"
 bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
 dv1394_indev_deps="dv1394"
@@ -2360,6 +2388,7 @@ dv1394_indev_select="dv_demuxer"
 fbdev_indev_deps="linux_fb_h"
 jack_indev_deps="jack_jack_h"
 jack_indev_deps_any="sem_timedwait dispatch_dispatch_h"
+jack_indev_libs="jack"
 libcdio_indev_deps="libcdio"
 libdc1394_indev_deps="libdc1394"
 oss_indev_deps_any="soundcard_h sys_soundcard_h"
@@ -4590,8 +4619,8 @@ fi
 enabled pthreads &&
     check_builtin sem_timedwait semaphore.h "sem_t *s; sem_init(s,0,0); sem_timedwait(s,0); sem_destroy(s)"
 
-disabled  zlib || check_lib  zlib.h      zlibVersion -lz   || disable  zlib
-disabled bzlib || check_lib bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
+disabled  zlib || check_lib  zlib  zlib.h      zlibVersion -lz   || disable  zlib
+disabled bzlib || check_lib bzlib bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
 
 check_lib math.h sin -lm && LIBM="-lm"
 
@@ -4756,9 +4785,9 @@ check_header sys/soundcard.h
 check_header soundcard.h
 
 enabled_any alsa_indev alsa_outdev &&
-    check_lib alsa/asoundlib.h snd_pcm_htimestamp -lasound
+    check_lib alsa alsa/asoundlib.h snd_pcm_htimestamp -lasound
 
-enabled jack_indev && check_lib jack/jack.h jack_client_open -ljack &&
+enabled jack_indev && check_lib jack jack/jack.h jack_client_open -ljack &&
     check_func jack_port_get_latency_range -ljack
 
 enabled_any sndio_indev sndio_outdev && check_lib sndio.h sio_open -lsndio
@@ -5298,7 +5327,12 @@ TARGET_SAMPLES=${target_samples:-\$(SAMPLES)}
 CFLAGS-avplay=$sdl_cflags
 ZLIB=$($ldflags_filter -lz)
 LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
-EXTRALIBS=$extralibs
+EXTRALIBS=$extralibs_avfilter $extralibs_avdevice $extralibs_avformat $extralibs_avcodec $extralibs_avutil $extralibs
+EXTRALIBS-avcodec=$extralibs_avcodec
+EXTRALIBS-avdevice=$extralibs_avdevice
+EXTRALIBS-avfilter=$extralibs_avfilter
+EXTRALIBS-avformat=$extralibs_avformat
+EXTRALIBS-avutil=$extralibs_avutil
 COMPAT_OBJS=$compat_objs
 EXEOBJS=$exeobjs
 INSTALL=install
@@ -5456,9 +5490,9 @@ EOF
 }
 
 pkgconfig_generate libavutil     "Libav utility library"          "$LIBAVUTIL_VERSION"     "$LIBRT $LIBM"
-pkgconfig_generate libavcodec    "Libav codec library"            "$LIBAVCODEC_VERSION"    "$extralibs"
-pkgconfig_generate libavformat   "Libav container format library" "$LIBAVFORMAT_VERSION"   "$extralibs"
-pkgconfig_generate libavdevice   "Libav device handling library"  "$LIBAVDEVICE_VERSION"   "$extralibs"
-pkgconfig_generate libavfilter   "Libav video filtering library"  "$LIBAVFILTER_VERSION"   "$extralibs"
+pkgconfig_generate libavcodec    "Libav codec library"            "$LIBAVCODEC_VERSION"    "$extralibs_avcodec"
+pkgconfig_generate libavformat   "Libav container format library" "$LIBAVFORMAT_VERSION"   "$extralibs_avformat"
+pkgconfig_generate libavdevice   "Libav device handling library"  "$LIBAVDEVICE_VERSION"   "$extralibs_avdevice"
+pkgconfig_generate libavfilter   "Libav video filtering library"  "$LIBAVFILTER_VERSION"   "$extralibs_avfilter"
 pkgconfig_generate libavresample "Libav audio resampling library" "$LIBAVRESAMPLE_VERSION" "$LIBM"
 pkgconfig_generate libswscale    "Libav image rescaling library"  "$LIBSWSCALE_VERSION"    "$LIBM"
-- 
2.1.4

_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to