## Copyright (C) 2022 Dirk-Jan C. Binnema ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; if not, write to the Free Software Foundation, ## Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ################################################################################ # project setup # project('mu', ['c', 'cpp'], version: '1.8.2', meson_version: '>= 0.52.0', # debian 10 license: 'GPL-3.0-or-later', default_options : [ 'buildtype=debugoptimized', 'warning_level=3', 'c_std=c11', 'cpp_std=c++17' ] ) # installation paths prefixdir = get_option('prefix') bindir = join_paths(prefixdir, get_option('bindir')) datadir = join_paths(prefixdir, get_option('datadir')) mandir = join_paths(prefixdir, get_option('mandir')) infodir = join_paths(prefixdir, get_option('infodir')) ################################################################################ # compilers / flags # extra_flags = [ '-Wno-unused-parameter', '-Wno-cast-function-type', '-Wformat-security', '-Wformat=2', '-Wstack-protector', '-Wno-keyword-macro', # '-Wshadow', '-Wno-switch-enum', '-Wno-#warnings'] if get_option('buildtype') == 'debug' extra_flags += [ '-ggdb', '-fvar-tracking', '-fvar-tracking-assignments'] endif # compilers cc = meson.get_compiler('c') cxx= meson.get_compiler('cpp') # extra arguments, if available foreach extra_arg : extra_flags if cc.has_argument (extra_arg) add_project_arguments([extra_arg], language: 'c') endif if cxx.has_argument (extra_arg) add_project_arguments([extra_arg], language: 'cpp') endif endforeach ################################################################################ # config.h setup # config_h_data=configuration_data() config_h_data.set_quoted('MU_STORE_SCHEMA_VERSION', '465') config_h_data.set_quoted('PACKAGE_VERSION', meson.project_version()) config_h_data.set_quoted('PACKAGE_STRING', meson.project_name() + ' ' + meson.project_version()) config_h_data.set_quoted('VERSION', meson.project_version()) config_h_data.set_quoted('PACKAGE_NAME', meson.project_name()) add_project_arguments(['-DHAVE_CONFIG_H'], language: 'c') add_project_arguments(['-DHAVE_CONFIG_H'], language: 'cpp') config_h_dep=declare_dependency( include_directories: include_directories(['.'])) functions=[ 'setsid' ] foreach f : functions if cc.has_function(f) define = 'HAVE_' + f.underscorify().to_upper() config_h_data.set(define, 1) endif endforeach if cc.has_function('wordexp') config_h_data.set('HAVE_WORDEXP_H',1) endif testmaildir=join_paths(meson.current_source_dir(), 'lib', 'tests') config_h_data.set_quoted('MU_TESTMAILDIR', join_paths(testmaildir, 'testdir')) config_h_data.set_quoted('MU_TESTMAILDIR2', join_paths(testmaildir, 'testdir2')) config_h_data.set_quoted('MU_TESTMAILDIR4', join_paths(testmaildir, 'testdir4')) config_h_data.set_quoted('MU_TESTMAILDIR_CJK', join_paths(testmaildir, 'cjk')) ################################################################################ # hard dependencies # glib_dep = dependency('glib-2.0', version: '>= 2.58') gobject_dep = dependency('gobject-2.0', version: '>= 2.58') gio_dep = dependency('gio-2.0', version: '>= 2.50') gmime_dep = dependency('gmime-3.0', version: '>= 3.2') xapian_dep = dependency('xapian-core', version:'>= 1.4') thread_dep = dependency('threads') # soft dependencies guile_dep = dependency('guile-3.0', required: get_option('guile')) awk=find_program(['gawk', 'awk']) # soft dependencies # emacs -- needed for mu4e compilation emacs=find_program(['emacs'], version: '>=25.3', required:false) if not emacs.found() message('emacs not found; not pre-compiling mu4e sources') endif makeinfo=find_program(['makeinfo'], required:false) if not makeinfo.found() message('makeinfo (texinfo) not found; not building info documentation') endif # readline. annoyingly, macos has an incompatible libedit claiming to be # readline. this is only a dev/debug convenience for the mu4e repl. readline_dep=[] if get_option('readline').enabled() readline_dep = dependency('readline', version:'>= 8.0') config_h_data.set('HAVE_LIBREADLINE', 1) config_h_data.set('HAVE_READLINE_READLINE_H', 1) config_h_data.set('HAVE_READLINE_HISTORY', 1) config_h_data.set('HAVE_READLINE_HISTORY_H', 1) endif ################################################################################ # write out version.texi (for texiinfo builds in mu4e, guile) version_texi_data=configuration_data() version_texi_data.set('VERSION', meson.project_version()) version_texi_data.set('EDITION', meson.project_version()) version_texi_data.set('UPDATED', run_command('date', '+%d %B %Y', check:true).stdout().strip()) version_texi_data.set('UPDATEDMONTH', run_command('date', '+%B %Y', check:true).stdout().strip()) configure_file(input: 'version.texi.in', output: 'version.texi', configuration: version_texi_data) ################################################################################ # install some data files install_data('NEWS.org', install_dir : join_paths(datadir,'doc', 'mu')) ################################################################################ # subdirs subdir('lib') subdir('mu') subdir('man') if emacs.found() subdir('mu4e') endif if not get_option('guile').disabled() and guile_dep.found() config_h_data.set('BUILD_GUILE', 1) config_h_data.set_quoted('GUILE_BINARY', guile_dep.get_pkgconfig_variable('guile')) #message('guile is disabled for now') subdir('guile') endif config_h_data.set_quoted('MU_PROGRAM', mu.full_path()) ################################################################################ ################################################################################ # write-out config.h configure_file(output : 'config.h', configuration : config_h_data)