diff --git a/share/mk/doc.html.mk b/share/mk/doc.html.mk
new file mode 100644
index 0000000000..d395772a07
--- /dev/null
+++ b/share/mk/doc.html.mk
@@ -0,0 +1,239 @@
+#
+# $FreeBSD: doc/share/mk/doc.docbook.mk,v 1.11 2000/04/29 07:46:15 kuriyama Exp $
+#
+# This include file handles building and installing of
+# HTML documentation in the FreeBSD Documentation Project.
+#
+# Documentation using DOCFORMAT=html is expected to be marked up
+# according to the HTML DTD
+#
+
+# ------------------------------------------------------------------------
+#
+# Document-specific variables
+#
+# DOC This should be set to the name of the HTML
+# marked-up file, without the .sgml or .docb suffix.
+#
+# It also determins the name of the output files -
+# ${DOC}.html.
+#
+# DOCBOOKSUFFIX The suffix of your document, defaulting to .sgml
+#
+# SRCS The names of all the files that are needed to
+# build this document - This is useful if any of
+# them need to be generated. Changing any file in
+# SRCS causes the documents to be rebuilt.
+#
+
+# ------------------------------------------------------------------------
+#
+# Variables used by both users and documents:
+#
+# TIDYFLAGS Additional flags to pass to Tidy. Typically
+# used to set "-raw" flag to handle 8bit characters.
+#
+# EXTRA_CATALOGS Additional catalog files that should be used by
+# any SGML processing applications.
+#
+# NO_TIDY If you do not want to use tidy, set this to "YES".
+#
+# Documents should use the += format to access these.
+#
+
+MASTERDOC?= ${.CURDIR}/${DOC}.sgml
+
+KNOWN_FORMATS= html txt ps pdf tex dvi tar pdb
+
+HTMLCATALOG= ${PREFIX}/share/sgml/html/catalog
+
+# ------------------------------------------------------------------------
+#
+
+.for _curformat in ${FORMATS}
+_cf=${_curformat}
+.if ${_cf} == "html"
+_docs+= ${DOC}.html
+CLEANFILES+= ${DOC}.html
+.elif ${_cf} == "txt"
+_docs+= ${DOC}.txt
+CLEANFILES+= ${DOC}.html ${DOC}.txt
+.elif ${_cf} == "dvi"
+_docs+= ${DOC}.dvi
+CLEANFILES+= ${DOC}.aux ${DOC}.dvi ${DOC}.log ${DOC}.tex
+.elif ${_cf} == "ps"
+_docs+= ${DOC}.ps
+CLEANFILES+= ${DOC}.aux ${DOC}.dvi ${DOC}.log ${DOC}.tex ${DOC}.ps
+.elif ${_cf} == "pdf"
+_docs+= ${DOC}.pdf
+CLEANFILES+= ${DOC}.aux ${DOC}.dvi ${DOC}.log ${DOC}.tex ${DOC}.pdf
+.elif ${_cf} == "tar"
+_docs+= ${DOC}.tar
+.elif ${_cf} == "pdb"
+_docs+= ${DOC}.pdb ${.CURDIR:T}.pdb
++CLEANFILES+= ${DOC}.pdb ${.CURDIR:T}.pdb
+.endif
+.endfor
+
+#
+# Build a list of install-${format}.${compress_format} targets to be
+# by "make install". Also, add ${DOC}.${format}.${compress_format} to
+# ${_docs} and ${CLEANFILES} so they get built/cleaned by "all" and
+# "clean".
+#
+
+.if defined(INSTALL_COMPRESSED) && !empty(INSTALL_COMPRESSED)
+.for _curformat in ${FORMATS}
+_cf=${_curformat}
+.for _curcomp in ${INSTALL_COMPRESSED}
+.if ${_cf} != "html-split"
+_curinst+= install-${_curformat}.${_curcomp}
+_docs+= ${DOC}.${_curformat}.${_curcomp}
+CLEANFILES+= ${DOC}.${_curformat}.${_curcomp}
+.endif
+.endfor
+.endfor
+.endif
+
+.MAIN: all
+
+all: ${_docs}
+
+${DOC}.html: ${SRCS}
+ sgmlnorm -c ${HTMLCATALOG} ${.ALLSRC} > ${.TARGET}
+.if !defined(NO_TIDY)
+ -tidy -i -m -f /dev/null ${TIDYFLAGS} ${.TARGET}
+.endif
+
+${DOC}.txt: ${DOC}.html
+ w3m -S -dump ${.ALLSRC} > ${.TARGET}
+
+${DOC}.pdb: ${DOC}.html
+ iSiloBSD -y -d0 -Idef ${DOC}.html ${DOC}.pdb
+
+${.CURDIR:T}.pdb: ${DOC}.pdb
+ ln -f ${DOC}.pdb ${.CURDIR}.pdb
+
+${DOC}.tar: ${SRCS}
+ tar cf ${.TARGET} ${.ALLSRC}
+
+# ------------------------------------------------------------------------
+#
+# Validation targets
+#
+
+#
+# Lets you quickly check that the document conforms to the DTD without
+# having to convert it to any other formats
+#
+
+lint validate:
+ nsgmls -s -c ${HTMLCATALOG} ${MASTERDOC}
+
+# ------------------------------------------------------------------------
+#
+# Compress targets
+#
+
+#
+# The list of compression extensions this Makefile knows about. If you
+# add new compression schemes, add to this list (which is a list of
+# extensions, hence bz2, *not* bzip2) and extend the _PROG_COMPRESS_*
+# targets.
+#
+
+KNOWN_COMPRESS= gz bz2 zip
+
+#
+# You can't build suffix rules to do compression, since you can't
+# wildcard the source suffix. So these are defined .USE, to be tacked on
+# as dependencies of the compress-* targets.
+#
+
+_PROG_COMPRESS_gz: .USE
+ gzip -9 -c ${.ALLSRC} > ${.TARGET}
+
+_PROG_COMPRESS_bz2: .USE
+ bzip2 -9 -c ${.ALLSRC} > ${.TARGET}
+
+_PROG_COMPRESS_zip: .USE
+ zip -j -9 ${.TARGET} ${.ALLSRC}
+
+#
+# Build a list of targets for each compression scheme and output format.
+# Don't compress the html-split output format.
+#
+.for _curformat in ${KNOWN_FORMATS}
+_cf=${_curformat}
+.for _curcompress in ${KNOWN_COMPRESS}
+${DOC}.${_cf}.${_curcompress}: ${DOC}.${_cf} _PROG_COMPRESS_${_curcompress}
+.endfor
+.endfor
+
+# ------------------------------------------------------------------------
+#
+# Install targets
+#
+# Build install-* targets, one per allowed value in FORMATS.
+#
+# "beforeinstall" and "afterinstall" are hooks in to this process.
+# Redefine them to do things before and after the files are installed,
+# respectively.
+
+#
+# Build a list of install-format targets to be installed. These will be
+# dependencies for the "realinstall" target.
+#
+
+.if !defined(INSTALL_ONLY_COMPRESSED) || empty(INSTALL_ONLY_COMPRESSED)
+_curinst+= ${FORMATS:S/^/install-/g}
+.endif
+
+realinstall: ${_curinst}
+
+.for _curformat in ${KNOWN_FORMATS}
+_cf=${_curformat}
+.if !target(install-${_cf})
+install-${_cf}: ${DOC}.${_cf}
+ @[ -d ${DESTDIR} ] || mkdir -p ${DESTDIR}
+ ${INSTALL_DOCS} ${.ALLSRC} ${DESTDIR}
+
+.for _compressext in ${KNOWN_COMPRESS}
+install-${_cf}.${_compressext}: ${DOC}.${_cf}.${_compressext}
+ @[ -d ${DESTDIR} ] || mkdir -p ${DESTDIR}
+ ${INSTALL_DOCS} ${.ALLSRC} ${DESTDIR}
+.endfor
+.endif
+.endfor
+
+# ------------------------------------------------------------------------
+#
+# Package building
+#
+
+#
+# realpackage is what is called in each subdirectory when a package
+# target is called, or, rather, package calls realpackage in each
+# subdirectory as it goes.
+#
+# packagelist returns the list of targets that would be called during
+# package building.
+#
+
+realpackage: ${FORMATS:S/^/package-/}
+packagelist:
+ @echo ${FORMATS:S/^/package-/}
+
+#
+# Build a list of package targets for each output target. Each package
+# target depends on the corresponding install target running.
+#
+
+.for _curformat in ${KNOWN_FORMATS}
+_cf=${_curformat}
+package-${_curformat}: install-${_curformat}
+ @echo ${DOC}.${_curformat} > PLIST
+ @pkg_create -v -c -"FDP ${.CURDIR:T} ${_curformat} package" \
+ -d -"FDP ${.CURDIR:T} ${_curformat} package" -f PLIST \
+ -p ${DESTDIR} ${PACKAGES}/${.CURDIR:T}.${LANGCODE}.${_curformat}.tgz
+.endfor