#!/bin/bash

libpath=""
libs=""
inputfiles=""

makedef=0

count=1
while [ $count -le ${#@} ]; do
  i=${@:$count:1}
  if [ x"${i:0:1}" = x"-" ]; then
    if [ x"${#i}" = x"2" ]; then
      let count=count+1
      j=${@:$count:1}
    else
      j=${@:$count:1}
      k=${j:2}
      j=$k
    fi
    if [ x"${i:0:2}" = x"-L" ]; then
      if [ x"${j:0:1}" = x"/" ]; then
	root=`cygpath -w / | sed -e 's=:\\\\=:/='`
        j=$root/$j
      fi
      if [ x"${j:1:1}" != x":" ]; then
	root=`cygpath -w / | sed -e 's=:\\\\=:/='`
        j=$root/$PWD/$j
      fi
      if [ -z "$libpath" ]; then
        libpath="$j"
      else
        libpath="$j;$libpath"
      fi
    fi
    if [ x"${i:0:2}" = x"-l" ]; then
      if [ -z "$libs" ]; then
        libs="lib${j}.lib"
      else
        libs="$libs lib${j}.lib"
      fi
    fi
    if [ x"${i:0:2}" = x"-o" ]; then
      out=$j
    fi
    if [ x"${i}" = x"-makedef" ]; then
       makedef=1
    fi
  else
    if [ -z "$inputfiles" ]; then
      inputfiles="$i"
    else
      inputfiles="$inputfiles $i"
    fi
  fi
  let count=count+1
done

echo "library path: $libpath"
echo "libraries: $libs"
echo "output file: $out"
echo "input files: $inputfiles"

ifs="$IFS"
IFS=";"
echo
newlibs=""
for libp in $LIB $libpath; do
  IFS="$ifs"
  for library in $libs; do
    gotlib=0
    #echo "Looking for $libp/$library"
    if [ -r "$libp/$library" ]; then
      echo "Found $libp/$library"
      if [ -z "$newlibs" ]; then
        newlibs="$library"
      else
        newlibs="$newlibs $library"
      fi
      gotlib=1
    fi
    if [ x"$gotlib" = x"0" ]; then
    olib=${library#lib}
    #echo "Looking for $libp/$olib"
    if [ -r "$libp/$olib" ]; then
      echo "Found $libp/$olib"
      if [ -z "$newlibs" ]; then
        newlibs="$olib"
      else
        newlibs="$newlibs $olib"
      fi
      gotlib=1
    fi
    fi
    if [ x"$gotlib" = x"0" ]; then
    olib=${library%lib}a
    #echo "Looking for $libp/$olib"
    if [ -r "$libp/$olib" ]; then
      echo "Found $libp/$olib"
      if [ -z "$newlibs" ]; then
        newlibs="$olib"
      else
        newlibs="$newlibs $olib"
      fi
    fi
    fi
  done
  ifs="$IFS"
  IFS=";"
done
IFS="$ifs"

libs="$newlibs"

def=${out%.dll}.def
imp=${out%.dll}.lib

if [ x"$makedef" = x"1" ]; then
  echo "LIBRARY $out" > $def
  echo "EXPORTS" >> $def
  nm $inputfiles | egrep " B|T "  | awk  '{i=(match($0,"@")) ; if(i>0) print $3; else {j=match($3,"_");print substr($3,j+1)}}' | grep -v '^\.' >> $def
  nm $inputfiles | grep " R " | grep -v 'C@' | grep -v __real | grep -v \?\?_7C | awk '{print $3}' >> $def
  nm $inputfiles | grep " D " | grep -v 'C@' | grep -v __real | grep -v \?\?_7C | awk '{print $3}' >> $def
  echo "link  /INCREMENTAL:NO /NOLOGO -entry:_DllMainCRTStartup@12 -dll /DEF:$def $libs /OUT:$out /IMPLIB:$imp $inputfiles /NODEFAULTLIB:msvcrt /NODEFAULTLIB:libcd /NODEFAULTLIB:libc libcmt.lib"
  LIB="$libpath;$LIB" link  /INCREMENTAL:NO /NOLOGO -entry:_DllMainCRTStartup@12 -dll /DEF:$def $libs /OUT:$out /IMPLIB:$imp $inputfiles /NODEFAULTLIB:msvcrt /NODEFAULTLIB:libcd /NODEFAULTLIB:libc libcmt.lib
else
  echo "link  /INCREMENTAL:NO /NOLOGO -entry:_DllMainCRTStartup@12 -dll $libs /OUT:$out /IMPLIB:$imp $inputfiles /NODEFAULTLIB:msvcrt /NODEFAULTLIB:libcd /NODEFAULTLIB:libc libcmt.lib"
  LIB="$libpath;$LIB" link  /INCREMENTAL:NO /NOLOGO -entry:_DllMainCRTStartup@12 -dll $libs /OUT:$out /IMPLIB:$imp $inputfiles /NODEFAULTLIB:msvcrt /NODEFAULTLIB:libcd /NODEFAULTLIB:libc libcmt.lib
fi
