Home | History | Annotate | Download | only in ndrgen
      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 2008 Sun Microsystems, Inc.  All rights reserved.
     24 # Use is subject to license terms.
     25 #
     26 # ident	"%Z%%M%	%I%	%E% SMI"
     27 #
     28 
     29 # This is a wrapper script around the ndrgen compiler (ndrgen1).
     30 # CC must be defined in the environment or on the command line.
     31 
     32 NDRPROG="${0%/*}/ndrgen1"
     33 INCDIR=${ROOT}/usr/include/smbsrv
     34 
     35 PROGNAME=`basename $0`
     36 
     37 ndrgen_usage()
     38 {
     39 	if [[ $1 != "" ]] ; then
     40 		print "$PROGNAME: ERROR: $1"
     41 	fi
     42 
     43 	echo "usage: $PROGNAME [-Y cpp-path] file [file]..."
     44 	exit 1
     45 }
     46 
     47 # Copy header text from the input ndl file to the generated ndr C file.
     48 ndrgen_copy_header()
     49 {
     50 	ndl_file=$1
     51 	ndr_file=$2
     52 
     53 	nawk 'BEGIN { copy=0; }
     54 	/^\/\* NDRGEN_HEADER_BEGIN \*\// { copy=1; next; }
     55 	/^\/\* NDRGEN_HEADER_END \*\// { copy=0; next; }
     56 	/./ { if (copy==1) print; }' < $ndl_file > $ndr_file
     57 }
     58 
     59 if [[ $# -lt 1 ]] ; then
     60 	ndrgen_usage
     61 fi
     62 
     63 while getopts "Y" FLAG $*; do
     64 	case $FLAG in
     65 	Y)
     66 		CC_FLAG="y"
     67 		;;
     68 	*)
     69 		ndrgen_usage
     70 		;;
     71 	esac
     72 done
     73 
     74 if [[ $CC_FLAG = "y" ]] ; then
     75 	shift $(($OPTIND - 1))
     76 
     77 	if [[ $# -lt 1 ]] ; then
     78 		ndrgen_usage "C pre-processor path is missing"
     79 	else
     80 		CC=$1
     81 		shift $(($OPTIND - 1))
     82 
     83 		# Check for cw being invoked with -_cc or -_gcc
     84 		if [[ $1 = "-_cc" || $1 = "-_gcc" ]] ; then
     85 			CC_ARG=$1
     86 			shift $(($OPTIND - 1))
     87 		fi
     88 	fi
     89 fi
     90 
     91 if [[ $CC = "" ]] ; then
     92 	ndrgen_usage "C pre-processor is not defined"
     93 fi
     94 
     95 if [ ! -f $CC ] || [ ! -x $CC ] ; then
     96 	ndrgen_usage "cannot run $CC"
     97 fi
     98 
     99 for i
    100 do
    101 	if [[ ! -r $i ]] ; then
    102 		print "$PROGNAME: ERROR: cannot read $i"
    103 		exit 1
    104 	fi
    105 
    106 	BASENAME=`basename $i .ndl`
    107 	TMP_NAME=$BASENAME.ndl.c
    108 
    109 	cp $i $TMP_NAME
    110 
    111 	if $CC $CC_ARG -E  -D__a64 -D__EXTENSIONS__ -D_FILE_OFFSET_BITS=64 \
    112 		-I. -I${INCDIR} -I${INCDIR}/ndl -DNDRGEN $TMP_NAME | \
    113 		$NDRPROG > $BASENAME.raw
    114 	then
    115 		touch ${BASENAME}_ndr.c
    116 		ndrgen_copy_header $i ${BASENAME}_ndr.c
    117 
    118 		cat - << EOF >> ${BASENAME}_ndr.c
    119 /*
    120  * Please do not edit this file.
    121  * It was generated using ndrgen.
    122  */
    123 
    124 #pragma ident	"@(#)${BASENAME}_ndr.c"
    125 
    126 #include <strings.h>
    127 #include <smbsrv/ndr.h>
    128 #include <smbsrv/ndl/$BASENAME.ndl>
    129 EOF
    130 
    131 		cat $BASENAME.raw >> ${BASENAME}_ndr.c
    132 
    133 		rm -f $BASENAME.raw
    134 		rm -f $TMP_NAME
    135 	else
    136 		rm -f $BASENAME.raw
    137 		rm -f $TMP_NAME
    138 		exit 1
    139 	fi
    140 done
    141