setup: Use config name instead layer name

Allows user to pass a config name instead of a layer name.
This can be extremely useful for layers, which contain several configs.

E.g. to build firmware for swift you can call:
```
. setup swift
bitbake obmc-phosphor-image
```

Change-Id: I397a53b0cc135f622e4b3dc712ff93f6a0c10b8a
Signed-off-by: Alexander Filippov <a.filippov@yadro.com>
diff --git a/setup b/setup
index a1b3cc1..09329cd 100755
--- a/setup
+++ b/setup
@@ -24,24 +24,28 @@
 machine() {
 	local target=$1
 	local build_dir=$2
-	local mfg mach realmach
-	for mfg in meta-*; do
-		for mach in $mfg/meta-*; do
-			if [ -d "$mach" -a -d "$mach/conf/machine" ]; then
-				realmach=${mach##*meta-}
-				# If a target is specified, then check for a match,
-				# otherwise just list what we've discovered
-				if [ -n "$target" ]; then
-					if [ "$realmach" = "$target" ]; then
-						echo Machine $target is $mach
-						TEMPLATECONF="$mach/conf" source oe-init-build-env $build_dir
-						return
-					fi
-				else
-					echo "$realmach"
+	local cfg name tmpl
+	for cfg in meta-*/meta-*/conf/machine/*.conf; do
+		name=${cfg##*/}
+		name=${name%.conf}
+		tmpl=${cfg%/machine/*.conf}
+		# If a target is specified, then check for a match,
+		# otherwise just list what we've discovered
+		if [ -n "$target" ]; then
+			if [ "${name}" = "${target}" ]; then
+				echo "Machine ${target} found in ${tmpl%/conf}"
+				TEMPLATECONF="${tmpl}" source \
+						oe-init-build-env ${build_dir}
+
+				if [ "$(cat conf/templateconf.cfg)" = "${tmpl}" ]; then
+					sed "s/^\(MACHINE\s*[?:]*\s*=\s*\).*$/\1${target}/" \
+						-i conf/local.conf
 				fi
+				return
 			fi
-		done
+		else
+			echo "${name}"
+		fi
 	done
 
 	[ -n "$target" ] && echo "No such machine!"