#
# Public Release 3
# 
# $Id: config.files.awk,v 1.2 1997/07/17 22:46:25 chopps Exp $
#
# ------------------------------------------------------------------------
# 
# Copyright (c) 1996, 1997 The Regents of the University of Michigan
# All Rights Reserved
#  
# Royalty-free licenses to redistribute GateD Release
# 3 in whole or in part may be obtained by writing to:
# 
# 	Merit GateDaemon Project
# 	4251 Plymouth Road, Suite C
# 	Ann Arbor, MI 48105
#  
# THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
# EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION WARRANTIES OF 
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE REGENTS OF THE
# UNIVERSITY OF MICHIGAN AND MERIT DO NOT WARRANT THAT THE
# FUNCTIONS CONTAINED IN THE SOFTWARE WILL MEET LICENSEE'S REQUIREMENTS OR
# THAT OPERATION WILL BE UNINTERRUPTED OR ERROR FREE. The Regents of the
# University of Michigan and Merit shall not be liable for
# any special, indirect, incidental or consequential damages with respect
# to any claim by Licensee or any third party arising from use of the
# software. GateDaemon was originated and developed through release 3.0
# by Cornell University and its collaborators.
# 
# Please forward bug fixes, enhancements and questions to the
# gated mailing list: gated-people@gated.merit.edu.
# 
# ------------------------------------------------------------------------
# 
# Copyright (c) 1990,1991,1992,1993,1994,1995 by Cornell University.
#     All rights reserved.
# 
# THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
# LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY
# AND FITNESS FOR A PARTICULAR PURPOSE.
# 
# GateD is based on Kirton's EGP, UC Berkeley's routing
# daemon	 (routed), and DCN's HELLO routing Protocol.
# Development of GateD has been supported in part by the
# National Science Foundation.
# 
# ------------------------------------------------------------------------
# 
# Portions of this software may fall under the following
# copyrights:
# 
# Copyright (c) 1988 Regents of the University of California.
# All rights reserved.
# 
# Redistribution and use in source and binary forms are
# permitted provided that the above copyright notice and
# this paragraph are duplicated in all such forms and that
# any documentation, advertising materials, and other
# materials related to such distribution and use
# acknowledge that the software was developed by the
# University of California, Berkeley.  The name of the
# University may not be used to endorse or promote
# products derived from this software without specific
# prior written permission.  THIS SOFTWARE IS PROVIDED
# ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES,
# INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
#
BEGIN {
	OBJS[""]=  "" ;
	SRCS[""]=  "" ;
	HDRS[""]=  "" ;
	DEFS[""]=  "" ;
	MYS[""]=  "" ;
	MANS[""] = "" ;
	MANS["ALL_"] = "" ;
	LINKS = "" ;
}


#	Ignore comments and blank lines
#
/^#.*$/	|| /^[ \t]*$/ {
	next ;
}

{
	if (NF >= 2) {
		INDEX = $2 ;
	} else {
		INDEX = "" ;
	}	
}


#	C files
#
substr($1, length($1) - 1, 2) == ".c" {
	src = $1 ;
	if (index(src, "/")) {
		LINKS = LINKS " " src ;
		while (c = index(src, "/")) {
			src = substr(src, c+1) ;
		}
	}
	SRCS[INDEX] = SRCS[INDEX] " " src ;
	OBJS[INDEX] = OBJS[INDEX] " " substr(src, 1, length(src) - 2) ".o" ;
	next ;
}


#	H files
#
substr($1, length($1) - 1, 2) == ".h" {
	hdr = $1 ;
	if (index(hdr, "/")) {
		LINKS = LINKS " " hdr ;
		while (c = index(hdr, "/")) {
			hdr = substr(hdr, c+1) ;
		}
	}
	HDRS[INDEX] = HDRS[INDEX] " " hdr ;
	next ;
}


#	L files
#
substr($1, length($1) - 1, 2) == ".l" {
	if (index($1, "/")) {
		LINKS = LINKS " " $1 ;
	}
	next ;
}


#	Object files
#
substr($1, length($1) - 1, 2) == ".o" {
	OBJS[INDEX] = OBJS[INDEX] " " $1 ;
	next ;
}


#	ISODE SNMP MIB definition files
#
substr($1, length($1) - 4, 5) == ".defs" {
	def = $1 ;
	DEFS[INDEX] = DEFS[INDEX] " " def ;
	next ;
}

substr($1, length($1) - 2, 3) == ".my" {
	my = $1 ;
	MYS[INDEX] = MYS[INDEX] " " my ;
	next ;
}


#	Man pages
#
substr($1, length($1) - 1, 2) == ".8" {
	man = $1 ;
	if (index(man, "/")) {
		LINKS = LINKS " " man ;
		while (c = index(man, "/")) {
			man = substr(man, c+1) ;
		}
	}
	MANS[INDEX] = MANS[INDEX] " " man ;
	MANS["ALL_"] = MANS["ALL_"] " " man ;
	next;
}
#
#	Catch invalid file names
#	
{
	printf "invalid input on line %d: %s\n", NR, $0 ;
	error = 1;
	exit 1;
}


#	Print the Makefile header
#
END {
	for (i in SRCS) {
		n_files = split(SRCS[i], files, " ") ;

		if (n_files > 1) {
			printf "%sSRCS=\t%s \\\n", i, files[1] > MAKEFILE ;
			for (ii = 2; ii < n_files; ii++) {
				printf "\t%s \\\n", files[ii] > MAKEFILE ;
			}
			printf "\t%s\n\n", files[ii] > MAKEFILE ;
		} else {
			printf "%sSRCS=\t%s\n\n", i, files[1] > MAKEFILE ;
		}
	}
	for (i in HDRS) {
		n_files = split(HDRS[i], files, " ") ;

		if (n_files > 1) {
			printf "%sHDRS=\t%s \\\n", i, files[1] > MAKEFILE ;
			for (ii = 2; ii < n_files; ii++) {
				printf "\t%s \\\n", files[ii] > MAKEFILE ;
			}
			printf "\t%s\n\n", files[ii] > MAKEFILE ;
		} else {
			printf "%sHDRS=\t%s\n\n", i, files[1] > MAKEFILE ;
		}
	}
	for (i in OBJS) {
		n_files = split(OBJS[i], files, " ") ;

		if (n_files > 1) {
			printf "%sOBJS=\t%s \\\n", i, files[1] > MAKEFILE ;
			for (ii = 2; ii < n_files; ii++) {
				printf "\t%s \\\n", files[ii] > MAKEFILE ;
			}
			printf "\t%s\n\n", files[ii] > MAKEFILE ;
		} else {
			printf "%sOBJS=\t%s\n\n", i, files[1] > MAKEFILE ;
		}
	}
	for (i in DEFS) {
		n_files = split(DEFS[i], files, " ") ;

		if (n_files > 1) {
			printf "%sDEFS=\t%s \\\n", i, files[1] > MAKEFILE ;
			for (ii = 2; ii < n_files; ii++) {
				printf "\t%s \\\n", files[ii] > MAKEFILE ;
			}
			printf "\t%s\n\n", files[ii] > MAKEFILE ;
		} else {
			printf "%sDEFS=\t%s\n\n", i, files[1] > MAKEFILE ;
		}
	}
	for (i in MYS) {
		n_files = split(MYS[i], files, " ") ;

		if (n_files > 1) {
			printf "%sMYS=\t%s \\\n", i, files[1] > MAKEFILE ;
			for (ii = 2; ii < n_files; ii++) {
				printf "\t%s \\\n", files[ii] > MAKEFILE ;
			}
			printf "\t%s\n\n", files[ii] > MAKEFILE ;
		} else {
			printf "%sMYS=\t%s\n\n", i, files[1] > MAKEFILE ;
		}
	}
	for (i in MANS) {
		n_files = split(MANS[i], files, " ") ;

		if (n_files > 1) {
			printf "%sMANS=\t%s \\\n", i, files[1] > MAKEFILE ;
			for (ii = 2; ii < n_files; ii++) {
				printf "\t%s \\\n", files[ii] > MAKEFILE ;
			}
			printf "\t%s\n\n", files[ii] > MAKEFILE ;
		} else {
			printf "%sMANS=\t%s\n\n", i, files[1] > MAKEFILE ;
		}
	}
	n_files = split(LINKS, files, " ") ;

	if (n_files > 1) {
		printf "LINKS=\t%s \\\n", files[1] > MAKEFILE ;
		for (ii = 2; ii < n_files; ii++) {
			printf "\t%s \\\n", files[ii] > MAKEFILE ;
		}
		printf "\t%s\n\n", files[ii] > MAKEFILE ;
	} else {
		printf "LINKS=\t%s\n\n", files[1] > MAKEFILE ;
	}
}
