summaryrefslogtreecommitdiffstats
path: root/tools/copydlldeps.md
blob: 1809e129c079e1adfe31238501a3bec65cec0b2e (plain)
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
README of copydlldeps.sh
========================
This document was created 2016-02-05. It belongs to copydlldeps.sh and is part of the MXE project.

I call it on the command line like:

/share/mxe/tools/copydlldeps.sh --infile /home/mxeuser/test/i686-w64-mingw32.shared/Application.exe \
				--destdir /home/mxeuser/testdlls/   \
				--recursivesrcdir /home/mxeuser/mxe/usr/i686-w64-mingw32.shared/ \
				--srcdir /home/mxeuser/test/ \
				--copy \
				--enforce /home/mxeuser/mxe/usr/i686-w64-mingw32.shared/qt5/plugins/platforms/ \
				--objdump /home/mxeuser/mxe/usr/bin/i686-w64-mingw32.shared-objdump

It got embedded in a build script like:

MXEPATH=/path/to/mxe
compiler=i686-w64-mingw32.shared
orgDir=/path/to/my/nsis/dll #nsis is then copying all dlls in there to the place where the exe is located

if [ ! $( echo $compiler | grep -q "shared" ) ]; then
	echo "\$compiler=$compiler and contains the word 'shared'" | tee -a $CURLOG

	echo "+-----------------------------------------------+ " | tee -a $CURLOG
	echo "| Starting new MXE copydlldeps.sh by LHE DL5RCW | " | tee -a $CURLOG
	echo "+-----------------------------------------------+ " | tee -a $CURLOG
	echo "currently working in $( pwd ) " | tee -a $CURLOG
	executable=$(  find . -name "*.exe" | tail -n 1 )
if [ -e $MXEPATH/usr/bin/$compiler-objdump ]; then
	echo "now populating dir=${orgDir}/nsis/sharedLibs with dll dependencies of executable=$executable" | tee -a $CURLOG
	$MXEPATH/tools/copydlldeps.sh 	--infile $executable \
					--destdir ${orgDir}/nsis/sharedLibs \
					--recursivesrcdir $MXEPATH/usr/$compiler/ \
					--enforce $MXEPATH/usr/$compiler/qt5/plugins/platforms/ \
					--copy \
					--objdump $MXEPATH/usr/bin/$compiler-objdump | tee -a $CURLOG
else
	echo "now populating dir=${orgDir}/nsis/sharedLibs with dll dependencies of executable=$executable" | tee -a $CURLOG
	$MXEPATH/tools/copydlldeps.sh 	--infile $executable \
					--destdir ${orgDir}/nsis/sharedLibs \
					--recursivesrcdir $MXEPATH/usr/$compiler/ \
					--enforce $MXEPATH/usr/$compiler/qt5/plugins/platforms/ \
					--copy | tee -a $CURLOG
fi


Additional hints
================
objdump
-------
I checked if there is a mxe objdump. If not, I took the native one on my server. I actually do not know the difference but decided to include it in the script in case it is important to someone
enforce
-------
My application is using Qt5 and objdump did not return the needed qwindows.dll - so I enforce the platform folder. You may add multiple --enforce directories using --enforce /path/folder1 --enforce /path/folder2 --enforce /path/folder3
They are NOT recursively copied, only flat. See:
    string=$( find $enforcedDirectory -maxdepth 1 -iregex '.*\(dll\|exe\)' | tr '\n' ' ' )

If you would remove the -maxdepth 1, it would become recoursive. Does anyone need that? 

2016-02-10 Lars Holger Engelhard - DL5RCW