#!/usr/pkg/bin/runawk

# Copyright (c) 2010-2015, Aleksey Cheusov <vle@gmx.net>
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
#     * Redistributions of source code must retain the above copyright
#       notice, this list of conditions and the following disclaimer.
#     * Redistributions in binary form must reproduce the above
#       copyright notice, this list of conditions and the following
#       disclaimer in the documentation and/or other materials provided
#       with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

$1 ~ /PKGPATH=/ {
	pkgpath = substr($0, 9)
	next
}

$1 ~ /_VARIANTS=/ {
	variants = substr($0, 11)
	next
}

match($1, /^_INHER_ASSIGNS(=|_REJ=)/) {
	addon = substr($0, RLENGTH+1)
	if (!addon)
		next

	if (assigns)
		assigns = assigns "," addon
	else
		assigns = addon

	next
}

NF == 0 {
	$0 = variants
	count = 0
	for (k=1; k <= NF; ++k){
		values = varname = $k
		sub(/=.*$/, "", varname)
		sub(/^[^=]*=/, "", values)

		cnt = split(values, vals, /,/)

		if (count){
			new_count = count
			for (i=1; i <= count; ++i){
				if (!(i in variant)) continue

				for (j=1; j <= cnt; ++j){
					++new_count
					variant [new_count] = (variant [i] "," varname "=" vals [j])
				}
				delete variant [i]
			}
			count = new_count
		}else{
			for (j=1; j <= cnt; ++j){
				variant [j] = (varname "=" vals [j])
			}
			count = cnt
		}
	}

	for (i = 1; i <= count; ++i){
		if (i in variant)
			if (assigns)
				print pkgpath ":" assigns "," variant [i]
			else
				print pkgpath ":" variant [i]
	}

	assigns = pkgpath = variants = ""
	delete variant
}
