#!/bin/sh
#*=====================================================================*/
#*    serrano/prgm/project/bigloo/autoconf/checkmember                 */
#*    -------------------------------------------------------------    */
#*    Author      :  Manuel Serrano                                    */
#*    Creation    :  Tue May 27 06:50:25 2008                          */
#*    Last change :  Tue May 27 07:16:19 2008 (serrano)                */
#*    Copyright   :  2008 Manuel Serrano                               */
#*    -------------------------------------------------------------    */
#*    Check a C structure member field                                 */
#*=====================================================================*/

#*---------------------------------------------------------------------*/
#*    flags                                                            */
#*---------------------------------------------------------------------*/
cc=gcc
cflags=""
tmp=/tmp
user=bigloo

#*---------------------------------------------------------------------*/
#*    We parse the arguments                                           */
#*---------------------------------------------------------------------*/
while : ; do
  case $1 in
    "")
      break;;

    --user=*)
      user="`echo $1 | sed 's/^[-a-z]*=//'`";;

    --cc=*|-cc=*)
      cc="`echo $1 | sed 's/^[-a-z]*=//'`";;

    --cflags=*|-cflags=*)
      cflags="`echo $1 | sed 's/^[-a-z]*=//'`";;

    --tmp=*|-tmp=*)
      tmp="`echo $1 | sed 's/^[-a-z]*=//'`";;

    --posixos=*|-posixos=*)
      posixos="`echo $1 | sed 's/^[-a-z]*=//'`";;

    -*)
      echo "Unknown option \"$1\", ignored" >&2;;

    *)
      break;;
  esac
  shift
done

#*---------------------------------------------------------------------*/
#*    field parsing                                                    */
#*---------------------------------------------------------------------*/
member=$1
shift

type=`echo $member | awk  -F . '{print $1}'`

var=`echo $type | awk '{print $2}'`
if [ "$var " = " " ]; then
  var=$type
fi

exp=`echo $member | awk '{print $2}'`
if [ "$exp " = " " ]; then
  exp=$member
fi

#*---------------------------------------------------------------------*/
#*    Temp files                                                       */
#*---------------------------------------------------------------------*/
file=$tmp/actest$user
aout=$tmp/Xactest$user

#*---------------------------------------------------------------------*/
#*    Generate the C files                                             */
#*---------------------------------------------------------------------*/
echo "/* generated by checkmember */" > $file.c

while : ; do
  case $1 in
    "") break;;
    *) echo $1 >> $file.c;;
  esac
  shift
done

echo "int main( int argc, char *argv[] ) {" >> $file.c
echo "  $type $var;" >> $file.c
echo "  return sizeof( $exp );" >> $file.c
echo "}" >> $file.c

#*---------------------------------------------------------------------*/
#*    Compilation test                                                 */
#*---------------------------------------------------------------------*/
compile="$cc $cflags $file.c -o $aout >/dev/null 2> /dev/null"

if eval $compile; then
   \rm -f $file.*
   rm -f $aout
   rm -f $aout*
   exit 0
else
   \rm -f $file.*
   exit 1
fi



  

