summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Catanzaro <mcatanzaro@redhat.com>2022-08-04 11:09:16 -0500
committerMichael Catanzaro <mcatanzaro@redhat.com>2022-09-13 17:10:24 -0500
commit2ccdee2bc9af81ddb385131a61388a9fb5d748b8 (patch)
tree9182f2d7aadeeac6ab451ad6e7345601ac0ddf0c
parent1042ca7e52f9cabd296d2725b65448bd874b2585 (diff)
downloadgtk+-mcatanzaro/build-best-practices.tar.gz
build: fix check for debug vs. release buildsmcatanzaro/build-best-practices
Confusingly, Meson's debug option indicates whether debuginfo is enabled, not whether we have a debug build. We should consider the optimization level as well when deciding whether to enable debug extras. I've outlined an argument for why we should make these changes here: https://blogs.gnome.org/mcatanzaro/2022/07/15/best-practices-for-build-options/ The main take-away is this rule: “You have a non-production (debug) build if debug is true and if optimization is 0 or g; otherwise, you have a production build” (except on Windows, which is not accounted for here). This commit additionally removes guidance related to manually controlling preprocessor definitions in plain builds, which is controversial and violates Rule 6 from my blog post.
-rw-r--r--docs/reference/gtk/building.md37
-rw-r--r--meson.build14
2 files changed, 17 insertions, 34 deletions
diff --git a/docs/reference/gtk/building.md b/docs/reference/gtk/building.md
index 31073d1d04..9ec47f39aa 100644
--- a/docs/reference/gtk/building.md
+++ b/docs/reference/gtk/building.md
@@ -83,35 +83,22 @@ configuration option. GTK enables and disables functionality
depending on the build type used when calling *meson* to
configure the build.
-### Debug builds
-
-GTK will enable debugging code paths in both the `debug` and
-`debugoptimized` build types. Builds with `buildtype` set to
-`debug` will additionally enable consistency checks on the
-internal state of the toolkit.
-
-It is recommended to use the `debug` or `debugoptimized` build
-types when developing GTK itself. Additionally, `debug` builds of
-GTK are recommended for profiling and debugging GTK applications,
-as they include additional validation of the internal state.
+GTK will enable debugging code paths, including
+consistency checks on the internal state of the toolkit,
+when using the `debug` build type. Other build types will
+disable debugging code paths and additional run time safeties,
+like checked casts for object instances. It is recommended to
+use the `debug` build type when developing GTK itself. Additionally,
+`debug` builds of GTK are recommended for profiling and debugging GTK
+applications, as they include additional validation of the internal state.
+
+All other build types are production build types and will disable
+debugging code paths and extra runtime safety checks, like checked casts
+for object instances.
The `debugoptimized` build type is the default for GTK if no build
type is specified when calling *meson*.
-### Release builds
-
-The `release` build type will disable debugging code paths and
-additional run time safeties, like checked casts for object
-instances.
-
-The `plain` build type provided by Meson should only be used when
-packaging GTK, and it's expected that packagers will provide their
-own compiler flags when building GTK. See the previous section for
-the list of environment variables to be used to define compiler and
-linker flags. Note that with the plain build type, you are also
-responsible for controlling the debugging features of GTK with
-`-DG_ENABLE_DEBUG` and `-DG_DISABLE_CAST_CHECKS`.
-
## Dependencies
Before you can compile the GTK widget toolkit, you need to have
diff --git a/meson.build b/meson.build
index 6ececaba95..7ba5674e82 100644
--- a/meson.build
+++ b/meson.build
@@ -58,16 +58,12 @@ add_project_arguments('-DGTK_VERSION="@0@"'.format(meson.project_version()), lan
add_project_arguments('-D_GNU_SOURCE', language: 'c')
# Use debug/optimization flags to determine whether to enable debug or disable
-# cast checks
+# cast checks. We have a non-production (debug) build if debug is true and if
+# optimization is 0 or g; otherwise, we have a production build.
gtk_debug_cflags = []
-debug = get_option('debug')
-optimization = get_option('optimization')
-if debug
- gtk_debug_cflags += '-DG_ENABLE_DEBUG'
- if optimization in ['0', 'g']
- gtk_debug_cflags += '-DG_ENABLE_CONSISTENCY_CHECKS'
- endif
-elif optimization in ['2', '3', 's']
+if get_option('debug') and get_option('optimization') in [ '0', 'g' ]
+ gtk_debug_cflags += ['-DG_ENABLE_DEBUG', '-DG_ENABLE_CONSISTENCY_CHECKS']
+else
gtk_debug_cflags += ['-DG_DISABLE_CAST_CHECKS', '-DG_DISABLE_ASSERT']
endif