summaryrefslogtreecommitdiff
path: root/profiles/prefix/windows
diff options
context:
space:
mode:
authorV3n3RiX <venerix@redcorelinux.org>2018-01-26 15:48:02 +0000
committerV3n3RiX <venerix@redcorelinux.org>2018-01-26 15:48:02 +0000
commit38b7258d086dd5e263c3bbe3880c8c956676bc71 (patch)
tree6fce284d5bfddaf597a490ac66069d16c6a485db /profiles/prefix/windows
parent0ebf740b9c9bc7c10ac41bea315ecc6c01c79166 (diff)
gentoo resync : 25.01.2018
Diffstat (limited to 'profiles/prefix/windows')
-rw-r--r--profiles/prefix/windows/winnt/profile.bashrc159
1 files changed, 149 insertions, 10 deletions
diff --git a/profiles/prefix/windows/winnt/profile.bashrc b/profiles/prefix/windows/winnt/profile.bashrc
index f1c5c365338b..7d1251609c0f 100644
--- a/profiles/prefix/windows/winnt/profile.bashrc
+++ b/profiles/prefix/windows/winnt/profile.bashrc
@@ -1,4 +1,4 @@
-# Copyright 1999-2009 Gentoo Foundation
+# Copyright 1999-2018 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# On windows, binary files (executables, shared libraries) in use
@@ -13,6 +13,20 @@
# Need to explicitly set PKG_CONFIG_PATH for cross EPREFIX.
export PKG_CONFIG_PATH="${EPREFIX}/lib/pkgconfig:${EPREFIX}/usr/lib/pkgconfig"
+windows_setup_dllhelper() {
+ case ${CATEGORY}/${PN} in
+ sys-libs/zlib |\
+ '')
+ # When a package build system does not know about Windows at all,
+ # still it can be built for Windows using Gentoo Parity.
+ # But as there is another file to install (the real dll),
+ # and installation is done using cp, we override cp to
+ # additionally copy the dll when the library is copied.
+ windows_setup_dllhelper_cp
+ ;;
+ esac
+}
+
windows_cleanup_removed_files() {
local removedlist=$1
rm -f "${removedlist}".new
@@ -78,17 +92,36 @@ windows_prepare_file() {
post_src_install() {
cd "${ED}"
- find . -name '*.exe' | while read f; do
- if file "${f}" | grep "GUI" > /dev/null 2>&1; then
- if test ! -f "${f%.exe}"; then
- einfo "Windows GUI Executable $f will have no symlink."
+ find . -name '*.exe' -o -name '*.dll.a' -o -name '*.so' |
+ while read f
+ do
+ f=${f#./}
+ case ${f} in
+ *.exe)
+ if file "./${f}" | grep "GUI" > /dev/null 2>&1; then
+ if test ! -f "./${f%.exe}"; then
+ einfo "Windows GUI Executable $f will have no symlink."
+ fi
+ else
+ if test ! -f "./${f%.exe}"; then
+ ebegin "creating ${f%.exe} -> ${f} for console accessibility."
+ eend $(ln -sf "$(basename "${f}")" "./${f%.exe}" && echo 0 || echo 1)
+ fi
fi
- else
- if test ! -f "${f%.exe}"; then
- ebegin "creating ${f%.exe} -> ${f} for console accessibility."
- eend $(ln -sf "$(basename "${f}")" "${f%.exe}" && echo 0 || echo 1)
+ ;;
+ *.dll.a)
+ if test ! -f "./${f%.a}.lib"; then
+ ebegin "creating ${f%.a}.lib -> ${f##*/} for libtool linkability"
+ eend $(ln -sf "$(basename "${f}")" "./${f%.a}.lib" && echo 0 || echo 1)
fi
- fi
+ ;;
+ *.so)
+ if test ! -f "${f%.so}.dll.lib"; then
+ ebegin "creating ${f%.so}.dll.lib -> ${f##*/} for libtool linkability"
+ eend $(ln -sf "$(basename "${f}")" "./${f%.so}.dll.lib" && echo 0 || echo 1)
+ fi
+ ;;
+ esac
done
}
@@ -149,3 +182,109 @@ pre_pkg_postrm() {
local removedlist="${EROOT}var/lib/portage/files2bremoved"
windows_cleanup_removed_files $removedlist
}
+
+windows_setup_dllhelper_cp() {
+ if ! [[ $(type -P cp) -ef ${T}/dllhelper/cp ]]
+ then
+ mkdir -p "${T}/dllhelper"
+ cat > "${T}/dllhelper/cp" <<'EOCP'
+#!/usr/bin/env bash
+
+mysrcs=()
+myopts=()
+mydest=
+force_dest_file_opt=
+
+nextargs=( "$@" )
+
+while [[ $# > 0 ]]
+do
+ arg=${1}
+ shift
+ case ${arg} in
+ --)
+ mysrcs+=( "${@}" )
+ break
+ ;;
+ -S)
+ myopts+=( "${arg}" ${1+"$1"} )
+ ${1:+shift}
+ ;;
+ -t)
+ mydest="${1-}"
+ ${1:+shift}
+ ;;
+ -T)
+ force_dest_file_opt=${arg}
+ ;;
+ -*)
+ myopts+=( "${arg}" )
+ ;;
+ *)
+ mysrcs+=( "${arg}" )
+ ;;
+ esac
+done
+
+me=${0##*/}
+nextPATH=
+oIFS=$IFS
+IFS=:
+for p in ${PATH}
+do
+ [[ ${p}/${me} -ef ${0} ]] && continue
+ nextPATH+=${nextPATH:+:}${p}
+done
+IFS=${oIFS}
+
+PATH=${nextPATH}
+
+${me} "${nextargs[@]}"
+ret=$?
+[[ ${ret} == 0 ]] || exit ${ret}
+
+if [[ -z ${mydest} ]]
+then
+ [[ ${#mysrcs[@]} < 2 ]] && exit 0
+ : "${mysrcs[@]}" "${#mysrcs[@]}"
+ mydest=${mysrcs[${#mysrcs[@]}-1]}
+ unset mysrcs[${#mysrcs[@]}-1]
+elif [[ ${#mysrcs[@]} == 0 ]]
+then
+ exit 0
+fi
+
+for src in ${mysrcs[@]}
+do
+ ret=0
+ [[ ${src##*/} != lib*.so* ]] && continue
+ for ext in dll pdb
+ do
+ [[ ${src##*/} == *.${ext} ]] && continue
+ [[ -f ${src} && -f ${src}.${ext} ]] || continue
+ if [[ -d ${mydest} && ! -n ${force_dest_file_opt} ]]
+ then
+ # When copying to directory we keep the basename.
+ ${me} -T "${myopts[@]}" "${src}.${ext}" "${mydest}/${src##*/}.${ext}"
+ ret=$?
+ elif [[ ${mydest##*/} == ${src##*/} ]]
+ then
+ # Copy the dll only when we keep the basename.
+ ${me} -T "${myopts[@]}" "${src}.${ext}" "${mydest}.${ext}"
+ ret=$?
+ fi
+ [[ ${ret} == 0 ]] || exit ${ret}
+ done
+done
+
+exit 0
+EOCP
+ chmod +x "${T}/dllhelper/cp"
+ PATH="${T}/dllhelper:${PATH}"
+ fi
+}
+
+if [[ ${EBUILD_PHASE} == 'setup' ]]
+then
+ windows_setup_dllhelper
+fi