From 753e3c685ebe996363a440dd3740a30696791dd0 Mon Sep 17 00:00:00 2001 From: arch1t3cht Date: Tue, 21 Jan 2025 18:26:51 +0100 Subject: [PATCH] Allow building without PCHs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It seems that Aegisub used to be able to be built without precompiled headers, but this broke with the meson port since there the PCHs are needed to include acconf.h. (On the old build system(s), the feature flags were passed directly as defines to the compiler on Visual Studio, and acconf.h was forcibly included via -include acconf.h with autoconf.) Some distributions (gentoo in particular) disable PCHs by default for meson due to various bugs, and PCHs can also be quite a headache with language servers (I ended up running an sed one-liner after every configure to replace -include-pch in my compile_commands.json with the respective -include). Since meson doesn't seem to be able to forcibly include headers for every source file, just pass the config as a set of preprocessor defines. Disable b_pch on most of the CI lanes to catch missing includes but keep it enabled on one of the Ubuntu lanes just in cases something breaks with PCH enabled. Co-authored-by: Ștefan Talpalaru Co-authored-by: Nick Sarnie --- .github/workflows/ci.yml | 13 +++++++------ libaegisub/ass/uuencode.cpp | 1 + libaegisub/audio/provider_dummy.cpp | 1 + libaegisub/common/cajun/reader.cpp | 1 + libaegisub/common/calltip_provider.cpp | 1 + libaegisub/common/mru.cpp | 2 ++ libaegisub/common/option.cpp | 1 + libaegisub/common/thesaurus.cpp | 1 + libaegisub/include/lagi_pre.h | 3 --- libaegisub/include/lagi_pre_c.h | 3 --- libaegisub/include/libaegisub/lua/ffi.h | 1 + libaegisub/lua/modules/unicode.cpp | 2 ++ libaegisub/meson.build | 6 +++--- meson.build | 13 +++++++++++-- src/MatroskaParser.c | 1 - src/ass_style.cpp | 1 + src/audio_timing_dialogue.cpp | 3 +++ src/base_grid.h | 2 ++ src/command/command.h | 1 + src/dialog_colorpicker.cpp | 1 + src/frame_main.cpp | 1 + src/include/agi_pre.h | 4 ---- src/include/agi_pre_c.h | 4 ---- src/main.h | 2 ++ src/preferences.cpp | 1 + src/spline_curve.cpp | 1 + src/utils.cpp | 1 + 27 files changed, 46 insertions(+), 26 deletions(-) delete mode 100644 libaegisub/include/lagi_pre_c.h diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 847d0a6c15..815361ae4a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -22,6 +22,7 @@ jobs: msvc: true buildtype: release args: >- + -Db_pch=false -Ddefault_library=static --force-fallback-for=zlib,harfbuzz,freetype2,fribidi,libpng -Dfreetype2:harfbuzz=disabled @@ -43,37 +44,37 @@ jobs: name: Ubuntu 22 Debug, os: ubuntu-22.04, buildtype: debugoptimized, - args: '' + args: -Db_pch=true } - { name: Ubuntu 22 Release, os: ubuntu-22.04, buildtype: release, - args: '' + args: -Db_pch=false } - { name: Ubuntu 24 Debug, os: ubuntu-24.04, buildtype: debugoptimized, - args: '' + args: -Db_pch=true } - { name: Ubuntu 24 Release, os: ubuntu-24.04, buildtype: release, - args: '' + args: -Db_pch=false } - { name: macOS Debug, os: macos-13, buildtype: debugoptimized, - args: -Ddefault_library=static -Dbuild_osx_bundle=true -Dlocal_boost=true --force-fallback-for=ffms2 + args: -Db_pch=false -Ddefault_library=static -Dbuild_osx_bundle=true -Dlocal_boost=true --force-fallback-for=ffms2 } - { name: macOS Release, os: macos-13, buildtype: release, - args: -Ddefault_library=static -Dbuild_osx_bundle=true -Dlocal_boost=true --force-fallback-for=ffms2 + args: -Db_pch=false -Ddefault_library=static -Dbuild_osx_bundle=true -Dlocal_boost=true --force-fallback-for=ffms2 } steps: diff --git a/libaegisub/ass/uuencode.cpp b/libaegisub/ass/uuencode.cpp index 893268d077..b2e0df60f2 100644 --- a/libaegisub/ass/uuencode.cpp +++ b/libaegisub/ass/uuencode.cpp @@ -17,6 +17,7 @@ #include #include +#include // Despite being called uuencoding by ass_specs.doc, the format is actually // somewhat different from real uuencoding. Each 3-byte chunk is split into 4 diff --git a/libaegisub/audio/provider_dummy.cpp b/libaegisub/audio/provider_dummy.cpp index 01a6ae5b47..41b9c9cb2d 100644 --- a/libaegisub/audio/provider_dummy.cpp +++ b/libaegisub/audio/provider_dummy.cpp @@ -18,6 +18,7 @@ #include "libaegisub/fs.h" +#include #include /* diff --git a/libaegisub/common/cajun/reader.cpp b/libaegisub/common/cajun/reader.cpp index 6f32d2ff45..5068dfe90a 100644 --- a/libaegisub/common/cajun/reader.cpp +++ b/libaegisub/common/cajun/reader.cpp @@ -8,6 +8,7 @@ Author: Terry Caton #include "libaegisub/cajun/reader.h" +#include #include #include diff --git a/libaegisub/common/calltip_provider.cpp b/libaegisub/common/calltip_provider.cpp index de693e6377..d0188cbbb9 100644 --- a/libaegisub/common/calltip_provider.cpp +++ b/libaegisub/common/calltip_provider.cpp @@ -19,6 +19,7 @@ #include "libaegisub/ass/dialogue_parser.h" #include +#include namespace { struct proto_lit { diff --git a/libaegisub/common/mru.cpp b/libaegisub/common/mru.cpp index be12812b6a..ef41535c1a 100644 --- a/libaegisub/common/mru.cpp +++ b/libaegisub/common/mru.cpp @@ -22,6 +22,8 @@ #include "libaegisub/option.h" #include "libaegisub/option_value.h" +#include + namespace { std::string_view mru_names[] = { "Audio", diff --git a/libaegisub/common/option.cpp b/libaegisub/common/option.cpp index 0a1f8c8b3a..9b33a3807c 100644 --- a/libaegisub/common/option.cpp +++ b/libaegisub/common/option.cpp @@ -25,6 +25,7 @@ #include "libaegisub/log.h" #include "libaegisub/option_value.h" +#include #include #include #include diff --git a/libaegisub/common/thesaurus.cpp b/libaegisub/common/thesaurus.cpp index 25011b4e60..e5c141e340 100644 --- a/libaegisub/common/thesaurus.cpp +++ b/libaegisub/common/thesaurus.cpp @@ -19,6 +19,7 @@ #include "libaegisub/line_iterator.h" #include "libaegisub/split.h" +#include #include namespace agi { diff --git a/libaegisub/include/lagi_pre.h b/libaegisub/include/lagi_pre.h index f1c77fae33..3639e6eaa2 100644 --- a/libaegisub/include/lagi_pre.h +++ b/libaegisub/include/lagi_pre.h @@ -1,7 +1,4 @@ #ifdef __cplusplus -#include "../acconf.h" - -#define WIN32_LEAN_AND_MEAN // Common C #include diff --git a/libaegisub/include/lagi_pre_c.h b/libaegisub/include/lagi_pre_c.h deleted file mode 100644 index 622cf22157..0000000000 --- a/libaegisub/include/lagi_pre_c.h +++ /dev/null @@ -1,3 +0,0 @@ -#include "../acconf.h" - -#define WIN32_LEAN_AND_MEAN \ No newline at end of file diff --git a/libaegisub/include/libaegisub/lua/ffi.h b/libaegisub/include/libaegisub/lua/ffi.h index 17cf0088d7..29902f77ad 100644 --- a/libaegisub/include/libaegisub/lua/ffi.h +++ b/libaegisub/include/libaegisub/lua/ffi.h @@ -17,6 +17,7 @@ #include #include +#include #include namespace agi::lua { diff --git a/libaegisub/lua/modules/unicode.cpp b/libaegisub/lua/modules/unicode.cpp index 9ee64b1143..d6d84a97b8 100644 --- a/libaegisub/lua/modules/unicode.cpp +++ b/libaegisub/lua/modules/unicode.cpp @@ -18,6 +18,8 @@ #include +#include + namespace { char *wrap(void (*fn)(icu::UnicodeString&), const char *str, char **err) { auto ustr = icu::UnicodeString::fromUTF8(str); diff --git a/libaegisub/meson.build b/libaegisub/meson.build index 7689d31aeb..c7754dbb3a 100644 --- a/libaegisub/meson.build +++ b/libaegisub/meson.build @@ -82,12 +82,12 @@ else endif libaegisub_cpp_pch = ['include/lagi_pre.h'] -libaegisub_c_pch = ['include/lagi_pre_c.h'] libaegisub_inc = include_directories('include') -libaegisub = static_library('aegisub', libaegisub_src, acconf, +libaegisub = static_library('aegisub', libaegisub_src, + c_args: aegisub_defines, + cpp_args: aegisub_defines, include_directories: [libaegisub_inc, deps_inc], cpp_pch: libaegisub_cpp_pch, - c_pch: libaegisub_c_pch, dependencies: deps) diff --git a/meson.build b/meson.build index 031ddfb331..112d7e5a3b 100644 --- a/meson.build +++ b/meson.build @@ -375,7 +375,14 @@ elif cc.has_header_symbol('malloc.h', 'alloca', prefix: '#include ') conf.set('HAVE_MALLOC_H', true) endif -acconf = configure_file(output: 'acconf.h', configuration: conf) +aegisub_defines = [] +foreach key : conf.keys() + aegisub_defines += '-D@0@=@1@'.format(key, conf.get(key)) +endforeach + +if host_machine.system() == 'windows' + aegisub_defines += '-DWIN32_LEAN_AND_MEAN' +endif subdir('automation') subdir('libaegisub') @@ -387,7 +394,9 @@ subdir('tests') aegisub_cpp_pch = ['src/include/agi_pre.h'] aegisub_c_pch = ['src/include/agi_pre_c.h'] -aegisub = executable('aegisub', aegisub_src, version_h, acconf, resrc, +aegisub = executable('aegisub', aegisub_src, version_h, resrc, + c_args: aegisub_defines, + cpp_args: aegisub_defines, link_with: [libresrc, libaegisub], include_directories: [libaegisub_inc, libresrc_inc, version_inc, deps_inc, include_directories('src')], cpp_pch: aegisub_cpp_pch, diff --git a/src/MatroskaParser.c b/src/MatroskaParser.c index 7f69415ce7..4e612c3396 100644 --- a/src/MatroskaParser.c +++ b/src/MatroskaParser.c @@ -50,7 +50,6 @@ #define EVCBUG #endif -#include "acconf.h" #include "MatroskaParser.h" #ifdef HAVE_ALLOCA_H diff --git a/src/ass_style.cpp b/src/ass_style.cpp index 407d2234ab..8c9845bf00 100644 --- a/src/ass_style.cpp +++ b/src/ass_style.cpp @@ -40,6 +40,7 @@ #include #include +#include #include #include diff --git a/src/audio_timing_dialogue.cpp b/src/audio_timing_dialogue.cpp index fd15582b15..38b1617c01 100644 --- a/src/audio_timing_dialogue.cpp +++ b/src/audio_timing_dialogue.cpp @@ -39,9 +39,12 @@ #include "selection_controller.h" #include "utils.h" +#include + #include #include + #include namespace { diff --git a/src/base_grid.h b/src/base_grid.h index 2f28a21dcf..017d8b35c4 100644 --- a/src/base_grid.h +++ b/src/base_grid.h @@ -32,6 +32,8 @@ #include #include #include +#include +#include #include namespace agi { diff --git a/src/command/command.h b/src/command/command.h index 8c26e8d4f1..dd672e664c 100644 --- a/src/command/command.h +++ b/src/command/command.h @@ -19,6 +19,7 @@ #pragma once #include +#include #include #include diff --git a/src/dialog_colorpicker.cpp b/src/dialog_colorpicker.cpp index 3430c48bd0..4ba6f7f8c8 100644 --- a/src/dialog_colorpicker.cpp +++ b/src/dialog_colorpicker.cpp @@ -38,6 +38,7 @@ #include +#include #include #include diff --git a/src/frame_main.cpp b/src/frame_main.cpp index 58a8a3d0f5..d20bc44fbf 100644 --- a/src/frame_main.cpp +++ b/src/frame_main.cpp @@ -67,6 +67,7 @@ #include #include #include +#include enum { ID_APP_TIMER_STATUSCLEAR = 12002 diff --git a/src/include/agi_pre.h b/src/include/agi_pre.h index f611c05436..13c09a38f4 100644 --- a/src/include/agi_pre.h +++ b/src/include/agi_pre.h @@ -48,10 +48,6 @@ #define _CRT_SECURE_NO_WARNINGS #endif -#include "../../acconf.h" - -#define WIN32_LEAN_AND_MEAN - // Common C #include #include diff --git a/src/include/agi_pre_c.h b/src/include/agi_pre_c.h index c4d6924f45..c8e6a584bb 100644 --- a/src/include/agi_pre_c.h +++ b/src/include/agi_pre_c.h @@ -27,10 +27,6 @@ // // Aegisub Project http://www.aegisub.org/ -#include "../../acconf.h" - -#define WIN32_LEAN_AND_MEAN - #ifdef _WIN32 #include #include diff --git a/src/main.h b/src/main.h index de65b65da0..35b7be1c96 100644 --- a/src/main.h +++ b/src/main.h @@ -31,6 +31,8 @@ #include "aegisublocale.h" +#include + #ifndef wxUSE_EXCEPTIONS #error wxWidgets is compiled without exceptions support. Aegisub requires exceptions support in wxWidgets to run safely. #endif diff --git a/src/preferences.cpp b/src/preferences.cpp index f299fa06ef..cdaaee8079 100644 --- a/src/preferences.cpp +++ b/src/preferences.cpp @@ -47,6 +47,7 @@ #include #include +#include #include #include #include diff --git a/src/spline_curve.cpp b/src/spline_curve.cpp index b1a799a0f5..8020e5bd30 100644 --- a/src/spline_curve.cpp +++ b/src/spline_curve.cpp @@ -35,6 +35,7 @@ #include "spline_curve.h" #include "utils.h" +#include #include SplineCurve::SplineCurve(Vector2D p1) : p1(p1), type(POINT) { } diff --git a/src/utils.cpp b/src/utils.cpp index 9f63d34c39..6c2aad53c2 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -41,6 +41,7 @@ #ifdef __UNIX__ #include #endif +#include #include #include #include