Print this page
1575 untangle libmlrpc ... (libmlrpc)

Split Close
Expand all
Collapse all
          --- old/usr/src/tools/ndrgen/ndrgen.sh
          +++ new/usr/src/tools/ndrgen/ndrgen.sh
↓ open down ↓ 11 lines elided ↑ open up ↑
  12   12  # and limitations under the License.
  13   13  #
  14   14  # When distributing Covered Code, include this CDDL HEADER in each
  15   15  # file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  16   16  # If applicable, add the following below this CDDL HEADER, with the
  17   17  # fields enclosed by brackets "[]" replaced with your own identifying
  18   18  # information: Portions Copyright [yyyy] [name of copyright owner]
  19   19  #
  20   20  # CDDL HEADER END
  21   21  #
       22 +
  22   23  #
  23   24  # Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  24   25  # Use is subject to license terms.
  25   26  #
       27 +# Copyright 2013 Nexenta Systems, Inc.  All rights reserved.
       28 +#
  26   29  
  27   30  # This is a wrapper script around the ndrgen compiler (ndrgen1).
  28      -# CC must be defined in the environment or on the command line.
  29   31  
  30      -NDRPROG="${0%/*}/ndrgen1"
  31      -INCDIR=${ROOT}/usr/include/smbsrv
       32 +NDRPROG="${0}1"
  32   33  
       34 +# Note: most *.ndl files require an ANSI-compatible cpp,
       35 +# so we can NOT use /usr/lib/cpp or /usr/ccs/lib/cpp
       36 +# Wish there was an easier way to get an ANSI cpp.
       37 +CPP="${CC} -E"
       38 +CPPFLAGS="-DNDRGEN"
       39 +V_FLAG=
       40 +
  33   41  PROGNAME=`basename $0`
  34   42  
  35   43  ndrgen_usage()
  36   44  {
  37   45          if [[ $1 != "" ]] ; then
  38   46                  print "$PROGNAME: ERROR: $1"
  39   47          fi
  40   48  
  41      -        echo "usage: $PROGNAME [-Y cpp-path] file [file]..."
       49 +        echo "usage: $PROGNAME [options] file.ndl [file.ndl]..."
       50 +        echo "  options: -Y cc-path -Ddefine -Iinclude"
  42   51          exit 1
  43   52  }
  44   53  
  45      -# Copy header text from the input ndl file to the generated ndr C file.
  46      -ndrgen_copy_header()
       54 +# Process the input ndl file ($1) generating C code on stdout.
       55 +process()
  47   56  {
  48      -        ndl_file=$1
  49      -        ndr_file=$2
  50   57  
       58 +        # Put the standard top matter
       59 +        #
       60 +        # Want the include directive to have just
       61 +        # include "file.ndl" (no path) so...
       62 +        inc_ndl=`basename $1`
       63 +        cat - << EOF
       64 +/*
       65 + * Please do not edit this file.
       66 + * It was generated using ndrgen.
       67 + */
       68 +
       69 +#include <strings.h>
       70 +#include <libmlrpc/ndr.h>
       71 +#include "$inc_ndl"
       72 +EOF
       73 +
       74 +        # Put optional custom top matter
  51   75          nawk 'BEGIN { copy=0; }
  52   76          /^\/\* NDRGEN_HEADER_BEGIN \*\// { copy=1; next; }
  53   77          /^\/\* NDRGEN_HEADER_END \*\// { copy=0; next; }
  54      -        /./ { if (copy==1) print; }' < $ndl_file > $ndr_file
       78 +        /./ { if (copy==1) print; }' $1
       79 +
       80 +        # now the real ndrgen output
       81 +        [ -n "$V_FLAG" ] &&
       82 +          echo "$CPP $CPPFLAGS $1 | $NDRPROG" >&2
       83 +        $CPP $CPPFLAGS $1 | $NDRPROG
  55   84  }
  56   85  
  57      -if [[ $# -lt 1 ]] ; then
  58      -        ndrgen_usage
  59      -fi
  60   86  
  61      -while getopts "Y" FLAG $*; do
       87 +while getopts "D:I:Y:V" FLAG
       88 +do
  62   89          case $FLAG in
  63      -        Y)
  64      -                CC_FLAG="y"
  65      -                ;;
  66      -        *)
  67      -                ndrgen_usage
  68      -                ;;
       90 +        D|I)    CPPFLAGS="$CPPFLAGS -${FLAG}${OPTARG}";;
       91 +        Y)      CPP="$OPTARG";;
       92 +        V)      V_FLAG="V";;
       93 +        *)      ndrgen_usage;;
  69   94          esac
  70   95  done
       96 +shift $(($OPTIND - 1))
  71   97  
  72      -if [[ $CC_FLAG = "y" ]] ; then
  73      -        shift $(($OPTIND - 1))
  74      -
  75      -        if [[ $# -lt 1 ]] ; then
  76      -                ndrgen_usage "C pre-processor path is missing"
  77      -        else
  78      -                CC=$1
  79      -                shift $(($OPTIND - 1))
  80      -
  81      -                # Check for cw being invoked with -_cc or -_gcc
  82      -                if [[ $1 = "-_cc" || $1 = "-_gcc" ]] ; then
  83      -                        CC_ARG=$1
  84      -                        shift $(($OPTIND - 1))
  85      -                fi
  86      -        fi
       98 +if [[ $# -lt 1 ]] ; then
       99 +        ndrgen_usage
  87  100  fi
  88  101  
  89      -if [[ $CC = "" ]] ; then
  90      -        ndrgen_usage "C pre-processor is not defined"
      102 +if [ ! -x $CPP ] ; then
      103 +        ndrgen_usage "cannot run $CPP"
  91  104  fi
  92  105  
  93      -if [ ! -f $CC ] || [ ! -x $CC ] ; then
  94      -        ndrgen_usage "cannot run $CC"
  95      -fi
  96      -
  97  106  for i
  98  107  do
  99  108          if [[ ! -r $i ]] ; then
 100  109                  print "$PROGNAME: ERROR: cannot read $i"
 101  110                  exit 1
 102  111          fi
 103  112  
 104      -        BASENAME=`basename $i .ndl`
 105      -        TMP_NAME=$BASENAME.ndl.c
 106      -
 107      -        cp $i $TMP_NAME
 108      -
 109      -        if $CC $CC_ARG -E  -D__a64 -D__EXTENSIONS__ -D_FILE_OFFSET_BITS=64 \
 110      -                -I. -I${INCDIR} -I${INCDIR}/ndl -DNDRGEN $TMP_NAME | \
 111      -                $NDRPROG > $BASENAME.raw
 112      -        then
 113      -                touch ${BASENAME}_ndr.c
 114      -                ndrgen_copy_header $i ${BASENAME}_ndr.c
 115      -
 116      -                cat - << EOF >> ${BASENAME}_ndr.c
 117      -/*
 118      - * Please do not edit this file.
 119      - * It was generated using ndrgen.
 120      - */
 121      -
 122      -#include <strings.h>
 123      -#include <smbsrv/ndr.h>
 124      -#include <smbsrv/ndl/$BASENAME.ndl>
 125      -EOF
 126      -
 127      -                cat $BASENAME.raw >> ${BASENAME}_ndr.c
 128      -
 129      -                rm -f $BASENAME.raw
 130      -                rm -f $TMP_NAME
 131      -        else
 132      -                rm -f $BASENAME.raw
 133      -                rm -f $TMP_NAME
 134      -                exit 1
 135      -        fi
      113 +        base=`basename $i .ndl`
      114 +        process $i > ${base}_ndr.c || {
      115 +          echo "ndrgen error";
      116 +          rm ${base}_ndr.c;
      117 +        }
 136  118  done
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX