OSDN Git Service

2001-07-10 Jan van Male <jan.vanmale@fenk.wau.nl>
[pf3gnuchains/gcc-fork.git] / gcc / fixproto
index b9f8e43..d4cfa67 100755 (executable)
 #      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
@@ -75,11 +90,14 @@ src_dir_all=$2
 # "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
@@ -94,7 +112,7 @@ fi
 
 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\'
@@ -103,11 +121,14 @@ include_path=""
 
 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
@@ -160,11 +181,14 @@ for code in ALL STD ; do
       ;;
   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\'
@@ -175,7 +199,7 @@ for code in ALL STD ; do
 
       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
@@ -202,7 +226,7 @@ for code in ALL STD ; do
              # 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
@@ -249,6 +273,7 @@ for code in ALL STD ; do
        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
@@ -284,7 +309,13 @@ EOF
 #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