| Version | EAPI | Keywords | Slot |
|---|---|---|---|
| 3.10.0-r2 | 8 | ~amd64 ~arm64 ~x86 | 3 |
# Copyright 1999-2025 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
inherit multilib-minimal
DESCRIPTION="GtkD is a D binding and OO wrapper of GTK+"
HOMEPAGE="https://gtkd.org/"
SRC_URI="https://gtkd.org/Downloads/sources/GtkD-${PV}.zip"
LICENSE="LGPL-3+-with-gtkd-exceptions test? ( LGPL-3+ )"
SLOT="3"
KEYWORDS="~amd64 ~arm64 ~x86"
MULTILIB_COMPAT=( abi_x86_{32,64} )
DLANG_COMPAT=( dmd-2_{106..111} gdc-1{3..5} ldc2-1_{35..40} )
declare -A DLANG_REQ_USE=(
[dmd]="${MULTILIB_USEDEP}"
[gdc]=""
[ldc2]="${MULTILIB_USEDEP}"
)
inherit dlang-r1
BDEPEND="app-arch/unzip ${DLANG_DEPS}"
RDEPEND="
${DLANG_DEPS}
>=x11-libs/gtk+-3.24:3[${MULTILIB_USEDEP}]
>=dev-libs/glib-2.64:2[${MULTILIB_USEDEP}]
>=x11-libs/pango-1.43[${MULTILIB_USEDEP}]
>=app-accessibility/at-spi2-core-2.34[${MULTILIB_USEDEP}]
>=x11-libs/gdk-pixbuf-2.38:2[${MULTILIB_USEDEP}]
>=x11-libs/cairo-1.12.2[${MULTILIB_USEDEP}]
>=gnome-base/librsvg-2.54:2[${MULTILIB_USEDEP}]
sourceview? ( >=x11-libs/gtksourceview-4.2:4 )
gstreamer? ( >=media-libs/gstreamer-1.16:1.0[${MULTILIB_USEDEP}] )
vte? ( >=x11-libs/vte-0.56:2.91 )
peas? ( >=dev-libs/libpeas-1.20 )
"
DEPEND=${DLANG_DEPS}
GTKD_USE_FLAGS=(gtk opengl sourceview gstreamer vte peas)
GTKD_LIB_NAMES=(gtkd gtkdgl gtkdsv gstreamerd vted peasd)
GTKD_SRC_DIRS=( gtkd gtkdgl sourceview gstreamer vte peas)
# static-libs I have no idea about. It makes a "static-library" that
# dynamically links phobos and uses dl to open the gtk+ libs at runtime.
IUSE="${GTKD_USE_FLAGS[@]:1} static-libs test"
RESTRICT="!test? ( test )"
REQUIRED_USE=${DLANG_REQUIRED_USE}
PATCHES=(
"${FILESDIR}/tests-fix-debug-integer-pr-361.patch"
)
MAJOR=$(ver_cut 1)
MINOR=$(ver_cut 2-)
src_unpack() {
mkdir "${S}" || die "Could not create source directory"
pushd "${S}" >/dev/null || die
unpack "${A}"
popd >/dev/null || die
}
src_prepare() {
default
multilib_copy_sources
multilib_foreach_abi dlang_copy_sources
}
multilib_src_compile() {
compile_libs() {
# Build the shared library version of the component
# The test phase expects no version extension on the .so
local sources=generated/${SRC_DIR}/*/*.d
if [ ${LIB_NAME} != gtkdgl ]; then
sources+=" "generated/${SRC_DIR}/*/c/*.d
fi
if [ ${LIB_NAME} == gstreamerd ]; then
sources+=" "generated/gstreamer/gst/*/*.d" "generated/gstreamer/gst/*/c/*.d
fi
local imports="src generated/gtkd"
# avoid file name collisions with ldc2
[[ ${EDC} == ldc2* ]] && local DCFLAGS="${DCFLAGS} -oq"
dlang_compile_lib.so lib${LIB_NAME}-${MAJOR}.so \
lib${LIB_NAME}-${MAJOR}.so.0 ${sources}
# Build the static library version.
use static-libs && dlang_compile_lib.a "lib${LIB_NAME}-${MAJOR}.a" "${sources}"
# Generate the pkg-config file. The make rules don't depend on anything so
# it's fine to use them even though we compiled the library in another way.
local mymakeargs=(
LINKERFLAG="$(dlang_get_linker_flag)"
prefix="${EPREFIX}/usr"
libdir="$(dlang_get_libdir)"
)
emake "${mymakeargs[@]}" "${LIB_NAME}-${MAJOR}.pc"
sed -i -e 's@include/d@include/dlang@' "${LIB_NAME}-${MAJOR}.pc" || \
die "Could not modify include path for ${LIB_NAME}-${MAJOR}.pc"
}
dlang_foreach_impl foreach_used_component compile_libs
}
multilib_src_test() {
simple_test() {
local cmd=(
${DC} ${DCFLAGS} ${DLANG_LDFLAGS}
$(dlang_get_model_flag)
-Igenerated/gtkd
demos/gtkD/TestWindow/*.d
$(dlang_get_linker_flag)./libgtkd-3.so
$(dlang_get_linker_flag)-ldl
$(dlang_get_linker_flag)-rpath=./
$(dlang_get_output_flag)TestWindow
)
dlang_exec "${cmd[@]}"
if use static-libs; then
cmd=(
${DC} ${DCFLAGS} ${DLANG_LDFLAGS}
$(dlang_get_model_flag)
-Igenerated/gtkd
demos/gtkD/TestWindow/*.d
./libgtkd-3.a
$(dlang_get_output_flag)TestWindow-static
)
dlang_exec "${cmd[@]}"
fi
}
multilib_is_native_abi && dlang_foreach_impl simple_test
}
multilib_src_install() {
install_libs() {
# Install the shared library version of the component
local libfile="lib${LIB_NAME}-${MAJOR}.so"
ln -sf "${libfile}" "${libfile}.0"
ln -sf "${libfile}" "${libfile}.0.${MINOR}"
dlang_dolib.so "${libfile}.0.${MINOR}" "${libfile}.0" "${libfile}"
# Install the static library version
if use static-libs; then
dlang_dolib.a "lib${LIB_NAME}-${MAJOR}.a"
fi
# Install the pkg-config files
insinto "/usr/$(dlang_get_libdir)/pkgconfig"
doins "${LIB_NAME}-${MAJOR}.pc"
}
dlang_foreach_impl foreach_used_component install_libs
}
multilib_src_install_all() {
# Obligatory docs
dodoc AUTHORS README.md
install_headers() {
# Include files. dlang_get_import_dir is safe to use outside of
# dlang_foreach_impl.
insinto "$(dlang_get_import_dir)/${PN}-${MAJOR}"
files="generated/${SRC_DIR}/*"
doins -r ${files}
}
foreach_used_component install_headers
}
pkg_postinst() {
local have_gdc=0 u
for u in ${USE}; do
[[ ${u} != dlang_targets_gdc* ]] && continue
have_gdc=1
break
done
if [[ ${have_gdc} = 1 ]]; then
ewarn "Please run env-update before you use this package."
ewarn "gdc may not find this library until you do."
fi
}
foreach_used_component() {
for (( i = 0 ; i < ${#GTKD_LIB_NAMES[@]} ; i++ )); do
if [[ "${GTKD_LIB_NAMES[$i]}" == "gtkd" ]] || use ${GTKD_USE_FLAGS[$i]}; then
LIB_NAME=${GTKD_LIB_NAMES[$i]} SRC_DIR=${GTKD_SRC_DIRS[$i]} ${@}
fi
done
}
${DLANG_DEPS}
${DLANG_DEPS}
>=x11-libs/gtk+-3.24:3[${MULTILIB_USEDEP}]
>=dev-libs/glib-2.64:2[${MULTILIB_USEDEP}]
>=x11-libs/pango-1.43[${MULTILIB_USEDEP}]
>=app-accessibility/at-spi2-core-2.34[${MULTILIB_USEDEP}]
>=x11-libs/gdk-pixbuf-2.38:2[${MULTILIB_USEDEP}]
>=x11-libs/cairo-1.12.2[${MULTILIB_USEDEP}]
>=gnome-base/librsvg-2.54:2[${MULTILIB_USEDEP}]
sourceview? ( >=x11-libs/gtksourceview-4.2:4 )
gstreamer? ( >=media-libs/gstreamer-1.16:1.0[${MULTILIB_USEDEP}] )
vte? ( >=x11-libs/vte-0.56:2.91 )
peas? ( >=dev-libs/libpeas-1.20 )
app-arch/unzip ${DLANG_DEPS}