diff options
author | Andrei Horodniceanu <a.horodniceanu@proton.me> | 2024-03-09 16:39:38 +0200 |
---|---|---|
committer | Andrei Horodniceanu <a.horodniceanu@proton.me> | 2024-04-14 01:47:31 +0300 |
commit | cf9db5873fd9d11b0e66faab7ef61a3b2a95c2f9 (patch) | |
tree | 1456e3f89ab373fa603134402fdc6e97b602d4c6 | |
parent | dev-util/serve-d: port to dlang-single.eclass (diff) | |
download | dlang-cf9db5873fd9d11b0e66faab7ef61a3b2a95c2f9.tar.gz dlang-cf9db5873fd9d11b0e66faab7ef61a3b2a95c2f9.tar.bz2 dlang-cf9db5873fd9d11b0e66faab7ef61a3b2a95c2f9.zip |
dev-util/dub: port to dlang-single.eclass
Signed-off-by: Andrei Horodniceanu <a.horodniceanu@proton.me>
-rw-r--r-- | dev-util/dub/dub-1.36.0-r1.ebuild | 162 |
1 files changed, 162 insertions, 0 deletions
diff --git a/dev-util/dub/dub-1.36.0-r1.ebuild b/dev-util/dub/dub-1.36.0-r1.ebuild new file mode 100644 index 0000000..608e02a --- /dev/null +++ b/dev-util/dub/dub-1.36.0-r1.ebuild @@ -0,0 +1,162 @@ +# Copyright 1999-2024 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +DESCRIPTION="Package and build management system for D" +HOMEPAGE="https://code.dlang.org/" +LICENSE="MIT" + +SLOT="0" +KEYWORDS="~amd64 ~arm64 ~x86" +IUSE="doc test" +RESTRICT="!test? ( test )" + +DLANG_COMPAT=( dmd-2_{106..107} gdc-13 ldc2-1_{35..36} ) + +inherit dlang-single shell-completion + +REQUIRED_USE=${DLANG_REQUIRED_USE} +DEPEND=${DLANG_DEPS} +BDEPEND=${DLANG_DEPS} +RDEPEND=${DLANG_DEPS} + +DUB_TEST_DEPS=( + gitcompatibledubpackage@1.0.1 + gitcompatibledubpackage@1.0.4 + urld@2.1.1 +) +generate_dub_test_dependencies() { + local dep + for dep in "${DUB_TEST_DEPS[@]}"; do + local depName depVersion + depName="${dep%@*}" + depVersion="${dep#*@}" + echo "https://code.dlang.org/packages/${depName}/${depVersion}.zip -> ${depName}-${depVersion}.zip" + done +} + +GITHUB_URI="https://codeload.github.com/dlang" +SRC_URI=" + ${GITHUB_URI}/${PN}/tar.gz/v${PV} -> ${PN}-${PV}.tar.gz + test? ( + $(generate_dub_test_dependencies) + ) +" + +PATCHES=( + "${FILESDIR}/${P}-fix-wno-error-not-applying.patch" +) + +src_unpack() { + unpack "${P}.tar.gz" + + if use test; then + # Copy the archives locally. Some tests do need to perform an + # actual fetch operation so make all of them available as + # archives and let dub figure out the rest. + local store="${T}/dub-test-deps" + mkdir -p "${store}" || die + + local dep + for dep in "${DUB_TEST_DEPS[@]}"; do + local depName depVersion + depName="${dep%@*}" + depVersion="${dep#*@}" + + cp "${DISTDIR}/${depName}-${depVersion}.zip" "${store}" || die + done + + # Generate a settings.json file that points to the directory with all the deps. + cat <<EOF > "${T}/settings.json" +{ + "registryUrls": [ + "file://${store}" + ], + "skipRegistry": "all" +} +EOF + fi +} + +src_compile() { + local imports=source versions="DubApplication DubUseCurl" + dlang_compile_bin bin/dub $(<build-files.txt) + + # Generate man pages. Rebuids dub so put it behind a USE flag. + if use doc; then + einfo "Generating man pages" + # You're supposed to be able to do ./bin/dub scrips/man/gen_man.d + # but it gives linking errors with gdc. + + # $imports is set up above. + versions=DubUseCurl + dlang_compile_bin scripts/man/gen_man{,.d} \ + $(sed '/^source\/app.d$/d' build-files.txt) + ./scripts/man/gen_man || die "Could not generate man pages" + fi +} + +src_test() { + # Setup the environment for the tests. + local -x DUB="${S}/bin/dub" + local -x DUB_HOME="${T}/dub-home" # where to put artifacts + + # Note, disabling tests is possible yet very hard. You have to + # create a bash variable containing a regex (to be used in =~) that + # matches all the tests that you want *to* run. It's probably easier + # to delete the subdirectory under ${S}/test. + + # Tries to connect to github.com and fails due to the network sandbox + rm -rf "${S}/test/git-dependency" || die + # Doesn't work on non amd64/x86 + if [[ ${ARCH} == arm64 ]]; then + rm -rf test/issue1447-build-settings-vars || die + fi + + local dropImportCTest + # We have an importC test and not all compilers pass it properly. + # gdc doesn't support #include's in its importC implementation yet. + # Only check == 13 since 12 is skipped by the script. + [[ ${EDC} == gdc* ]] && [[ $(dlang_get_be_version) == 13 ]] && dropImportCTest=1 + # Nor does <=ldc2-1.32. + [[ ${EDC} == ldc* ]] && $(ver_test $(dlang_get_be_version) -le 1.32) && dropImportCTest=1 + # dmd can do #include's but there are some other errors about + # __float128 in <=dmd-2.102 on x86. + [[ ${EDC} == dmd* ]] && $(ver_test $(dlang_get_be_version) -le 2.102) \ + && [[ ${ARCH} == x86 ]] && dropImportCTest=1 + if [[ ${dropImportCTest} ]]; then + rm -rf "${S}/test/use-c-sources" || die + fi + + # Put the configuration file relative to the dub binary: + # <dub-bin-dir>/../etc/dub/settings.json as per + # https://dub.pm/dub-reference/settings so that it's picked up + # automatically. + mkdir -p "${S}/bin/../etc/dub" || die + cp "${T}/settings.json" "${S}/bin/../etc/dub/" \ + || die "Could not copy dub configuration file" + + # See https://bugs.gentoo.org/921581 we have to remove -op (preserve + # source path for output files) from the flags lest the sandbox + # trips us up. This shouldn't be a problem anymore with dlang-single. + dlang-filter-dflags "*" "--op" "-op" + + # Append -Wno-error or equivalent + DCFLAGS+=" $(dlang_get_wno_error_flag)" + + DFLAGS="${DCFLAGS}" FRONTEND="$(dlang_get_fe_version)" test/run-unittest.sh \ + || die "Tests failed" +} + +src_install() { + dobin bin/dub + dodoc README.md + + # Make sure there are no man files in any other section. + use doc && doman scripts/man/*.1 + + newbashcomp scripts/bash-completion/${PN}.bash ${PN} + dozshcomp scripts/zsh-completion/_${PN} + dofishcomp scripts/fish-completion/${PN}.fish +} |