Annotation of gcc/populate, revision 1.1.1.1

1.1       root        1: #!/bin/sh
                      2: #
                      3: # NAME
                      4: #      populate
                      5: #
                      6: # SYNOPSIS
                      7: #      populate target-dir [ source-dir ... ]
                      8: #
                      9: # DESCRIPTION
                     10: #      Adjunct script for GNU C++ to populate a directory with C++
                     11: #      compatible header files.
                     12: #
                     13: #      For each header file (whose name ends in .h) which resides in one
                     14: #      of the indicated source-dirs, create a corresponding file in the
                     15: #      target-dir (with the same name) which looks like:
                     16: #
                     17: #              #ifndef __IN_C_REGION__
                     18: #              #define __IN_C_REGION__
                     19: #              extern "C" {
                     20: #              #include_next <header.h>
                     21: #              }
                     22: #              #undef __IN_C_REGION__
                     23: #              #else
                     24: #              #include_next <header.h>
                     25: #              #endif
                     26: #
                     27: #      Where "header.h" is the name of the original header file in the
                     28: #      source-dir.
                     29: #
                     30: #      If a file with the appropriate name already exists in the target
                     31: #      directory, it will not be overwritten.
                     32: #
                     33: # NOTES
                     34: #      This script assumes that your native header files are already
                     35: #      at least compliant with ANSI C, and that all functions declared
                     36: #      therein are properly prototyped (as they must be for C++).
                     37: #
                     38: #      Currently, this condition is not fully satisfied by many (if any)
                     39: #      systems.  On System V Release 4, most of the system header files
                     40: #      do seem to be properly prototyped though, and OSF/1 also has
                     41: #      prototyped header files, but some of the argument type specifica-
                     42: #      tions for some function prototypes in some OSF/1 header files may
                     43: #      lack `const' qualifiers in certain places where they ought to appear.
                     44: #      (This is due to the fact that OSF/1 conformat to POSIX-1988 rather
                     45: #      than to the newer POSIX-1990 standard.)
                     46: #
                     47: #      If your system's native include files are not properly prototyped,
                     48: #      that's OK.  This script will still do it's normal job (in the normal
                     49: #      way) but the resulting (indirect) header files will not be very useful
                     50: #      for g++ programming unless (and until) somebody puts in all of the
                     51: #      prototypes for all of the functions which are declared in these files.
                     52: #
                     53: #      Note that in some cases, a header file with a given name may exist
                     54: #      in two or more of the given source directories.  That's perfectly
                     55: #      alright.  Only one (corresponding) header file will be placed into
                     56: #      the target directory for each such group of kindred source files.
                     57: #
                     58: #      This script should probably be invoked from the GCC Makefile, via:
                     59: #
                     60: #        populate $(libdir)/g++-include $(libsubdir)/include /usr/include
                     61: #
                     62: #      That would insure the creation of a C++ compatible set of headers
                     63: #      (in the sepcial g++-include directory) corresponding to all of the
                     64: #      normal GCC header files and all of the native system's header files.
                     65: #
                     66: # AUTHOR
                     67: #      Ron Guilmette ([email protected])
                     68: #
                     69: # COPYRIGHT
                     70: #      This file is part of GNU CC.
                     71: #
                     72: #      GNU CC is free software; you can redistribute it and/or modify
                     73: #      it under the terms of the GNU General Public License as published by
                     74: #      the Free Software Foundation; either version 2, or (at your option)
                     75: #      any later version.
                     76: #
                     77: #      GNU CC is distributed in the hope that it will be useful,
                     78: #      but WITHOUT ANY WARRANTY; without even the implied warranty of
                     79: #      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                     80: #      GNU General Public License for more details.
                     81: #
                     82: #      You should have received a copy of the GNU General Public License
                     83: #      along with GNU CC; see the file COPYING.  If not, write to
                     84: #      the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
                     85: 
                     86: progname=$0
                     87: progname=`basename $progname`
                     88: original_dir=`pwd`
                     89: if [ `echo $1 | wc -w` = 0 ] ; then
                     90:   echo $progname\: usage\: $progname target-dir \[ source-dir \.\.\. \]
                     91:   exit 1
                     92: fi
                     93: rel_target_dir=$1
                     94: shift
                     95: 
                     96: if [ `expr $rel_target_dir : '\(.\)'` != '/' ] ; then
                     97:   abs_target_dir=$original_dir/$rel_target_dir
                     98: else
                     99:   abs_target_dir=$rel_target_dir
                    100: fi
                    101: 
                    102: if [ \! -d $abs_target_dir ] ; then
                    103:   echo $progname\: creating directory $rel_target_dir
                    104:   mkdir $abs_target_dir
                    105: fi
                    106: 
                    107: echo $progname\: populating \`$rel_target_dir\'
                    108: 
                    109: if [ `echo $* | wc -w` != 0 ] ; then
                    110:   for rel_source_dir in $*; do
                    111:     if [ `expr $rel_source_dir : '\(.\)'` != '/' ] ; then
                    112:       abs_source_dir=$original_dir/$rel_source_dir
                    113:     else
                    114:       abs_source_dir=$rel_source_dir
                    115:     fi
                    116:     echo $progname\: input dir\: \`$rel_source_dir\'
                    117:   done
                    118: fi
                    119: 
                    120: tmp_file=/tmp/$progname.$$
                    121: rm -f $tmp_file
                    122: echo '#ifndef __IN_C_REGION__' > $tmp_file
                    123: echo '#define __IN_C_REGION__' >> $tmp_file
                    124: echo 'extern "C" {' >> $tmp_file
                    125: echo '#include_next <=>' >> $tmp_file
                    126: echo '}' >> $tmp_file
                    127: echo '#undef __IN_C_REGION__' >> $tmp_file
                    128: echo '#else' >> $tmp_file
                    129: echo '#include_next <=>' >> $tmp_file
                    130: echo '#endif' >> $tmp_file
                    131: 
                    132: if [ `echo $* | wc -w` != 0 ] ; then
                    133:   for rel_source_dir in $*; do
                    134:     if [ `expr $rel_source_dir : '\(.\)'` != '/' ] ; then
                    135:       abs_source_dir=$original_dir/$rel_source_dir
                    136:     else
                    137:       abs_source_dir=$rel_source_dir
                    138:     fi
                    139:     if [ \! -d $abs_source_dir ] ; then
                    140:       echo $progname\: warning\: no such directory\: \`$rel_source_dir\'
                    141:       continue
                    142:     fi
                    143:     cd $abs_source_dir
                    144:     rel_source_subdirs=`find . -type d -print | sed 's%^\./%%' | sed 's/\.//'`
                    145:     if [ `echo $rel_source_subdirs | wc -w` != 0 ] ; then
                    146:       for rel_source_subdir in $rel_source_subdirs; do
                    147:         abs_target_subdir=$abs_target_dir/$rel_source_subdir
                    148:         if [ \! -d $abs_target_subdir ] ; then
                    149:           mkdir $abs_target_subdir
                    150:         fi
                    151:       done
                    152:     fi
                    153:     rel_source_files=`find . -type f -name \*.h -print | sed 's%^\./%%'`
                    154:     if [ `echo $rel_source_files | wc -w` != 0 ] ; then
                    155:       for rel_source_file in $rel_source_files; do
                    156:        abs_source_file=$abs_source_dir/$rel_source_file
                    157:        abs_target_file=$abs_target_dir/$rel_source_file
                    158:         if [ \! -f $abs_target_file ] ; then
                    159:           sed 's%=%'"$rel_source_file"'%' $tmp_file > $abs_target_file
                    160:         fi
                    161:       done
                    162:     fi
                    163:   done
                    164: fi
                    165: rm -f $tmp_file
                    166: exit 0

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.