minor fixes
[ia32rtools.git] / run_imp.sh
1 #!/bin/sh
2
3 # warning: i686-w64-mingw32- on Ubuntu 14.04
4 # contains broken InterlockedDecrement
5 test -n "$mingwb" || mingwb=i686-w64-mingw32
6
7 target_s=$1
8 src_asm=$2
9 implist=${target_s}_implist
10 tmpsym=${target_s}_tmpsym
11 shift 2
12
13 grep 'extrn ' $src_asm | awk '{print $2}' | \
14   awk -F: '{print $1}' > $implist
15
16 echo ".data" > $target_s
17 echo ".align 4" >> $target_s
18
19 cat $implist | while read i; do
20   rm -f $tmpsym
21   case $i in
22   __imp_*)
23     si=`echo $i | cut -c 7-`
24     ;;
25   *)
26     si=$i
27     ;;
28   esac
29
30   grep -e "\<_\?_$si\>" -e "@$si\>" /usr/$mingwb/lib/lib* "$@" | awk '{print $3}' | \
31     while read f; do
32       sym=`${mingwb}-nm $f | grep -e "\<_\?_$si\>" -e " @$si\>" | grep ' T ' | awk '{print $3}'`
33       if test -n "$sym"; then
34         echo $sym > $tmpsym
35         break
36       fi
37     done
38   sym=`cat $tmpsym`
39   if test -z "$sym"; then
40     # could be a data import
41     if test -n "$data_symf" && grep -q "$si" $data_symf; then
42       continue
43     else
44       echo "$target_s: no file/sym for $i"
45       rm $target_s
46       exit 1
47     fi
48   fi
49
50   echo ".globl $i" >> $target_s
51   echo "$i:" >> $target_s
52   echo "  .long $sym" >> $target_s
53   echo >> $target_s
54 done