Prepare release 0.9.0

Refs: #5323
Change-Id: Ifd67ae391221916679e79b7a321163792ca3af95
diff --git a/.jenkins.d/00-deps.sh b/.jenkins.d/00-deps.sh
index 0128e26..b0e54a0 100755
--- a/.jenkins.d/00-deps.sh
+++ b/.jenkins.d/00-deps.sh
@@ -35,6 +35,7 @@
 set -x
 
 if [[ $ID == macos ]]; then
+    export HOMEBREW_NO_ENV_HINTS=1
     if [[ -n $GITHUB_ACTIONS ]]; then
         export HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1
     fi
diff --git a/docs/doxygen.conf.in b/docs/doxygen.conf.in
index afcd331..67c4978 100644
--- a/docs/doxygen.conf.in
+++ b/docs/doxygen.conf.in
@@ -1171,15 +1171,6 @@
 
 HTML_COLORSTYLE_GAMMA  = 91
 
-# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
-# page will contain the date and time when the page was generated. Setting this
-# to YES can help to show when doxygen was last run and thus if the
-# documentation is up to date.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_TIMESTAMP         = NO
-
 # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
 # documentation will contain sections that can be hidden and shown after the
 # page has loaded.
@@ -1747,14 +1738,6 @@
 
 LATEX_BIB_STYLE        = plain
 
-# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated
-# page will contain the date and time when the page was generated. Setting this
-# to NO can help when comparing the output of multiple runs.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_TIMESTAMP        = NO
-
 #---------------------------------------------------------------------------
 # Configuration options related to the RTF output
 #---------------------------------------------------------------------------
@@ -2122,23 +2105,6 @@
 
 DOT_NUM_THREADS        = 0
 
-# When you want a differently looking font in the dot files that doxygen
-# generates you can specify the font name using DOT_FONTNAME. You need to make
-# sure dot is able to find the font, which can be done by putting it in a
-# standard location or by setting the DOTFONTPATH environment variable or by
-# setting DOT_FONTPATH to the directory containing the font.
-# The default value is: Helvetica.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_FONTNAME           = Helvetica
-
-# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
-# dot graphs.
-# Minimum value: 4, maximum value: 24, default value: 10.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_FONTSIZE           = 10
-
 # By default doxygen will tell dot to use the default font as specified with
 # DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set
 # the path where dot can find it using this tag.
diff --git a/docs/release-notes.rst b/docs/release-notes.rst
index 1b8eeec..1455a30 100644
--- a/docs/release-notes.rst
+++ b/docs/release-notes.rst
@@ -1,4 +1,4 @@
 Release Notes
 =============
 
-.. include:: release-notes/release-notes-0.8.1.rst
+.. include:: release-notes/release-notes-0.9.0.rst
diff --git a/docs/release-notes/release-notes-0.9.0.rst b/docs/release-notes/release-notes-0.9.0.rst
new file mode 100644
index 0000000..895e718
--- /dev/null
+++ b/docs/release-notes/release-notes-0.9.0.rst
@@ -0,0 +1,112 @@
+ndn-cxx version 0.9.0
+---------------------
+
+*Release date: July 28, 2024*
+
+Important changes and new features
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+- **C++17** is now *required* to build ndn-cxx and when including any of its header files
+
+- The build dependencies have been increased as follows:
+
+  - GCC >= 9.3 or Clang >= 7.0 are strongly *recommended* on Linux; GCC 8.x is also known
+    to work but is not officially supported
+  - Xcode 13 or later is *recommended* on macOS; older versions may still work but are not
+    officially supported
+  - Boost >= 1.71.0 is *required* on all platforms
+
+- Ubuntu 24.04 (Noble), Debian 12 (Bookworm), and macOS 14 (Sonoma) are now officially supported
+
+- Added an official Dockerfile to the repository. From this Dockerfile, two images are currently
+  published to the GitHub container registry:
+
+  - `named-data/ndn-cxx-build <https://github.com/named-data/ndn-cxx/pkgs/container/ndn-cxx-build>`__
+  - `named-data/ndn-cxx-runtime <https://github.com/named-data/ndn-cxx/pkgs/container/ndn-cxx-runtime>`__
+
+  Both images are available for *linux/amd64* and *linux/arm64* platforms.
+
+- The default forwarder socket path for Unix transports changed to ``/run/nfd/nfd.sock`` on Linux
+  and to ``/var/run/nfd/nfd.sock`` on all other platforms (:issue:`5304`)
+
+- On macOS, the default TPM backend is now **tpm-file** (the same as all other platforms)
+
+- :ndn-cxx:`Interest::matchesData` no longer considers ``MustBeFresh`` and ``FreshnessPeriod``
+  (:issue:`5270`)
+
+- Modernized several APIs to use ``std::string_view``
+
+- Added :ndn-cxx:`Interest::setApplicationParameters(std::string_view)` and
+  :ndn-cxx:`Data::setContent(std::string_view)` overloads for convenience
+
+- :ndn-cxx:`SegmentFetcher` gained an option to omit ``MustBeFresh`` from the first Interest sent
+
+- Moved :ndn-cxx:`DummyClientFace`, :ndn-cxx:`Segmenter`, and :ndn-cxx:`SegmentFetcher` to
+  namespace ``ndn``
+
+- Moved all :ndn-cxx:`Signal`-related classes to namespace ``ndn::signal``
+
+Improvements and bug fixes
+^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+- Check the TLV type when constructing :ndn-cxx:`Name` from :ndn-cxx:`Block`
+
+- Provide relational operators for :ndn-cxx:`FaceUri`, to make it usable as a container key
+
+- Generalize and simplify :ndn-cxx:`time::fromUnixTimestamp` and :ndn-cxx:`time::toUnixTimestamp`
+
+- Prevent overflows in ``InterestLifetime`` and ``FreshnessPeriod`` (:issue:`4997`)
+
+- Make HMAC signing and verification compatible with OpenSSL 3.x (:issue:`5251`)
+
+- Better handling of large dates in :ndn-cxx:`ValidityPeriod` (:issue:`5176`)
+
+- :ndn-cxx:`NetworkMonitor` now ignore AWDL interfaces on macOS (:issue:`5074`)
+
+- Avoid dependency on *boost_program_options* when tools are disabled (:issue:`5210`)
+
+- Add fine-grained options to ``./waf configure`` to enable/disable the compilation of
+  benchmarks, integration tests, and unit tests independently
+
+- Fix building the documentation with Python 3.12 (:issue:`5298`)
+
+- Reduce amount of debugging information produced in compiled binaries by default (:issue:`5279`)
+
+- Update waf build system to version 2.0.27
+
+- Various code cleanups, modernizations, and documentation improvements
+
+Deprecations
+^^^^^^^^^^^^
+
+- ``Face::getIoService()``. Use ``Face::getIoContext()`` instead.
+
+- ``Component::fromEscapedString()``. Use :ndn-cxx:`Component::fromUri` instead.
+
+- TPM unlock and related functionality. This includes ``Tpm::isTpmLocked()``,
+  ``Tpm::unlockTpm()``, ``Tpm::isTerminalMode()``, ``Tpm::setTerminalMode()``,
+  and the ``ndnsec-unlock-tpm`` command-line tool (:issue:`4754`)
+
+Removals
+^^^^^^^^
+
+- ``Block::wire()``. Use :ndn-cxx:`Block::data` instead.
+
+- :ndn-cxx:`Component` constructors that take a raw ``const uint8_t*``. Use the ``span``-based
+  constructors instead.
+
+- ``Component::fromImplicitSha256Digest()`` and ``Component::fromParametersSha256Digest()``
+
+- Previously deprecated overloads of ``Name::append()``
+
+- ``Name::push_back()``. Use :ndn-cxx:`Name::append` instead.
+
+- ``ndn::escape()`` and ``ndn::unescape()`` overloads that take raw strings as ``const char*`` +
+  ``size_t``. Use the corresponding ``std::string_view`` versions instead.
+
+- ``ndn::optional`` and ``ndn::variant``. Use C++17 ``std::optional`` and ``std::variant``
+  directly instead.
+
+- ``ndn::to_string()``. Use the standard C++ function ``std::to_string()`` instead.
+
+- Previously deprecated ``ndnsec`` command aliases (:issue:`5163`)
diff --git a/docs/releases.rst b/docs/releases.rst
index 19af1f9..d942796 100644
--- a/docs/releases.rst
+++ b/docs/releases.rst
@@ -1,5 +1,5 @@
-All ndn-cxx Releases
-====================
+Release History
+===============
 
 .. toctree::
    :glob:
@@ -9,17 +9,26 @@
 
    release-notes/*
 
-* **ndn-cxx version 0.8.1**
-  (:doc:`Release Notes <release-notes/release-notes-0.8.1>`, `Documentation <https://docs.named-data.net/ndn-cxx/0.8.1/>`__)
+* **ndn-cxx version 0.9.0**
+  \| :doc:`Release Notes <release-notes/release-notes-0.9.0>`
+  \| `GitHub <https://github.com/named-data/ndn-cxx/releases/tag/ndn-cxx-0.9.0>`__
+  \| `Source download <https://github.com/named-data/ndn-cxx/releases/download/ndn-cxx-0.9.0/ndn-cxx-0.9.0.tar.xz>`__
+  (`checksum <https://github.com/named-data/ndn-cxx/releases/download/ndn-cxx-0.9.0/ndn-cxx-0.9.0.tar.xz.sha256>`__)
+  \| `Documentation <https://docs.named-data.net/ndn-cxx/0.9.0/>`__
 
-  `src (git) <https://github.com/named-data/ndn-cxx/releases/tag/ndn-cxx-0.8.1>`__,
-  `src (tarball) <https://named-data.net/downloads/ndn-cxx-0.8.1.tar.bz2>`__ (`checksum <https://named-data.net/downloads/ndn-cxx-0.8.1.tar.bz2.sha256>`__)
+* **ndn-cxx version 0.8.1**
+  \| :doc:`Release Notes <release-notes/release-notes-0.8.1>`
+  \| `GitHub <https://github.com/named-data/ndn-cxx/releases/tag/ndn-cxx-0.8.1>`__
+  \| `Source download <https://named-data.net/downloads/ndn-cxx-0.8.1.tar.bz2>`__
+  (`checksum <https://named-data.net/downloads/ndn-cxx-0.8.1.tar.bz2.sha256>`__)
+  \| `Documentation <https://docs.named-data.net/ndn-cxx/0.8.1/>`__
 
 * **ndn-cxx version 0.8.0**
-  (:doc:`Release Notes <release-notes/release-notes-0.8.0>`, `Documentation <https://docs.named-data.net/ndn-cxx/0.8.0/>`__)
-
-  `src (git) <https://github.com/named-data/ndn-cxx/releases/tag/ndn-cxx-0.8.0>`__,
-  `src (tarball) <https://named-data.net/downloads/ndn-cxx-0.8.0.tar.bz2>`__ (`checksum <https://named-data.net/downloads/ndn-cxx-0.8.0.tar.bz2.sha256>`__)
+  \| :doc:`Release Notes <release-notes/release-notes-0.8.0>`
+  \| `GitHub <https://github.com/named-data/ndn-cxx/releases/tag/ndn-cxx-0.8.0>`__
+  \| `Source download <https://named-data.net/downloads/ndn-cxx-0.8.0.tar.bz2>`__
+  (`checksum <https://named-data.net/downloads/ndn-cxx-0.8.0.tar.bz2.sha256>`__)
+  \| `Documentation <https://docs.named-data.net/ndn-cxx/0.8.0/>`__
 
 * **ndn-cxx version 0.7.1**
   (:doc:`Release Notes <release-notes/release-notes-0.7.1>`, `Documentation <https://docs.named-data.net/ndn-cxx/0.7.1/>`__)
@@ -72,13 +81,13 @@
   `src (tarball) <https://named-data.net/downloads/ndn-cxx-0.6.0.tar.bz2>`__ (`checksum <https://named-data.net/downloads/ndn-cxx-0.6.0.tar.bz2.sha256>`__)
 
 * **ndn-cxx version 0.5.1**
-  (:doc:`Release Notes <release-notes/release-notes-0.5.1>`, `Documentation <https://docs.named-data.net/ndn-cxx/0.5.1/>`__)
+  (:doc:`Release Notes <release-notes/release-notes-0.5.1>`)
 
   `src (git) <https://github.com/named-data/ndn-cxx/releases/tag/ndn-cxx-0.5.1>`__,
   `src (tarball) <https://named-data.net/downloads/ndn-cxx-0.5.1.tar.bz2>`__ (`checksum <https://named-data.net/downloads/ndn-cxx-0.5.1.tar.bz2.sha256>`__)
 
 * **ndn-cxx version 0.5.0**
-  (:doc:`Release Notes <release-notes/release-notes-0.5.0>`, `Documentation <https://docs.named-data.net/ndn-cxx/0.5.0/>`__)
+  (:doc:`Release Notes <release-notes/release-notes-0.5.0>`)
 
   `src (git) <https://github.com/named-data/ndn-cxx/releases/tag/ndn-cxx-0.5.0>`__,
   `src (tarball) <https://named-data.net/downloads/ndn-cxx-0.5.0.tar.bz2>`__ (`checksum <https://named-data.net/downloads/ndn-cxx-0.5.0.tar.bz2.sha256>`__)
diff --git a/wscript b/wscript
index 0f0ea01..1e18344 100644
--- a/wscript
+++ b/wscript
@@ -4,7 +4,7 @@
 import subprocess
 from waflib import Context, Logs, Utils
 
-VERSION = '0.8.1'
+VERSION = '0.9.0'
 APPNAME = 'ndn-cxx'
 GIT_TAG_PREFIX = 'ndn-cxx-'