diff --git a/dev-java/jakartaee-migration/Manifest b/dev-java/jakartaee-migration/Manifest
index f6ed186f59676..cc2fb8a27802c 100644
--- a/dev-java/jakartaee-migration/Manifest
+++ b/dev-java/jakartaee-migration/Manifest
@@ -1,2 +1,4 @@
DIST jakartaee-migration-1.0.10-src.tar.gz 53924 BLAKE2B 263144d2401cd4444d4afbaa0ecba7f9009a7f2312241882dc035db80be33e51f6e90d5bd7c6daa3e274008a5b617fa5169144f645d4d6af399b4100c75ca86a SHA512 88132a7ebca68df60fa4ba2835f6e2ec57b674c38152f83d124380d53fc214e505f2d6696682acc41dc742bad1220956e1a9b063bf7c337042076af45bf69579
DIST jakartaee-migration-1.0.10-src.tar.gz.asc 833 BLAKE2B 330f1596ad1ef3337747a617c7a1f951d77a16d5fa486b4ae2b50ad2ecf4068e79837728f372efbb65f7ee88575bac90f02c9234ebba795c557ce53d9445dc40 SHA512 e41fe2d920824bc6db93bacb5c5a182de6b47fe0504a07e9f28b162382e30e7bb350d1c031065ea7041228089aa56870023fdb289a5a99fccbb97422e4e73362
+DIST jakartaee-migration-1.0.12-src.tar.gz 54175 BLAKE2B 5db536218b3a151dd617d18203c4cb7d6baacf029e286042809fdec6cbfa2e6cb04911ce2defd9ab30fe98abbebb94d090421ef53e5e928ac8a6864eafbee01a SHA512 ff44ca1209a78b35201c71d241fc92e31a80c63d713b791fd2ef1c4977774a5eb1b71d469db5d1c8673085ecea6b3638688ebd316b86fc637002e69542885ce7
+DIST jakartaee-migration-1.0.12-src.tar.gz.asc 833 BLAKE2B 48e3b2bb54ca26ba879779814f0126e2b7c451c8d4370e556a695e96310bd81c2e904fcd7d04327a86b7be59570a3337fbeeee94b6c9f76a7dc535f746802852 SHA512 a23d663043e995112d1c67be92990247ad35c63e8ba2348f4876014bbfbe244ab5830f7aafb77cd157383c7b482539ef7cbba1ee7623bd53d31475063bef6533
diff --git a/dev-java/jakartaee-migration/jakartaee-migration-1.0.12.ebuild b/dev-java/jakartaee-migration/jakartaee-migration-1.0.12.ebuild
new file mode 100644
index 0000000000000..944980e10a928
--- /dev/null
+++ b/dev-java/jakartaee-migration/jakartaee-migration-1.0.12.ebuild
@@ -0,0 +1,76 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=9
+
+JAVA_PKG_IUSE="doc source test"
+JAVA_TESTING_FRAMEWORKS="junit-4"
+
+inherit java-pkg-2 java-pkg-simple verify-sig
+
+DESCRIPTION="Apache Tomcat tool for migration from Java EE 8 to Jakarta EE 9"
+HOMEPAGE="https://tomcat.apache.org"
+SRC_URI="mirror://apache/tomcat/${PN}/v${PV}/source/${P}-src.tar.gz
+ verify-sig? ( mirror://apache/tomcat/${PN}/v${PV}/source/${P}-src.tar.gz.asc )"
+S="${WORKDIR}/${P}"
+
+LICENSE="Apache-2.0"
+SLOT="0"
+KEYWORDS="~amd64 ~arm64"
+
+BDEPEND="verify-sig? ( ~sec-keys/openpgp-keys-apache-tomcat-11 )"
+CP_DEPEND="
+ >=dev-java/ant-1.10.15:0
+ >=dev-java/bcel-6.11.0:0
+ >=dev-java/commons-compress-1.28.0:0
+ >=dev-java/commons-io-2.21.0:0
+ >=dev-java/eclipse-osgi-4.31:0
+"
+
+# we need jdk-11 just for some tests as those need stuff from newer jdk,
+# otherwise the package as of version 1.0.7 compiles fine with jdk 1.8
+# with tests disabled
+# see bug https://bugs.gentoo.org/910499
+
+DEPEND="
+ ${CP_DEPEND}
+ >=virtual/jdk-11:*
+"
+
+RDEPEND="
+ ${CP_DEPEND}
+ >=virtual/jre-1.8:*
+"
+
+JAVA_MAIN_CLASS="org.apache.tomcat.jakartaee.MigrationCLI"
+JAVA_RESOURCE_DIRS="src/main/resources"
+JAVA_SRC_DIR="src/main/java"
+JAVA_TEST_EXCLUDES=( org.apache.tomcat.jakartaee.TesterConstants )
+JAVA_TEST_GENTOO_CLASSPATH="junit-4"
+JAVA_TEST_RESOURCE_DIRS="src/test/resources"
+JAVA_TEST_SRC_DIR="src/test/java"
+VERIFY_SIG_OPENPGP_KEY_PATH="/usr/share/openpgp-keys/tomcat-11.apache.org.asc"
+
+src_prepare() {
+ java-pkg-2_src_prepare
+ sed -i "s/\${project.version}/${PV}/g" src/main/resources/info.properties
+}
+
+src_test() {
+ # we need to create jar files for the tests the same way as it's done using pom.xml
+ local implementation_version=$(grep Implementation-Version pom.xml | grep -oE "[0-9]+\.[0-9]+\.[0-9]+")
+ mkdir -p generated-test/META-INF || die
+ pushd generated-test || die
+ echo "Implementation-Version: ${implementation_version}" > META-INF/MANIFEST.MF
+ ejavac -d . -encoding ${JAVA_ENCODING} $(find "${S}/${JAVA_TEST_SRC_DIR}" -name CommonGatewayInterface.java) || die
+ jar cfm cgi-api.jar META-INF/MANIFEST.MF $(find -name CommonGatewayInterface.class) || die
+ ejavac -d . -encoding ${JAVA_ENCODING} $(find "${S}/${JAVA_TEST_SRC_DIR}" -name HelloCGI.java) || die
+ jar cfm hellocgi.jar META-INF/MANIFEST.MF $(find -name HelloCGI.class) || die
+ for enc in rsa dsa ec; do
+ cp hellocgi.jar hellocgi-signed-${enc}.jar || die
+ jarsigner -keystore "${S}/src/test/resources/keystore.p12" -storepass apache hellocgi-signed-${enc}.jar ${enc} || die
+ done
+ popd
+
+ java-pkg-simple_src_test
+}
diff --git a/www-servers/tomcat/Manifest b/www-servers/tomcat/Manifest
index 3df7f3cb351d8..21ac3b609eb22 100644
--- a/www-servers/tomcat/Manifest
+++ b/www-servers/tomcat/Manifest
@@ -1,6 +1,12 @@
DIST apache-tomcat-10.1.55-src.tar.gz 7362901 BLAKE2B 2b2850347b576ad4473e0786e1b3abe0dbde702db0dceeb393500e03108669a4fd4141900ed1d610a7779917a60a4c20fc1292d60fc9400eaf79afe79a936ad5 SHA512 baa9f2ddd836725fef3d56542e67307c886353d340e0c3c2ccfaa0e1bb7eafc7a729624d2ba8bc03dd631367192b21afa9a825033d82d7a2fe5e54a5e9e3a9de
DIST apache-tomcat-10.1.55-src.tar.gz.asc 833 BLAKE2B fb6b6cc647888d08fe9b29e07a9a8e4fe64f0ff68e813e957c70358415d20af2765e1cbc7531d157a89040ab09a456e537c03b737a40b0a51e447221483ccc8c SHA512 d6175f65b7e4edd267b47afcc14934f26e5a045d61f74f86f0c141a4a7616a4d1d747a55ef11f5de1f0c7bb5fae988c1314eebc3709a507f9ea7f25e6a2d4af4
+DIST apache-tomcat-10.1.56-src.tar.gz 7595358 BLAKE2B c17e691509728058b381088b54c51341a76f40e671d0c6fcdc72217fcf692a73075b00adeb787ef7fafb7e5bb58a8ca5ffc4cea98fbb45c116b7ed00738f7e81 SHA512 cbbb81ffeea3c4b12f6b3a8bfe14ec8c0e12637a9c4296b5bcaf463371b64c2a4c9539a4cde42ebb4711925e666de7f9ce9d0031bfda3c113f5f976a8542971e
+DIST apache-tomcat-10.1.56-src.tar.gz.asc 833 BLAKE2B 3c0fdd238476879b210ae1df8da4540ccc171c964aa3ee2bbe55afb0e6fc427bc4d82fedf3636a82972b05c5db24e593239c7d9ba0b69d172ff78f788eea6899 SHA512 658146304215b125b543773fdc2146a9f8a5f3a83626b0370f225fef49b800e30db794f516940d605a1cf967571253c63a74f7b8f4959848d635388d121fc0dc
DIST apache-tomcat-11.0.22-src.tar.gz 7289785 BLAKE2B a8417b0f6abb1f3f41bd6441d53f8701c8de1bbb525a19706bd270dddf1732c8e570adc086a5b152558ef32893018e6011c9c1c73fe808ae1e4c4823067e0161 SHA512 35867e670c89d9ead1a7e4545b26f708849de3c7b56f21e1f4c124fd83b3d3ec37d65e42dcf2a0adeda260436811de6f6b27199ff747ef099a62e11eab1f7cbc
DIST apache-tomcat-11.0.22-src.tar.gz.asc 849 BLAKE2B bb6b08f1ed49391dcfbac75a57c7f91909b3ac48caed808808b06f9ab4715629fc84f15e80bd2c99d194c3992bdf5d9b7e7bacabd842bfdc8f6464f6685220ae SHA512 a1619100695da4f6a5c0fc62d2243619d5c11b0535ea557aea18a79fa7471a12ba16512745abbd43b552f93fdb1176c3ecd1541b2fa04710c10ebd069530d4e2
+DIST apache-tomcat-11.0.23-src.tar.gz 7524074 BLAKE2B 99433677cb3466517be0264d3a6b6fb742e04874ff2b86ec4e9558913707f35a41c1da5d1e15430295e7469de7a5ba5eef9f33d53bf5b21dcf4a86313e2993c8 SHA512 781eec414f306e57c35047e0db8be02df6813a6661e22b01928777b633f85938f61cd228b32e8b682bd2b581d9e107c18ab6529a86ec74bf7dd7f0a8b1d5fa8d
+DIST apache-tomcat-11.0.23-src.tar.gz.asc 833 BLAKE2B f744a66dfdf661a7e1bdf66ebc72748a370c35d7d0f05e5092ba5a303758fc469819fa748358009a6008d19e0645ccde0f84e53b1df74efd761d9a3da6b0a8dd SHA512 2093673404527fcf7fb42ecf3f8a8370ae700ae002733a8a86006bb13b6a71bef0978c2a668795f9fc833f80f7b4e19e6b32fca4a5489c09bfa0b3e9b6d4dea7
DIST apache-tomcat-9.0.118-src.tar.gz 7506319 BLAKE2B f4a829a7479e21137fba9dc5f15f09ebfda3547d1b2c716dc2bddd5d91cb0002450d22d439019e6789d708f61aaa66f50153b3c4b25c2c153440cd70969f8b55 SHA512 021bb2fffce2a3ca163ddf01fd1cf6d5c5c5799bff773af32b2f767e40d2d5825ab295701e4c7cef947d98dea2f8d17d47b599237c70b55622aafbb054cefa4c
DIST apache-tomcat-9.0.118-src.tar.gz.asc 833 BLAKE2B 1e877c130402ceabffc3aa96589a524439a97299d82ba8bd16c9d6782fec2513c1937c7dfcf62f16b1fe3d039f44d131486f137b6156f92b1e9ff2df27cc6e50 SHA512 6f08e9156760e01328411a1526b5d113793302820de1a7efaea235f2f0a05c426e17352dec62ae33627ff00633ad494597d119a28f212aac20357a04a4081e38
+DIST apache-tomcat-9.0.119-src.tar.gz 7711738 BLAKE2B 554a86637c5106ba735d22d26e65df829283f494bb8d71eab38f09ca85f686b659a7585eb734a2e617a9e8f225ae888d4b082a290ffa289c084790bbd785d145 SHA512 573fdc6336cefe11ad2bbcb2a0c32b2389e55e76715aa9db794e5159ba134aa6411205d0bf9d09af860603124f456006b9312a230f5f08fede3536a389442047
+DIST apache-tomcat-9.0.119-src.tar.gz.asc 833 BLAKE2B 96de5a25ae815fb00d4e6fd1b75dc633465f08bc9e314c01fca9084dc83561fe03f72d16b685f5558899f36b130bfa0f71552115bd470f35fe1ceca42c9b0a95 SHA512 59cb74300ce3a9d72c2919ff00d2e365dcdc5ba07859a2916c6c79e254a218def5568efa21aca5dc57ec4b53d43c35867b8f66a864b6ea77f01d73bdfbaa4223
diff --git a/www-servers/tomcat/tomcat-10.1.56.ebuild b/www-servers/tomcat/tomcat-10.1.56.ebuild
new file mode 100644
index 0000000000000..8d8ef29df40bc
--- /dev/null
+++ b/www-servers/tomcat/tomcat-10.1.56.ebuild
@@ -0,0 +1,185 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+JAVA_PKG_IUSE="doc source test"
+
+inherit java-pkg-2 prefix verify-sig
+
+MY_P="apache-${P}-src"
+
+DESCRIPTION="Tomcat Servlet-6.0/JSP-3.1/EL-5.0/WebSocket-2.1/JASPIC-3.0 Container"
+HOMEPAGE="https://tomcat.apache.org/"
+SRC_URI="mirror://apache/${PN}/tomcat-10/v${PV}/src/${MY_P}.tar.gz
+ verify-sig? ( https://downloads.apache.org/tomcat/tomcat-$(ver_cut 1)/v${PV}/src/${MY_P}.tar.gz.asc )"
+S=${WORKDIR}/${MY_P}
+
+LICENSE="Apache-2.0"
+SLOT="10.1"
+KEYWORDS="~amd64 ~arm64"
+IUSE="extra-webapps"
+
+RESTRICT="test" # can we run them on a production system?
+
+BND_MIN="7.2.3"
+ECJ_SLOT="4.26"
+
+COMMON_DEP="
+ >=dev-java/ant-1.10.15-r1:0
+ >=dev-java/bnd-annotation-${BND_MIN}:0
+ dev-java/eclipse-ecj:${ECJ_SLOT}
+ dev-java/jax-rpc-api:0
+ >=dev-java/jakartaee-migration-1.0.10:0
+ >=dev-java/wsdl4j-1.6.3-r1:0"
+
+# jre-17:* because of line 1081, build.xml
+#
+RDEPEND="
+ ${COMMON_DEP}
+ acct-group/tomcat
+ acct-user/tomcat
+ >=virtual/jre-11:*"
+DEPEND="
+ ${COMMON_DEP}
+ app-admin/pwgen
+ >=dev-java/bnd-${BND_MIN}:0
+ >=dev-java/bnd-ant-${BND_MIN}:0
+ >=dev-java/bnd-util-${BND_MIN}:0
+ >=dev-java/bndlib-${BND_MIN}:0
+ >=dev-java/libg-${BND_MIN}:0
+ dev-java/osgi-cmpn:8
+ dev-java/osgi-core:0
+ dev-java/slf4j-api:0
+ || ( virtual/jdk:21 virtual/jdk:17 )
+ test? (
+ >=dev-java/ant-1.10.15:0[junit]
+ dev-java/easymock:3.2
+ )"
+
+BDEPEND="verify-sig? ( ~sec-keys/openpgp-keys-apache-tomcat-$(ver_cut 1) )"
+VERIFY_SIG_OPENPGP_KEY_PATH="/usr/share/openpgp-keys/tomcat-$(ver_cut 1).apache.org.asc"
+
+PATCHES=(
+ "${FILESDIR}/tomcat-10.1.20-do-not-copy.patch"
+ "${FILESDIR}/tomcat-10.1.20-offline.patch"
+ "${FILESDIR}/tomcat-9.0.87-gentoo-bnd.patch"
+)
+
+src_prepare() {
+ default #780585
+ java-pkg-2_src_prepare
+ java-pkg_clean
+
+ cat > build.properties <<-EOF || die
+ compile.debug=false
+ execute.download=false
+ exist=true # skip target="downloadfile-2"
+ version=${PV}-gentoo
+ version.number=${PV}
+ ant.jar=$(java-pkg_getjar --build-only ant ant.jar)
+ bnd-annotation.jar=$(java-pkg_getjars bnd-annotation)
+ bnd-ant.jar=$(java-pkg_getjars --build-only bnd-ant)
+ bnd-util.jar=$(java-pkg_getjars --build-only bnd-util)
+ bnd.jar=$(java-pkg_getjars --build-only bnd)
+ bndlib.jar=$(java-pkg_getjars --build-only bndlib)
+ jaxrpc-lib.jar=$(java-pkg_getjars jax-rpc-api)
+ jdt.jar=$(java-pkg_getjars eclipse-ecj-${ECJ_SLOT})
+ libg.jar=$(java-pkg_getjars --build-only libg)
+ migration-lib.jar=$(java-pkg_getjars jakartaee-migration)
+ osgi-cmpn.jar=$(java-pkg_getjars --build-only osgi-cmpn-8)
+ osgi-core.jar=$(java-pkg_getjars --build-only osgi-core)
+ slf4j-api.jar=$(java-pkg_getjars --build-only slf4j-api)
+ wsdl4j-lib.jar=$(java-pkg_getjars wsdl4j)
+ EOF
+ if use test; then
+ echo "easymock.jar=$(java-pkg_getjars --build-only easymock-3.2)" \
+ >> build.properties || die "easymock"
+ fi
+
+ # For use of catalina.sh in netbeans
+ sed -i -e "/^# ----- Execute The Requested Command/ a\
+ CLASSPATH=\`java-config --with-dependencies --classpath ${PN}-${SLOT}\`" \
+ bin/catalina.sh || die
+}
+
+# revisions of the scripts
+IM_REV="-r2"
+INIT_REV="-r1"
+
+src_compile() {
+ LC_ALL=C eant deploy $(usev doc javadoc)
+}
+
+src_test() {
+ eant test
+}
+
+src_install() {
+ local dest="/usr/share/${PN}-${SLOT}"
+
+ java-pkg_jarinto "${dest}"/bin
+ java-pkg_dojar output/build/bin/*.jar
+ exeinto "${dest}"/bin
+ doexe output/build/bin/*.sh
+
+ java-pkg_jarinto "${dest}"/lib
+ java-pkg_dojar output/build/lib/*.jar
+
+ dodoc RELEASE-NOTES RUNNING.txt
+ use doc && java-pkg_dojavadoc output/dist/webapps/docs/api
+ use source && java-pkg_dosrc java/*
+
+ ### Webapps ###
+
+ # add missing docBase
+ local apps="host-manager manager"
+ for app in ${apps}; do
+ sed -i -e "s|=\"true\" >|=\"true\" docBase=\"\$\{catalina.home\}/webapps/${app}\" >|" \
+ output/build/webapps/${app}/META-INF/context.xml || die
+ done
+
+ insinto "${dest}"/webapps
+ doins -r output/build/webapps/{host-manager,manager,ROOT}
+ use extra-webapps && doins -r output/build/webapps/{docs,examples}
+
+ ### Config ###
+
+ # create "logs" directory in $CATALINA_BASE
+ # and set correct perms, see #458890
+ dodir "${dest}"/logs
+ fperms 0750 "${dest}"/logs
+
+ # replace the default pw with a random one, see #92281
+ local randpw="$(pwgen -s -B 15 1)"
+ sed -i -e "s|SHUTDOWN|${randpw}|" output/build/conf/server.xml || die
+
+ # prepend gentoo.classpath to common.loader, see #453212
+ sed -i -e 's/^common\.loader=/\0${gentoo.classpath},/' output/build/conf/catalina.properties || die
+
+ insinto "${dest}"
+ doins -r output/build/conf
+
+ ### rc ###
+
+ cp "${FILESDIR}"/tomcat{.conf,${INIT_REV}.init,-instance-manager${IM_REV}.bash} "${T}" || die
+ eprefixify "${T}"/tomcat{.conf,${INIT_REV}.init,-instance-manager${IM_REV}.bash}
+ sed -i -e "s|@SLOT@|${SLOT}|g" "${T}"/tomcat{.conf,${INIT_REV}.init,-instance-manager${IM_REV}.bash} || die
+
+ insinto "${dest}"/gentoo
+ doins "${T}"/tomcat.conf
+ exeinto "${dest}"/gentoo
+ newexe "${T}"/tomcat${INIT_REV}.init tomcat.init
+ newexe "${T}"/tomcat-instance-manager${IM_REV}.bash tomcat-instance-manager.bash
+}
+
+pkg_postinst() {
+ einfo "Ebuilds of Tomcat support running multiple instances. To manage Tomcat instances, run:"
+ einfo " ${EPREFIX}/usr/share/${PN}-${SLOT}/gentoo/tomcat-instance-manager.bash --help"
+
+ ewarn "Please note that since version 10 the primary package for all implemented APIs"
+ ewarn "has changed from javax.* to jakarta.*. This will almost certainly require code"
+ ewarn "changes to enable applications to migrate from Tomcat 9 and earlier to Tomcat 10 and later."
+
+ einfo "Please read https://wiki.gentoo.org/wiki/Apache_Tomcat"
+}
diff --git a/www-servers/tomcat/tomcat-11.0.23.ebuild b/www-servers/tomcat/tomcat-11.0.23.ebuild
new file mode 100644
index 0000000000000..e62a7b4006d3b
--- /dev/null
+++ b/www-servers/tomcat/tomcat-11.0.23.ebuild
@@ -0,0 +1,186 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+JAVA_PKG_IUSE="doc source test"
+
+inherit java-pkg-2 prefix verify-sig
+
+MY_P="apache-${P}-src"
+
+DESCRIPTION="Tomcat Servlet-6.1/JSP-4.0/EL-6.0/WebSocket-2.2/JASPIC-3.1 Container"
+HOMEPAGE="https://tomcat.apache.org/"
+SRC_URI="mirror://apache/${PN}/tomcat-$(ver_cut 1)/v${PV}/src/${MY_P}.tar.gz
+ verify-sig? ( https://downloads.apache.org/tomcat/tomcat-$(ver_cut 1)/v${PV}/src/${MY_P}.tar.gz.asc )"
+S=${WORKDIR}/${MY_P}
+
+LICENSE="Apache-2.0"
+SLOT="11"
+
+KEYWORDS="~amd64 ~arm64"
+IUSE="extra-webapps"
+
+RESTRICT="test" # can we run them on a production system?
+
+BND_MIN="7.2.3"
+ECJ_SLOT="4.39"
+
+COMMON_DEP="
+ >=dev-java/ant-1.10.15-r1:0
+ >=dev-java/bnd-annotation-${BND_MIN}:0
+ dev-java/eclipse-ecj:${ECJ_SLOT}
+ dev-java/jax-rpc-api:0
+ >=dev-java/jakartaee-migration-1.0.12:0
+ >=dev-java/wsdl4j-1.6.3-r1:0"
+
+# jre-17:* because of line 1081, build.xml
+#
+RDEPEND="
+ ${COMMON_DEP}
+ acct-group/tomcat
+ acct-user/tomcat
+ >=virtual/jre-17:*"
+DEPEND="
+ ${COMMON_DEP}
+ app-admin/pwgen
+ >=dev-java/bnd-${BND_MIN}:0
+ >=dev-java/bnd-ant-${BND_MIN}:0
+ >=dev-java/bnd-util-${BND_MIN}:0
+ >=dev-java/bndlib-${BND_MIN}:0
+ >=dev-java/libg-${BND_MIN}:0
+ dev-java/osgi-cmpn:8
+ dev-java/osgi-core:0
+ dev-java/slf4j-api:0
+ || ( virtual/jdk:21 virtual/jdk:17 )
+ test? (
+ >=dev-java/ant-1.10.15-r1:0[junit]
+ dev-java/easymock:3.2
+ )"
+
+BDEPEND="verify-sig? ( ~sec-keys/openpgp-keys-apache-tomcat-$(ver_cut 1) )"
+VERIFY_SIG_OPENPGP_KEY_PATH="/usr/share/openpgp-keys/tomcat-$(ver_cut 1).apache.org.asc"
+
+PATCHES=(
+ "${FILESDIR}/tomcat-10.1.20-do-not-copy.patch"
+ "${FILESDIR}/tomcat-11.0.0-offline.patch"
+ "${FILESDIR}/tomcat-9.0.87-gentoo-bnd.patch"
+)
+
+src_prepare() {
+ default #780585
+ java-pkg-2_src_prepare
+ java-pkg_clean
+
+ cat > build.properties <<-EOF || die
+ compile.debug=false
+ execute.download=false
+ exist=true # skip target="downloadfile-2"
+ version=${PV}-gentoo
+ version.number=${PV}
+ ant.jar=$(java-pkg_getjar --build-only ant ant.jar)
+ bnd-annotation.jar=$(java-pkg_getjars bnd-annotation)
+ bnd-ant.jar=$(java-pkg_getjars --build-only bnd-ant)
+ bnd-util.jar=$(java-pkg_getjars --build-only bnd-util)
+ bnd.jar=$(java-pkg_getjars --build-only bnd)
+ bndlib.jar=$(java-pkg_getjars --build-only bndlib)
+ jaxrpc-lib.jar=$(java-pkg_getjars --build-only jax-rpc-api)
+ jdt.jar=$(java-pkg_getjars eclipse-ecj-${ECJ_SLOT})
+ libg.jar=$(java-pkg_getjars --build-only libg)
+ migration-lib.jar=$(java-pkg_getjars jakartaee-migration)
+ osgi-cmpn.jar=$(java-pkg_getjars --build-only osgi-cmpn-8)
+ osgi-core.jar=$(java-pkg_getjars --build-only osgi-core)
+ slf4j-api.jar=$(java-pkg_getjars --build-only slf4j-api)
+ wsdl4j-lib.jar=$(java-pkg_getjars --build-only wsdl4j)
+ EOF
+ if use test; then
+ echo "easymock.jar=$(java-pkg_getjars --build-only easymock-3.2)" \
+ >> build.properties || die "easymock"
+ fi
+
+ # For use of catalina.sh in netbeans
+ sed -i -e "/^# ----- Execute The Requested Command/ a\
+ CLASSPATH=\`java-config --with-dependencies --classpath ${PN}-${SLOT}\`" \
+ bin/catalina.sh || die
+}
+
+# revisions of the scripts
+IM_REV="-r2"
+INIT_REV="-r1"
+
+src_compile() {
+ LC_ALL=C eant deploy $(usev doc javadoc)
+}
+
+src_test() {
+ eant test
+}
+
+src_install() {
+ local dest="/usr/share/${PN}-${SLOT}"
+
+ java-pkg_jarinto "${dest}"/bin
+ java-pkg_dojar output/build/bin/*.jar
+ exeinto "${dest}"/bin
+ doexe output/build/bin/*.sh
+
+ java-pkg_jarinto "${dest}"/lib
+ java-pkg_dojar output/build/lib/*.jar
+
+ dodoc RELEASE-NOTES RUNNING.txt
+ use doc && java-pkg_dojavadoc output/dist/webapps/docs/api
+ use source && java-pkg_dosrc java/*
+
+ ### Webapps ###
+
+ # add missing docBase
+ local apps="host-manager manager"
+ for app in ${apps}; do
+ sed -i -e "s|=\"true\" >|=\"true\" docBase=\"\$\{catalina.home\}/webapps/${app}\" >|" \
+ output/build/webapps/${app}/META-INF/context.xml || die
+ done
+
+ insinto "${dest}"/webapps
+ doins -r output/build/webapps/{host-manager,manager,ROOT}
+ use extra-webapps && doins -r output/build/webapps/{docs,examples}
+
+ ### Config ###
+
+ # create "logs" directory in $CATALINA_BASE
+ # and set correct perms, see #458890
+ dodir "${dest}"/logs
+ fperms 0750 "${dest}"/logs
+
+ # replace the default pw with a random one, see #92281
+ local randpw="$(pwgen -s -B 15 1)"
+ sed -i -e "s|SHUTDOWN|${randpw}|" output/build/conf/server.xml || die
+
+ # prepend gentoo.classpath to common.loader, see #453212
+ sed -i -e 's/^common\.loader=/\0${gentoo.classpath},/' output/build/conf/catalina.properties || die
+
+ insinto "${dest}"
+ doins -r output/build/conf
+
+ ### rc ###
+
+ cp "${FILESDIR}"/tomcat{.conf,${INIT_REV}.init,-instance-manager${IM_REV}.bash} "${T}" || die
+ eprefixify "${T}"/tomcat{.conf,${INIT_REV}.init,-instance-manager${IM_REV}.bash}
+ sed -i -e "s|@SLOT@|${SLOT}|g" "${T}"/tomcat{.conf,${INIT_REV}.init,-instance-manager${IM_REV}.bash} || die
+
+ insinto "${dest}"/gentoo
+ doins "${T}"/tomcat.conf
+ exeinto "${dest}"/gentoo
+ newexe "${T}"/tomcat${INIT_REV}.init tomcat.init
+ newexe "${T}"/tomcat-instance-manager${IM_REV}.bash tomcat-instance-manager.bash
+}
+
+pkg_postinst() {
+ einfo "Ebuilds of Tomcat support running multiple instances. To manage Tomcat instances, run:"
+ einfo " ${EPREFIX}/usr/share/${PN}-${SLOT}/gentoo/tomcat-instance-manager.bash --help"
+
+ ewarn "Please note that since version 10 the primary package for all implemented APIs"
+ ewarn "has changed from javax.* to jakarta.*. This will almost certainly require code"
+ ewarn "changes to enable applications to migrate from Tomcat 9 and earlier to Tomcat 10 and later."
+
+ einfo "Please read https://wiki.gentoo.org/wiki/Apache_Tomcat"
+}
diff --git a/www-servers/tomcat/tomcat-9.0.119.ebuild b/www-servers/tomcat/tomcat-9.0.119.ebuild
new file mode 100644
index 0000000000000..48c5fd4c1933e
--- /dev/null
+++ b/www-servers/tomcat/tomcat-9.0.119.ebuild
@@ -0,0 +1,181 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+JAVA_PKG_IUSE="doc source test"
+
+inherit java-pkg-2 prefix verify-sig
+
+MY_P="apache-${P}-src"
+
+DESCRIPTION="Tomcat Servlet-4.0/JSP-2.3/EL-3.0/WebSocket-1.1/JASPIC-1.1 Container"
+HOMEPAGE="https://tomcat.apache.org/"
+SRC_URI="mirror://apache/${PN}/tomcat-9/v${PV}/src/${MY_P}.tar.gz
+ verify-sig? ( https://downloads.apache.org/tomcat/tomcat-$(ver_cut 1)/v${PV}/src/${MY_P}.tar.gz.asc )"
+S=${WORKDIR}/${MY_P}
+
+LICENSE="Apache-2.0"
+SLOT="9"
+KEYWORDS="~amd64 ~arm64"
+IUSE="extra-webapps"
+
+RESTRICT="test" # can we run them on a production system?
+
+BND_MIN="7.2.3"
+ECJ_SLOT="4.20"
+
+COMMON_DEP="
+ >=dev-java/bnd-annotation-${BND_MIN}:0
+ dev-java/eclipse-ecj:${ECJ_SLOT}
+ dev-java/jax-rpc-api:0
+ >=dev-java/wsdl4j-1.6.3-r1:0
+"
+
+RDEPEND="
+ ${COMMON_DEP}
+ acct-group/tomcat
+ acct-user/tomcat
+ dev-java/javax-persistence-api:0
+ >=virtual/jre-1.8:*
+"
+
+DEPEND="
+ ${COMMON_DEP}
+ app-admin/pwgen
+ >=dev-java/ant-1.10.15:0
+ >=dev-java/bnd-${BND_MIN}:0
+ >=dev-java/bnd-ant-${BND_MIN}:0
+ >=dev-java/bnd-util-${BND_MIN}:0
+ >=dev-java/bndlib-${BND_MIN}:0
+ >=dev-java/libg-${BND_MIN}:0
+ dev-java/osgi-cmpn:8
+ dev-java/osgi-core:0
+ dev-java/slf4j-api:0
+ || ( virtual/jdk:21 virtual/jdk:17 )
+ test? (
+ >=dev-java/ant-1.10.15-r1:0[junit]
+ dev-java/easymock:3.2
+ )
+"
+
+BDEPEND="verify-sig? ( ~sec-keys/openpgp-keys-apache-tomcat-$(ver_cut 1) )"
+VERIFY_SIG_OPENPGP_KEY_PATH="/usr/share/openpgp-keys/tomcat-$(ver_cut 1).apache.org.asc"
+
+PATCHES=(
+ "${FILESDIR}/tomcat-9.0.104-build.xml.patch"
+ "${FILESDIR}/tomcat-9.0.87-gentoo-bnd.patch"
+)
+
+src_prepare() {
+ default #780585
+ java-pkg-2_src_prepare
+ java-pkg_clean
+
+ cat > build.properties <<-EOF || die
+ compile.debug=false
+ execute.download=false
+ exist=true # skip target="downloadfile-2"
+ version=${PV}-gentoo
+ version.number=${PV}
+ ant.jar=$(java-pkg_getjar --build-only ant ant.jar)
+ bnd-annotation.jar=$(java-pkg_getjars bnd-annotation)
+ bnd-ant.jar=$(java-pkg_getjars --build-only bnd-ant)
+ bnd-util.jar=$(java-pkg_getjars --build-only bnd-util)
+ bnd.jar=$(java-pkg_getjars --build-only bnd)
+ bndlib.jar=$(java-pkg_getjars --build-only bndlib)
+ jaxrpc-lib.jar=$(java-pkg_getjars jax-rpc-api)
+ jdt.jar=$(java-pkg_getjars eclipse-ecj-${ECJ_SLOT})
+ libg.jar=$(java-pkg_getjars --build-only libg)
+ osgi-cmpn.jar=$(java-pkg_getjars --build-only osgi-cmpn-8)
+ osgi-core.jar=$(java-pkg_getjars --build-only osgi-core)
+ slf4j-api.jar=$(java-pkg_getjars --build-only slf4j-api)
+ wsdl4j-lib.jar=$(java-pkg_getjars wsdl4j)
+ EOF
+ if use test; then
+ echo "easymock.jar=$(java-pkg_getjars --build-only easymock-3.2)" \
+ >> build.properties || die "easymock"
+ fi
+
+ # For use of catalina.sh in netbeans
+ sed -i -e "/^# ----- Execute The Requested Command/ a\
+ CLASSPATH=\`java-config --with-dependencies --classpath ${PN}-${SLOT}\`" \
+ bin/catalina.sh || die
+}
+
+# revisions of the scripts
+IM_REV="-r2"
+INIT_REV="-r1"
+
+src_compile() {
+ LC_ALL=C eant deploy $(usev doc javadoc)
+}
+
+src_test() {
+ eant test
+}
+
+src_install() {
+ local dest="/usr/share/${PN}-${SLOT}"
+
+ java-pkg_jarinto "${dest}"/bin
+ java-pkg_dojar output/build/bin/*.jar
+ exeinto "${dest}"/bin
+ doexe output/build/bin/*.sh
+
+ java-pkg_jarinto "${dest}"/lib
+ java-pkg_dojar output/build/lib/*.jar
+
+ dodoc RELEASE-NOTES RUNNING.txt
+ use doc && java-pkg_dojavadoc output/dist/webapps/docs/api
+ use source && java-pkg_dosrc java/*
+
+ ### Webapps ###
+
+ # add missing docBase
+ local apps="host-manager manager"
+ for app in ${apps}; do
+ sed -i -e "s|=\"true\" >|=\"true\" docBase=\"\$\{catalina.home\}/webapps/${app}\" >|" \
+ output/build/webapps/${app}/META-INF/context.xml || die
+ done
+
+ insinto "${dest}"/webapps
+ doins -r output/build/webapps/{host-manager,manager,ROOT}
+ use extra-webapps && doins -r output/build/webapps/{docs,examples}
+
+ ### Config ###
+
+ # create "logs" directory in $CATALINA_BASE
+ # and set correct perms, see #458890
+ dodir "${dest}"/logs
+ fperms 0750 "${dest}"/logs
+
+ # replace the default pw with a random one, see #92281
+ local randpw="$(pwgen -s -B 15 1)"
+ sed -i -e "s|SHUTDOWN|${randpw}|" output/build/conf/server.xml || die
+
+ # prepend gentoo.classpath to common.loader, see #453212
+ sed -i -e 's/^common\.loader=/\0${gentoo.classpath},/' output/build/conf/catalina.properties || die
+
+ insinto "${dest}"
+ doins -r output/build/conf
+
+ ### rc ###
+
+ cp "${FILESDIR}"/tomcat{.conf,${INIT_REV}.init,-instance-manager${IM_REV}.bash} "${T}" || die
+ eprefixify "${T}"/tomcat{.conf,${INIT_REV}.init,-instance-manager${IM_REV}.bash}
+ sed -i -e "s|@SLOT@|${SLOT}|g" "${T}"/tomcat{.conf,${INIT_REV}.init,-instance-manager${IM_REV}.bash} || die
+
+ insinto "${dest}"/gentoo
+ doins "${T}"/tomcat.conf
+ exeinto "${dest}"/gentoo
+ newexe "${T}"/tomcat${INIT_REV}.init tomcat.init
+ newexe "${T}"/tomcat-instance-manager${IM_REV}.bash tomcat-instance-manager.bash
+}
+
+pkg_postinst() {
+ einfo "Ebuilds of Tomcat support running multiple instances. To manage Tomcat instances, run:"
+ einfo " ${EPREFIX}/usr/share/${PN}-${SLOT}/gentoo/tomcat-instance-manager.bash --help"
+
+ einfo "Please read https://wiki.gentoo.org/wiki/Apache_Tomcat"
+}