Commit 6fa37b57 authored by Luke Shumaker's avatar Luke Shumaker Committed by Guillaume Roguez

contrib: recursive dependency tracking

Let's say we're building gnutls (since the system version is too new).
gnutls depends on nettle.
Let's say we're using the system nettle (naturally in FOUND_PKGS).
nettle depends on gmp.

With the old (non-recursive) dependency tracking, we would end up building
gmp just for nettle, even though we aren't even building nettle!

Change-Id: I24e6f59416839ea202e0aceafe101432fe9c2646
Reviewed-by: Guillaume Roguez's avatarGuillaume Roguez <>
parent 25f7464d
......@@ -92,18 +92,12 @@ Dependencies
If package bar depends on package foo, the special DEPS_bar variable
should be defined as follow:
DEPS_bar = foo $(DEPS_foo)
Note that dependency resolution is unfortunately _not_ recursive.
Therefore $(DEPS_foo) really should be specified explicitly as shown
above. (In practice, this will not make any difference insofar as there
are no pure second-level nested dependencies. For instance, libass
depends on FontConfig, which depends on FreeType, but libass depends
directly on FreeType anyway.)
Also note that DEPS_bar is set "recursively" with =, rather than
"immediately" with :=. This is so that $(DEPS_foo) is expanded
correctly, even if DEPS_foo it is defined after DEPS_bar.
DEPS_bar = foo
Dependency resolution is recursive (unlike in previous versions); the
above will cause bar to also depend on the dependencies of foo. It is
illegal to have a dependency cycle, and an error will be emitted if
one is created.
Implementation note:
......@@ -11,7 +11,7 @@ ifeq ($(call need_pkg,"libavutil >= 55.75.100 libavcodec >= 57.106.101 libavform
PKGS_FOUND += ffmpeg
DEPS_ffmpeg = iconv zlib x264 vpx opus speex $(DEPS_vpx)
DEPS_ffmpeg = iconv zlib x264 vpx opus speex
--cc="$(CC)" \
......@@ -47,7 +47,7 @@ FLACCONF += --disable-asm-optimizations
DEPS_flac = ogg $(DEPS_ogg)
DEPS_flac = ogg
.flac: flac
cd $< && $(HOSTVARS) ./configure $(FLACCONF)
......@@ -60,7 +60,7 @@ ifdef HAVE_IOS
GNUTLS_CONF += --disable-hardware-acceleration
DEPS_gnutls = nettle $(DEPS_nettle) iconv $(DEPS_iconv)
DEPS_gnutls = nettle iconv
#Workaround for localtime_r function
......@@ -391,7 +391,10 @@ PKGS_AUTOMATIC := $(filter-out $(PKGS_FOUND),$(PKGS))
# Apply manual selection (from bootstrap):
# Resolve dependencies:
PKGS_DEPS := $(filter-out $(PKGS_FOUND) $(PKGS_MANUAL),$(sort $(foreach p,$(PKGS_MANUAL),$(DEPS_$(p)))))
dep_on = $(if $(filter $1,$2),\
$(error Dependency cycle detected: $(patsubst %,% ->,$2) $(filter $1,$2)),\
$(sort $(foreach p,$(filter-out $(PKGS_FOUND),$(1)),$(p) $(call dep_on,$(DEPS_$(p)),$2 $(p)))))
PKGS_DEPS := $(call dep_on,$(PKGS_MANUAL))
......@@ -19,7 +19,7 @@ nettle: nettle-$(NETTLE_VERSION).tar.gz .sum-nettle
DEPS_nettle = gmp $(DEPS_gmp)
DEPS_nettle = gmp
.nettle: nettle
ifdef HAVE_IOS
......@@ -15,7 +15,7 @@ ifneq ($(call need_pkg,"libargon2"),)
DEPS_opendht += argon2
ifneq ($(call need_pkg,"gnutls >= 3.3.0"),)
DEPS_opendht += gnutls $(DEPS_gnutls)
DEPS_opendht += gnutls
......@@ -7,7 +7,7 @@ PKGS += secp256k1
ifeq ($(call need_pkg,"libsecp256k1"),)
PKGS_FOUND += secp256k1
DEPS_secp256k1 = gmp $(DEPS_gmp)
DEPS_secp256k1 = gmp
$(call download,$(SECP256K1_URL))
......@@ -36,7 +36,7 @@ endif
DEPS_vorbis = ogg $(DEPS_ogg)
DEPS_vorbis = ogg
.vorbis: vorbis
$(RECONF) -Im4
......@@ -47,7 +47,7 @@ DEPS_vorbis = ogg $(DEPS_ogg)
.sum-vorbisenc: .sum-vorbis
touch $@
DEPS_vorbisenc = vorbis $(DEPS_vorbis)
DEPS_vorbisenc = vorbis
touch $@
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment