parent
d2e364c678
commit
88e58a4fa2
@ -0,0 +1,16 @@ |
||||
# On cygwin, automatic runtime dependency detection does not work |
||||
# because the binaries do not contain absolute references to store |
||||
# locations (yet) |
||||
postFixupHooks+=(_cygwinAllBuildInputsAsRuntimeDep) |
||||
|
||||
_cygwinAllBuildInputsAsRuntimeDep() { |
||||
if [ -n "$buildInputs" ]; then |
||||
mkdir -p "$out/nix-support" |
||||
echo "$buildInputs" >> "$out/nix-support/cygwin-buildinputs-as-runtime-deps" |
||||
fi |
||||
|
||||
if [ -n "$nativeBuildInputs" ]; then |
||||
mkdir -p "$out/nix-support" |
||||
echo "$nativeBuildInputs" >> "$out/nix-support/cygwin-buildinputs-as-runtime-deps" |
||||
fi |
||||
} |
@ -0,0 +1,21 @@ |
||||
postFixupHooks+=(_cygwinFixAutoImageBase) |
||||
|
||||
_cygwinFixAutoImageBase() { |
||||
find $out -name "*.dll" | while read DLL; do |
||||
if [ -f /etc/rebasenix.nextbase ]; then |
||||
NEXTBASE="$(</etc/rebasenix.nextbase)" |
||||
fi |
||||
NEXTBASE=${NEXTBASE:-0x62000000} |
||||
|
||||
REBASE=(`/bin/rebase -i $DLL`) |
||||
BASE=${REBASE[2]} |
||||
SIZE=${REBASE[4]} |
||||
SKIP=$(((($SIZE>>16)+1)<<16)) |
||||
|
||||
echo "REBASE FIX: $DLL $BASE -> $NEXTBASE" |
||||
/bin/rebase -b $NEXTBASE $DLL |
||||
NEXTBASE="0x`printf %x $(($NEXTBASE+$SKIP))`" |
||||
|
||||
echo $NEXTBASE > /etc/rebasenix.nextbase |
||||
done |
||||
} |
@ -0,0 +1,21 @@ |
||||
postFixupHooks+=(_cygwinFixAutoImageBase) |
||||
|
||||
_cygwinFixAutoImageBase() { |
||||
find $out -name "*.dll" | while read DLL; do |
||||
if [ -f /etc/rebasenix.nextbase ]; then |
||||
NEXTBASE="$(</etc/rebasenix.nextbase)" |
||||
fi |
||||
NEXTBASE=${NEXTBASE:-0x200000000} |
||||
|
||||
REBASE=(`/bin/rebase -i $DLL`) |
||||
BASE=${REBASE[2]} |
||||
SIZE=${REBASE[4]} |
||||
SKIP=$(((($SIZE>>16)+1)<<16)) |
||||
|
||||
echo "REBASE FIX: $DLL $BASE -> $NEXTBASE" |
||||
/bin/rebase -b $NEXTBASE $DLL |
||||
NEXTBASE="0x`printf %x $(($NEXTBASE+$SKIP))`" |
||||
|
||||
echo $NEXTBASE > /etc/rebasenix.nextbase |
||||
done |
||||
} |
@ -0,0 +1,74 @@ |
||||
postFixupHooks+=(_cygwinWrapExesToFindDlls) |
||||
|
||||
_cygwinWrapExesToFindDlls() { |
||||
find $out -type l | while read LINK; do |
||||
TARGET="$(readlink "${LINK}")" |
||||
|
||||
# fix all non .exe links that link explicitly to a .exe |
||||
if [[ ${TARGET} == *.exe ]] && [[ ${LINK} != *.exe ]]; then |
||||
mv "${LINK}" "${LINK}.exe" |
||||
LINK="${LINK}.exe" |
||||
fi |
||||
|
||||
# generate complementary filenames |
||||
if [[ ${LINK} == *.exe ]]; then |
||||
_LINK="${LINK%.exe}" |
||||
_TARGET="${TARGET%.exe}" |
||||
else |
||||
_LINK="${LINK}.exe" |
||||
_TARGET="${TARGET}.exe" |
||||
fi |
||||
|
||||
# check if sould create complementary link |
||||
DOLINK=1 |
||||
if [[ ${_TARGET} == *.exe ]]; then |
||||
# the canonical target has to be a .exe |
||||
CTARGET="$(readlink -f "${LINK}")" |
||||
if [[ ${CTARGET} != *.exe ]]; then |
||||
CTARGET="${CTARGET}.exe" |
||||
fi |
||||
|
||||
if [ ! -e "${CTARGET}" ]; then |
||||
unset DOLINK |
||||
fi |
||||
fi |
||||
|
||||
if [ -e "${_LINK}" ]; then |
||||
# complementary link seems to exist |
||||
# but could be cygwin smoke and mirrors |
||||
INO=$(stat -c%i "${LINK}") |
||||
_INO=$(stat -c%i "${_LINK}") |
||||
if [ "${INO}" -ne "${_INO}" ]; then |
||||
unset DOLINK |
||||
fi |
||||
fi |
||||
|
||||
# create complementary link |
||||
if [ -n "${DOLINK}" ]; then |
||||
ln -s "${_TARGET}" "${_LINK}.tmp" |
||||
mv "${_LINK}.tmp" "${_LINK}" |
||||
fi |
||||
done |
||||
|
||||
find $out -type f -name "*.exe" | while read EXE; do |
||||
WRAPPER="${EXE%.exe}" |
||||
if [ -e "${WRAPPER}" ]; then |
||||
# check if really exists or cygwin smoke and mirrors |
||||
INO=$(stat -c%i "${EXE}") |
||||
_INO=$(stat -c%i "${WRAPPER}") |
||||
if [ "${INO}" -ne "${_INO}" ]; then |
||||
continue |
||||
fi |
||||
fi |
||||
|
||||
mv "${EXE}" "${EXE}.tmp" |
||||
|
||||
cat >"${WRAPPER}" <<EOF |
||||
#!/bin/sh |
||||
export PATH=$_PATH${_PATH:+:}\${PATH} |
||||
exec "\$0.exe" "\$@" |
||||
EOF |
||||
chmod +x "${WRAPPER}" |
||||
mv "${EXE}.tmp" "${EXE}" |
||||
done |
||||
} |
Loading…
Reference in new issue