# Copyright 1999-2025 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8

# ebuild generated by hackport 0.9.0.0.9999
#hackport: flags: -profiling

CABAL_FEATURES="lib profile haddock hoogle hscolour test-suite"
inherit haskell-cabal

DESCRIPTION="Haskell implementation of the Nix language"
HOMEPAGE="https://github.com/haskell-nix/hnix#readme"

GIT_REPO="https://github.com/haskell-nix/hnix"
GIT_COMMIT="3f334d9b5a8b1044df850167b1b459e5649868f3" # 2024-02-18
GIT_P="${PN}-${GIT_COMMIT}"

# <https://github.com/haskell-nix/hnix/pull/1112> retrieved 2025-02-14
PATCH_GIT_REPO="https://github.com/sorki/hnix"
PATCH_GIT_COMMIT_001="0fdd4d2addfb1f85c3c79a7bb44450c1e6b25b93"
PATCH_GIT_COMMIT_002="155163453cd8165f93df87f617a0661e5df0d0e0"

SRC_URI="
	${GIT_REPO}/archive/${GIT_COMMIT}.tar.gz -> ${GIT_P}.tar.gz
	${PATCH_GIT_REPO}/commit/${PATCH_GIT_COMMIT_001}.patch
		-> ${GIT_P}-adapt-to-new-hnix-store-001.patch
	${PATCH_GIT_REPO}/commit/${PATCH_GIT_COMMIT_002}.patch
		-> ${GIT_P}-adapt-to-new-hnix-store-002.patch
"

S="${WORKDIR}/${GIT_P}"
CABAL_FILE="${S}/${PN}.cabal"

LICENSE="BSD"
SLOT="0/${PV}"
KEYWORDS="~amd64"
IUSE="+executable +optimize"

PATCHES+=(
	"${DISTDIR}/${GIT_P}-adapt-to-new-hnix-store-001.patch"
	"${DISTDIR}/${GIT_P}-adapt-to-new-hnix-store-002.patch"
	"${FILESDIR}/${PN}-0.17.0.1_pre20240218-add-executable-flag.patch"
	"${FILESDIR}/${PN}-0.17.0.1_pre20240218-disable-nix-instantiate-tests.patch"
)

CABAL_CHDEPS=(
	'extra >= 1.7 && < 1.8' 'extra >= 1.7'
)

RDEPEND="
	>=dev-haskell/base16-bytestring-0.1.1:=[profile?] <dev-haskell/base16-bytestring-1.1:=[profile?]
	>=dev-haskell/comonad-5.0.4:=[profile?] <dev-haskell/comonad-5.1:=[profile?]
	dev-haskell/constraints-extras:=[profile?]
	dev-haskell/crypton:=[profile?]
	dev-haskell/data-default-class:=[profile?]
	>=dev-haskell/data-fix-0.3.0:=[profile?] <dev-haskell/data-fix-0.4:=[profile?]
	>dev-haskell/dependent-sum-0.7:=[profile?]
	>=dev-haskell/deriving-compat-0.3:=[profile?] <dev-haskell/deriving-compat-0.7:=[profile?]
	dev-haskell/dlist:=[profile?]
	>=dev-haskell/extra-1.7:=[profile?]
	>=dev-haskell/free-5.1:=[profile?] <dev-haskell/free-5.3:=[profile?]
	>=dev-haskell/gitrev-1.1.0:=[profile?] <dev-haskell/gitrev-1.4:=[profile?]
	>=dev-haskell/hashable-1.2.5:=[profile?] <dev-haskell/hashable-1.6:=[profile?]
	>=dev-haskell/hashing-0.1.0:=[profile?] <dev-haskell/hashing-0.2:=[profile?]
	>=dev-haskell/hnix-store-core-0.8.0:=[profile?] <dev-haskell/hnix-store-core-0.9:=[profile?]
	>=dev-haskell/hnix-store-nar-0.1.0:=[profile?] <dev-haskell/hnix-store-nar-0.2:=[profile?]
	>=dev-haskell/hnix-store-readonly-0.1.0:=[profile?] <dev-haskell/hnix-store-readonly-0.2:=[profile?]
	>=dev-haskell/hnix-store-remote-0.7.0:=[profile?] <dev-haskell/hnix-store-remote-0.8:=[profile?]
	>=dev-haskell/http-client-tls-0.3.5:=[profile?] <dev-haskell/http-client-tls-0.4:=[profile?]
	>=dev-haskell/http-types-0.12.2:=[profile?] <dev-haskell/http-types-0.13:=[profile?]
	>=dev-haskell/lens-family-1.2.2:=[profile?] <dev-haskell/lens-family-2.2:=[profile?]
	>=dev-haskell/lens-family-core-1.2.2:=[profile?] <dev-haskell/lens-family-core-2.2:=[profile?]
	>=dev-haskell/lens-family-th-0.5.0:=[profile?] <dev-haskell/lens-family-th-0.6:=[profile?]
	>=dev-haskell/megaparsec-7.0:=[profile?] <dev-haskell/megaparsec-9.7:=[profile?]
	>=dev-haskell/monad-control-1.0.2:=[profile?] <dev-haskell/monad-control-1.1:=[profile?]
	>=dev-haskell/monadlist-0.0.2:=[profile?] <dev-haskell/monadlist-0.1:=[profile?]
	>=dev-haskell/neat-interpolation-0.4:=[profile?] <dev-haskell/neat-interpolation-0.6:=[profile?]
	>=dev-haskell/optparse-applicative-0.14.3:=[profile?] <dev-haskell/optparse-applicative-0.19:=[profile?]
	>=dev-haskell/parser-combinators-1.0.1:=[profile?] <dev-haskell/parser-combinators-1.4:=[profile?]
	>=dev-haskell/pretty-show-1.9.5:=[profile?] <dev-haskell/pretty-show-1.11:=[profile?]
	>=dev-haskell/prettyprinter-1.7.0:=[profile?] <dev-haskell/prettyprinter-1.8:=[profile?]
	>=dev-haskell/ref-tf-0.5:=[profile?] <dev-haskell/ref-tf-0.6:=[profile?]
	>=dev-haskell/regex-tdfa-1.2.3:=[profile?] <dev-haskell/regex-tdfa-1.4:=[profile?]
	>=dev-haskell/relude-1.0.0:=[profile?] <dev-haskell/relude-1.3:=[profile?]
	>=dev-haskell/scientific-0.3.6:=[profile?] <dev-haskell/scientific-0.4:=[profile?]
	>=dev-haskell/semialign-1.2:=[profile?] <dev-haskell/semialign-1.4:=[profile?]
	>=dev-haskell/serialise-0.2.1:=[profile?] <dev-haskell/serialise-0.3:=[profile?]
	>=dev-haskell/some-1.0.1:=[profile?] <dev-haskell/some-1.1:=[profile?]
	>=dev-haskell/split-0.2.3:=[profile?] <dev-haskell/split-0.3:=[profile?]
	>=dev-haskell/syb-0.7:=[profile?] <dev-haskell/syb-0.8:=[profile?]
	>=dev-haskell/text-1.2.3:=[profile?] <dev-haskell/text-2.2:=[profile?]
	>=dev-haskell/th-lift-instances-0.1:=[profile?] <dev-haskell/th-lift-instances-0.2:=[profile?]
	>=dev-haskell/these-1.0.1:=[profile?] <dev-haskell/these-1.3:=[profile?]
	>=dev-haskell/transformers-base-0.4.5:=[profile?] <dev-haskell/transformers-base-0.5:=[profile?]
	>=dev-haskell/unix-compat-0.4.3:=[profile?] <dev-haskell/unix-compat-0.8:=[profile?]
	>=dev-haskell/unordered-containers-0.2.14:=[profile?] <dev-haskell/unordered-containers-0.3:=[profile?]
	>=dev-haskell/vector-0.12.0:=[profile?] <dev-haskell/vector-0.14:=[profile?]
	>=dev-haskell/xml-1.3.14:=[profile?] <dev-haskell/xml-1.4:=[profile?]
	>=dev-lang/ghc-9.0.2:=
	|| (
		( >=dev-haskell/aeson-1.4.2 <dev-haskell/aeson-1.6 )
		( >=dev-haskell/aeson-2.0 <dev-haskell/aeson-2.3 )
	)
	dev-haskell/aeson:=[profile?]
	|| (
		( >=dev-haskell/http-client-0.5.14 <dev-haskell/http-client-0.6 )
		( >=dev-haskell/http-client-0.6.4 <dev-haskell/http-client-0.8 )
	)
	dev-haskell/http-client:=[profile?]
	|| (
		( >=dev-haskell/logict-0.6.0 <dev-haskell/logict-0.7 )
		( >=dev-haskell/logict-0.7.0.2 <dev-haskell/logict-0.9 )
	)
	dev-haskell/logict:=[profile?]
	executable? (
		>=dev-haskell/haskeline-0.8.0.0:=[profile?] <dev-haskell/haskeline-0.9:=[profile?]
		>=dev-haskell/repline-0.4.0.0:=[profile?] <dev-haskell/repline-0.5:=[profile?]
	)
"
DEPEND="${RDEPEND}
	>=dev-haskell/cabal-3.4.1.0
	test? ( dev-haskell/diff
		dev-haskell/glob
		dev-haskell/hedgehog
		dev-haskell/tasty
		dev-haskell/tasty-hedgehog
		dev-haskell/tasty-hunit
		dev-haskell/tasty-th )
"

src_prepare() {
	# These tests are expecting some kind of socket to be available (on nix?)
	# Exception: Network.Socket.connect: <socket: 8>: does not exist
	local t bad_tests=(
		eval-okay-path.nix
		eval-okay-eq-derivations.{exp,nix}
		eval-okay-context-introspection.{exp,nix}
		eval-okay-context.{exp,nix}
	)

	for t in "${bad_tests[@]}"; do
		rm -v "${S}/data/nix/tests/lang/${t}" || die
	done

	haskell-cabal_src_prepare
}


src_configure() {
	haskell-cabal_src_configure \
		$(cabal_flag executable executable) \
		$(cabal_flag optimize optimize) \
		--flag=-profiling
}