1 #!/bin/ksh -p
   2 #
   3 # CDDL HEADER START
   4 #
   5 # The contents of this file are subject to the terms of the
   6 # Common Development and Distribution License (the "License").
   7 # You may not use this file except in compliance with the License.
   8 #
   9 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
  10 # or http://www.opensolaris.org/os/licensing.
  11 # See the License for the specific language governing permissions
  12 # and limitations under the License.
  13 #
  14 # When distributing Covered Code, include this CDDL HEADER in each
  15 # file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  16 # If applicable, add the following below this CDDL HEADER, with the
  17 # fields enclosed by brackets "[]" replaced with your own identifying
  18 # information: Portions Copyright [yyyy] [name of copyright owner]
  19 #
  20 # CDDL HEADER END
  21 #
  22 #
  23 # Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  24 # Use is subject to license terms.
  25 #
  26 
  27 # This is a wrapper script around the ndrgen compiler (ndrgen1).
  28 # CC must be defined in the environment or on the command line.
  29 
  30 NDRPROG="${0%/*}/ndrgen1"
  31 INCDIR=${ROOT}/usr/include/smbsrv
  32 
  33 PROGNAME=`basename $0`
  34 
  35 ndrgen_usage()
  36 {
  37         if [[ $1 != "" ]] ; then
  38                 print "$PROGNAME: ERROR: $1"
  39         fi
  40 
  41         echo "usage: $PROGNAME [-Y cpp-path] file [file]..."
  42         exit 1
  43 }
  44 
  45 # Copy header text from the input ndl file to the generated ndr C file.
  46 ndrgen_copy_header()
  47 {
  48         ndl_file=$1
  49         ndr_file=$2
  50 
  51         nawk 'BEGIN { copy=0; }
  52         /^\/\* NDRGEN_HEADER_BEGIN \*\// { copy=1; next; }
  53         /^\/\* NDRGEN_HEADER_END \*\// { copy=0; next; }
  54         /./ { if (copy==1) print; }' < $ndl_file > $ndr_file
  55 }
  56 
  57 if [[ $# -lt 1 ]] ; then
  58         ndrgen_usage
  59 fi
  60 
  61 while getopts "Y" FLAG $*; do
  62         case $FLAG in
  63         Y)
  64                 CC_FLAG="y"
  65                 ;;
  66         *)
  67                 ndrgen_usage
  68                 ;;
  69         esac
  70 done
  71 
  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
  87 fi
  88 
  89 if [[ $CC = "" ]] ; then
  90         ndrgen_usage "C pre-processor is not defined"
  91 fi
  92 
  93 if [ ! -f $CC ] || [ ! -x $CC ] ; then
  94         ndrgen_usage "cannot run $CC"
  95 fi
  96 
  97 for i
  98 do
  99         if [[ ! -r $i ]] ; then
 100                 print "$PROGNAME: ERROR: cannot read $i"
 101                 exit 1
 102         fi
 103 
 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
 136 done