# Copyright 2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

# Flutter's pinned pub dependencies for flutter_tools are generated by
# scripts/generate_flutter_ebuild.py. Do not edit the generated block.

EAPI=8

inherit multiprocessing

DESCRIPTION="Flutter SDK - cross-platform UI framework (built from source)"
HOMEPAGE="https://flutter.dev/ https://github.com/flutter/flutter"

FLUTTER_GIT_COMMIT="d3b14c876900e553bc736ca19295fc09e3853e8e"
FLUTTER_ENGINE_REV="a804b261645ef8c13eb3d5c44a5c2fb0340c5539"

# BEGIN GENERATED FLUTTER PUB DEPS
FLUTTER_FONTS_REV="3012db47f3130e62f7cc0beabff968a33cbec8d8"
FLUTTER_GRADLE_REV="fd5c1f2c013565a3bea56ada6df9d2b8e96d56aa"
FLUTTER_GCS="https://storage.googleapis.com/flutter_infra_release"
PUB_URI="https://pub.dev/api/archives"
SRC_URI="
	https://github.com/flutter/flutter/archive/refs/tags/${PV}.tar.gz
		-> ${P}.tar.gz
	${FLUTTER_GCS}/flutter/fonts/${FLUTTER_FONTS_REV}/fonts.zip
		-> flutter-material-fonts-3012db47.zip
	${FLUTTER_GCS}/gradle-wrapper/${FLUTTER_GRADLE_REV}/gradle-wrapper.tgz
		-> flutter-gradle-wrapper-fd5c1f2c.tgz
	${PUB_URI}/_fe_analyzer_shared-95.0.0.tar.gz
	${PUB_URI}/analyzer-10.1.0.tar.gz
	${PUB_URI}/archive-3.6.1.tar.gz
	${PUB_URI}/args-2.7.0.tar.gz
	${PUB_URI}/async-2.13.1.tar.gz
	${PUB_URI}/boolean_selector-2.1.2.tar.gz
	${PUB_URI}/browser_launcher-1.1.3.tar.gz
	${PUB_URI}/built_collection-5.1.1.tar.gz
	${PUB_URI}/built_value-8.12.6.tar.gz
	${PUB_URI}/checked_yaml-2.0.4.tar.gz
	${PUB_URI}/cli_config-0.2.0.tar.gz
	${PUB_URI}/clock-1.1.2.tar.gz
	${PUB_URI}/code_assets-1.2.1.tar.gz
	${PUB_URI}/code_builder-4.11.1.tar.gz
	${PUB_URI}/collection-1.19.1.tar.gz
	${PUB_URI}/completion-1.0.2.tar.gz
	${PUB_URI}/convert-3.1.2.tar.gz
	${PUB_URI}/coverage-1.15.1.tar.gz
	${PUB_URI}/crypto-3.0.7.tar.gz
	${PUB_URI}/csslib-1.0.2.tar.gz
	${PUB_URI}/dap-1.4.0.tar.gz
	${PUB_URI}/dart_service_protocol_shared-0.0.3.tar.gz
	${PUB_URI}/dart_style-3.1.7.tar.gz
	${PUB_URI}/data_assets-0.20.0.tar.gz
	${PUB_URI}/dds-5.3.0.tar.gz
	${PUB_URI}/dds_service_extensions-2.1.0.tar.gz
	${PUB_URI}/devtools_shared-12.1.0.tar.gz
	${PUB_URI}/dtd-4.0.0.tar.gz
	${PUB_URI}/dwds-27.1.2.tar.gz
	${PUB_URI}/extension_discovery-2.1.0.tar.gz
	${PUB_URI}/fake_async-1.3.3.tar.gz
	${PUB_URI}/ffi-2.2.0.tar.gz
	${PUB_URI}/file-7.0.1.tar.gz
	${PUB_URI}/file_testing-3.0.2.tar.gz
	${PUB_URI}/fixnum-1.1.1.tar.gz
	${PUB_URI}/flutter_template_images-5.0.0.tar.gz
	${PUB_URI}/frontend_server_client-4.0.0.tar.gz
	${PUB_URI}/glob-2.1.3.tar.gz
	${PUB_URI}/graphs-2.3.2.tar.gz
	${PUB_URI}/hooks-2.0.2.tar.gz
	${PUB_URI}/hooks_runner-1.5.0.tar.gz
	${PUB_URI}/html-0.15.6.tar.gz
	${PUB_URI}/http-1.6.0.tar.gz
	${PUB_URI}/http_multi_server-3.2.2.tar.gz
	${PUB_URI}/http_parser-4.1.2.tar.gz
	${PUB_URI}/intl-0.20.3.tar.gz
	${PUB_URI}/io-1.0.5.tar.gz
	${PUB_URI}/js-0.7.2.tar.gz
	${PUB_URI}/json_annotation-4.12.0.tar.gz
	${PUB_URI}/json_rpc_2-4.1.0.tar.gz
	${PUB_URI}/logging-1.3.0.tar.gz
	${PUB_URI}/matcher-0.12.20.tar.gz
	${PUB_URI}/meta-1.18.3.tar.gz
	${PUB_URI}/mime-2.0.0.tar.gz
	${PUB_URI}/multicast_dns-0.3.3+1.tar.gz
	${PUB_URI}/mustache_template-2.0.5.tar.gz
	${PUB_URI}/native_stack_traces-0.6.1.tar.gz
	${PUB_URI}/node_preamble-2.0.2.tar.gz
	${PUB_URI}/package_config-2.2.0.tar.gz
	${PUB_URI}/path-1.9.1.tar.gz
	${PUB_URI}/petitparser-7.0.2.tar.gz
	${PUB_URI}/platform-3.1.6.tar.gz
	${PUB_URI}/pool-1.5.2.tar.gz
	${PUB_URI}/process-5.0.5.tar.gz
	${PUB_URI}/pub_semver-2.2.0.tar.gz
	${PUB_URI}/pubspec_parse-1.5.0.tar.gz
	${PUB_URI}/record_use-0.6.0.tar.gz
	${PUB_URI}/shelf-1.4.2.tar.gz
	${PUB_URI}/shelf_packages_handler-3.0.2.tar.gz
	${PUB_URI}/shelf_proxy-1.0.5.tar.gz
	${PUB_URI}/shelf_static-1.1.3.tar.gz
	${PUB_URI}/shelf_web_socket-3.0.0.tar.gz
	${PUB_URI}/source_map_stack_trace-2.1.2.tar.gz
	${PUB_URI}/source_maps-0.10.13.tar.gz
	${PUB_URI}/source_span-1.10.2.tar.gz
	${PUB_URI}/sprintf-7.0.0.tar.gz
	${PUB_URI}/sse-4.2.0.tar.gz
	${PUB_URI}/stack_trace-1.12.1.tar.gz
	${PUB_URI}/standard_message_codec-0.0.1+5.tar.gz
	${PUB_URI}/stream_channel-2.1.4.tar.gz
	${PUB_URI}/string_scanner-1.4.1.tar.gz
	${PUB_URI}/sync_http-0.3.1.tar.gz
	${PUB_URI}/term_glyph-1.2.2.tar.gz
	${PUB_URI}/test-1.31.1.tar.gz
	${PUB_URI}/test_api-0.7.12.tar.gz
	${PUB_URI}/test_core-0.6.18.tar.gz
	${PUB_URI}/typed_data-1.4.0.tar.gz
	${PUB_URI}/unified_analytics-8.0.15.tar.gz
	${PUB_URI}/uuid-4.5.3.tar.gz
	${PUB_URI}/vm_service-15.2.0.tar.gz
	${PUB_URI}/vm_service_interface-2.0.1.tar.gz
	${PUB_URI}/vm_snapshot_analysis-0.7.6.tar.gz
	${PUB_URI}/watcher-1.2.1.tar.gz
	${PUB_URI}/web-1.1.1.tar.gz
	${PUB_URI}/web_socket-1.0.1.tar.gz
	${PUB_URI}/web_socket_channel-3.0.3.tar.gz
	${PUB_URI}/webdriver-3.1.0.tar.gz
	${PUB_URI}/webkit_inspection_protocol-1.2.1.tar.gz
	${PUB_URI}/xml-6.6.1.tar.gz
	${PUB_URI}/yaml-3.1.3.tar.gz
	${PUB_URI}/yaml_edit-2.2.4.tar.gz
"
# END GENERATED FLUTTER PUB DEPS

LICENSE="BSD Apache-2.0"
SLOT="0"
KEYWORDS="~amd64"
IUSE=""

RDEPEND="
	!dev-lang/flutter-bin
	~dev-libs/flutter-engine-3.47.2
	virtual/dart
	app-arch/tar
	app-arch/unzip
	dev-vcs/git
	sys-apps/coreutils
	sys-apps/util-linux
	sys-apps/which
"
BDEPEND="
	app-arch/tar
	app-arch/unzip
	virtual/dart
	dev-vcs/git
	sys-apps/which
"

PATCHES=(
	"${FILESDIR}/flutter-xdg-cache.patch"
)

src_unpack() {
	unpack "${P}.tar.gz"

	local pub_cache="${S}/.pub-cache"
	mkdir -p "${pub_cache}/hosted/pub.dev" \
		"${pub_cache}/hosted-hashes/pub.dev" || die

	mkdir -p "${S}/bin/cache/artifacts/material_fonts" \
		"${S}/bin/cache/artifacts/gradle_wrapper" || die

	unzip -q "${DISTDIR}/flutter-material-fonts-3012db47.zip" \
		-d "${S}/bin/cache/artifacts/material_fonts" || die

	tar -xzf "${DISTDIR}/flutter-gradle-wrapper-fd5c1f2c.tgz" \
		-C "${S}/bin/cache/artifacts/gradle_wrapper" || die

	local archive pkg_file base pkg_dir
	for archive in ${A}; do
		case "${archive}" in
			"${P}.tar.gz"|"flutter-material-fonts-"*|"flutter-gradle-wrapper-"*)
				;;
			*.tar.gz)
				pkg_file="${archive}"
				base="${pkg_file%.tar.gz}"
				pkg_dir="${pub_cache}/hosted/pub.dev/${base}"
				mkdir -p "${pkg_dir}" || die
				tar -xzf "${DISTDIR}/${pkg_file}" -C "${pkg_dir}" || die
				sha256sum "${DISTDIR}/${pkg_file}" | cut -d' ' -f1 > \
					"${pub_cache}/hosted-hashes/pub.dev/${base}.sha256" || die
				;;
		esac
	done
}

src_prepare() {
	default

	echo "${PV}" > "${S}/version" || die
	echo "${FLUTTER_ENGINE_REV}" > "${S}/bin/internal/engine.version" || die
	touch "${S}/.git" || die

	local cache_dir="${S}/bin/cache"
	mkdir -p "${cache_dir}" || die

	local rev="${FLUTTER_ENGINE_REV}"
	printf '%s\n' "${rev}" > "${cache_dir}/engine.stamp" || die
	printf '%s\n' "${rev}" > "${cache_dir}/engine-dart-sdk.stamp" || die
	printf '%s\n' "${rev}" > "${cache_dir}/linux-sdk.stamp" || die
	printf '%s\n' "${rev}" > "${cache_dir}/flutter_sdk.stamp" || die
	printf '%s\n' "${rev}" > "${cache_dir}/font-subset.stamp" || die
	printf '%s\n' "${rev}" > "${cache_dir}/engine_stamp.stamp" || die
	cat "${S}/bin/internal/material_fonts.version" \
		> "${cache_dir}/material_fonts.stamp" || die
	cat "${S}/bin/internal/gradle_wrapper.version" \
		> "${cache_dir}/gradle_wrapper.stamp" || die
	printf '%s:\n' "${FLUTTER_GIT_COMMIT}" \
		> "${cache_dir}/flutter_tools.stamp" || die

	cat <<-EOF > "${cache_dir}/flutter.version.json" || die
	{
		"frameworkVersion": "${PV}",
		"channel": "stable",
		"repositoryUrl": "https://github.com/flutter/flutter.git",
		"frameworkRevision": "${FLUTTER_GIT_COMMIT}",
		"frameworkCommitDate": "2026-02-12 14:14:02 -0800",
		"engineRevision": "${FLUTTER_ENGINE_REV}",
		"engineCommitDate": "2026-08-26 11:46:13.000Z",
		"engineContentHash": "${FLUTTER_ENGINE_REV}",
		"engineBuildDate": "2026-08-26 11:46:13.000",
		"dartSdkVersion": "3.13.3",
		"devToolsVersion": "2.60.0",
		"flutterVersion": "${PV}"
	}
	EOF

	cat <<-EOF > "${cache_dir}/engine_stamp.json" || die
	{
		"build_date": "2026-08-26T11:46:13",
		"build_time_ms": 1787744773000,
		"git_revision": "${FLUTTER_ENGINE_REV}",
		"git_revision_date": "2026-08-26 11:46:13-07:00",
		"content_hash": "${FLUTTER_ENGINE_REV}"
	}
	EOF

	# Symlink Dart SDK into Flutter cache
	ln -s /opt/dart-sdk "${cache_dir}/dart-sdk" || die

	# Wire Engine artifacts from dev-libs/flutter-engine
	local engine_root="/usr/lib/flutter-engine/${PV}"
	local engine_art="${cache_dir}/artifacts/engine"
	mkdir -p "${engine_art}/common" "${cache_dir}/pkg" || die

	ln -s "${engine_root}/linux-x64" "${engine_art}/linux-x64" || die
	ln -s "${engine_root}/linux-x64-profile" \
		"${engine_art}/linux-x64-profile" || die
	ln -s "${engine_root}/linux-x64-release" \
		"${engine_art}/linux-x64-release" || die
	ln -s "${engine_root}/common/flutter_patched_sdk" \
		"${engine_art}/common/flutter_patched_sdk" || die
	ln -s "${engine_root}/common/flutter_patched_sdk_product" \
		"${engine_art}/common/flutter_patched_sdk_product" || die
	ln -s "${engine_root}/pkg/sky_engine" "${cache_dir}/pkg/sky_engine" || die
	ln -s "${engine_root}/pkg/flutter_gpu" "${cache_dir}/pkg/flutter_gpu" || die
}

src_compile() {
	export FLUTTER_ROOT="${S}"
	export PUB_CACHE="${S}/.pub-cache"
	export FLUTTER_CACHE_DIR="${S}/bin/cache"

	local dart_bin="/opt/dart-sdk/bin/dart"
	if [[ ! -x "${dart_bin}" ]]; then
		dart_bin="$(type -P dart || die 'dart binary not found')"
	fi

	cd "${S}/packages/flutter_tools" || die
	"${dart_bin}" pub get --offline || die

	local tools_cfg="${S}/packages/flutter_tools/.dart_tool/package_config.json"
	"${dart_bin}" \
		--packages="${tools_cfg}" \
		--snapshot="${S}/bin/cache/flutter_tools.snapshot" \
		bin/flutter_tools.dart || die

	sed -i \
		-e "s|file://${S}/.pub-cache|file:///opt/flutter/.pub-cache|g" \
		-e "s|file://${S}|file:///opt/flutter|g" \
		"${tools_cfg}" || die
}

src_install() {
	dodir /opt/flutter
	cp -a "${S}/." "${ED}/opt/flutter/" || die

	fperms 0755 /opt/flutter/bin/flutter
	fperms 0755 /opt/flutter/bin/dart

	sed -e "s/@PV@/${PV}/g" -e "s/@PVR@/${PVR}/g" \
		"${FILESDIR}/flutter-wrapper" > "${T}/flutter" || die
	dobin "${T}/flutter"

	dodir /opt/bin
	dosym ../../usr/bin/flutter /opt/bin/flutter
}