build: support CentOS Stream 9, make graphviz optional

Change-Id: I5c0d824720f9f701ee2a88774e661c7472baea88
diff --git a/.jenkins.d/00-deps.sh b/.jenkins.d/00-deps.sh
index 95dfe37..d3b16f9 100755
--- a/.jenkins.d/00-deps.sh
+++ b/.jenkins.d/00-deps.sh
@@ -35,11 +35,15 @@
     case $JOB_NAME in
         *code-coverage)
             sudo apt-get -qy install lcov python3-pip
-            pip3 install --user --upgrade --upgrade-strategy=eager 'gcovr~=5.0'
+            pip3 install --user --upgrade --upgrade-strategy=eager 'gcovr~=5.1'
             ;;
         *Docs)
             sudo apt-get -qy install doxygen graphviz python3-pip
             pip3 install --user --upgrade --upgrade-strategy=eager sphinx sphinxcontrib-doxylink
             ;;
     esac
+
+elif has CentOS $NODE_LABELS; then
+    sudo dnf -y install gcc-c++ libasan pkgconf-pkg-config python3 \
+                        boost-devel openssl-devel sqlite-devel
 fi
diff --git a/.jenkins.d/01-ndn-cxx.sh b/.jenkins.d/01-ndn-cxx.sh
index 4e0e154..5da6d35 100755
--- a/.jenkins.d/01-ndn-cxx.sh
+++ b/.jenkins.d/01-ndn-cxx.sh
@@ -35,19 +35,14 @@
 
 pushd ndn-cxx >/dev/null
 
-if has CentOS-8 $NODE_LABELS; then
-    # https://bugzilla.redhat.com/show_bug.cgi?id=1721553
-    PCH="--without-pch"
-fi
-
-./waf --color=yes configure --disable-static --enable-shared --without-osx-keychain $PCH
+./waf --color=yes configure --disable-static --enable-shared --without-osx-keychain
 ./waf --color=yes build -j$WAF_JOBS
 sudo_preserve_env PATH -- ./waf --color=yes install
 
 popd >/dev/null
 popd >/dev/null
 
-if has CentOS-8 $NODE_LABELS; then
+if has CentOS $NODE_LABELS; then
     sudo tee /etc/ld.so.conf.d/ndn.conf >/dev/null <<< /usr/local/lib64
 fi
 if has Linux $NODE_LABELS; then
diff --git a/.jenkins.d/10-build.sh b/.jenkins.d/10-build.sh
index 20e6bd1..25892f5 100755
--- a/.jenkins.d/10-build.sh
+++ b/.jenkins.d/10-build.sh
@@ -36,6 +36,9 @@
 # Install
 sudo_preserve_env PATH -- ./waf --color=yes install
 
+if has CentOS $NODE_LABELS; then
+    sudo tee /etc/ld.so.conf.d/ndn.conf >/dev/null <<< /usr/local/lib64
+fi
 if has Linux $NODE_LABELS; then
     sudo ldconfig
 fi
diff --git a/.jenkins.d/20-tests.sh b/.jenkins.d/20-tests.sh
index 455c8f7..81c00b1 100755
--- a/.jenkins.d/20-tests.sh
+++ b/.jenkins.d/20-tests.sh
@@ -3,7 +3,6 @@
 
 # Prepare environment
 rm -rf ~/.ndn
-ndnsec key-gen "/tmp/jenkins/$NODE_NAME" | ndnsec cert-install -
 
 # https://github.com/google/sanitizers/wiki/AddressSanitizerFlags
 ASAN_OPTIONS="color=always"
diff --git a/.jenkins.d/40-headers-check.sh b/.jenkins.d/40-headers-check.sh
index b0f9987..f4bfb8a 100755
--- a/.jenkins.d/40-headers-check.sh
+++ b/.jenkins.d/40-headers-check.sh
@@ -6,20 +6,21 @@
 # (similar to running all test cases), instead of failing at the first error.
 
 PROJ=ChronoSync
+PCFILE=ChronoSync
 
 if [[ -n $DISABLE_HEADERS_CHECK ]]; then
   echo 'Skipping headers check.'
   exit 0
 fi
 
-if has CentOS-8 $NODE_LABELS; then
+if has CentOS $NODE_LABELS; then
   export PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig
 fi
 
 CXX=${CXX:-g++}
 STD=-std=c++17
-CXXFLAGS="-O2 -Wall -Wno-unneeded-internal-declaration -Wno-unused-const-variable $(pkg-config --cflags libndn-cxx $PROJ)"
-INCLUDEDIR="$(pkg-config --variable=includedir $PROJ)"/$PROJ
+CXXFLAGS="-O2 -Wall -Wno-unneeded-internal-declaration -Wno-unused-const-variable $(pkg-config --cflags libndn-cxx $PCFILE)"
+INCLUDEDIR="$(pkg-config --variable=includedir $PCFILE)"/$PROJ
 
 echo "Using: $CXX $STD $CXXFLAGS"
 
diff --git a/docs/doxygen.conf.in b/docs/doxygen.conf.in
index 7a74246..da86688 100644
--- a/docs/doxygen.conf.in
+++ b/docs/doxygen.conf.in
@@ -68,7 +68,7 @@
 # performance problems for the file system.
 # The default value is: NO.
 
-CREATE_SUBDIRS         = YES
+CREATE_SUBDIRS         = NO
 
 # If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
 # characters to appear in the names of generated files. If set to NO, non-ASCII
@@ -2117,7 +2117,7 @@
 # set to NO
 # The default value is: YES.
 
-HAVE_DOT               = YES
+HAVE_DOT               = @HAVE_DOT@
 
 # The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
 # to run in parallel. When set to 0 doxygen will base this on the number of
diff --git a/wscript b/wscript
index 42b7a1c..590dda2 100644
--- a/wscript
+++ b/wscript
@@ -25,6 +25,13 @@
 
     conf.env.WITH_TESTS = conf.options.with_tests
 
+    conf.find_program('dot', mandatory=False)
+
+    # Prefer pkgconf if it's installed, because it gives more correct results
+    # on Fedora/CentOS/RHEL/etc. See https://bugzilla.redhat.com/show_bug.cgi?id=1953348
+    # Store the result in env.PKGCONFIG, which is the variable used inside check_cfg()
+    conf.find_program(['pkgconf', 'pkg-config'], var='PKGCONFIG')
+
     pkg_config_path = os.environ.get('PKG_CONFIG_PATH', f'{conf.env.LIBDIR}/pkgconfig')
     conf.check_cfg(package='libndn-cxx', args=['libndn-cxx >= 0.8.0', '--cflags', '--libs'],
                    uselib_store='NDN_CXX', pkg_config_path=pkg_config_path)
@@ -99,6 +106,7 @@
         target=['docs/doxygen.conf',
                 'docs/named_data_theme/named_data_footer-with-analytics.html'],
         VERSION=VERSION,
+        HAVE_DOT='YES' if bld.env.DOT else 'NO',
         HTML_FOOTER='../build/docs/named_data_theme/named_data_footer-with-analytics.html' \
                         if os.getenv('GOOGLE_ANALYTICS', None) \
                         else '../docs/named_data_theme/named_data_footer.html',