public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Sam James" <sam@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] repo/gentoo:master commit in: media-gfx/openscad/
Date: Sat, 16 Nov 2024 21:39:49 +0000 (UTC)	[thread overview]
Message-ID: <1731793148.d5515a801258b39900cb36fe6090c9085518ef8c.sam@gentoo> (raw)

commit:     d5515a801258b39900cb36fe6090c9085518ef8c
Author:     Paul Zander <negril.nx+gentoo <AT> gmail <DOT> com>
AuthorDate: Sat Nov 16 17:21:47 2024 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Sat Nov 16 21:39:08 2024 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=d5515a80

media-gfx/openscad: 20241114 enable tests

Drop USE=gamepad as 9999 no longer supports qt5

Signed-off-by: Paul Zander <negril.nx+gentoo <AT> gmail.com>
Signed-off-by: Sam James <sam <AT> gentoo.org>

 media-gfx/openscad/metadata.xml             |   3 -
 media-gfx/openscad/openscad-20241114.ebuild | 125 ++++++++++++----
 media-gfx/openscad/openscad-9999.ebuild     | 213 +++++++++++++++++++++-------
 3 files changed, 256 insertions(+), 85 deletions(-)

diff --git a/media-gfx/openscad/metadata.xml b/media-gfx/openscad/metadata.xml
index ac47d0a9f5d3..65b56ea5a6ce 100644
--- a/media-gfx/openscad/metadata.xml
+++ b/media-gfx/openscad/metadata.xml
@@ -27,9 +27,6 @@
 	<flag name="experimental">
 		Enable experimental features
 	</flag>
-	<flag name="gamepad">
-		Add support for gamepads through <pkg>dev-qt/qtgamepad</pkg>
-	</flag>
 	<flag name="glx">
 		Enable GLX to interface OpenGL and X11
 	</flag>

diff --git a/media-gfx/openscad/openscad-20241114.ebuild b/media-gfx/openscad/openscad-20241114.ebuild
index ec08be8aa0b5..238288a09864 100644
--- a/media-gfx/openscad/openscad-20241114.ebuild
+++ b/media-gfx/openscad/openscad-20241114.ebuild
@@ -3,34 +3,46 @@
 
 EAPI=8
 
-inherit cmake flag-o-matic multiprocessing optfeature virtualx xdg
-
-COMMIT="bc0d078e0361d7dba66723ac31bdb3b650ecff37"
-SANITIZERS_CMAKE_COMMIT="3f0542e4e034aab417c51b2b22c94f83355dee15"
-MCAD_COMMIT="bd0a7ba3f042bfbced5ca1894b236cea08904e26"
+inherit cmake flag-o-matic optfeature virtualx xdg
 
 DESCRIPTION="The Programmers Solid 3D CAD Modeller"
 HOMEPAGE="https://openscad.org/"
-SRC_URI="
-	https://github.com/openscad/openscad/archive/${COMMIT}.tar.gz
-		-> ${P}.tar.gz
-	https://github.com/arsenm/sanitizers-cmake/archive/${SANITIZERS_CMAKE_COMMIT}.tar.gz
-		-> sanitizers-cmake-${SANITIZERS_CMAKE_COMMIT}.tar.gz
-	test? (
-		https://github.com/openscad/MCAD/archive/${MCAD_COMMIT}.tar.gz -> ${PN}-MCAD-${MCAD_COMMIT}.tar.gz
+
+if [[ ${PV} = *9999* ]] ; then
+	inherit git-r3
+	EGIT_REPO_URI="https://github.com/openscad/openscad.git"
+	EGIT_SUBMODULES=(
+		'*'
+		'-mimalloc'
+		'-submodules/manifold'
+		'-OpenCSG'
 	)
-"
-# doc downloads are not versioned and found at:
-# https://files.openscad.org/documentation/
-S="${WORKDIR}/${PN}-${COMMIT}"
+else
+	COMMIT="bc0d078e0361d7dba66723ac31bdb3b650ecff37"
+	SANITIZERS_CMAKE_COMMIT="3f0542e4e034aab417c51b2b22c94f83355dee15"
+	MCAD_COMMIT="bd0a7ba3f042bfbced5ca1894b236cea08904e26"
+
+	SRC_URI="
+		https://github.com/openscad/openscad/archive/${COMMIT}.tar.gz
+			-> ${P}.tar.gz
+		https://github.com/arsenm/sanitizers-cmake/archive/${SANITIZERS_CMAKE_COMMIT}.tar.gz
+			-> sanitizers-cmake-${SANITIZERS_CMAKE_COMMIT}.tar.gz
+		test? (
+			https://github.com/openscad/MCAD/archive/${MCAD_COMMIT}.tar.gz -> ${PN}-MCAD-${MCAD_COMMIT}.tar.gz
+		)
+	"
+	# doc downloads are not versioned and found at:
+	# https://files.openscad.org/documentation/
+	S="${WORKDIR}/${PN}-${COMMIT}"
+	KEYWORDS="~amd64 ~arm64 ~ppc64 ~x86"
+fi
 
 # Code is GPL-3+, MCAD library is LGPL-2.1
 LICENSE="GPL-3+ LGPL-2.1"
 SLOT="0"
-KEYWORDS="~amd64 ~arm64 ~ppc64 ~x86"
 
 IUSE="dbus +egl experimental glx +gui hidapi +manifold mimalloc pdf spacenav test"
-RESTRICT="test"  # many tests fail
+RESTRICT="!test? ( test )"
 
 REQUIRED_USE="
 	dbus? ( gui )
@@ -91,7 +103,7 @@ DOCS=(
 )
 
 src_prepare() {
-	if use test; then
+	if use test && [[ ${PV} != *9999* ]] ; then
 		mv -f "${WORKDIR}/MCAD-${MCAD_COMMIT}"/* "${S}/libraries/MCAD/" || die
 	fi
 
@@ -110,11 +122,6 @@ src_configure() {
 	filter-lto
 
 	local mycmakeargs=(
-		-DCMAKE_MODULE_PATH="${WORKDIR}/sanitizers-cmake-${SANITIZERS_CMAKE_COMMIT}/cmake"
-
-		-DOPENSCAD_COMMIT="${COMMIT:0:9}"
-		-DOPENSCAD_VERSION="${PV:0:4}.${PV:4:2}.${PV:6:2}"
-
 		-DCLANG_TIDY="no"
 		-DENABLE_CAIRO="$(usex pdf)"
 		-DENABLE_CGAL="yes"
@@ -145,14 +152,76 @@ src_configure() {
 		)
 	fi
 
+	if [[ ${PV} != *9999* ]] ; then
+		mycmakeargs+=(
+			-DCMAKE_MODULE_PATH="${WORKDIR}/sanitizers-cmake-${SANITIZERS_CMAKE_COMMIT}/cmake"
+			-DOPENSCAD_COMMIT="${COMMIT:0:9}"
+			-DOPENSCAD_VERSION="${PV:0:4}.${PV:4:2}.${PV:6:2}"
+		)
+	fi
+
 	cmake_src_configure
 }
 
 src_test() {
-	xdg_environment_reset
-	pushd "${BUILD_DIR}" > /dev/null || die
-	virtx ctest -j "$(makeopts_jobs "${MAKEOPTS}" 999)"
-	popd > /dev/null || die
+	local i WRITE=()
+
+	if [[ -d "/dev/udmabuf" ]]; then
+		WRITE+=(
+			"/dev/udmabuf"
+		)
+	fi
+
+	if [[ -d /sys/module/nvidia ]]; then
+		# /dev/dri/card*
+		# /dev/dri/renderD*
+		readarray -t dri <<<"$(
+			find /sys/module/nvidia/drivers/*/*:*:*.*/drm \
+				-mindepth 1 -maxdepth 1 -type d -exec basename {} \; \
+				| sed 's:^:/dev/dri/:'
+			)"
+
+		# /dev/nvidia{0-9}
+		readarray -t cards <<<"$(find /dev -regextype sed -regex '/dev/nvidia[0-9]*')"
+
+		WRITE+=(
+			"${dri[@]}"
+			"${cards[@]}"
+			"/dev/nvidiactl"
+			"/dev/nvidia-caps/"
+			"/dev/nvidia-modeset"
+			"/dev/nvidia-uvm"
+			"/dev/nvidia-uvm-tools"
+		)
+	fi
+
+	WRITE+=(
+		# for portage
+		"/proc/self/task/"
+	)
+	for i in "${WRITE[@]}"; do
+		if [[ ! -w "$i" ]]; then
+			eqawarn "addwrite $i"
+			addwrite "$i"
+
+			if [[ ! -d "$i" ]] && [[ ! -w "$i" ]]; then
+				eqawarn "can not access $i after addwrite"
+			fi
+		fi
+	done
+
+	sed \
+		-e "s/OPENSCAD_BINARY/OPENSCADPATH/g" \
+		-i tests/test_cmdline_tool.py || die
+
+	cd "${BUILD_DIR}" || die
+
+	# NOTE link in from CMAKE_USE_DIR
+	ln -s "${CMAKE_USE_DIR}/color-schemes" . || die
+	ln -s "${CMAKE_USE_DIR}/locale" . || die
+	ln -s "${CMAKE_USE_DIR}/shaders" . || die
+
+	virtx cmake_src_test -j1
 }
 
 src_install() {

diff --git a/media-gfx/openscad/openscad-9999.ebuild b/media-gfx/openscad/openscad-9999.ebuild
index 4cfaae64dfac..238288a09864 100644
--- a/media-gfx/openscad/openscad-9999.ebuild
+++ b/media-gfx/openscad/openscad-9999.ebuild
@@ -1,35 +1,57 @@
 # Copyright 1999-2024 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
-# TODO's
-# package and unbundle manifold
-# set up proper testing
-# set up OFFLINE_DOCS and add doc USE flag
-
 EAPI=8
 
-inherit cmake flag-o-matic git-r3 optfeature xdg
+inherit cmake flag-o-matic optfeature virtualx xdg
 
 DESCRIPTION="The Programmers Solid 3D CAD Modeller"
 HOMEPAGE="https://openscad.org/"
-SRC_URI=""
-EGIT_REPO_URI="https://github.com/openscad/openscad.git"
+
+if [[ ${PV} = *9999* ]] ; then
+	inherit git-r3
+	EGIT_REPO_URI="https://github.com/openscad/openscad.git"
+	EGIT_SUBMODULES=(
+		'*'
+		'-mimalloc'
+		'-submodules/manifold'
+		'-OpenCSG'
+	)
+else
+	COMMIT="bc0d078e0361d7dba66723ac31bdb3b650ecff37"
+	SANITIZERS_CMAKE_COMMIT="3f0542e4e034aab417c51b2b22c94f83355dee15"
+	MCAD_COMMIT="bd0a7ba3f042bfbced5ca1894b236cea08904e26"
+
+	SRC_URI="
+		https://github.com/openscad/openscad/archive/${COMMIT}.tar.gz
+			-> ${P}.tar.gz
+		https://github.com/arsenm/sanitizers-cmake/archive/${SANITIZERS_CMAKE_COMMIT}.tar.gz
+			-> sanitizers-cmake-${SANITIZERS_CMAKE_COMMIT}.tar.gz
+		test? (
+			https://github.com/openscad/MCAD/archive/${MCAD_COMMIT}.tar.gz -> ${PN}-MCAD-${MCAD_COMMIT}.tar.gz
+		)
+	"
+	# doc downloads are not versioned and found at:
+	# https://files.openscad.org/documentation/
+	S="${WORKDIR}/${PN}-${COMMIT}"
+	KEYWORDS="~amd64 ~arm64 ~ppc64 ~x86"
+fi
 
 # Code is GPL-3+, MCAD library is LGPL-2.1
 LICENSE="GPL-3+ LGPL-2.1"
 SLOT="0"
-KEYWORDS=""
-IUSE="cairo dbus egl experimental gamepad gui hidapi mimalloc spacenav"
-RESTRICT="test" # 32 out 1300+ tests fail
+
+IUSE="dbus +egl experimental glx +gui hidapi +manifold mimalloc pdf spacenav test"
+RESTRICT="!test? ( test )"
 
 REQUIRED_USE="
 	dbus? ( gui )
-	gamepad? ( gui )
+	hidapi? ( gui )
 	spacenav? ( gui )
+	|| ( egl glx )
 "
 
 RDEPEND="
-	dev-cpp/eigen:3
 	dev-libs/boost:=
 	dev-libs/double-conversion:=
 	dev-libs/glib:2
@@ -38,35 +60,34 @@ RDEPEND="
 	media-gfx/opencsg:=
 	media-libs/fontconfig
 	media-libs/freetype
-	media-libs/glew:0=
 	media-libs/harfbuzz:=
 	media-libs/lib3mf:=
 	sci-mathematics/cgal:=
-	virtual/opengl
-	cairo? ( x11-libs/cairo )
+	media-libs/libglvnd[X]
 	gui? (
-		dev-qt/qtconcurrent:5
-		dev-qt/qtcore:5
-		dev-qt/qtgui:5[-gles2-only]
-		dev-qt/qtmultimedia:5
-		dev-qt/qtnetwork:5
-		dev-qt/qtopengl:5
-		dev-qt/qtsvg:5
-		dev-qt/qtwidgets:5
-		x11-libs/libX11
-		x11-libs/qscintilla:=[qt5(+)]
-		dbus? ( dev-qt/qtdbus:5 )
-		gamepad? ( dev-qt/qtgamepad:5 )
+		dev-qt/qt5compat:6
+		dev-qt/qtbase:6[concurrent,dbus?,-gles2-only,network,opengl,widgets]
+		dev-qt/qtmultimedia:6
+		dev-qt/qtsvg:6
+		x11-libs/qscintilla:=[qt6]
 	)
 	hidapi? ( dev-libs/hidapi )
+	manifold? (
+		dev-cpp/tbb
+		sci-mathematics/manifold
+	)
 	mimalloc? ( dev-libs/mimalloc:= )
+	pdf? ( x11-libs/cairo )
 	spacenav? ( dev-libs/libspnav )
 "
-DEPEND="${RDEPEND}"
+DEPEND="
+	${RDEPEND}
+	dev-cpp/eigen:3
+"
 BDEPEND="
-	dev-util/itstool
 	app-alternatives/yacc
 	app-alternatives/lex
+	dev-util/itstool
 	sys-devel/gettext
 	virtual/pkgconfig
 "
@@ -81,39 +102,131 @@ DOCS=(
 	doc/translation.txt
 )
 
+src_prepare() {
+	if use test && [[ ${PV} != *9999* ]] ; then
+		mv -f "${WORKDIR}/MCAD-${MCAD_COMMIT}"/* "${S}/libraries/MCAD/" || die
+	fi
+
+	# NOTE adhere CMP0167
+	# https://cmake.org/cmake/help/latest/policy/CMP0167.html
+	sed \
+		-e '/find_package(Boost/s/)/ CONFIG)/g' \
+		-i CMakeLists.txt || die
+
+	cmake_src_prepare
+}
+
 src_configure() {
 	# -Werror=odr
 	# https://github.com/openscad/openscad/issues/5239
 	filter-lto
 
 	local mycmakeargs=(
-		-DCLANG_TIDY=OFF
-		-DENABLE_CAIRO=$(usex cairo)
-		-DENABLE_EGL=$(usex egl)
-		-DENABLE_HIDAPI=$(usex hidapi)
-		# needs python deps, unbundle first before enabling
-		-DENABLE_MANIFOLD=OFF
-		-DENABLE_SPNAV=$(usex spacenav)
-		-DENABLE_TESTS=OFF
-		-DEXPERIMENTAL=$(usex experimental)
-		-DHEADLESS=$(usex gui OFF ON)
-		-DOFFLINE_DOCS=OFF
-		-DUSE_CCACHE=OFF
-		-DUSE_MIMALLOC=$(usex mimalloc)
+		-DCLANG_TIDY="no"
+		-DENABLE_CAIRO="$(usex pdf)"
+		-DENABLE_CGAL="yes"
+		-DENABLE_EGL="$(usex egl)"
+		-DENABLE_GLX="$(usex glx)"
+		-DENABLE_MANIFOLD="$(usex manifold)"
+		-DENABLE_PYTHON="no"
+		-DENABLE_TESTS="$(usex test)"
+
+		-DEXPERIMENTAL="$(usex experimental)"
+
+		-DHEADLESS="$(usex !gui)"
+		-DUSE_BUILTIN_MANIFOLD="no"
+		-DUSE_CCACHE="no"
+		-DUSE_GLAD="yes"
+		-DUSE_GLEW="no"
+		-DUSE_LEGACY_RENDERERS="no"
+		-DUSE_MIMALLOC="$(usex mimalloc)"
+		-DUSE_QT6="$(usex gui)"
+		-DOFFLINE_DOCS="no" # TODO
 	)
 
 	if use gui; then
 		mycmakeargs+=(
-			-DENABLE_GAMEPAD=$(usex gamepad)
-			-DENABLE_QTDBUS=$(usex dbus)
+			-DENABLE_HIDAPI="$(usex hidapi)"
+			-DENABLE_QTDBUS="$(usex dbus)"
+			-DENABLE_SPNAV="$(usex spacenav)"
+		)
+	fi
+
+	if [[ ${PV} != *9999* ]] ; then
+		mycmakeargs+=(
+			-DCMAKE_MODULE_PATH="${WORKDIR}/sanitizers-cmake-${SANITIZERS_CMAKE_COMMIT}/cmake"
+			-DOPENSCAD_COMMIT="${COMMIT:0:9}"
+			-DOPENSCAD_VERSION="${PV:0:4}.${PV:4:2}.${PV:6:2}"
 		)
 	fi
 
 	cmake_src_configure
 }
 
+src_test() {
+	local i WRITE=()
+
+	if [[ -d "/dev/udmabuf" ]]; then
+		WRITE+=(
+			"/dev/udmabuf"
+		)
+	fi
+
+	if [[ -d /sys/module/nvidia ]]; then
+		# /dev/dri/card*
+		# /dev/dri/renderD*
+		readarray -t dri <<<"$(
+			find /sys/module/nvidia/drivers/*/*:*:*.*/drm \
+				-mindepth 1 -maxdepth 1 -type d -exec basename {} \; \
+				| sed 's:^:/dev/dri/:'
+			)"
+
+		# /dev/nvidia{0-9}
+		readarray -t cards <<<"$(find /dev -regextype sed -regex '/dev/nvidia[0-9]*')"
+
+		WRITE+=(
+			"${dri[@]}"
+			"${cards[@]}"
+			"/dev/nvidiactl"
+			"/dev/nvidia-caps/"
+			"/dev/nvidia-modeset"
+			"/dev/nvidia-uvm"
+			"/dev/nvidia-uvm-tools"
+		)
+	fi
+
+	WRITE+=(
+		# for portage
+		"/proc/self/task/"
+	)
+	for i in "${WRITE[@]}"; do
+		if [[ ! -w "$i" ]]; then
+			eqawarn "addwrite $i"
+			addwrite "$i"
+
+			if [[ ! -d "$i" ]] && [[ ! -w "$i" ]]; then
+				eqawarn "can not access $i after addwrite"
+			fi
+		fi
+	done
+
+	sed \
+		-e "s/OPENSCAD_BINARY/OPENSCADPATH/g" \
+		-i tests/test_cmdline_tool.py || die
+
+	cd "${BUILD_DIR}" || die
+
+	# NOTE link in from CMAKE_USE_DIR
+	ln -s "${CMAKE_USE_DIR}/color-schemes" . || die
+	ln -s "${CMAKE_USE_DIR}/locale" . || die
+	ln -s "${CMAKE_USE_DIR}/shaders" . || die
+
+	virtx cmake_src_test -j1
+}
+
 src_install() {
 	DOCS+=( doc/*.pdf )
+
 	cmake_src_install
 
 	mv -i "${ED}"/usr/share/openscad/locale "${ED}"/usr/share || die "failed to move locales"
@@ -121,15 +234,7 @@ src_install() {
 }
 
 pkg_postinst() {
-	xdg_desktop_database_update
-	xdg_icon_cache_update
-	xdg_mimeinfo_database_update
+	xdg_pkg_postinst
 
 	optfeature "support scad major mode in GNU Emacs" app-emacs/scad-mode
 }
-
-pkg_postrm() {
-	xdg_desktop_database_update
-	xdg_icon_cache_update
-	xdg_mimeinfo_database_update
-}


             reply	other threads:[~2024-11-16 21:39 UTC|newest]

Thread overview: 64+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-11-16 21:39 Sam James [this message]
  -- strict thread matches above, loose matches on Subject: below --
2025-01-03 22:26 [gentoo-commits] repo/gentoo:master commit in: media-gfx/openscad/ Sam James
2025-01-03 22:08 Sam James
2025-01-03 22:08 Sam James
2024-11-16 21:39 Sam James
2024-11-16 21:39 Sam James
2024-07-26  5:05 Eli Schwartz
2024-07-26  5:05 Eli Schwartz
2024-04-16 16:30 Jimi Huotari
2023-12-03  5:45 Arthur Zamarin
2023-05-02 13:39 Joonas Niilola
2023-04-06  6:54 Joonas Niilola
2022-09-02 16:50 Joonas Niilola
2022-09-01 19:14 Sam James
2022-09-01  8:45 Agostino Sarubbo
2022-08-31 18:47 Sam James
2022-06-22  7:03 Joonas Niilola
2022-06-03  7:28 Joonas Niilola
2022-06-03  7:20 Jakov Smolić
2022-04-22 10:22 Joonas Niilola
2022-04-22 10:22 Joonas Niilola
2022-04-22 10:22 Joonas Niilola
2021-05-04 22:02 Sam James
2021-05-04 22:02 Sam James
2021-05-01 18:19 Agostino Sarubbo
2021-04-11  0:13 Thomas Deutschmann
2021-03-07  9:03 Joonas Niilola
2021-03-07  9:03 Joonas Niilola
2021-02-18 20:12 Andreas Sturmlechner
2021-02-18 17:12 Sam James
2021-02-14 19:52 Sam James
2021-02-07 17:07 Conrad Kostecki
2020-11-25  7:50 Joonas Niilola
2020-11-20 20:40 Andreas Sturmlechner
2020-11-20 14:59 Joonas Niilola
2020-11-20 14:59 Joonas Niilola
2020-08-25 10:25 Sam James
2020-07-20  9:01 Joonas Niilola
2020-04-14 12:32 Agostino Sarubbo
2020-04-14  7:58 Agostino Sarubbo
2020-04-03 20:07 Andreas Sturmlechner
2020-04-03 20:07 Andreas Sturmlechner
2019-07-07 19:19 Michał Górny
2019-07-07 19:19 Michał Górny
2019-05-18 19:33 Andreas Sturmlechner
2019-04-24 20:15 Andreas Sturmlechner
2019-04-24 20:15 Andreas Sturmlechner
2019-01-27 17:26 Pacho Ramos
2018-01-06 21:31 Andreas Sturmlechner
2017-12-09  2:33 Michael Weber
2017-12-09  2:31 Michael Weber
2017-12-09  2:25 Michael Weber
2017-12-09  2:19 Michael Weber
2017-10-28 16:12 Andreas Sturmlechner
2017-10-21 21:24 Andreas Sturmlechner
2017-05-15  8:44 Michael Weber
2017-05-14 11:02 Michael Weber
2017-05-14 11:02 Michael Weber
2016-12-22 18:26 David Seifert
2016-08-06  9:16 Pacho Ramos
2016-03-30 13:39 Michael Palimaka
2015-09-07  7:14 Thomas Kahle
2015-09-06 19:40 Thomas Kahle
2015-09-06 19:40 Thomas Kahle

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1731793148.d5515a801258b39900cb36fe6090c9085518ef8c.sam@gentoo \
    --to=sam@gentoo.org \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox