aboutsummaryrefslogtreecommitdiff
path: root/scripts/mingw_ldd.py
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2018-10-05 07:15:55 +0200
committerdec05eba <dec05eba@protonmail.com>2020-07-06 07:39:33 +0200
commit45e00fd7c7695adb9d69e8621ab76fdfa085900b (patch)
tree167d2a660db7bc4bdc199a438b8255ffc8b45cca /scripts/mingw_ldd.py
parent5250cb90406693163763a214af95f670e0e3a4e0 (diff)
Fix for windows & mingw
Diffstat (limited to 'scripts/mingw_ldd.py')
-rwxr-xr-xscripts/mingw_ldd.py54
1 files changed, 54 insertions, 0 deletions
diff --git a/scripts/mingw_ldd.py b/scripts/mingw_ldd.py
new file mode 100755
index 0000000..f678176
--- /dev/null
+++ b/scripts/mingw_ldd.py
@@ -0,0 +1,54 @@
+#!/usr/bin/env python
+# WTFPL - Do What the Fuck You Want to Public License
+from __future__ import print_function
+import pefile
+import os
+import sys
+
+
+def get_dependency(filename):
+ deps = []
+ pe = pefile.PE(filename)
+ for imp in pe.DIRECTORY_ENTRY_IMPORT:
+ deps.append(imp.dll.decode())
+ return deps
+
+
+def dep_tree(root, prefix=None):
+ if not prefix:
+ arch = get_arch(root)
+ #print('Arch =', arch)
+ prefix = '/usr/'+arch+'-w64-mingw32/bin'
+ #print('Using default prefix', prefix)
+ dep_dlls = dict()
+
+ def dep_tree_impl(root, prefix):
+ for dll in get_dependency(root):
+ if dll in dep_dlls:
+ continue
+ full_path = os.path.join(prefix, dll)
+ if os.path.exists(full_path):
+ dep_dlls[dll] = full_path
+ dep_tree_impl(full_path, prefix=prefix)
+ else:
+ dep_dlls[dll] = 'not found'
+
+ dep_tree_impl(root, prefix)
+ return (dep_dlls)
+
+
+def get_arch(filename):
+ type2arch= {pefile.OPTIONAL_HEADER_MAGIC_PE: 'i686',
+ pefile.OPTIONAL_HEADER_MAGIC_PE_PLUS: 'x86_64'}
+ pe = pefile.PE(filename)
+ try:
+ return type2arch[pe.PE_TYPE]
+ except KeyError:
+ sys.stderr.write('Error: unknown architecture')
+ sys.exit(1)
+
+if __name__ == '__main__':
+ filename = sys.argv[1]
+ for dll, full_path in dep_tree(filename).items():
+ print(' ' * 7, dll, '=>', full_path)
+