dev-libs/gtkd - 3.10.0-r2 (dlang)

Search

Package Information

Description:
GtkD is a D binding and OO wrapper of GTK+
Homepage:
https://gtkd.org/
License:
LGPL-3+-with-gtkd-exceptions test? ( LGPL-3+ )

Ebuild Details

Version EAPI Keywords Slot
3.10.0-r2 8 ~amd64 ~arm64 ~x86 3
View Raw Ebuild
# 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
}

USE Flags

Dependencies

DEPEND

${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 )

BDEPEND

app-arch/unzip ${DLANG_DEPS}