package infra: remove duplicates in dependencies list
authorYann E. MORIN <yann.morin.1998@free.fr>
Sun, 1 Jun 2014 10:28:54 +0000 (12:28 +0200)
committerThomas Petazzoni <thomas.petazzoni@free-electrons.com>
Sun, 8 Jun 2014 16:50:35 +0000 (18:50 +0200)
Currently, we just use what a package declares as its dependencies.

But some packages may declare the same depdency more than once. For
example, php has two options to add SQL support: 'mysql' or 'mysqli',
which are not exclusive. So, php.mk has mysql twice as a dependency.

Although that does not cause any grievance for make, we end up generating
dependency graphs where this duplicate dependency is visible.

Add an intermediary variable which contains the $(sort)-ed list of the
dependencies, thus eliminating any duplicates.

This has the side effect of also sorting the list, which is probably
good for reproducibility anyway.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Thomas De Schampheleire <patrickdepinguin@gmail.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
package/pkg-generic.mk

index c6c367c042f8dfc08465c8a5323aa5a833dcb86b..ccd7f3bcaa4d381cbb40865cacc023a6eff19e1f 100644 (file)
@@ -391,6 +391,9 @@ $(2)_DEPENDENCIES += toolchain
 endif
 endif
 
+# Eliminate duplicates in dependencies
+$(2)_FINAL_DEPENDENCIES = $$(sort $$($(2)_DEPENDENCIES))
+
 $(2)_INSTALL_STAGING           ?= NO
 $(2)_INSTALL_IMAGES            ?= NO
 $(2)_INSTALL_TARGET            ?= YES
@@ -476,14 +479,14 @@ $$($(2)_TARGET_INSTALL_HOST):     $$($(2)_TARGET_BUILD)
 $(1)-build:            $$($(2)_TARGET_BUILD)
 $$($(2)_TARGET_BUILD): $$($(2)_TARGET_CONFIGURE)
 
-# Since $(2)_DEPENDENCIES are phony targets, they are always "newer"
+# Since $(2)_FINAL_DEPENDENCIES are phony targets, they are always "newer"
 # than $(2)_TARGET_CONFIGURE. This would force the configure step (and
 # therefore the other steps as well) to be re-executed with every
-# invocation of make.  Therefore, make $(2)_DEPENDENCIES an order-only
+# invocation of make.  Therefore, make $(2)_FINAL_DEPENDENCIES an order-only
 # dependency by using |.
 
 $(1)-configure:                        $$($(2)_TARGET_CONFIGURE)
-$$($(2)_TARGET_CONFIGURE):     | $$($(2)_DEPENDENCIES)
+$$($(2)_TARGET_CONFIGURE):     | $$($(2)_FINAL_DEPENDENCIES)
 
 $$($(2)_TARGET_SOURCE) $$($(2)_TARGET_RSYNC): | dirs prepare
 ifeq ($(filter $(1),$(DEPENDENCIES_HOST_PREREQ)),)
@@ -505,7 +508,7 @@ $$($(2)_TARGET_PATCH):      $$($(2)_TARGET_EXTRACT)
 $(1)-extract:                  $$($(2)_TARGET_EXTRACT)
 $$($(2)_TARGET_EXTRACT):       $$($(2)_TARGET_SOURCE)
 
-$(1)-depends:          $$($(2)_DEPENDENCIES)
+$(1)-depends:          $$($(2)_FINAL_DEPENDENCIES)
 
 $(1)-source:           $$($(2)_TARGET_SOURCE)
 else
@@ -515,7 +518,7 @@ else
 #  configure
 $$($(2)_TARGET_CONFIGURE):     $$($(2)_TARGET_RSYNC)
 
-$(1)-depends:          $$($(2)_DEPENDENCIES)
+$(1)-depends:          $$($(2)_FINAL_DEPENDENCIES)
 
 $(1)-patch:            $(1)-rsync
 $(1)-extract:          $(1)-rsync
@@ -526,7 +529,7 @@ $(1)-source:                $$($(2)_TARGET_RSYNC_SOURCE)
 endif
 
 $(1)-show-depends:
-                       @echo $$($(2)_DEPENDENCIES)
+                       @echo $$($(2)_FINAL_DEPENDENCIES)
 
 $(1)-graph-depends:
                        @$(INSTALL) -d $(O)/graphs