Add shortcut to enable all features
[AGL/meta-agl.git] / scripts / .aglsetup_genconfig.bash
index c6e5a36..e73facd 100755 (executable)
@@ -5,6 +5,7 @@
 # The MIT License (MIT)
 #
 # Copyright (c) 2016 Stéphane Desneux <sdx@iot.bzh>
+#           (c) 2016 Jan-Simon Möller <jsmoeller@linuxfoundation.org>
 #
 # Permission is hereby granted, free of charge, to any person obtaining a copy
 # of this software and associated documentation files (the "Software"), to deal
@@ -30,8 +31,7 @@
 # turn execute (source) generated instructions back in the parent shell, 
 # whether it's bash, zsh, or any other supported shell
 
-VERSION=1.0.0
-AGL_REPOSITORIES="meta-agl meta-agl-extra meta-agl-contrib"
+VERSION=1.1.0
 DEFAULT_MACHINE=qemux86-64
 DEFAULT_BUILDDIR=./build
 VERBOSE=0
@@ -50,40 +50,64 @@ function debug() { [[ $DEBUG == 1 ]] && echo "DEBUG: $@" >&2; return 0;}
 
 info "------------ $SCRIPT: Starting"
 
+#compute AGL_REPOSITORIES
+AGL_REPOSITORIES=$(for x in $(ls -d $METADIR/*/templates/{machine,feature}); do echo $(basename $(dirname $(dirname $x))); done | sort -u)
+
 function list_machines() {
        for x in $@; do
                for y in $(ls -d $METADIR/$x/templates/machine/* 2>/dev/null); do
-                       echo -n "$(basename $y) "
+                       echo $(basename $y)
                done
        done
 }
 
 function list_all_machines() {
        for x in $AGL_REPOSITORIES; do
-               [[ ! -d $METADIR/$x ]] && continue
                list_machines $x
        done
 }
 
+function validate_machines() {
+       list_all_machines | sort | uniq -c | while read cnt machine; do
+               [[ $cnt == 1 ]] && continue
+               info "Machine $machine found in the following repositories:"
+               for x in $(ls -d $METADIR/*/templates/machine/$machine); do
+                       info "   - $x"
+               done
+               error "Multiple machine templates are not allowed"
+       done
+       debug "Machines list has no duplicate."
+}
+
 function list_features() {
        for x in $@; do
                for y in $(ls -d $METADIR/$x/templates/feature/* 2>/dev/null); do
-                       echo -n "$(basename $y) "
+                       echo $(basename $y)
                done
        done
 }
 
 function list_all_features() {
        for x in $AGL_REPOSITORIES; do
-               [[ ! -d $METADIR/$x ]] && continue
                list_features $x
        done
 }
 
+function validate_features() {
+       list_all_features | sort | uniq -c | while read cnt feature; do
+               [[ $cnt == 1 ]] && continue;
+               info "Feature $feature found in the following repositories:"
+               for x in $(ls -d $METADIR/*/templates/feature/$feature); do
+                       info "   - $x"
+               done
+               error "Multiple feature templates are not allowed"
+       done
+       debug "Features list has no duplicate."
+}
+
 function find_machine_dir() {
        machine=$1
        for x in $AGL_REPOSITORIES; do
-               [[ ! -d $METADIR/$x ]] && continue
                dir=$METADIR/$x/templates/machine/$machine
                [[ -d $dir ]] && { echo $dir; return 0; }
        done
@@ -93,7 +117,6 @@ function find_machine_dir() {
 function find_feature_dir() {
        feature=$1
        for x in $AGL_REPOSITORIES; do
-               [[ ! -d $METADIR/$x ]] && continue
                dir=$METADIR/$x/templates/feature/$feature
                [[ -d $dir ]] && { echo $dir; return 0; }
        done
@@ -130,12 +153,14 @@ Options:
       get some help
 
 EOF
+       local buf
        
        echo "Available machines:" >&2
        for x in $AGL_REPOSITORIES; do
-               [[ ! -d $METADIR/$x ]] && continue
+               buf=$(list_machines $x)
+               [[ -z "$buf" ]] && continue
                echo "   [$x]"
-               for y in $(list_machines $x); do 
+               for y in $buf; do 
                        [[ $y == $DEFAULT_MACHINE ]] && def="* " || def="  "
                        echo "     $def$y"
                done
@@ -144,9 +169,10 @@ EOF
 
        echo "Available features:" >&2
        for x in $AGL_REPOSITORIES; do
-               [[ ! -d $METADIR/$x ]] && continue
+               buf=$(list_features $x)
+               [[ -z "$buf" ]] && continue
                echo "   [$x]"
-               for y in $(list_features $x); do
+               for y in $buf; do
                        echo "       $y"
                done
        done
@@ -250,10 +276,26 @@ verbose "Command line arguments: ${GLOBAL_ARGS[@]}"
 # the remaining args are the features
 FEATURES="$@"
 
+# validate the machine list
+debug "validating machines list"
+validate_machines
+
 # validate the machine
 debug "validating machine $MACHINE"
 find_machine_dir $MACHINE >/dev/null || error "Machine '$MACHINE' not found in [ $(list_all_machines)]"
 
+# validate the features list
+debug "validating features list"
+validate_features
+
+if $(echo "$FEATURES" | grep -q 'agl-all-features' 2>&1 ) ; then
+    featuredir=$(find_feature_dir agl-all-features)
+    tmpfeatures="$FEATURES $(cat $featuredir/included.inc)"
+    tmpfeatures_uniq="$(echo $tmpfeatures | sed -e 's/agl-all-features//g' -e 's/  / /g' | sort -u )"
+    export FEATURES=$tmpfeatures_uniq
+    echo "Features used: $FEATURES"
+fi
+
 # validate the features
 for f in $FEATURES; do
        debug "validating feature $f"
@@ -340,17 +382,17 @@ EOF
        append_fragment $BUILDDIR/conf/setup.sh "" "echo '--- end of setup script'"
 
        infon "   Executing setup script ... "
-       execute_setup $BUILDDIR/conf/setup.sh 2>&1 | tee $BUILDDIR/conf/setup.log \
-               && { 
-                       info "OK"
-                       [[ $VERBOSE == 1 ]] && dump_log $BUILDDIR/conf/setup.log
-                       rm $BUILDDIR/conf/setup.sh
-               } \
-               || { 
-                       info "FAIL: please check $BUILDDIR/conf/setup.log"
-                       dump_log $BUILDDIR/conf/setup.log
-                       return 1
-               }
+       execute_setup $BUILDDIR/conf/setup.sh 2>&1 | tee $BUILDDIR/conf/setup.log
+       [[ ${PIPESTATUS[0]} == 0 ]] && {
+               info "OK"
+               [[ $VERBOSE == 1 ]] && dump_log $BUILDDIR/conf/setup.log
+               rm $BUILDDIR/conf/setup.sh
+       } \
+       || {
+               info "FAIL: please check $BUILDDIR/conf/setup.log"
+               dump_log $BUILDDIR/conf/setup.log
+               return 1
+       }
        # NOTE: the setup.sh script is removed if execution succeeded (only the log remains)
 }