summaryrefslogtreecommitdiff
path: root/profiles/prefix
diff options
context:
space:
mode:
Diffstat (limited to 'profiles/prefix')
-rw-r--r--profiles/prefix/make.defaults3
-rw-r--r--profiles/prefix/windows/winnt/profile.bashrc200
-rw-r--r--profiles/prefix/windows/winnt/x64/eapi1
-rw-r--r--profiles/prefix/windows/winnt/x64/make.defaults28
-rw-r--r--profiles/prefix/windows/winnt/x64/parent1
-rw-r--r--profiles/prefix/windows/winnt/x86/make.defaults18
6 files changed, 208 insertions, 43 deletions
diff --git a/profiles/prefix/make.defaults b/profiles/prefix/make.defaults
index ac1d126eb4f5..1b8aa47aaa58 100644
--- a/profiles/prefix/make.defaults
+++ b/profiles/prefix/make.defaults
@@ -14,6 +14,3 @@ USE="readline zlib ncurses ssl"
# NOTE: Both are incremental variables: Need to drop obsolete base values.
PYTHON_TARGETS="-python2_7 python3_6"
PYTHON_SINGLE_TARGET="python3_6"
-
-# Move away from ruby22 fast forward to ruby24, we don't have ruby23
-RUBY_TARGETS="ruby24"
diff --git a/profiles/prefix/windows/winnt/profile.bashrc b/profiles/prefix/windows/winnt/profile.bashrc
index b8def6390deb..1a70e77b1cbd 100644
--- a/profiles/prefix/windows/winnt/profile.bashrc
+++ b/profiles/prefix/windows/winnt/profile.bashrc
@@ -10,10 +10,42 @@
# and should be dropped once portage does sth. like this itself.
#
-# Need to explicitly set PKG_CONFIG_PATH for cross EPREFIX.
-export PKG_CONFIG_PATH="${EPREFIX}/lib/pkgconfig:${EPREFIX}/usr/lib/pkgconfig"
+#######################################################################
+#
+# Unix aware build tools may provide (e.g. pkg-config) and accept
+# (e.g. gcc) the -lNAME linker option. While they create libNAME.so
+# as the import library, they may be unaware of the additional dll.
+# The dllhelper wrappers take care of copying the real dll when
+# copying the libNAME.so.
+#
+# Cygwin and MinGW aware build tools may create the import library
+# as libNAME.dll.a or libNAME.dll.lib, and are aware of the dll,
+# while a subsequent linker step still receives the -lNAME option.
+#
+# MSVC aware build tools may provide (e.g. icu-config) and accept
+# (e.g. cl.exe) the NAME.lib linker option, maybe with full path,
+# and are aware of the dll.
+#
+# Libtool does accept both the Unix and MSVC variants now, but does
+# search for the libNAME(.la|.dll|.so|.a) file upon -lNAME, in order.
+#
+# As Gentoo ebuilds may remove libNAME.la, we need the libNAME.so
+# because we don't want to have libNAME.dll as an import library.
+#
+# The static library may be created as libNAME.a, libNAME.lib or even
+# NAME.lib - the latter we need to check for static or import library.
+#
+# For whatever import library file we find, make sure there is both the
+# NAME.lib and the libNAME.so for dynamic linkability via all the
+# -lNAME, the NAME.lib and the libNAME.so linker option.
+#
+# For whatever static library file we find, make sure there is both the
+# libNAME.lib and the libNAME.a for static linkability via all the
+# -lNAME, the libNAME.lib and the libNAME.a linker option.
+#
+#######################################################################
-windows_setup_dllhelper() {
+winnt_setup_dllhelper() {
case ${CATEGORY}/${PN} in
sys-libs/zlib |\
'')
@@ -23,60 +55,150 @@ windows_setup_dllhelper() {
# and installation is done using cp, we override cp to
# additionally copy the dll when the library is copied.
ebegin "Setting up wrapper to copy the DLL along the LIB"
- windows_setup_dllhelper_cp
+ winnt_setup_dllhelper_cp
eend $?
;;
esac
}
post_src_install() {
- cd "${ED}"
- find . -name '*.exe' -o -name '*.dll.a' -o -name '*.so' |
+ winnt_post_src_install
+}
+
+winnt_post_src_install() {
+ cd "${ED}" || return 0
+ #
+ # File names being treated as import library:
+ # libNAME.so
+ # NAME.lib if CHOST-dumpbin yields 'DLL name'
+ # libNAME.dll.lib
+ # libNAME.dll.a
+ #
+ # File names being treated as static library:
+ # libNAME.lib
+ # NAME.lib if CHOST-dumpbin lacks 'DLL name'
+ # libNAME.a
+ #
+ # File names being warned about as suspect:
+ # NAME.so
+ # NAME.a
+ # NAME.dll.lib
+ # NAME.dll.a
+ #
+ find . -name '*.so' -o -name '*.lib' -o -name '*.a' |
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
+ libdir=$(dirname "${f}")
+ libfile=${f##*/}
+ libname=
+ NAMElib= # import lib to create
+ libNAMEso= # import lib to create
+ libNAMElib= # static lib to create
+ libNAMEa= # static lib to create
+ case ${libfile} in
+ lib*.so) # found import library
+ libname=${libfile%.so}
+ libname=${libname#lib}
+ NAMElib=${libname}.lib
+ libNAMEso=lib${libname}.so
+ ;;
+ *.so) ;; # warn
+ lib*.dll.lib) # found import library
+ libname=${libfile%.dll.lib}
+ libname=${libname#lib}
+ NAMElib=${libname}.lib
+ libNAMEso=lib${libname}.so
;;
- *.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
+ *.dll.lib) ;; # warn
+ *.lib) # found static or import library
+ ${CHOST}-dumpbin.exe /headers "./${libdir}/${libfile}" | grep -q 'DLL name'
+ case "${PIPESTATUS[*]}" in
+ '0 0') # found import library
+ libname=${libfile%.lib}
+ libname=${libname#lib}
+ NAMElib=${libname}.lib
+ libNAMEso=lib${libname}.so
+ ;;
+ '0 1') # found static library
+ libname=${libfile%.lib}
+ libname=${libname#lib}
+ libNAMEa=lib${libname}.a
+ libNAMElib=lib${libname}.lib
+ ;;
+ *)
+ die "Cannot run ${CHOST}-dumpbin on ${libdir}/${libfile}"
+ ;;
+ esac
;;
- *.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
+ lib*.dll.a) # found import library
+ libname=${libfile%.dll.a}
+ libname=${libname#lib}
+ NAMElib=${libname}.lib
+ libNAMEso=lib${libname}.so
;;
+ *.dll.a) ;; # warn
+ lib*.a) # found static library
+ libname=${libfile%.a}
+ libname=${libname#lib}
+ libNAMEa=lib${libname}.a
+ libNAMElib=lib${libname}.lib
+ ;;
+ *.a) ;; # warn
esac
+ if [[ -z ${libname} ]]; then
+ ewarn "Ignoring suspect file with library extension: ${f}"
+ continue
+ fi
+
+ if [[ ${NAMElib} && ! -e ./${libdir}/${NAMElib} ]]; then
+ ebegin "creating ${NAMElib} from ${libfile} for MSVC linkability"
+ cp -pf "./${libdir}/${libfile}" "./${libdir}/${NAMElib}" || die
+ eend $?
+ fi
+ if [[ ${libNAMElib} && ! -e ./${libdir}/${libNAMElib} ]]; then
+ ebegin "creating ${libNAMElib} from ${libfile} for MSVC linkability"
+ cp -pf "./${libdir}/${libfile}" "./${libdir}/${libNAMElib}" || die
+ eend $?
+ fi
+ if [[ ${libNAMEso} && ! -e ./${libdir}/${libNAMEso} ]]; then
+ ebegin "creating ${libNAMEso} from ${f##*/} for POSIX linkability"
+ cp -pf "./${libdir}/${libfile}" "./${libdir}/${libNAMEso}" || die
+ eend $?
+ fi
+ if [[ ${libNAMEa} && ! -e ./${libdir}/${libNAMEa} ]]; then
+ ebegin "creating ${libNAMEa} from ${f##*/} for POSIX linkability"
+ cp -pf "./${libdir}/${libfile}" "./${libdir}/${libNAMEa}" || die
+ eend $?
+ fi
done
- [[ -d usr/$(get_libdir) ]] &&
- find usr/$(get_libdir) -maxdepth 1 -type f -name '*.dll' |
- while read f
- do
- if test ! -f usr/bin/${f##*/}; then
- ebegin "moving ${f} to usr/bin for native loader"
+ if [[ -d usr/$(get_libdir) ]]
+ then
+ # The native loader does not understand symlinks to dlls,
+ # seen to be created by dev-libs/icu eventually. For any
+ # dll we find in usr/lib we need to perform a real copy to
+ # usr/bin, to resolve potential symlinks (seen from icu),
+ # and perform the remove from usr/lib afterwards, to not
+ # break symlinks later on discovered by find.
+ local toremove=()
+ local f
+ while read f
+ do
+ [[ -f usr/bin/${f##*/} ]] && continue
+ ebegin "moving ${f} to usr/bin for the native loader"
dodir usr/bin || die
- mv -f "${f}" usr/bin || die
- ln -sf "../bin/${f##*/}" "${f}" || die
+ cp -f "${f}" usr/bin/ || die
eend $?
+ toremove=( "${toremove[@]}" "${f}" )
+ done < <(find usr/$(get_libdir) -maxdepth 1 -name '*.dll')
+ if [[ ${#toremove[@]} -gt 0 ]]
+ then
+ rm -f "${toremove[@]}" || die "removing dlls from usr/$(get_libdir) failed"
fi
- done
+ fi
}
-windows_setup_dllhelper_cp() {
+winnt_setup_dllhelper_cp() {
if ! [[ $(type -P cp) -ef ${T}/dllhelper/cp ]]
then
mkdir -p "${T}/dllhelper"
@@ -179,5 +301,5 @@ EOCP
if [[ ${EBUILD_PHASE} == 'setup' ]]
then
- windows_setup_dllhelper
+ winnt_setup_dllhelper
fi
diff --git a/profiles/prefix/windows/winnt/x64/eapi b/profiles/prefix/windows/winnt/x64/eapi
new file mode 100644
index 000000000000..7ed6ff82de6b
--- /dev/null
+++ b/profiles/prefix/windows/winnt/x64/eapi
@@ -0,0 +1 @@
+5
diff --git a/profiles/prefix/windows/winnt/x64/make.defaults b/profiles/prefix/windows/winnt/x64/make.defaults
new file mode 100644
index 000000000000..1200225e1069
--- /dev/null
+++ b/profiles/prefix/windows/winnt/x64/make.defaults
@@ -0,0 +1,28 @@
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+# This profile is designed for use as Stacked Prefix, set up using
+# prefix-stack-setup (app-portage/prefix-toolkit) from with a Cygwin
+# Prefix (Guest only), having sys-devel/parity installed (wraps MSVC).
+#
+# CHOST is left unset on purpose. It is set by prefix-stack-setup
+# using some --chost=x86_64-msvc16-winnt argument, selecting the
+# Visual Studio version and runtime variant (static|debug) to use.
+#
+# Sample CHOST values for the runtime variant using x64 Visual Studio 2019,
+# as provided by parity-2.0.0 (multithreaded only):
+# x86_64-msvc16-winnt dynamic runtime (cl.exe /MD for MSVCRT.DLL)
+# x86_64-msvcd16-winnt dynamic debug runtime (cl.exe /MDd for MSVCRTD.DLL)
+# x86_64-libcmt16-winnt static runtime (cl.exe /MT for LIBCMT.LIB)
+# x86_64-libcmtd16-winnt static debug runtime (cl.exe /MTd for LIBCMTD.LIB)
+#
+
+ARCH="x64-winnt"
+ACCEPT_KEYWORDS="~x64-winnt"
+
+# multilib build stuff, single ABI (no multilib)
+MULTILIB_ABIS="amd64"
+DEFAULT_ABI="amd64"
+ABI="amd64"
+IUSE_IMPLICIT="abi_x86_64"
+LIBDIR_amd64="lib"
diff --git a/profiles/prefix/windows/winnt/x64/parent b/profiles/prefix/windows/winnt/x64/parent
new file mode 100644
index 000000000000..f3229c5b9876
--- /dev/null
+++ b/profiles/prefix/windows/winnt/x64/parent
@@ -0,0 +1 @@
+..
diff --git a/profiles/prefix/windows/winnt/x86/make.defaults b/profiles/prefix/windows/winnt/x86/make.defaults
index 3c45b788d160..223c275acc77 100644
--- a/profiles/prefix/windows/winnt/x86/make.defaults
+++ b/profiles/prefix/windows/winnt/x86/make.defaults
@@ -1,6 +1,22 @@
-# Copyright 1999-2019 Gentoo Authors
+# Copyright 1999-2020 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
+# This profile is designed for use as Stacked Prefix, set up using
+# prefix-stack-setup (app-portage/prefix-toolkit) from with a Cygwin
+# Prefix (Guest only), having sys-devel/parity installed (wraps MSVC).
+#
+# CHOST is left unset on purpose. It is set by prefix-stack-setup
+# using some --chost=i686-msvc16-winnt argument, selecting the
+# Visual Studio version and runtime variant (static|debug) to use.
+#
+# Sample CHOST values for the runtime variant using x86 Visual Studio 2019,
+# as provided by parity-2.0.0 (multithreaded only):
+# i686-msvc16-winnt dynamic runtime (cl.exe /MD for MSVCRT.DLL)
+# i686-msvcd16-winnt dynamic debug runtime (cl.exe /MDd for MSVCRTD.DLL)
+# i686-libcmt16-winnt static runtime (cl.exe /MT for LIBCMT.LIB)
+# i686-libcmtd16-winnt static debug runtime (cl.exe /MTd for LIBCMTD.LIB)
+#
+
ARCH="x86-winnt"
ACCEPT_KEYWORDS="~x86-winnt"