# fixproto TARGET-DIR SOURCE-DIR-ALL SOURCE-DIR-STD
#
# COPYRIGHT
-# Copyright (C) 1993, 1994 Free Software Foundation, Inc.
-# This file is part of GNU CC.
+# Copyright (C) 1993, 1994, 1997, 1998 Free Software Foundation, Inc.
+# This file is part of GCC.
#
-# GNU CC is free software; you can redistribute it and/or modify
+# GCC 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, or (at your option)
# any later version.
#
-# GNU CC is distributed in the hope that it will be useful,
+# GCC is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
-# along with GNU CC; see the file COPYING. If not, write to
+# along with GCC; see the file COPYING. If not, write to
# the Free Software Foundation, 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.
#
# DESCRIPTION
-# Adjunct script for GNU CC to populate a directory with ANSI,
+# Adjunct script for GCC to populate a directory with ANSI,
# Posix.1, and C++ compatible header files.
#
# Each file found under SOURCE-DIR-ALL is analyzed and "fixed."
# Ron Guilmette (rfg@netcom.com) (original idea and code)
# Per Bothner (bothner@cygnus.com) (major re-write)
-progname=$0
-progname=`basename $progname`
+dirname=`echo "$0" | sed 's,^[^/]*$,.,;s,//*[^/]*$,,'`
+progname=`echo "$0" | sed 's,.*/,,'`
original_dir=`pwd`
FIX_HEADER=${FIX_HEADER-$original_dir/fix-header}
DEFINES="-D__STDC__=0 -D__cplusplus ${FIXPROTO_DEFINES}"
+if mkdir -p . 2> /dev/null; then
+ # Great, mkdir accepts -p
+ mkinstalldirs="mkdir -p"
+else
+ # We expect mkinstalldirs to be passed in the environment.
+ # If it is not, assume it is in the directory that contains this script.
+ mkinstalldirs=${mkinstalldirs-"/bin/sh $dirname/mkinstalldirs"}
+ if $mkinstalldirs . 2> /dev/null; then
+ :
+ else
+ # But, in case of failure, fallback to plain mkdir, and hope it works
+ mkinstalldirs=mkdir
+ fi
+fi
+
if [ `echo $1 | wc -w` = 0 ] ; then
echo $progname\: usage\: $progname target-dir \[ source-dir \.\.\. \]
exit 1
# "standard" ANSI/POSIX files listed in $std_files are processed.
src_dir_std=$3
-if [ `expr $rel_target_dir : '\(.\)'` != '/' ] ; then
- abs_target_dir=$original_dir/$rel_target_dir
-else
- abs_target_dir=$rel_target_dir
-fi
+case $rel_target_dir in
+ /* | [A-Za-z]:[\\/]*)
+ abs_target_dir=$rel_target_dir
+ ;;
+ *)
+ abs_target_dir=$original_dir/$rel_target_dir
+ ;;
+esac
# Determine whether this system has symbolic links.
if ln -s X $rel_target_dir/ShouldNotExist 2>/dev/null; then
if [ \! -d $abs_target_dir ] ; then
echo $progname\: creating directory $rel_target_dir
- mkdir $abs_target_dir
+ $mkinstalldirs $abs_target_dir
fi
echo $progname\: populating \`$rel_target_dir\'
if [ `echo $* | wc -w` != 0 ] ; then
for rel_source_dir in $src_dir_all $src_dir_std; do
- if [ `expr $rel_source_dir : '\(.\)'` != '/' ] ; then
- abs_source_dir=$original_dir/$rel_source_dir
- else
- abs_source_dir=$rel_source_dir
- fi
+ case $rel_source_dir in
+ /* | [A-Za-z]:[\\/]*)
+ abs_source_dir=$rel_source_dir
+ ;;
+ *)
+ abs_source_dir=$original_dir/$rel_source_dir
+ ;;
+ esac
include_path="$include_path -I$abs_source_dir"
done
fi
;;
esac
- if [ `expr $rel_source_dir : '\(.\)'` != '/' ] ; then
- abs_source_dir=$original_dir/$rel_source_dir
- else
- abs_source_dir=$rel_source_dir
- fi
+ case $rel_source_dir in
+ /* | [A-Za-z]:[\\/]*)
+ abs_source_dir=$rel_source_dir
+ ;;
+ *)
+ abs_source_dir=$original_dir/$rel_source_dir
+ ;;
+ esac
if [ \! -d $abs_source_dir ] ; then
echo $progname\: warning\: no such directory\: \`$rel_source_dir\'
abs_target_subdir=${abs_target_dir}/${rel_source_subdir}
if [ \! -d $abs_target_subdir ] ; then
- if mkdir $abs_target_subdir ; then
+ if $mkinstalldirs $abs_target_subdir ; then
subdirs_made="$abs_target_subdir $subdirs_made"
fi
fi
# Create the dir where this file will go when fixed.
xxdir=`echo ./$file | sed -e 's|/[^/]*$||'`
if [ \! -d $abs_target_subdir/$xxdir ] ; then
- if mkdir $abs_target_subdir/$xxdir ; then
+ if $mkinstalldirs $abs_target_subdir/$xxdir ; then
subdirs_made="$abs_target_subdir/$xxdir $subdirs_made"
fi
fi
then true
else
$FIX_HEADER $rel_source_file $abs_source_file $abs_target_file ${DEFINES} $include_path
+ if test $? != 0 ; then exit 1 ; fi
echo "${rel_source_file}" >>fixproto.list
fi
done
rel_source_ident=`echo $rel_source_file | tr ./ __`
required_list=`eval echo '${required_'${rel_source_ident}'-}'`
cat >tmp.h <<EOF
-#ifndef ${rel_source_ident}
-#define ${rel_source_ident}
+#ifndef __${rel_source_ident}
+#define __${rel_source_ident}
EOF
if test $rel_source_file = stdlib.h
then
fi
cat >>tmp.h <<EOF
-#endif /* ${rel_source_ident} */
+#endif /* __${rel_source_ident} */
EOF
${FIX_HEADER} $rel_source_file tmp.h $abs_target_dir/$rel_source_file ${DEFINES} $include_path
- rm tmp.h
+ if test $? != 0 ; then exit 1 ; fi
+ if test -f $abs_target_dir/$rel_source_file
+ then
+ rm tmp.h
+ else
+ mv tmp.h $abs_target_dir/$rel_source_file
+ fi
fi
done