From cee4c65c989d241befd56a8053671513a8ed082d Mon Sep 17 00:00:00 2001 From: Myaamori Date: Tue, 27 Oct 2020 17:13:11 +0000 Subject: [PATCH] meson: add Boost wrap --- meson.build | 21 ++++- meson_options.txt | 1 + subprojects/boost.wrap | 6 ++ .../boost/libs/chrono/meson.build | 15 ++++ .../boost/libs/filesystem/meson.build | 37 +++++++++ .../boost/libs/locale/meson.build | 78 +++++++++++++++++++ .../boost/libs/program_options/meson.build | 28 +++++++ .../packagefiles/boost/libs/regex/meson.build | 33 ++++++++ .../boost/libs/thread/meson.build | 30 +++++++ subprojects/packagefiles/boost/meson.build | 26 +++++++ 10 files changed, 271 insertions(+), 4 deletions(-) create mode 100644 subprojects/boost.wrap create mode 100644 subprojects/packagefiles/boost/libs/chrono/meson.build create mode 100644 subprojects/packagefiles/boost/libs/filesystem/meson.build create mode 100644 subprojects/packagefiles/boost/libs/locale/meson.build create mode 100644 subprojects/packagefiles/boost/libs/program_options/meson.build create mode 100644 subprojects/packagefiles/boost/libs/regex/meson.build create mode 100644 subprojects/packagefiles/boost/libs/thread/meson.build create mode 100644 subprojects/packagefiles/boost/meson.build diff --git a/meson.build b/meson.build index 3e5301c82..56752902a 100644 --- a/meson.build +++ b/meson.build @@ -61,10 +61,23 @@ deps += iconv_dep deps += dependency('libass', version: '>=0.9.7', fallback: ['libass', 'libass_dep']) -deps += dependency('boost', version: '>=1.50.0', - modules: ['chrono', 'filesystem', 'locale', 'regex', - 'system', 'thread'], - static: get_option('default_library') == 'static') +boost_modules = ['chrono', 'filesystem', 'thread', 'locale', 'regex'] +if not get_option('local_boost') + boost_dep = dependency('boost', version: '>=1.50.0', + modules: boost_modules, + required: cxx.get_id() != 'msvc', + static: get_option('default_library') == 'static') +endif + +if get_option('local_boost') or not boost_dep.found() + boost_dep = [] + boost = subproject('boost') + foreach module: boost_modules + boost_dep += boost.get_variable('boost_' + module + '_dep') + endforeach +endif + +deps += boost_dep if host_machine.system() == 'windows' conf.set('BOOST_USE_WINDOWS_H', '1') endif diff --git a/meson_options.txt b/meson_options.txt index 917aa32db..fa24825cc 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -12,6 +12,7 @@ option('hunspell', type: 'feature', description: 'Hunspell spell checker') option('uchardet', type: 'feature', description: 'uchardet character encoding detection') option('system_luajit', type: 'boolean', value: false, description: 'Force using system luajit') +option('local_boost', type: 'boolean', value: false, description: 'Force using locally compiled Boost') option('icu_path', type: 'string', value: '', description: 'Path to ICU libraries on Windows') option('wx_path', type: 'string', value: '', description: 'Path to wxWidgets libraries on Windows') diff --git a/subprojects/boost.wrap b/subprojects/boost.wrap new file mode 100644 index 000000000..e66c7ff5b --- /dev/null +++ b/subprojects/boost.wrap @@ -0,0 +1,6 @@ +[wrap-file] +directory = boost_1_74_0 +source_url = https://dl.bintray.com/boostorg/release/1.74.0/source/boost_1_74_0.tar.gz +source_filename = boost_1_74_0.tar.gz +source_hash = afff36d392885120bcac079148c177d1f6f7730ec3d47233aa51b0afa4db94a5 +patch_directory = boost diff --git a/subprojects/packagefiles/boost/libs/chrono/meson.build b/subprojects/packagefiles/boost/libs/chrono/meson.build new file mode 100644 index 000000000..b2dfc4d22 --- /dev/null +++ b/subprojects/packagefiles/boost/libs/chrono/meson.build @@ -0,0 +1,15 @@ +chrono_sources = files([ + 'src/chrono.cpp', + 'src/thread_clock.cpp', + 'src/process_cpu_clocks.cpp', +]) + +boost_chrono = library('boost_chrono', chrono_sources, + include_directories: inc, + cpp_args: is_static ? '-DBOOST_All_STATIC_LINK=1' : '-DBOOST_All_DYN_LINK=1', + dependencies: thread_dep) + +boost_chrono_dep = declare_dependency(link_with: boost_chrono, include_directories: inc, + compile_args: [is_static ? '-DBOOST_CHRONO_STATIC_LINK=1' + : '-DBOOST_CHRONO_DYN_LINK=1', + '-DBOOST_ALL_NO_LIB=1']) diff --git a/subprojects/packagefiles/boost/libs/filesystem/meson.build b/subprojects/packagefiles/boost/libs/filesystem/meson.build new file mode 100644 index 000000000..b255d4c97 --- /dev/null +++ b/subprojects/packagefiles/boost/libs/filesystem/meson.build @@ -0,0 +1,37 @@ +filesystem_sources = files([ + 'src/codecvt_error_category.cpp', + 'src/exception.cpp', + 'src/directory.cpp', + 'src/operations.cpp', + 'src/path.cpp', + 'src/path_traits.cpp', + 'src/portability.cpp', + 'src/unique_path.cpp', + 'src/utf8_codecvt_facet.cpp', + 'src/windows_file_codecvt.cpp', +]) + +filesystem_args = ['-DBOOST_FILESYSTEM_SOURCE', + is_static ? '-DBOOST_FILESYSTEM_STATIC_LINK=1' : '-DBOOST_FILESYSTEM_DYN_LINK=1'] + +filesystem_deps = [] +if host_machine.system() == 'windows' + bcrypt_dep = dependency('bcrypt', required: false) + if bcrypt_dep.found() + filesystem_deps += bcrypt_dep + filesystem_args += '-DBOOST_FILESYSTEM_HAS_BCRYPT' + else + filesystem_deps += cpp.find_library('advapi32') + filesystem_args += '-DBOOST_FILESYSTEM_HAS_WINCRYPT' + endif +endif + +boost_filesystem = library('boost_filesystem', filesystem_sources, + include_directories: inc, + cpp_args: filesystem_args, + dependencies: [thread_dep, filesystem_deps]) + +boost_filesystem_dep = declare_dependency(link_with: boost_filesystem, include_directories: inc, + compile_args: [is_static ? '-DBOOST_FILESYSTEM_STATIC_LINK=1' + : '-DBOOST_FILESYSTEM_DYN_LINK=1', + '-DBOOST_ALL_NO_LIB=1']) diff --git a/subprojects/packagefiles/boost/libs/locale/meson.build b/subprojects/packagefiles/boost/libs/locale/meson.build new file mode 100644 index 000000000..6abd3cd1b --- /dev/null +++ b/subprojects/packagefiles/boost/libs/locale/meson.build @@ -0,0 +1,78 @@ +locale_sources = files([ + 'src/encoding/codepage.cpp', + 'src/shared/date_time.cpp', + 'src/shared/format.cpp', + 'src/shared/formatting.cpp', + 'src/shared/generator.cpp', + 'src/shared/ids.cpp', + 'src/shared/localization_backend.cpp', + 'src/shared/message.cpp', + 'src/shared/mo_lambda.cpp', + 'src/util/codecvt_converter.cpp', + 'src/util/default_locale.cpp', + 'src/util/info.cpp', + 'src/util/locale_data.cpp', + # icu + 'src/icu/boundary.cpp', + 'src/icu/codecvt.cpp', + 'src/icu/collator.cpp', + 'src/icu/conversion.cpp', + 'src/icu/date_time.cpp', + 'src/icu/formatter.cpp', + 'src/icu/icu_backend.cpp', + 'src/icu/numeric.cpp', + 'src/icu/time_zone.cpp', + # std - docs say disabled by default on windows and solaris, + # but jamfile seemingly only disables on solaris + 'src/std/codecvt.cpp', + 'src/std/collate.cpp', + 'src/std/converter.cpp', + 'src/std/numeric.cpp', + 'src/std/std_backend.cpp', + # included if using posix, win32 or std backend (ie always) + 'src/util/gregorian.cpp', +]) + +locale_args = ['-DBOOST_THREAD_NO_LIB=1'] +locale_deps = [] + +if not is_static + locale_args += '-DBOOST_LOCALE_DYN_LINK=1' +endif + +if host_machine.system() == 'windows' + locale_sources += files([ + 'src/win32/collate.cpp', + 'src/win32/converter.cpp', + 'src/win32/numeric.cpp', + 'src/win32/win_backend.cpp', + # included on windows/cygwin if std *or* win32 included + 'src/win32/lcid.cpp', + ]) + locale_args += '-DBOOST_LOCALE_NO_POSIX_BACKEND=1' +else + locale_sources += files([ + 'src/posix/collate.cpp', + 'src/posix/converter.cpp', + 'src/posix/numeric.cpp', + 'src/posix/codecvt.cpp', + 'src/posix/posix_backend.cpp', + ]) + locale_args += '-DBOOST_LOCALE_NO_WINAPI_BACKEND=1' +endif + +if not cpp.check_header('iconv.h') + locale_deps += dependency('iconv') +endif +locale_args += '-DBOOST_LOCALE_WITH_ICONV=1' + +locale_deps += icu_deps +locale_args += '-DBOOST_LOCALE_WITH_ICU=1' + +boost_locale = library('boost_locale', locale_sources, + include_directories: inc, + cpp_args: locale_args, + dependencies: [thread_dep, locale_deps, boost_thread_dep]) + +boost_locale_dep = declare_dependency(link_with: boost_locale, include_directories: inc, + compile_args: '-DBOOST_ALL_NO_LIB=1') diff --git a/subprojects/packagefiles/boost/libs/program_options/meson.build b/subprojects/packagefiles/boost/libs/program_options/meson.build new file mode 100644 index 000000000..9ee11eb29 --- /dev/null +++ b/subprojects/packagefiles/boost/libs/program_options/meson.build @@ -0,0 +1,28 @@ +program_options_sources = files([ + 'src/cmdline.cpp', + 'src/config_file.cpp', + 'src/options_description.cpp', + 'src/parsers.cpp', + 'src/variables_map.cpp', + 'src/value_semantic.cpp', + 'src/positional_options.cpp', + 'src/utf8_codecvt_facet.cpp', + 'src/convert.cpp', + 'src/winmain.cpp', + 'src/split.cpp', +]) + +program_options_args = [] +if not is_static + program_options_args += '-DBOOST_PROGRAM_OPTIONS_DYN_LINK=1' +endif + +boost_program_options = library('boost_program_options', program_options_sources, + cpp_args: program_options_args, + include_directories: inc, + dependencies: thread_dep) + +boost_program_options_dep = declare_dependency(link_with: boost_program_options, + include_directories: inc, + compile_args: program_options_args + + ['-DBOOST_ALL_NO_LIB=1']) diff --git a/subprojects/packagefiles/boost/libs/regex/meson.build b/subprojects/packagefiles/boost/libs/regex/meson.build new file mode 100644 index 000000000..f073f33d8 --- /dev/null +++ b/subprojects/packagefiles/boost/libs/regex/meson.build @@ -0,0 +1,33 @@ +regex_sources = files([ + 'src/c_regex_traits.cpp', + 'src/cpp_regex_traits.cpp', + 'src/cregex.cpp', + 'src/fileiter.cpp', + 'src/icu.cpp', + 'src/instances.cpp', + 'src/posix_api.cpp', + 'src/regex.cpp', + 'src/regex_debug.cpp', + 'src/regex_raw_buffer.cpp', + 'src/regex_traits_defaults.cpp', + 'src/static_mutex.cpp', + 'src/w32_regex_traits.cpp', + 'src/wc_regex_traits.cpp', + 'src/wide_posix_api.cpp', + 'src/winstances.cpp', + 'src/usinstances.cpp', +]) + +regex_args = ['-DBOOST_HAS_ICU=1'] + +if not is_static + regex_args += '-DBOOST_REGEX_DYN_LINK=1' +endif + +boost_regex = library('boost_regex', regex_sources, + include_directories: inc, + cpp_args: regex_args, + dependencies: [thread_dep, icu_deps]) + +boost_regex_dep = declare_dependency(link_with: boost_regex, include_directories: inc, + compile_args: '-DBOOST_ALL_NO_LIB=1') diff --git a/subprojects/packagefiles/boost/libs/thread/meson.build b/subprojects/packagefiles/boost/libs/thread/meson.build new file mode 100644 index 000000000..e14d344dd --- /dev/null +++ b/subprojects/packagefiles/boost/libs/thread/meson.build @@ -0,0 +1,30 @@ +thread_args = [is_static ? '-DBOOST_THREAD_BUILD_LIB=1' : '-DBOOST_THREAD_BUILD_DLL=1'] + +if host_machine.system() == 'windows' + thread_sources = files([ + 'src/win32/thread.cpp', + 'src/win32/tss_dll.cpp', + 'src/win32/tss_pe.cpp', + 'src/win32/thread_primitives.cpp', + 'src/future.cpp', + ]) + thread_args += ['-DWIN32_LEAN_AND_MEAN', '-DBOOST_USE_WINDOWS_H', '-DBOOST_THREAD_WIN32', + '-DBOOST_THREAD_USES_CHRONO'] +else + thread_sources = files([ + 'src/pthread/thread.cpp', + 'src/pthread/once.cpp', + 'src/future.cpp', + ]) + thread_args += ['-DBOOST_THREAD_POSIX', '-DBOOST_THREAD_DONT_USE_CHRONO'] +endif + +boost_thread = library('boost_thread', thread_sources, + include_directories: inc, + cpp_args: thread_args, + dependencies: [thread_dep, boost_chrono_dep]) + +boost_thread_dep = declare_dependency(link_with: boost_thread, include_directories: inc, + compile_args: [is_static ? '-DBOOST_THREAD_BUILD_LIB=1' + : '-DBOOST_THREAD_BUILD_DLL=1', + '-DBOOST_ALL_NO_LIB=1']) diff --git a/subprojects/packagefiles/boost/meson.build b/subprojects/packagefiles/boost/meson.build new file mode 100644 index 000000000..a0a9881d8 --- /dev/null +++ b/subprojects/packagefiles/boost/meson.build @@ -0,0 +1,26 @@ +project('boost', 'cpp', + version: '1.74.0', + meson_version: '>=0.55.0') + +cpp = meson.get_compiler('cpp') +thread_dep = dependency('threads') +inc = include_directories('.') +is_static = get_option('default_library') == 'static' + +add_project_arguments('-DBOOST_ALL_NO_LIB=1', language: 'cpp') + +if get_option('buildtype').startswith('release') + add_project_arguments('-DNDEBUG', language: 'cpp') +endif + +if host_machine.system() == 'windows' + add_project_arguments('-DWIN32', language: 'cpp') +endif + +icu_deps = [dependency('icu-uc'), + dependency('icu-i18n')] + +modules = ['chrono', 'thread', 'filesystem', 'locale', 'regex', 'program_options'] +foreach module: modules + subdir('libs/' + module) +endforeach