build: Various cleanup
- Correctly use absolute paths when needed
- Add more/better cflags
- Reduce duplication
- Follow Meson standard formatting
- TODO: The run_command() mess should be fixed in docs
Patrick Griffis
6 years ago
0 | 0 | project ('libcloudproviders', 'c', |
1 | version: '0.1.1', | |
2 | meson_version: '>=0.40.0', | |
3 | license: 'LGPL3+') | |
1 | version: '0.1.1', | |
2 | meson_version: '>=0.40.0', | |
3 | license: 'LGPL3+', | |
4 | default_options: [ | |
5 | 'c_std=gnu99', | |
6 | 'warning_level=2', | |
7 | ] | |
8 | ) | |
4 | 9 | |
5 | add_global_arguments ('-Wno-deprecated-declarations', language:'c') | |
10 | cc = meson.get_compiler('c') | |
6 | 11 | |
7 | glib_ver = '>=2.51.2' | |
12 | test_cflags = [ | |
13 | '-Wno-unused-parameter', | |
14 | '-Wno-missing-field-initializers', | |
15 | '-Wstrict-prototypes', | |
16 | '-Wmissing-prototypes', | |
17 | '-Werror=implicit-function-declaration', | |
18 | '-Werror=pointer-arith', | |
19 | '-Werror=init-self', | |
20 | ['-Werror=format-security','-Werror=format=1'], | |
21 | '-Werror=date-time', | |
22 | ] | |
23 | global_cflags = [] | |
24 | foreach cflag : test_cflags | |
25 | if cc.has_multi_arguments(cflag) | |
26 | global_cflags += cflag | |
27 | endif | |
28 | endforeach | |
29 | add_project_arguments(global_cflags, language: 'c') | |
30 | ||
31 | glib_ver = '>= 2.51.2' | |
8 | 32 | glib = dependency ('glib-2.0', version: glib_ver) |
9 | 33 | gio = dependency ('gio-2.0', version: glib_ver) |
10 | 34 | gio_unix = dependency ('gio-unix-2.0', version: glib_ver) |
11 | 35 | |
36 | add_project_arguments( | |
37 | '-DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_52', | |
38 | '-DGLIB_VERSION_MAX_ALLOWED=GLIB_VERSION_2_52', | |
39 | language: 'c' | |
40 | ) | |
41 | ||
12 | 42 | prefix = get_option ('prefix') |
13 | 43 | libdir = get_option ('libdir') |
44 | libexecdir = get_option ('libexecdir') | |
14 | 45 | bindir = get_option ('bindir') |
15 | 46 | datadir = get_option ('datadir') |
16 | 47 | servicedir = join_paths (datadir, 'dbus-1', 'services') |
17 | 48 | |
18 | 49 | gnome = import('gnome') |
19 | 50 | |
20 | conf = configuration_data () | |
21 | conf.set_quoted ('VERSION', meson.project_version ()) | |
22 | conf.set_quoted ('PACKAGE_VERSION', meson.project_version ()) | |
23 | conf.set_quoted ('GETTEXT_PACKAGE', 'cloudproviders') | |
24 | ||
25 | 51 | subdir ('src') |
26 | 52 | subdir ('test') |
27 | 53 | if get_option ('enable-gtk-doc') |
19 | 19 | libcloudproviders_deps = [glib, gio, gio_unix] |
20 | 20 | |
21 | 21 | generated_sources = [] |
22 | generated_sources += gnome.gdbus_codegen ('cloudprovider-generated', | |
23 | join_paths (meson.source_root (), 'data', 'cloudprovider-dbus.xml'), | |
24 | interface_prefix: 'org.freedesktop.CloudProvider', | |
25 | namespace: 'CloudProvider', | |
26 | object_manager: true) | |
27 | generated_sources += gnome.gdbus_codegen ('cloudprovidermanager-generated', | |
28 | join_paths (meson.source_root (), 'data', 'cloudprovidermanager-dbus.xml'), | |
29 | interface_prefix: 'org.freedesktop.CloudProvider', | |
30 | namespace: 'CloudProvider') | |
22 | generated_sources += gnome.gdbus_codegen( | |
23 | 'cloudprovider-generated', '../data/cloudprovider-dbus.xml', | |
24 | interface_prefix: 'org.freedesktop.CloudProvider', | |
25 | namespace: 'CloudProvider', | |
26 | object_manager: true | |
27 | ) | |
28 | ||
29 | generated_sources += gnome.gdbus_codegen( | |
30 | 'cloudprovidermanager-generated', '../data/cloudprovidermanager-dbus.xml', | |
31 | interface_prefix: 'org.freedesktop.CloudProvider', | |
32 | namespace: 'CloudProvider' | |
33 | ) | |
31 | 34 | |
32 | 35 | libcloudproviders_sources += generated_sources |
33 | 36 | |
34 | 37 | libcloudproviders = shared_library ('cloudproviders', |
35 | libcloudproviders_sources, | |
36 | dependencies: libcloudproviders_deps, | |
37 | version: meson.project_version (), | |
38 | install: true) | |
38 | libcloudproviders_sources, | |
39 | dependencies: libcloudproviders_deps, | |
40 | version: meson.project_version(), | |
41 | install: true | |
42 | ) | |
39 | 43 | |
40 | 44 | install_headers (libcloudproviders_headers, subdir: 'cloudproviders') |
41 | 45 | |
42 | 46 | pkg = import('pkgconfig') |
43 | pkg.generate(libraries : libcloudproviders, | |
44 | subdirs : 'cloudproviders', | |
45 | version : meson.project_version(), | |
46 | name : 'libcloudproviders', | |
47 | filebase: 'cloudproviders', | |
48 | description : 'Cloud providers DBus API library.') | |
47 | pkg.generate( | |
48 | libraries : libcloudproviders, | |
49 | subdirs : 'cloudproviders', | |
50 | version : meson.project_version(), | |
51 | name : 'libcloudproviders', | |
52 | filebase: 'cloudproviders', | |
53 | description : 'Cloud providers DBus API library.' | |
54 | ) | |
49 | 55 | |
50 | libdir = join_paths(get_option('prefix'),get_option('libdir')) | |
51 | libdir = get_option('libdir') | |
52 | libexecdir = get_option ('libexecdir') | |
53 | unitdir = 'lib/systemd/user' | |
56 | unitdir = join_paths(libdir, 'systemd/user') | |
54 | 57 | service_conf = configuration_data() |
55 | service_conf.set('libexecdir', libexecdir) | |
56 | configure_file(input: 'libcloudproviders.service.in', | |
57 | output: 'libcloudproviders.service', | |
58 | configuration: service_conf, | |
59 | install_dir: unitdir) | |
58 | service_conf.set('libexecdir', join_paths(prefix, libexecdir)) | |
59 | configure_file( | |
60 | input: 'libcloudproviders.service.in', | |
61 | output: 'libcloudproviders.service', | |
62 | configuration: service_conf, | |
63 | install_dir: unitdir | |
64 | ) | |
60 | 65 | |
61 | 66 | |
62 | cloudprovidersd_deps = declare_dependency (link_with: libcloudproviders, | |
63 | dependencies: libcloudproviders_deps) | |
67 | libcloudproviders_dep = declare_dependency ( | |
68 | link_with: libcloudproviders, | |
69 | dependencies: libcloudproviders_deps, | |
70 | include_directories: include_directories('.') | |
71 | ) | |
64 | 72 | |
65 | executable('cloudprovidersd', cloudprovidersd_sources, | |
66 | dependencies: cloudprovidersd_deps, | |
67 | install: true, | |
68 | install_dir: libexecdir) | |
73 | executable('cloudprovidersd', | |
74 | cloudprovidersd_sources, | |
75 | dependencies: libcloudproviders_dep, | |
76 | install: true, | |
77 | install_dir: libexecdir | |
78 | ) |
0 | cloudprovidertest_deps = [glib, gio, gio_unix] | |
1 | dep = declare_dependency (link_with: libcloudproviders, | |
2 | include_directories: include_directories('../src/'), | |
3 | dependencies: cloudprovidertest_deps) | |
4 | 0 | |
5 | executable('testcloudproviderserver', 'testcloudproviderserver.c', dependencies: dep, install: false) | |
6 | executable('testcloudproviderclient', 'testcloudproviderclient.c', dependencies: dep, install: false) | |
1 | executable('testcloudproviderserver', 'testcloudproviderserver.c', | |
2 | dependencies: libcloudproviders_dep, | |
3 | ) | |
4 | executable('testcloudproviderclient', 'testcloudproviderclient.c', | |
5 | dependencies: libcloudproviders_dep, | |
6 | ) | |
7 | 7 | |
8 | 8 | service_conf = configuration_data () |
9 | 9 | service_conf.set ('bindir', join_paths (prefix, bindir)) |
10 | configure_file(input: 'org.freedesktop.CloudProviderServerExample.service.in', | |
11 | output: 'org.freedesktop.CloudProviderServerExample.service', | |
12 | configuration: service_conf, | |
13 | install_dir: servicedir) | |
10 | configure_file( | |
11 | input: 'org.freedesktop.CloudProviderServerExample.service.in', | |
12 | output: 'org.freedesktop.CloudProviderServerExample.service', | |
13 | configuration: service_conf, | |
14 | install_dir: servicedir | |
15 | ) | |
14 | 16 | |
15 | 17 | cloudprovidersdata = join_paths (datadir, 'cloud-providers') |
16 | 18 | install_data('org.freedesktop.CloudProviderServerExample.ini', install_dir : cloudprovidersdata) |