File: dllcopy.sh

package info (click to toggle)
filezilla 3.69.6-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 31,768 kB
  • sloc: cpp: 97,621; ansic: 54,984; sh: 5,225; makefile: 2,080; xml: 375
file content (86 lines) | stat: -rwxr-xr-x 1,908 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#! /bin/sh

set -e

if [ $# -lt 6 ]; then
  echo Wrong number of arguments
  exit 1
fi

suffix="$1"
exepath="$2"
exename="$3"
objdump="$4"
cxx="$5"
searchpath="$6"
ldflags="$7"

searchpath=`echo $searchpath | sed "s/\\(^\\|:\\)\\/c\\/windows[/a-z0-9]*//gi"`

if [ "$ldflags" != "" ]; then
  for flag in $ldflags; do
    if echo $flag | grep '^-L/' > /dev/null 2>&1; then
      searchpath="$searchpath:${flag#-L*}"
    fi
  done
fi

searchpath="$searchpath:`$cxx -print-search-dirs | grep libraries | sed 's/libraries: =//'`"

#echo "Searchpath: $searchpath"

touch "dll_${suffix}_install.nsh"
touch "dll_${suffix}_uninstall.nsh"

process_dll()
{
  if [ ! -f "dlls_$suffix/$1" ] && [ ! -f "dlls_$suffix/${1}.processed" ]; then
    echo "Looking for dependency $1"
    (
      IFS=':'
      for path in $searchpath; do
        if [ -f "$path/.libs/$1" ]; then
          unset IFS
          echo "Found $1"
          cp "$path/.libs/$1" "dlls_$suffix/$1"
          process_file "dlls_$suffix/$1"

          echo "File dlls_$suffix\\$1" >> "dll_${suffix}_install.nsh"
          echo "Delete \$INSTDIR\\$1" >> "dll_${suffix}_uninstall.nsh"
          break
        fi
        if [ -f "$path/$1" ]; then
          unset IFS
          echo "Found $1"
          cp "$path/$1" "dlls_$suffix/$1"
          process_file "dlls_$suffix/$1"

          echo "File dlls_$suffix\\$1" >> "dll_${suffix}_install.nsh"
          echo "Delete \$INSTDIR\\$1" >> "dll_${suffix}_uninstall.nsh"
          break
        fi
      done
      unset IFS
      echo processed > "dlls_$suffix/${1}.processed"
    )
  fi
}

process_dlls()
{
  while [ ! -z "$1" ]; do
    process_dll "$1"
    shift
  done
}

process_file()
{
  process_dlls `$objdump -j .idata -x "$1" | grep 'DLL Name:' | sed 's/ *DLL Name: *//'`
}

if [ -f "$exepath/.libs/$exename" ]; then
  process_file "$exepath/.libs/$exename"
else
  process_file "$exepath/$exename"
fi