#!/usr/bin/gawk -f
#
# --- ROCK-COPYRIGHT-NOTE-BEGIN ---
# 
# This copyright note is auto-generated by ./scripts/Create-CopyPatch.
# Please add additional copyright information _after_ the line containing
# the ROCK-COPYRIGHT-NOTE-END tag. Otherwise it might get removed by
# the ./scripts/Create-CopyPatch script. Do not edit this copyright text!
# 
# ROCK Linux: rock-src/scripts/Check-Deps-1
# ROCK Linux is Copyright (C) 1998 - 2003 Clifford Wolf
# 
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version. A copy of the GNU General Public
# License can be found at Documentation/COPYING.
# 
# Many people helped and are helping developing ROCK Linux. Please
# have a look at http://www.rocklinux.org/ and the Documentation/TEAM
# file for details.
# 
# --- ROCK-COPYRIGHT-NOTE-END ---

function check_package() {
	split(pkgline, a); dep=a[2];
	if ( ! index(a[2], stagelevel) ) return;

	repository = a[4];
	package = a[5];

	present = present " " package " ";
	if ( stagelevel < 2 ) return;

	depfile = depfile_tpl;
	gsub("<stagelevel>", stagelevel, depfile);
	gsub("<repository>", repository, depfile);
	gsub("<package>",    package,    depfile);

	firstent=1;
	gsub(" \\[.\\]:" repository "/" package ":[^ ]*", "", errors);
	while ( (getline depline < depfile) > 0 ) {
		split(depline, a);
		if (a[1] != "[DEP]") continue;

		for (c=2; a[c] != ""; c++) {
			if ( a[c] == package ) continue;
			if ( ! index(present, " " a[c] " ") ) {
				if (firstent)
					errors = errors " [" stagelevel "]:" \
					         repository "/" package ":";
				errors = errors ":" a[c];
				firstent=0;
			}
		}
	}

	close(depfile);
}

BEGIN {
	present="";
	errors="";

	system("mkdir -p src ; ./scripts/Create-PkgList > src/pkg_list");
	depfile_tpl = "package/<repository>/<package>/<package>.cache";

	for (stagelevel=0; stagelevel<9; stagelevel++) {
		while ( (getline pkgline < "src/pkg_list") > 0 ) {
			check_package();
		}
		close("src/pkg_list");
	}
	system("rm -f src/pkg_list");

	if (errors != "") {

		print "\nThe following packages have dependencies which";
		print "are not solved before stage 9:\n";

		print "Stage Package                 Dependencies";

		gsub(" ", "\n", errors);
		gsub("::", "\t", errors);
		gsub(":", " ", errors);

		print errors | "expand -t30";
	}
}