diff --git a/Documentation/Doxyfile.in b/Documentation/Doxyfile.in
index 2be8d47b8419..abafcf6c6c66 100644
--- a/Documentation/Doxyfile.in
+++ b/Documentation/Doxyfile.in
@@ -20,6 +20,7 @@ TOC_INCLUDE_HEADINGS   = 0
 CASE_SENSE_NAMES       = YES
 
 QUIET                  = YES
+WARN_AS_ERROR          = @WARN_AS_ERROR@
 
 INPUT                  = "@TOP_SRCDIR@/include/libcamera" \
                          "@TOP_SRCDIR@/src/ipa/ipu3" \
diff --git a/Documentation/meson.build b/Documentation/meson.build
index 3872e0a8f522..30d395234952 100644
--- a/Documentation/meson.build
+++ b/Documentation/meson.build
@@ -15,6 +15,7 @@ if doxygen.found() and dot.found()
     cdata.set('TOP_SRCDIR', meson.project_source_root())
     cdata.set('TOP_BUILDDIR', meson.project_build_root())
     cdata.set('OUTPUT_DIR', meson.current_build_dir())
+    cdata.set('WARN_AS_ERROR', get_option('doc_werror') ? 'YES' : 'NO')
 
     doxygen_predefined = []
     foreach key : config_h.keys()
diff --git a/meson_options.txt b/meson_options.txt
index c61eb55584b5..7aa412491e91 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -20,6 +20,11 @@ option('documentation',
         type : 'feature',
         description : 'Generate the project documentation')
 
+option('doc_werror',
+        type : 'boolean',
+        value : false,
+        description : 'Treat documentation warnings as errors')
+
 option('gstreamer',
         type : 'feature',
         value : 'auto',
