forked from rarias/bscpkgs
cpic: Compilation ok but fails to run
This commit is contained in:
45
bsc/setup-hooks/win-dll-link.sh
Normal file
45
bsc/setup-hooks/win-dll-link.sh
Normal file
@@ -0,0 +1,45 @@
|
||||
|
||||
fixupOutputHooks+=(_linkDLLs)
|
||||
|
||||
# For every *.{exe,dll} in $output/bin/ we try to find all (potential)
|
||||
# transitive dependencies and symlink those DLLs into $output/bin
|
||||
# so they are found on invocation.
|
||||
# (DLLs are first searched in the directory of the running exe file.)
|
||||
# The links are relative, so relocating whole /nix/store won't break them.
|
||||
_linkDLLs() {
|
||||
(
|
||||
if [ ! -d "$prefix/bin" ]; then exit; fi
|
||||
cd "$prefix/bin"
|
||||
|
||||
# Compose path list where DLLs should be located:
|
||||
# prefix $PATH by currently-built outputs
|
||||
local DLLPATH=""
|
||||
local outName
|
||||
for outName in $outputs; do
|
||||
addToSearchPath DLLPATH "${!outName}/bin"
|
||||
done
|
||||
DLLPATH="$DLLPATH:$PATH"
|
||||
|
||||
echo DLLPATH="'$DLLPATH'"
|
||||
|
||||
linkCount=0
|
||||
# Iterate over any DLL that we depend on.
|
||||
local dll
|
||||
for dll in $($OBJDUMP -p *.{exe,dll} | sed -n 's/.*DLL Name: \(.*\)/\1/p' | sort -u); do
|
||||
if [ -e "./$dll" ]; then continue; fi
|
||||
# Locate the DLL - it should be an *executable* file on $DLLPATH.
|
||||
local dllPath="$(PATH="$DLLPATH" type -P "$dll")"
|
||||
if [ -z "$dllPath" ]; then continue; fi
|
||||
# That DLL might have its own (transitive) dependencies,
|
||||
# so add also all DLLs from its directory to be sure.
|
||||
local dllPath2
|
||||
for dllPath2 in "$dllPath" "$(dirname $(readlink "$dllPath" || echo "$dllPath"))"/*.dll; do
|
||||
if [ -e ./"$(basename "$dllPath2")" ]; then continue; fi
|
||||
CYGWIN+=\ winsymlinks:nativestrict ln -sr "$dllPath2" .
|
||||
linkCount=$(($linkCount+1))
|
||||
done
|
||||
done
|
||||
echo "Created $linkCount DLL link(s) in $prefix/bin"
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user