#!/bin/sh # # $NetBSD: src2nbcompat,v 1.8 2005/02/04 00:43:42 jlam 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 [ $# -lt 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 make_dir() { _d="$1" _destdir="$2" _newd=${3-`echo $_d | sed 's,^\./,,'`} case $_newd in *CVS) ;; .) ;; *) mkdir -p $_destdir/$_newd ;; esac } copy_file() { _f="$1" _destdir="$2" _newf=${3-`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. ;; *.sh) # Assume shell scripts will require variable substitution # by the GNU configure script. # cp $_f $_destdir/$_newf.in ;; *.[ch]) # Add "#include " before the first system # header inclusion. Protect all system headers with # "#if HAVE_FOO_H ... #endif" guards. # gawk ' \ BEGIN { config = 0; nbcompat = 0 } \ /^#[ ]*if[ ]+HAVE_NBTOOL_CONFIG_H/ { \ if (config == 0) { \ print "#if HAVE_CONFIG_H"; \ print "#include \"config.h\""; \ print "#endif"; \ config = 1; \ } \ } \ /^#[ ]*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 = 1; \ }; \ print "#if " guard; \ print $0; \ print "#endif"; \ next; \ } \ { print } \ ' $_f > $_destdir/$_newf.tmp if [ -f $_destdir/$_newf ] && \ diff -q -I "\$NetBSD.*\$" $_destdir/$_newf $_destdir/$_newf.tmp >/dev/null; then rm -f $_destdir/$_newf.tmp else rm -f $_destdir/$_newf mv $_destdir/$_newf.tmp $_destdir/$_newf fi ;; *.[1-9]) # Copy the manpage over, and generate the catpage. cp $_newf $_destdir/$_newf.tmp if [ -f $_destdir/$_newf ] && \ diff -q -I "\$NetBSD.*\$" $_destdir/$_newf $_destdir/$_newf.tmp >/dev/null; then rm -f $_destdir/$_newf.tmp else mv -f $_destdir/$_newf.tmp $_destdir/$_newf _catf=`echo $_newf | sed 's,\.\([1-9]\),.cat\1,'` nroff -mandoc $_newf > $_destdir/$_catf fi ;; *) # Everything else just gets copied verbatim. cp $_newf $_destdir/$_newf.tmp if [ -f $_destdir/$_newf ] && \ diff -q -I "\$NetBSD.*\$" $_destdir/$_newf $_destdir/$_newf.tmp >/dev/null; then rm -f $_destdir/$_newf.tmp else mv -f $_destdir/$_newf.tmp $_destdir/$_newf fi ;; esac } if [ -f "$src" ]; then srcdir=`dirname $src` destdir=`dirname $dest` else srcdir="$src" destdir="$dest" fi echo "Preparing directory $destdir" mkdir -p $destdir if [ -f "$src" ]; then echo "Copying $src to $dest" cd $srcdir copy_file `basename $src` $destdir `basename $dest` else echo "Copying files and directories to $destdir" cd $srcdir find . -type d -print | while read d; do make_dir $d $destdir done find . \! -type d -print | while read f; do copy_file $f $destdir done fi