diff --git a/dev-cpp/htmlcxx/htmlcxx-0.87.recipe b/dev-cpp/htmlcxx/htmlcxx-0.87.recipe
new file mode 100644
index 000000000..3a4047dff
--- /dev/null
+++ b/dev-cpp/htmlcxx/htmlcxx-0.87.recipe
@@ -0,0 +1,113 @@
+SUMMARY="A simple non-validating CSS 1 and HTML parser for C++"
+DESCRIPTION="htmlcxx is the name of both the library and the utility application that comes with \
+this package. Although the htmlcxx (the application) is mostly useless for programming, you can \
+use it to easily see how htmlcxx (the library) would parse your html code.
+Just install and try htmlcxx -h."
+HOMEPAGE="https://sourceforge.net/projects/htmlcxx/"
+COPYRIGHT="Davi de Castro Reis
+ Robson Braga Ara˙jo"
+LICENSE="Apache v2
+ GNU LGPL v2"
+REVISION="1"
+SOURCE_URI="$HOMEPAGE/files/v0.87/htmlcxx-0.87.tar.gz"
+CHECKSUM_SHA256="5d38f938cf4df9a298a5346af27195fffabfef9f460fc2a02233cbcfa8fc75c8"
+PATCHES="htmlcxx-$portVersion-c++17.patch"
+
+ARCHITECTURES="all !x86_gcc2"
+SECONDARY_ARCHITECTURES="x86"
+
+# On x86_gcc2 we don't want to install the commands in bin//, but in bin/.
+commandBinDir=$binDir
+commandSuffix=$secondaryArchSuffix
+if [ "$targetArchitecture" = x86_gcc2 ]; then
+ commandSuffix=
+ commandBinDir=$prefix/bin
+fi
+
+libVersion="3.1.0"
+libVersionCompat="$libVersion compat >= ${libVersion%%.*}"
+libCssVersion="0.0.0"
+libCssVersionCompat="$libCssVersion compat >= ${libCssVersion%%.*}"
+
+PROVIDES="
+ htmlcxx$secondaryArchSuffix = $portVersion
+ cmd:htmlcxx$commandSuffix
+ lib:libhtmlcxx$secondaryArchSuffix = $libVersionCompat
+ lib:libcss_parser$secondaryArchSuffix = $libCssVersionCompat
+ lib:libcss_parser_pp$secondaryArchSuffix = $libCssVersionCompat
+ "
+REQUIRES="
+ haiku$secondaryArchSuffix
+ "
+
+PROVIDES_tools="
+ htmlcxx${secondaryArchSuffix}_tools = $portVersion
+ cmd:htmlcxx$commandSuffix
+ "
+REQUIRES_tools="
+ htmlcxx$secondaryArchSuffix == $portVersion
+ haiku$secondaryArchSuffix
+ "
+
+PROVIDES_devel="
+ htmlcxx${secondaryArchSuffix}_devel = $portVersion
+ devel:libhtmlcxx$secondaryArchSuffix = $libVersionCompat
+ devel:libcss_parser$secondaryArchSuffix = $libCssVersionCompat
+ devel:libcss_parser_pp$secondaryArchSuffix = $libCssVersionCompat
+ "
+REQUIRES_devel="
+ htmlcxx$secondaryArchSuffix == $portVersion base
+ "
+
+BUILD_REQUIRES="
+ haiku${secondaryArchSuffix}_devel
+ devel:libiconv$secondaryArchSuffix
+ "
+BUILD_PREREQUIRES="
+ cmd:aclocal
+ cmd:autoreconf
+ cmd:flex
+ cmd:gcc$secondaryArchSuffix
+ cmd:libtoolize$secondaryArchSuffix
+ cmd:make
+ cmd:yacc
+ "
+
+BUILD()
+{
+ autoreconf -fi
+ runConfigure --omit-dirs binDir ./configure \
+ --bindir=$commandBinDir \
+ --disable-static
+ make $jobArgs
+}
+
+INSTALL()
+{
+ make install
+
+ # remove libtool files
+ rm -rf $libDir/*.la
+
+ # move includedir
+ mkdir -p $includeDir
+ mv $prefix/include/* $includeDir
+ rm -rf $prefix/include
+
+ prepareInstalledDevelLibs \
+ libhtmlcxx \
+ libcss_parser \
+ libcss_parser_pp
+ fixPkgconfig
+
+ packageEntries devel \
+ $developDir
+
+ packageEntries tools \
+ $commandBinDir
+}
+
+TEST()
+{
+ make check
+}
diff --git a/dev-cpp/htmlcxx/patches/htmlcxx-0.87-c++17.patch b/dev-cpp/htmlcxx/patches/htmlcxx-0.87-c++17.patch
new file mode 100644
index 000000000..9f8f060de
--- /dev/null
+++ b/dev-cpp/htmlcxx/patches/htmlcxx-0.87-c++17.patch
@@ -0,0 +1,26 @@
+https://sourceforge.net/p/htmlcxx/patches/8/
+
+diff --color -Naur a/html/CharsetConverter.cc b/html/CharsetConverter.cc
+--- a/html/CharsetConverter.cc 2018-12-29 03:13:56.000000000 +0000
++++ b/html/CharsetConverter.cc 2021-05-31 23:03:10.705334580 +0100
+@@ -7,7 +7,7 @@
+ using namespace std;
+ using namespace htmlcxx;
+
+-CharsetConverter::CharsetConverter(const string &from, const string &to) throw (Exception)
++CharsetConverter::CharsetConverter(const string &from, const string &to)
+ {
+ mIconvDescriptor = iconv_open(to.c_str(), from.c_str());
+ if (mIconvDescriptor == (iconv_t)(-1))
+diff --color -Naur a/html/CharsetConverter.h b/html/CharsetConverter.h
+--- a/html/CharsetConverter.h 2018-12-29 03:13:56.000000000 +0000
++++ b/html/CharsetConverter.h 2021-05-31 23:03:19.042574598 +0100
+@@ -17,7 +17,7 @@
+ : std::runtime_error(arg) {}
+ };
+
+- CharsetConverter(const std::string &from, const std::string &to) throw (Exception);
++ CharsetConverter(const std::string &from, const std::string &to);
+ ~CharsetConverter();
+
+ std::string convert(const std::string &input);