#!/bin/sh
#
# SYNOPSIS
#	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.
#
#	GNU CC 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,
#	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
#	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,
#	Posix.1, and C++ compatible header files.
#
#	Each file found under SOURCE-DIR-ALL is analyzed and "fixed."
#       Only standard ANSI/POSIX files found under SOURCE-DIR-STD
#       are analyzed and "fixed."
#	The SOURCE-DIRs are searched in order; a file found
#	under multiple SOURCE-DIRs is only handled for the first one.
#
# STRATEGY
#       Each include file is fed through cpp, and the scan-decls program
#	parses it, and emits any found function declarations.
#	The fix-header program analyzes the scan-decls output,
#	together with the original include file, and writes a "fixed"
#	include file, if needed.
#
#	The comment at the beginning of fix-header.c lists specifically
#	what kind of changes are made.
#
# NOTE
#	Some file space will be wasted, because the original header
#	files are copied.  An earlier version just included the original
#	by "reference", using GNU cpp's #include_next mechanism.
#	This is currently not done, partly because #include_next is
#	fragile (susceptible to version incompatibilities, and depends
#	and GCC-specific features), and partly for performance reasons.
#
# AUTHORS
#	Ron Guilmette (rfg@netcom.com) (original idea and code)
#	Per Bothner (bothner@cygnus.com) (major re-write)

progname=$0
progname=`basename $progname`
original_dir=`pwd`
FIX_HEADER=${FIX_HEADER-$original_dir/fix-header}
DEFINES="-D__STDC__=0 -D__cplusplus ${FIXPROTO_DEFINES}"

if [ `echo $1 | wc -w` = 0 ] ; then
  echo $progname\: usage\: $progname target-dir \[ source-dir \.\.\. \]
  exit 1
fi

std_files="ctype.h dirent.h errno.h curses.h fcntl.h grp.h locale.h math.h pwd.h setjmp.h signal.h stdio.h stdlib.h string.h sys/socket.h sys/stat.h sys/times.h sys/resource.h sys/utsname.h sys/wait.h tar.h termios.h time.h unistd.h utime.h"

rel_target_dir=$1
# All files in $src_dir_all (normally same as $rel_target_dir) are
# processed.
src_dir_all=$2
# In $src_dir_std (normally same as /usr/include), only the
# "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

# Determine whether this system has symbolic links.
if ln -s X $rel_target_dir/ShouldNotExist 2>/dev/null; then
  rm -f $rel_target_dir/ShouldNotExist
  LINKS=true
elif ln -s X /tmp/ShouldNotExist 2>/dev/null; then
  rm -f /tmp/ShouldNotExist
  LINKS=true
else
  LINKS=false
fi

if [ \! -d $abs_target_dir ] ; then
  echo $progname\: creating directory $rel_target_dir
  mkdir $abs_target_dir
fi

echo $progname\: populating \`$rel_target_dir\'

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
    include_path="$include_path -I$abs_source_dir"
  done
fi

required_stdlib_h="abort abs atexit atof atoi atol bsearch calloc exit free getenv labs malloc putenv qsort rand realloc srand strtod strtol strtoul system"
# "div ldiv", - ignored because these depend on div_t, ldiv_t
# ignore these: "mblen mbstowcs mbstowc wcstombs wctomb"
# Left out getgroups, because SunOS4 has incompatible BSD and SVR4 versions.
# Should perhaps also add NULL
required_unistd_h="_exit access alarm chdir chown close ctermid cuserid dup dup2 execl execle execlp execv execve execvp fork fpathconf getcwd getegid geteuid getgid getlogin getopt getpgrp getpid getppid getuid isatty link lseek pathconf pause pipe read rmdir setgid setpgid setsid setuid sleep sysconf tcgetpgrp tcsetpgrp ttyname unlink write"

done_dirs=""
subdirs_made=""
echo "" >fixproto.list

for code in ALL STD ; do

  subdirs="."

  case $code in
    ALL)
      rel_source_dir=$src_dir_all

      dirs="."
      levels=2
      while $LINKS && test -n "$dirs" -a $levels -gt 0
      do
        levels=`expr $levels - 1`
	newdirs=
	for d in $dirs ; do
	  # Find all directories under $d, relative to $d, excluding $d itself.
	  # Assume directory names ending in CC or containing ++ are
	  # for C++, so skip those.
	  subdirs="$subdirs "`cd $rel_source_dir/$d; find . -type d -print | \
	           sed -e '/^\.$/d' -e "s|^\./|${d}/|" -e 's|^\./||' \
		     -e '/CC$/d' -e '/[+][+]/d'`
	  links=
	  links=`cd $rel_source_dir; find $d/. -type l -print | \
		       sed -e "s|$d/./|$d/|" -e 's|^\./||'`
	  for link in $links --dummy-- ; do
	    test -d $rel_source_dir/$link/. && newdirs="$newdirs $link"
	  done
	done
	dirs="$newdirs"
	subdirs="$subdirs $newdirs"
      done
      ;;
    STD)
      rel_source_dir=$src_dir_std
      ;;
  esac

  if [ `expr $rel_source_dir : '\(.\)'` != '/' ] ; then
    abs_source_dir=$original_dir/$rel_source_dir
  else
    abs_source_dir=$rel_source_dir
  fi

  if [ \! -d $abs_source_dir ] ; then
    echo $progname\: warning\: no such directory\: \`$rel_source_dir\'
    continue
  fi

  for rel_source_subdir in $subdirs; do

      abs_target_subdir=${abs_target_dir}/${rel_source_subdir}
      if [ \! -d $abs_target_subdir ] ; then
	if mkdir $abs_target_subdir ; then
	  subdirs_made="$abs_target_subdir $subdirs_made"
	fi
      fi
      # Append "/"; remove initial "./". Hence "." -> "" and "sys" -> "sys/".
      rel_source_prefix=`echo $rel_source_subdir | sed -e 's|$|/|' -e 's|^./||'`

      case $code in
	ALL)
	  # The 'sed' is in case the *.h matches nothing, which yields "*.h"
	  # which would then get re-globbed in the current directory.  Sigh.
	  rel_source_files=`cd ${abs_source_dir}/${rel_source_subdir}; echo *.h | sed -e 's|[*].h|NONE|'`
	  ;;

	STD)
	  files_to_check="$std_files"
	  rel_source_files=""

	  # Also process files #included by the $std_files.
	  while [ -n "${files_to_check}" ]
	  do
	    new_files_to_check=""
	    for file in $files_to_check ; do
	      xxfile=`echo $file | sed -e 's|/\([^/\.][^/\.]*\)/\.\./|/|'`
	      # 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
		  subdirs_made="$abs_target_subdir/$xxdir $subdirs_made"
		fi
	      fi
	      # Just in case we have edited out a symbolic link
	      if [ -f $src_dir_std/$file -a -f $src_dir_std/$xxfile ] ; then
		file=$xxfile
	      fi
	      case " $rel_source_files " in
	        *" ${file} "*)
		  # Already seen $file; nothing to do
		  ;;
		*)
		  if test -f $src_dir_std/$file ; then
		    rel_dir=`echo $file | sed -n -e 's|^\(.*/\)[^/]*$|\1|p'`
		    # For #include "foo.h", that might be either "foo.h"
		    # or "${rel_dir}foo.h (or something bogus).
	            new_files_to_check="$new_files_to_check "`sed -n \
			-e 's@	@ @g' \
		        -e 's@^ *# *include *<\([^>]*\)>.*$@\1@p' -e \
		        's@^ *# *include *\"\([^\"]*\)\".*$@\1 '$rel_dir'\1@p'\
			<$src_dir_std/$file`
	            rel_source_files="$rel_source_files $file"
		  fi
		  ;;
	      esac
	    done
	    files_to_check="$new_files_to_check"
	  done
	  rel_source_files="$rel_source_files"
	  ;;
      esac

      for filename in $rel_source_files ; do
	rel_source_file=${rel_source_prefix}${filename}
	abs_source_file=$abs_source_dir/$rel_source_file
	abs_target_file=$abs_target_dir/$rel_source_file

	if test "$filename" = 'NONE' ; then
	  echo "(No *.h files in $abs_source_dir/$rel_source_subdir)"
	# If target file exists, check if was written while processing one
	# of the earlier source directories;  if so ignore it.
	elif test -f $abs_target_file -a -n "$done_dirs" \
	  && grep "$rel_source_file" fixproto.list >/dev/null
	then true
	else
	  $FIX_HEADER $rel_source_file $abs_source_file $abs_target_file ${DEFINES} $include_path
	  echo "${rel_source_file}" >>fixproto.list
	fi
      done
    done
    done_dirs="$done_dir $rel_source_dir"
done

# This might be more cleanly moved into the main loop, by adding
# a <dummy> source directory at the end.  FIXME!
for rel_source_file in unistd.h stdlib.h
do
  if grep "$rel_source_file" fixproto.list >/dev/null
  then true
  else
    echo Adding missing $rel_source_file
    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}
EOF
    if test $rel_source_file = stdlib.h
    then
      # Make sure it contains a definition of size_t.
      cat >>tmp.h <<EOF

#define __need_size_t
#include <stddef.h>
EOF
    fi
    cat >>tmp.h <<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
  fi
done

# Remove any directories that we made that are still empty.
rmdir $subdirs_made 2>/dev/null

exit 0
