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         fi
  81 fi
  82 
  83 if [[ $CC = "" ]] ; then
  84         ndrgen_usage "C pre-processor is not defined"
  85 fi
  86 
  87 # Remove the non-cw options
  88 CC=${CC%% -- *}
  89 
  90 if [ ! -f ${CC%% *} ] || [ ! -x ${CC%% *} ] ; then
  91         ndrgen_usage "cannot run $CC"
  92 fi
  93 
  94 for i
  95 do
  96         if [[ ! -r $i ]] ; then
  97                 print "$PROGNAME: ERROR: cannot read $i"
  98                 exit 1
  99         fi
 100 
 101         BASENAME=`basename $i .ndl`
 102         TMP_NAME=$BASENAME.ndl.c
 103 
 104         cp $i $TMP_NAME
 105 
 106         if $CC  -E  -D__a64 -D__EXTENSIONS__ -D_FILE_OFFSET_BITS=64 \
 107                 -I. -I${INCDIR} -I${INCDIR}/ndl -DNDRGEN $TMP_NAME | \
 108                 $NDRPROG > $BASENAME.raw
 109         then
 110                 touch ${BASENAME}_ndr.c
 111                 ndrgen_copy_header $i ${BASENAME}_ndr.c
 112 
 113                 cat - << EOF >> ${BASENAME}_ndr.c
 114 /*
 115  * Please do not edit this file.
 116  * It was generated using ndrgen.
 117  */
 118 
 119 #include <strings.h>
 120 #include <smbsrv/ndr.h>
 121 #include <smbsrv/ndl/$BASENAME.ndl>
 122 EOF
 123 
 124                 cat $BASENAME.raw >> ${BASENAME}_ndr.c
 125 
 126                 rm -f $BASENAME.raw
 127                 rm -f $TMP_NAME
 128         else
 129                 rm -f $BASENAME.raw
 130                 rm -f $TMP_NAME
 131                 exit 1
 132         fi
 133 done