Print this page
1575 untangle libmlrpc from SMB server
Reviewed by: Matt Barden <matt.barden@nexenta.com>
Reviewed by: Evan Layton <evan.layton@nexenta.com>
Reviewed by: Toomas Soome <tsoome@me.com>
Approved by: Richard Lowe <richlowe@richlowe.net>
        
*** 17,136 ****
  # fields enclosed by brackets "[]" replaced with your own identifying
  # information: Portions Copyright [yyyy] [name of copyright owner]
  #
  # CDDL HEADER END
  #
  #
  # Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  # Use is subject to license terms.
  #
  
  # This is a wrapper script around the ndrgen compiler (ndrgen1).
- # CC must be defined in the environment or on the command line.
  
! NDRPROG="${0%/*}/ndrgen1"
! INCDIR=${ROOT}/usr/include/smbsrv
  
  PROGNAME=`basename $0`
  
  ndrgen_usage()
  {
          if [[ $1 != "" ]] ; then
                  print "$PROGNAME: ERROR: $1"
          fi
  
!         echo "usage: $PROGNAME [-Y cpp-path] file [file]..."
          exit 1
  }
  
! # Copy header text from the input ndl file to the generated ndr C file.
! ndrgen_copy_header()
  {
-         ndl_file=$1
-         ndr_file=$2
  
          nawk 'BEGIN { copy=0; }
          /^\/\* NDRGEN_HEADER_BEGIN \*\// { copy=1; next; }
          /^\/\* NDRGEN_HEADER_END \*\// { copy=0; next; }
!         /./ { if (copy==1) print; }' < $ndl_file > $ndr_file
  }
  
- if [[ $# -lt 1 ]] ; then
-         ndrgen_usage
- fi
  
! while getopts "Y" FLAG $*; do
          case $FLAG in
!         Y)
!                 CC_FLAG="y"
!                 ;;
!         *)
!                 ndrgen_usage
!                 ;;
          esac
  done
  
! if [[ $CC_FLAG = "y" ]] ; then
!         shift $(($OPTIND - 1))
! 
!         if [[ $# -lt 1 ]] ; then
!                 ndrgen_usage "C pre-processor path is missing"
!         else
!                 CC=$1
!                 shift $(($OPTIND - 1))
! 
!                 # Check for cw being invoked with -_cc or -_gcc
!                 if [[ $1 = "-_cc" || $1 = "-_gcc" ]] ; then
!                         CC_ARG=$1
!                         shift $(($OPTIND - 1))
!                 fi
!         fi
  fi
  
! if [[ $CC = "" ]] ; then
!         ndrgen_usage "C pre-processor is not defined"
  fi
  
- if [ ! -f $CC ] || [ ! -x $CC ] ; then
-         ndrgen_usage "cannot run $CC"
- fi
- 
  for i
  do
          if [[ ! -r $i ]] ; then
                  print "$PROGNAME: ERROR: cannot read $i"
                  exit 1
          fi
  
!         BASENAME=`basename $i .ndl`
!         TMP_NAME=$BASENAME.ndl.c
! 
!         cp $i $TMP_NAME
! 
!         if $CC $CC_ARG -E  -D__a64 -D__EXTENSIONS__ -D_FILE_OFFSET_BITS=64 \
!                 -I. -I${INCDIR} -I${INCDIR}/ndl -DNDRGEN $TMP_NAME | \
!                 $NDRPROG > $BASENAME.raw
!         then
!                 touch ${BASENAME}_ndr.c
!                 ndrgen_copy_header $i ${BASENAME}_ndr.c
! 
!                 cat - << EOF >> ${BASENAME}_ndr.c
! /*
!  * Please do not edit this file.
!  * It was generated using ndrgen.
!  */
! 
! #include <strings.h>
! #include <smbsrv/ndr.h>
! #include <smbsrv/ndl/$BASENAME.ndl>
! EOF
! 
!                 cat $BASENAME.raw >> ${BASENAME}_ndr.c
! 
!                 rm -f $BASENAME.raw
!                 rm -f $TMP_NAME
!         else
!                 rm -f $BASENAME.raw
!                 rm -f $TMP_NAME
!                 exit 1
!         fi
  done
--- 17,118 ----
  # fields enclosed by brackets "[]" replaced with your own identifying
  # information: Portions Copyright [yyyy] [name of copyright owner]
  #
  # CDDL HEADER END
  #
+ 
  #
  # Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  # Use is subject to license terms.
  #
+ # Copyright 2013 Nexenta Systems, Inc.  All rights reserved.
+ #
  
  # This is a wrapper script around the ndrgen compiler (ndrgen1).
  
! NDRPROG="${0}1"
  
+ # Note: most *.ndl files require an ANSI-compatible cpp,
+ # so we can NOT use /usr/lib/cpp or /usr/ccs/lib/cpp
+ # Wish there was an easier way to get an ANSI cpp.
+ CPP="${CC} -E"
+ CPPFLAGS="-DNDRGEN"
+ V_FLAG=
+ 
  PROGNAME=`basename $0`
  
  ndrgen_usage()
  {
          if [[ $1 != "" ]] ; then
                  print "$PROGNAME: ERROR: $1"
          fi
  
!         echo "usage: $PROGNAME [options] file.ndl [file.ndl]..."
!         echo "  options: -Y cc-path -Ddefine -Iinclude"
          exit 1
  }
  
! # Process the input ndl file ($1) generating C code on stdout.
! process()
  {
  
+         # Put the standard top matter
+         #
+         # Want the include directive to have just
+         # include "file.ndl" (no path) so...
+         inc_ndl=`basename $1`
+         cat - << EOF
+ /*
+  * Please do not edit this file.
+  * It was generated using ndrgen.
+  */
+ 
+ #include <strings.h>
+ #include <libmlrpc/ndr.h>
+ #include "$inc_ndl"
+ EOF
+ 
+         # Put optional custom top matter
          nawk 'BEGIN { copy=0; }
          /^\/\* NDRGEN_HEADER_BEGIN \*\// { copy=1; next; }
          /^\/\* NDRGEN_HEADER_END \*\// { copy=0; next; }
!         /./ { if (copy==1) print; }' $1
! 
!         # now the real ndrgen output
!         [ -n "$V_FLAG" ] &&
!           echo "$CPP $CPPFLAGS $1 | $NDRPROG" >&2
!         $CPP $CPPFLAGS $1 | $NDRPROG
  }
  
  
! while getopts "D:I:Y:V" FLAG
! do
          case $FLAG in
!         D|I)    CPPFLAGS="$CPPFLAGS -${FLAG}${OPTARG}";;
!         Y)      CPP="$OPTARG";;
!         V)      V_FLAG="V";;
!         *)      ndrgen_usage;;
          esac
  done
+ shift $(($OPTIND - 1))
  
! if [[ $# -lt 1 ]] ; then
!         ndrgen_usage
  fi
  
! if [ ! -x $CPP ] ; then
!         ndrgen_usage "cannot run $CPP"
  fi
  
  for i
  do
          if [[ ! -r $i ]] ; then
                  print "$PROGNAME: ERROR: cannot read $i"
                  exit 1
          fi
  
!         base=`basename $i .ndl`
!         process $i > ${base}_ndr.c || {
!           echo "ndrgen error";
!           rm ${base}_ndr.c;
!         }
  done