#!/bin/sh
#
#	$NetBSD: src2nbcompat,v 1.1.1.1 2003/10/18 09:27:54 grant Exp $
#
# Copyright (c) 2003 The NetBSD Foundation, Inc.
# All rights reserved.
#
# This code is derived from software contributed to The NetBSD Foundation
# by Johnny C. Lam.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
# 2. 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.
# 3. All advertising materials mentioning features or use of this software
#    must display the following acknowledgement:
#        This product includes software developed by the NetBSD
#        Foundation, Inc. and its contributors.
# 4. Neither the name of The NetBSD Foundation nor the names of its
#    contributors may be used to endorse or promote products derived
#    from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
#

if [ $# -ne 2 ]; then echo "src2nbcompat src dest"; exit 1; fi

src=$1
dest=$2

case "$src" in
/*)	;;
*)	src=`pwd`/$src ;;
esac

case "$dest" in
/*)	;;
*)	dest=`pwd`/$dest ;;
esac

echo "Preparing directory $dest"
mkdir -p $dest

echo "Copying files and directories to $dest"
cd $src
dirs=`find . -type d -print`
for d in $dirs; do
	newd=`echo $d | sed 's,^\./,,'`
	case $newd in
	*CVS)
		;;
	.)
		;;
	*)
		mkdir -p $dest/$newd
		;;
	esac
done
files=`find . \! -type d -print`
for f in $files; do
	newf=`echo $f | sed 's,^\./,,'`
	case $newf in
	*CVS/*)
		# Skip copying over any CVS information.
		;;
	*Makefile|*Makefile.inc)
		# Skip copying over the Makefiles since we'll be using
		# a GNU autoconf-based build infrastructure.
		;;
	*.[ch])
		# Add "#include <nbcompat.h>" before the first system
		# header inclusion.  Protect all system headers with
		# "#if HAVE_FOO_H ... #endif" guards.
		#
		awk '							\
			BEGIN { config = 0; nbcompat = 0 }		\
			/^\#[ 	]*include[ 	]+/ {			\
				if (config == 0) {			\
					print "\#if HAVE_CONFIG_H";	\
					print "\#include \"config.h\"";	\
					print "\#endif";		\
					config = 1;			\
				}					\
			}						\
			/^\#[ 	]*include[ 	]+<[^ 	]*>/ {		\
				guard = toupper(gensub("[-/.]", "_", "g", gensub("\#[ 	]*include[ 	]+<\([^ 	]*\)>", "HAVE_\\1", "g"))); \
				if (nbcompat == 0) {			\
					print "\#include <nbcompat.h>";	\
					nbcompat = 1;			\
				};					\
				print "\#if " guard;			\
				print $0;				\
				print "\#endif";			\
				next;					\
			}						\
			{ print }					\
		' $newf > $dest/$newf.tmp
		if [ -f $dest/$newf ] &&				\
		   diff -q -I "\$NetBSD.*\$" $dest/$newf $dest/$newf.tmp >/dev/null; then
			rm -f $dest/$newf.tmp
		else
			rm -f $dest/$newf
			mv $dest/$newf.tmp $dest/$newf
		fi
		;;
	*.[1-9])
		# Copy the manpage over, and generate the catpage.
		cp $newf $dest/$newf.tmp
		if [ -f $dest/$newf ] &&				\
		   diff -q -I "\$NetBSD.*\$" $dest/$newf $dest/$newf.tmp >/dev/null; then
			rm -f $dest/$newf.tmp
		else
			mv -f $dest/$newf.tmp $dest/$newf
			catf=`echo $newf | sed 's,\.\([1-9]\),.cat\1,'`
			nroff -mandoc $newf > $dest/$catf
		fi
		;;
	*)
		# Everything else just gets copied verbatim.
		cp $newf $dest/$newf.tmp
		if [ -f $dest/$newf ] &&				\
		   diff -q -I "\$NetBSD.*\$" $dest/$newf $dest/$newf.tmp >/dev/null; then
			rm -f $dest/$newf.tmp
		else
			mv -f $dest/$newf.tmp $dest/$newf
		fi
		;;
	esac
done
