Print this page
Factor out add_target and make sure the *.p5m files get read.
Reviewed & tested by: Dan McDonald <danmcd@omniti.com>

@@ -13,10 +13,30 @@
 
 # targets maps any valid package name to its build script.
 declare -A targets
 # fulltargets maps full package names to their build script.
 declare -A fulltargets
+
+add_target() {
+        local pkg=$1
+        local build=$2
+        [[ -n ${fulltargets[$pkg]} ]] && \
+            logerr "Target $pkg specified by ${fulltargets[$pkg]} and $build."
+        fulltargets+=([$pkg]=$build)
+
+        #
+        # Repeatedly strip off leading components to generate all valid
+        # names for this package. If more than one package has the same
+        # abbreviated name, the first one wins.
+        #
+        [[ -n ${targets[$pkg]} ]] || targets+=([$pkg]=$build)
+        while [[ $pkg =~ '/' ]]; do
+                pkg=${pkg#*/}
+                [[ -n ${targets[$pkg]} ]] || targets+=([$pkg]=$build)
+        done
+}
+
 declare -A licenses
 TCNT=0
 for build in */build*.sh
 do
     for PKG in $(grep -v '##IGNORE##' $build | sed -e 's/^ +//' -e 's/ +#.+//' -e 's/=/ /g' -e 's/^.+make_package/make_package/g' | awk '{if($1=="PKG"){PKG=$2; print $2;} if($1=="make_package"){print PKG"="$2;}}')

@@ -31,30 +51,21 @@
             LICENSE=`nawk -F "[ =]" '/"/{gsub("\"", "")} /^license/ {print $3;}' $MOG $LOCALMOG /dev/null | xargs`
             licenses+=([$PKG]=$LICENSE)
             TCNT=$(($TCNT + 1))
             print -f "."
         else
-            targets+=([$PKG]=$build)
-            fulltargets+=([$PKG]=$build)
-            #
-            # Repeatedly strip off leading components to generate all valid
-            # names for this package.
-            #
-            while [[ $PKG =~ '/' ]]; do
-                PKG=${PKG#*/}
-                targets+=([$PKG]=$build)
-            done
+                add_target $PKG $build
         fi
     done
 done
 [ -n "${AUDIT_LICENSE}" ] && echo
 
 for manifest in */*.p5m
 do
     for PKG in $(awk '/^set name=pkg.fmri/ {print $3;}' $manifest | sed -e 's/value=//' -e 's/.*\/\/[^\/]*\///g' -e 's/@.*//')
     do
-        targets+=([$PKG]=$manifest)
+        add_target $PKG $manifest
     done
 done
 
 usage() {
     echo $0