diff options
63 files changed, 2836 insertions, 6 deletions
diff --git a/.gitignore b/.gitignore index a3b31cb7b..f7c26f2cc 100644 --- a/.gitignore +++ b/.gitignore @@ -14,6 +14,7 @@ .deps .libs config.* +!config.h.meson.in ABOUT-NLS aclocal.m4 autom4te.cache diff --git a/config.h.meson.in b/config.h.meson.in new file mode 100644 index 000000000..4294d8477 --- /dev/null +++ b/config.h.meson.in @@ -0,0 +1,139 @@ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* Extras added manually */ +#mesondefine LOCALEDIR +#mesondefine SHAREDIR +#mesondefine TRACKER_MINERS_DIR +#mesondefine TRACKER_UI_DIR + +/* Define if we disable the journal */ +#mesondefine DISABLE_JOURNAL + +/* Include functional tests in the installation */ +#mesondefine DIST_FUNCTIONAL_TESTS + +/* Use new evolution-shell API */ +#mesondefine EVOLUTION_SHELL_2_91 + +/* Use new evolution-shell API */ +#mesondefine EVOLUTION_SHELL_3_2 + +/* Use new evolution-shell API */ +#mesondefine EVOLUTION_SHELL_3_3_5 + +/* Define the gettext package to be used */ +#mesondefine GETTEXT_PACKAGE + +/* Define that GStreamer Discoverer should be used */ +#mesondefine GSTREAMER_BACKEND_DISCOVERER + +/* Define that GUPnP-DLNA should be used */ +#mesondefine GSTREAMER_BACKEND_GUPNP_DLNA + +/* Guarantee existence of some metadata */ +#mesondefine GUARANTEE_METADATA + +/* Defined if Sqlite has FTS5 compiled in */ +#mesondefine HAVE_BUILTIN_FTS + +/* Enca language detection aid */ +#mesondefine HAVE_ENCA + +/* Define if we have exempi */ +#mesondefine HAVE_EXEMPI + +/* Define to 1 if you have the `getline' function. */ +#mesondefine HAVE_GETLINE + +/* Define if we have GStreamer */ +#mesondefine HAVE_GSTREAMER + +/* Define if we have HAL */ +#mesondefine HAVE_HAL + +/* Define if we have libcue */ +#mesondefine HAVE_LIBCUE + +/* Define if we have libcue 2 or up */ +#mesondefine HAVE_LIBCUE2 + +/* Define if we have libexif */ +#mesondefine HAVE_LIBEXIF + +/* libicu Unicode support library */ +#mesondefine HAVE_LIBICU + +/* ICU language detection aid */ +#mesondefine HAVE_LIBICU_CHARSET_DETECTION + +/* Define if we have libiptcdata */ +#mesondefine HAVE_LIBIPTCDATA + +/* Define if we have libmediaart */ +#mesondefine HAVE_LIBMEDIAART + +/* Define if we have libstemmer */ +#mesondefine HAVE_LIBSTEMMER + +/* libunistring Unicode support library */ +#mesondefine HAVE_LIBUNISTRING + +/* Define if we have meegotouch */ +#mesondefine HAVE_MEEGOTOUCH + +/* Define if we have NetworkManager for network status detection */ +#mesondefine HAVE_NETWORK_MANAGER + +/* Define to 1 if you have the `posix_fadvise' function. */ +#mesondefine HAVE_POSIX_FADVISE + +/* Define to 1 if you have the `statvfs64' function. */ +#mesondefine HAVE_STATVFS64 + +/* Define to 1 if you have the `strnlen' function. */ +#mesondefine HAVE_STRNLEN + +/* Define to 0 if tracker FTS is not compiled */ +#mesondefine HAVE_TRACKER_FTS + +/* Define if we have UPOWER */ +#mesondefine HAVE_UPOWER + +/* Define to 1 if you have the `up_client_get_on_low_battery' function. */ +#mesondefine HAVE_UP_CLIENT_GET_ON_LOW_BATTERY + +/* Define to the address where bug reports for this package should be sent. */ +#mesondefine PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#mesondefine PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#mesondefine PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#mesondefine PACKAGE_TARNAME + +/* Define to the home page for this package. */ +#mesondefine PACKAGE_URL + +/* Define to the version of this package. */ +#mesondefine PACKAGE_VERSION + +/* Define to the Tracker binary age */ +#mesondefine TRACKER_BINARY_AGE + +/* Define to the Tracker interface age */ +#mesondefine TRACKER_INTERFACE_AGE + +/* Define to the Tracker major version */ +#mesondefine TRACKER_MAJOR_VERSION + +/* Define to the Tracker micro version */ +#mesondefine TRACKER_MICRO_VERSION + +/* Define to the Tracker minor version */ +#mesondefine TRACKER_MINOR_VERSION + +/* Unzip ps.gz files */ +#mesondefine USING_UNZIPPSFILES diff --git a/docs/manpages/meson.build b/docs/manpages/meson.build new file mode 100644 index 000000000..50317f7c4 --- /dev/null +++ b/docs/manpages/meson.build @@ -0,0 +1,25 @@ +install_man('tracker-extract.1') +install_man('tracker-info.1') +install_man('tracker-miner-fs.1') +install_man('tracker-daemon.1') +install_man('tracker-search.1') +install_man('tracker-sparql.1') +install_man('tracker-sql.1') +install_man('tracker-status.1') +install_man('tracker-store.1') +install_man('tracker-tag.1') +install_man('tracker-reset.1') +install_man('tracker-index.1') +install_man('tracker-writeback.1') + +if have_tracker_miner_rss + install_man('tracker-miner-rss.1') +endif + +if have_tracker_needle + install_man('tracker-needle.1') +endif + +if have_tracker_preferences + install_man('tracker-preferences.1') +endif diff --git a/docs/meson.build b/docs/meson.build new file mode 100644 index 000000000..76e59797e --- /dev/null +++ b/docs/meson.build @@ -0,0 +1,3 @@ +subdir('tools') +subdir('manpages') +subdir('reference') diff --git a/docs/reference/libtracker-control/meson.build b/docs/reference/libtracker-control/meson.build new file mode 100644 index 000000000..b7cca19f4 --- /dev/null +++ b/docs/reference/libtracker-control/meson.build @@ -0,0 +1,8 @@ +version_xml = configure_file(input: 'version.xml.in', + output: 'version.xml', + configuration: conf) + +gnome.gtkdoc('libtracker-control', + src_dir: 'src/libtracker-control', + main_sgml: 'libtracker-control-docs.sgml', + install: true) diff --git a/docs/reference/libtracker-miner/meson.build b/docs/reference/libtracker-miner/meson.build new file mode 100644 index 000000000..7af99720c --- /dev/null +++ b/docs/reference/libtracker-miner/meson.build @@ -0,0 +1,9 @@ +version_xml = configure_file(input: 'version.xml.in', + output: 'version.xml', + configuration: conf) + +gnome.gtkdoc('libtracker-miner', + src_dir: 'src/libtracker-miner', + main_sgml: 'libtracker-miner-docs.sgml', + content_files: 'overview.sgml', + install: true) diff --git a/docs/reference/libtracker-sparql/meson.build b/docs/reference/libtracker-sparql/meson.build new file mode 100644 index 000000000..b22df85de --- /dev/null +++ b/docs/reference/libtracker-sparql/meson.build @@ -0,0 +1,9 @@ +version_xml = configure_file(input: 'version.xml.in', + output: 'version.xml', + configuration: conf) + +gnome.gtkdoc('libtracker-sparql', + src_dir: 'src/libtracker-sparql', + main_sgml: 'libtracker-sparql-docs.sgml', + content_files: ['overview.sgml', 'examples.sgml'], + install: true) diff --git a/docs/reference/meson.build b/docs/reference/meson.build new file mode 100644 index 000000000..b87eb61ac --- /dev/null +++ b/docs/reference/meson.build @@ -0,0 +1,5 @@ +subdir('libtracker-control') +subdir('libtracker-miner') +subdir('libtracker-sparql') + +subdir('ontology') diff --git a/docs/reference/ontology/meson.build b/docs/reference/ontology/meson.build new file mode 100644 index 000000000..6c1b9d316 --- /dev/null +++ b/docs/reference/ontology/meson.build @@ -0,0 +1,37 @@ +version_xml = configure_file(input: 'version.xml.in', + output: 'version.xml', + configuration: conf) + + +#for f in `find $ONTOLOGIES_DATA_DIR -name "*.description"` ; do +# # ../../src/ontologies/XX-aaa.description -> PREFIX=aaa +# TMPNAME=${f%.description} +# PREFIX=${TMPNAME#*-} +# echo "- Generating $PREFIX documentation" +# +# $TTL2SGML -d $f -o $BUILD_DIR/$PREFIX-ontology.xml \ +# -e $ONTOLOGIES_INFO_DIR/$PREFIX/explanation.xml + + +gen_doc = meson.source_root() + '/docs/tools/gen-doc.sh' +generated = custom_target('ontology-doc-generated', + output: 'gen-doc.stamp', + command: [gen_doc, ttl2sgml, ttlresource2sgml, + meson.source_root() + '/src/ontologies', + meson.source_root() + '/docs/ontologies', + join_paths(meson.current_build_dir(), 'xml/')], + depends: [ttl2sgml, ttlresource2sgml], + # FIXME: this shouldn't be necessary, but currently the 'dependencies' + # parameter to gnome.gtkdoc() doesn't actually trigger building of custom + # targets. + build_always: true +) + +gnome.gtkdoc('ontology', + src_dir: include_directories('.'), + main_sgml: 'ontology-docs.sgml', + # FIXME: passing 'generated' here has no effect; the gtkdoc support in + # Meson actually only uses this parameter for building and linking the + # GObject Introspection scanner right now. + dependencies: generated, + install: true) diff --git a/docs/tools/gen-doc.sh b/docs/tools/gen-doc.sh index 3405988c7..10e06342e 100755 --- a/docs/tools/gen-doc.sh +++ b/docs/tools/gen-doc.sh @@ -19,6 +19,8 @@ # 02110-1301, USA. # +set -e + if [ $# -lt 5 ]; then echo "Insufficient arguments provided" echo "Usage: $0 <ttl2sgml> <ttlres2sgml> <ontology-data-dir> <ontology-info-dir> <build-dir>" @@ -31,14 +33,16 @@ ONTOLOGIES_DATA_DIR=$3 ONTOLOGIES_INFO_DIR=$4 BUILD_DIR=$5 -echo "Building class documentation..." +if [ ! -e $BUILD_DIR ]; then + mkdir -p $BUILD_DIR +fi + $TTLRES2SGML -d $ONTOLOGIES_DATA_DIR -o $BUILD_DIR for f in `find $ONTOLOGIES_DATA_DIR -name "*.description"` ; do # ../../src/ontologies/XX-aaa.description -> PREFIX=aaa TMPNAME=${f%.description} PREFIX=${TMPNAME#*-} - echo "- Generating $PREFIX documentation" $TTL2SGML -d $f -o $BUILD_DIR/$PREFIX-ontology.xml \ -e $ONTOLOGIES_INFO_DIR/$PREFIX/explanation.xml diff --git a/docs/tools/meson.build b/docs/tools/meson.build new file mode 100644 index 000000000..cf24f0ee9 --- /dev/null +++ b/docs/tools/meson.build @@ -0,0 +1,18 @@ +# These tools are used for generating the ontologies documentation. + +ttl_loader_files = [ + 'ttl_loader.c', + 'ttl_model.c', + 'ttl_sgml.c', + 'qname.c', +] + +ttl2sgml = executable('ttl2sgml', + ttl_loader_files, 'ttl2sgml.c', + dependencies: [tracker_data_dep, tracker_sparql_dep], + c_args: ['-DTRACKER_COMPILATION']) + +ttlresource2sgml = executable('ttlresource2sgml', + ttl_loader_files, 'ttlresource2sgml.c', + dependencies: [tracker_data_dep, tracker_sparql_dep], + c_args: ['-DTRACKER_COMPILATION']) diff --git a/examples/libtracker-miner/meson.build b/examples/libtracker-miner/meson.build new file mode 100644 index 000000000..460b9c732 --- /dev/null +++ b/examples/libtracker-miner/meson.build @@ -0,0 +1,7 @@ +sources = [ + 'tracker-miner-test.c', + 'tracker-main.c'] + +executable('tracker-miner-test', sources, + dependencies: [tracker_common_dep, tracker_miner_dep, tracker_sparql_dep] +) diff --git a/examples/libtracker-sparql/meson.build b/examples/libtracker-sparql/meson.build new file mode 100644 index 000000000..6e481792f --- /dev/null +++ b/examples/libtracker-sparql/meson.build @@ -0,0 +1,7 @@ +executable('async-connection', 'async-connection.c', + dependencies: [tracker_common_dep, tracker_sparql_dep] +) + +executable('class-signal', 'class-signal.c', + dependencies: [tracker_common_dep, tracker_sparql_dep] +) diff --git a/examples/meson.build b/examples/meson.build new file mode 100644 index 000000000..6ab29f9c5 --- /dev/null +++ b/examples/meson.build @@ -0,0 +1,2 @@ +subdir('libtracker-miner') +subdir('libtracker-sparql') diff --git a/meson.build b/meson.build new file mode 100644 index 000000000..703351dd5 --- /dev/null +++ b/meson.build @@ -0,0 +1,634 @@ +project('tracker', 'c', 'vala', 'cpp', version: '1.13.0') + +gnome = import('gnome') +i18n = import('i18n') +cc = meson.get_compiler('c') + +# This is the X.Y used in -llibtracker-FOO-X.Y +tracker_api_version = '1.0' + +glib_required = '2.40.0' + +# 3.6.11 for sqlite_backup API +# 3.6.16 to fix test failures +# 3.6.17 for shared cache mode with virtual tables +# 3.7.0 for WAL +# 3.7.9 for FTS4 content= support +sqlite_required = '3.7.9' + +avcodec = dependency('libavcodec', version: '>= 0.8.4', required: false) +avformat = dependency('libavformat', version: '>= 0.8.4', required: false) +avutil = dependency('libavutil', version: '>= 0.8.4', required: false) +cairo = dependency('cairo', version: '> 1.0') +camel = dependency('camel-1.2', version: '> 2.32.0', required: false) +dbus = dependency('dbus-1', version: '> 1.3.1') +eds = dependency('evolution-data-server-1.2', version: '> 2.32.0', required: false) +evo_plugin = dependency('evolution-plugin-3.0', required: false) +evo_shell = dependency('evolution-shell-3.0', version: '> 3.1', required: false) +exempi = dependency('exempi-2.0', version: '> 2.1.0', required: false) +flac = dependency('flac', version: '> 1.2.1', required: false) +gio = dependency('gio-2.0', version: '>' + glib_required) +gio_unix = dependency('gio-unix-2.0', version: '>' + glib_required) +glib = dependency('glib-2.0', version: '>' + glib_required) +gmodule = dependency('gmodule-2.0', version: '>' + glib_required) +gobject = dependency('gobject-2.0', version: '>' + glib_required) +gstreamer = dependency('gstreamer-1.0', required: false) +gstreamer_pbutils = dependency('gstreamer-pbutils-1.0', required: false) +gstreamer_tag = dependency('gstreamer-tag-1.0', required: false) +gtk3 = dependency('gtk+-3.0', version: '> 3.0.0', required: false) +gupnp_dlna = dependency('gupnp-dlna-2.0', version: '> 0.9.4', required: false) +gupnp_dlna_gst = dependency('gupnp-dlna-gst-2.0', version: '> 0.9.4', required: false) +icu_i18n = dependency('icu-i18n', version: '> 4.8.1.1', required: false) +icu_uc = dependency('icu-uc', version: '> 4.8.1.1', required: false) +json_glib = dependency('json-glib-1.0', version: '>= 1.0', required: true) +libcue = dependency('libcue', required: false) +libemail_utils = dependency('libemail-utils', required: false) +libemail_engine = dependency('libemail-engine', required: false) +libexif = dependency('libexif', version: '> 0.6', required: false) +libgrss = dependency('libgrss', version: '> 0.7', required: false) +libgsf = dependency('libgsf-1', version: '> 1.14.24', required: false) +libgxps = dependency('libgxps', required: false) +libiptcdata = dependency('libiptcdata', required: false) +libmediaart = dependency('libmediaart', version: '> 1.9.0', required: false) +libosinfo = dependency('libosinfo', version: '> 0.2.9', required: false) +libpng = dependency('libpng', version: '> 0.89', required: false) +libsoup = dependency('libsoup-2.4', version: '> 2.40', required: true) +libtiff = dependency('libtiff-4', required: false) +libxml2 = dependency('libxml-2.0', version: '> 2.6') +libvorbis = dependency('vorbisfile', version: '> 0.22') +meegotouch = dependency('meegotouch', version: '> 0.20', required: false) +nautilus_extension = dependency('libnautilus-extension', required: false) +network_manager = dependency('libnm-glib', version: '> 0.8', required: false) +poppler = dependency('poppler-glib', version: '> 0.16.0', required: false) +sqlite = dependency('sqlite3', version: '>' + sqlite_required) +taglib = dependency('taglib_c', version: '> 1.6', required: false) +totem_plparser = dependency('totem-plparser', required: false) +upower = dependency('libupower-glib', version: '> 0.9.0', required: false) +zlib = dependency('zlib') + +libgif = cc.find_library('libgif', required: false) +libjpeg = cc.find_library('libjpeg', required: false) +libmath = cc.find_library('m') + +# FIXME: here we work around a quirk todo with Meson and Vala: the 'uuid' +# pkg-config component corresponds to 'libuuid.vapi', but Meson assumes that +# .vapi name always matches pkg-config name, and will add `--pkg uuid` to the +# Vala commandline. By finding 'uuid' using find_library() instead, we get +# a dependency object back that won't cause any `--pkg` arguments to be added +# to the Vala commandline, but still works as expected for C code. +uuid = cc.find_library('uuid') + +# There are various gchar vs. unsigned char warnings that occur in extract +# modules, it's not worth adding casts everywhere so we disable the warning. +add_project_arguments('-Wno-pointer-sign', language: 'c') + +enable_fts = get_option('fts') +enable_extract = get_option('extract') +enable_writeback = get_option('writeback') + +################################################################## +# Check for libtracker-common, make sure libstemmer exists +################################################################## + +have_libstemmer = false +if get_option('stemmer') != 'no' + stemmer = cc.find_library('stemmer') + if stemmer.found() + have_libstemmer = true + elif get_option('stemmer') == 'yes' + error('stemmer support explicitly requested, but stemmer library couldn\'t be found') + endif +endif + +################################################################## +# Check for tracker-fts, allow disabling FTS support +################################################################## + +if enable_fts + sqlite3_builtin_fts5_test = ''' + #include <sqlite3.h> + sqlite3 *db; + int rc; + rc = sqlite3_open(":memory:", &db); + if (rc!=SQLITE_OK) return -1; + rc = sqlite3_exec(db, "create table a(text)", 0, 0, 0); + if (rc!=SQLITE_OK) return -1; + rc = sqlite3_exec(db, "create virtual table t using fts5(content='a',text)", 0, 0, 0); + if (rc!=SQLITE_OK) return -1; + ''' + + sqlite3_has_builtin_fts5 = cc.compiles(sqlite3_builtin_fts5_test, + name: 'sqlite3 has builtin FTS5 module') +endif + +################################################################## +# Check for libtracker-common: battery/mains power detection +# +# By default, AUTO with this order of preference: +# 1) upower +# 2) hal +################################################################## + +have_hal = false +battery_detection_library_name = '' + +if upower.found() + if get_option('battery_detection') == 'auto' or get_option('battery_detection') == 'upower' + battery_detection_library = upower + battery_detection_library_name = 'upower' + endif +elif get_option('battery_detection') == 'upower' + error('upower explicitly requested, but upower library was not found') +endif + +if battery_detection_library_name == '' + hal = dependency('hal', version: '> 0.5', required: false) + + if hal.found() + battery_detection_library = hal + battery_detection_library_name = 'hal' + elif get_option('battery_detection') == 'hal' + error('HAL explicitly requested, but not found') + else + battery_detection_library_name = '(none)' + endif +endif + +################################################################## +# Check for libtracker-data and libtracker-fts: Unicode support +# +# By default, AUTO with this order of preference: +# 1) libunistring +# 2) libicu +################################################################## + +have_libicu = false +unicode_library_name = '' + +if icu_i18n.found() and icu_uc.found() + have_libicu = true +endif + +if have_libicu + if get_option('unicode_support') == 'auto' or get_option('unicode_support') == 'icu' + unicode_library = declare_dependency( + dependencies: [icu_uc, icu_i18n] + ) + unicode_library_name = 'icu' + endif +elif get_option('unicode_support') == 'icu' + error('libicu explicitly requested, but icu-i18n and icu-uc libraries were not found') +endif + +if unicode_library_name == '' + libunistring = cc.find_library('libunistring', required: false) + + if libunistring.found() + unicode_library = libunistring + unicode_library_name = 'unistring' + elif get_option('unicode_support') == 'unistring' + error('libunistring explicitly requested, but not found') + else + error('Neither libicu or libunistring were found for Unicode support.') + endif +endif + +#################################################################### +# Check for tracker-miner-fs: meegotouch, for MeeGo desktop files +#################################################################### + +have_meegotouch = false +if get_option('meegotouch') != 'no' + meegotouch = dependency('meegotouch', version: '>= 0.20', required: false) + + if meegotouch.found() + have_meegotouch = true + elif get_option('meegotouch') == 'yes' + error('meegotouch support explicitly requested, but meegotouch library couldn\'t be found') + endif +endif + +#################################################################### +# Check for tracker-miner-evolution +#################################################################### + +if camel.found() and eds.found() and evo_plugin.found() and evo_shell.found() and libemail_utils.found() and libemail_engine.found() + have_tracker_miner_evolution = true + tracker_miner_evolution_install_dir = evo_plugin.get_variable('plugindir') +else + have_tracker_miner_evolution = false + tracker_miner_evolution_install_dir = '' +endif + +#################################################################### +# Check for tracker-miner-thunderbird +#################################################################### + +thunderbird = find_program('thunderbird', required: false) +if thunderbird.found() + thunderbird_version = run_command(thunderbird, '--version').stdout().strip().split()[1] + + message('Found Mozilla Thunderbird email client version ' + thunderbird_version) + + have_tracker_miner_thunderbird = true + tracker_miner_thunderbird_install_dir = join_paths(get_option('prefix'), 'lib', 'thunderbird-' + thunderbird_version, 'extensions') +else + have_tracker_miner_thunderbird = false + tracker_miner_thunderbird_install_dir = '' +endif + +#################################################################### +# Check for tracker-miner-firefox +#################################################################### + +firefox = find_program('firefox', required: false) +if firefox.found() + firefox_version = run_command(firefox, '--version').stdout().strip().split()[2] + + message('Found Mozilla Firefox web browser version ' + firefox_version) + + have_tracker_miner_firefox = true + tracker_miner_firefox_install_dir = join_paths(get_option('prefix'), 'lib', 'firefox-' + firefox_version, 'extensions') +else + have_tracker_miner_firefox = false + tracker_miner_firefox_install_dir = '' +endif + +#################################################################### +# Check for nautilus extension +#################################################################### + +if nautilus_extension.found() + nautilus_extension = dependency('libnautilus-extension', required: true) + tracker_nautilus_extension_install_dir = nautilus_extension.get_pkgconfig_variable('extensiondir') +else + tracker_nautilus_extension_install_dir = '' +endif + +#################################################################### +# This section is for tracker-extract dependencies +#################################################################### + +########################################################################## +# Check for tracker-extract: icu or enca for detecting Cyrillic in MP3s +# +# By default, AUTO with this order of preference: +# 1) icu +# 2) enca +########################################################################## + +charset_library_name = 'none' + +if have_libicu + if get_option('charset_detection') == 'auto' or get_option('charset_detection') == 'icu' + charset_library = declare_dependency( + dependencies: [icu_uc, icu_i18n] + ) + charset_library_name = 'icu' + endif +else + if get_option('charset_detection') == 'icu' + error('libicu requested for character set detection, but it was not found') + endif +endif + +if charset_library_name == 'none' and get_option('charset_library') != 'none' + enca = dependency('enca', version: '>= 1.9', required: false) + + if enca.found() + charset_library = enca + charset_library_name = 'enca' + elif get_option('enca') == 'yes' + error('enca support explicitly requested, but enca couldn\'t be found') + endif +endif + +#################################################################### +# Check for tracker-extract: gstreamer/etc +#################################################################### + +generic_media_handler = [] +generic_media_handler_name = 'none' + +if get_option('generic_media_extractor') == 'auto' + if gstreamer.found() and gstreamer_tag.found() + generic_media_handler = [gstreamer, gstreamer_tag] + generic_media_handler_name = 'gstreamer' + elif avcodec.found() and avformat.found() and avutil.found() + generic_media_handler = [avcodec, avformat, avutil] + generic_media_handler_name = 'libav' + else + generic_media_handler_name = 'none' + generic_media_handler = [] + endif +elif get_option('generic_media_extractor') == 'gstreamer' + if gstreamer.found() and gstreamer_tag.found() + generic_media_handler = [gstreamer, gstreamer_tag] + generic_media_handler_name = 'gstreamer' + else + error('GStreamer media handler was enabled but required GStreamer libraries were not found') + endif +elif get_option('generic_media_extractor') == 'libav' + if avcodec.found() and avformat.found() and avutil.found() + generic_media_handler = [avcodec, avformat, avutil] + generic_media_handler_name = 'libav' + else + error('libav media handler was enabled but required libav libraries were not found') + endif +endif + +########################################################################### +# Check for gstreamer backend: tagreadbin/decodebin2/discoverer/gupnp-dlna +########################################################################### + +gstreamer_backend_name = '' + +if generic_media_handler_name == 'gstreamer' + if get_option('gstreamer_backend') == 'discoverer' + if gstreamer_pbutils.found() + gstreamer_backend_name = 'Discoverer' + else + error('GStreamer Discoverer backend requires GStreamer pbutils library') + endif + elif get_option('gstreamer_backend') == 'gupnp' + if gupnp_dlna.found() and gupnp_dlna_gst.found() + gstreamer_backend_name = 'GUPnP-DNLA' + else + error('GStreamer GUPnP-DNLA backend requires the gupNp and gupnp-gst libraries') + endif + endif +endif + +#################################################################### +# D-Bus service files +#################################################################### + +if get_option('dbus_services') == '' + dbus_services_dir = dbus.get_pkgconfig_variable('session_bus_services_dir') +else + dbus_services_dir = get_option('dbus_services') +endif + +#################################################################### +# systemd user services +#################################################################### + +install_systemd_user_services = false +if get_option('systemd_user_services') == 'yes' or get_option('systemd_user_services') == 'auto' + systemd = dependency('systemd', required: false) + if systemd.found() + systemd_user_services_dir = systemd.get_pkgconfig_variable('systemduserunitdir') + else + systemd_user_services_dir = join_paths(get_option('libdir'), 'systemd', 'user') + endif + install_systemd_user_services = true +elif get_option('systemd_user_services') == 'no' or get_option('systemd_user_services') == '' + install_systemd_user_services = false + systemd_user_services_dir = '(disabled)' +else + install_systemd_user_services = true + systemd_user_services_dir = get_option('systemd_user_services') +endif + +#################################################################### +# bash-completion +#################################################################### + +install_bash_completion = false +if get_option('bash_completion') == 'yes' or get_option('bash_completion') == 'auto' + bash_completion_package = dependency('bash-completion', required: false) + if bash_completion_package.found() + bash_completion_dir = bash_completion_package.get_variable('completionsdir') + else + bash_completion_dir = join_paths(get_option('prefix'), get_option('datadir'), 'bash-completion', 'completions') + endif + install_bash_completion = true +elif get_option('bash_completion') == 'no' or get_option('bash_completion') == '' + install_bash_completion = false + bash_completion_dir = '(disabled)' +else + install_bash_completion = true + bash_completion_dir = get_option('bash_completion') +endif + +tracker_major_version = meson.project_version().split('.')[0].to_int() +tracker_minor_version = meson.project_version().split('.')[1].to_int() +tracker_micro_version = meson.project_version().split('.')[2].to_int() + +conf = configuration_data() + +# Config that goes in config.h +conf.set('DISABLE_JOURNAL', get_option('journal') == false) +conf.set('USING_UNZIPPSFILES', get_option('unzip_ps_gz_files') == false) + +conf.set('HAVE_TRACKER_EXTRACT', enable_extract) +conf.set10('HAVE_TRACKER_FTS', enable_fts) +conf.set('HAVE_TRACKER_WRITEBACK', enable_writeback) + +conf.set('HAVE_BUILTIN_FTS', sqlite3_has_builtin_fts5) +conf.set('HAVE_ENCA', charset_library_name == 'enca') +conf.set('HAVE_EXEMPI', exempi.found()) +conf.set('HAVE_GSTREAMER', generic_media_handler_name == 'gstreamer') +conf.set('GSTREAMER_BACKEND_DISCOVERER', gstreamer_backend_name == 'Discoverer') +conf.set('GSTREAMER_BACKEND_GUPNP_DLNA', gstreamer_backend_name == 'GUPnP-DNLA') +conf.set('HAVE_HAL', battery_detection_library_name == 'hal') +conf.set('HAVE_LIBCUE', libcue.found()) +conf.set('HAVE_LIBCUE2', libcue.version() >= '2.0.0') +conf.set10('HAVE_LIBICU', unicode_library_name == 'icu') +conf.set('HAVE_LIBICU_CHARSET_DETECTION', charset_library_name == 'icu') +conf.set('HAVE_LIBEXIF', libexif.found()) +conf.set('HAVE_LIBIPTCDATA', libiptcdata.found()) +conf.set('HAVE_LIBMEDIAART', libmediaart.found()) +conf.set('HAVE_LIBSTEMMER', have_libstemmer) +conf.set('HAVE_LIBUNISTRING', unicode_library_name == 'unistring') +conf.set('HAVE_MEEGOTOUCH', have_meegotouch) +conf.set('HAVE_NETWORK_MANAGER', network_manager.found()) +conf.set('HAVE_UPOWER', battery_detection_library_name == 'upower') + +conf.set('HAVE_GETLINE', cc.has_function('getline', prefix : '#include <stdio.h>')) +conf.set('HAVE_POSIX_FADVISE', cc.has_function('posix_fadvise', prefix : '#include <fcntl.h>')) +conf.set('HAVE_STATVFS64', cc.has_header_symbol('sys/statvfs.h', 'statvfs64', args: '-D_LARGEFILE64_SOURCE')) +conf.set('HAVE_STRNLEN', cc.has_function('strnlen', prefix : '#include <string.h>')) + +conf.set('LOCALEDIR', '"@0@/@1@"'.format(get_option('prefix'), get_option('localedir'))) +conf.set('SHAREDIR', '"@0@/@1@"'.format(get_option('prefix'), get_option('datadir'))) +conf.set('TRACKER_MINERS_DIR', '"@0@/@1@/tracker/miners"'.format(get_option('prefix'), get_option('datadir'))) +conf.set('TRACKER_UI_DIR', '"@0@/@1@/tracker/"'.format(get_option('prefix'), get_option('datadir'))) + +conf.set('GETTEXT_PACKAGE', '"tracker"') +conf.set('PACKAGE_VERSION', '"@0@"'.format(meson.project_version())) +conf.set('TRACKER_VERSION', '"@0@"'.format(meson.project_version())) +conf.set('TRACKER_MAJOR_VERSION', tracker_major_version) +conf.set('TRACKER_MINOR_VERSION', tracker_minor_version) +conf.set('TRACKER_MICRO_VERSION', tracker_micro_version) +conf.set('TRACKER_INTERFACE_AGE', 0) +conf.set('TRACKER_BINARY_AGE', 100 * tracker_minor_version + tracker_micro_version) + +# Config that goes in some other generated files (.desktop, .pc, etc) +conf.set('exec_prefix', get_option('prefix')) +conf.set('includedir', join_paths(get_option('prefix'), get_option('includedir'))) +conf.set('libdir', join_paths(get_option('prefix'), get_option('libdir'))) +conf.set('libexecdir', join_paths(get_option('prefix'), get_option('libexecdir'))) +conf.set('prefix', get_option('prefix')) +conf.set('LIBTRACKER_MINER_PC_REQUIRES', 'libmediaart-2.0') +conf.set('TRACKER_API_VERSION', '1.0') +conf.set('VERSION', meson.project_version()) + +configure_file(input: 'config.h.meson.in', + output: 'config.h', + configuration: conf) + +# Needed for O_NOATIME, and probably other stuff. +add_global_arguments('-D_GNU_SOURCE', language: 'c') +# Needed for statvfs64, and probably other stuff +add_global_arguments('-D_LARGEFILE64_SOURCE', language: 'c') + +have_tracker_miner_fs = true +have_tracker_miner_apps = true +have_tracker_miner_user_guides = true +have_tracker_miner_rss = true +have_tracker_miner_firefox = true +have_tracker_extract = true +have_tracker_writeback = true +have_tracker_needle = true +have_tracker_preferences = true + +configinc = include_directories('./') +srcinc = include_directories('src/') + +tracker_internal_libs_dir = join_paths(get_option('prefix'), get_option('libdir'), 'tracker-' + tracker_api_version) + +tracker_extract_modules_dir = join_paths(get_option('prefix'), get_option('libdir'), 'tracker-@0@/extract-modules'.format(tracker_api_version)) +# NOTE: We don't use ${TRACKER_API_VERSION} because other content like +# the ontology is installed to the same location. +tracker_extract_rules_dir = join_paths(get_option('prefix'), get_option('datadir'), 'tracker/extract-rules') +tracker_miner_services_dir = join_paths(get_option('prefix'), get_option('datadir'), 'tracker/miners') +tracker_writeback_modules_dir = join_paths(get_option('prefix'), get_option('libdir'), 'tracker-@0@/writeback-modules'.format(tracker_api_version)) + +vapi_dir = join_paths(get_option('prefix'), get_option('datadir'), 'vala', 'vapi') + +subdir('src') + +if get_option('docs') + subdir('docs') +endif + +subdir('examples') +subdir('utils') + +subdir('tests') + +subdir('po') + +# Make sure we're not using versions of SQLite which cause problems. +# +# Avoid versions: +sqlite_safe = true +if sqlite.version().version_compare('>= 3.7.10') and sqlite.version().version_compare('<= 3.7.13') + # See https://mail.gnome.org/archives/tracker-list/2012-October/msg00028.html + sqlite_safe = false +elif sqlite.version().version_compare('3.8.1') + # See https://mail.gnome.org/archives/tracker-list/2013-November/msg00021.html + sqlite_safe = false +elif sqlite.version().version_compare('3.8.4.2') + # See https://mail.gnome.org/archives/tracker-list/2014-April/msg00001.html + sqlite_safe = false +endif + +summary = [ + '\nBuild Configuration:', + ' Prefix: ' + get_option('prefix'), + ' Source code location: ' + meson.source_root(), + ' Compiler: ' + cc.get_id(), + '\nFeature Support:', + ' Battery/mains power detection: ' + battery_detection_library_name, + ' Support for network status detection: ' + network_manager.found().to_string(), + ' Unicode support library: ' + unicode_library_name, + ' Build with Journal support: ' + get_option('journal').to_string(), + ' Build with SQLite FTS support: @0@ (built-in FTS: @1@)'.format( + get_option('fts'), sqlite3_has_builtin_fts5), + ' Build with Stemming support: ' + have_libstemmer.to_string(), + ' Cache media art ' + libmediaart.found().to_string(), + ' Bash completion support: ' + bash_completion_dir, + '\nData Miners / Writebacks:', + ' FS (File System): @0@ (MeeGo support: @1@)'.format( + have_tracker_miner_fs, have_meegotouch), + ' Applications: ' + have_tracker_miner_apps.to_string(), + ' RSS: ' + have_tracker_miner_rss.to_string(), + ' User Guides: ' + have_tracker_miner_user_guides.to_string(), + ' Email:', + ' Evolution: @0@ (@1@)'.format( + have_tracker_miner_evolution, tracker_miner_evolution_install_dir), + ' Thunderbird: @0@ (@1@)'.format( + have_tracker_miner_thunderbird, tracker_miner_thunderbird_install_dir), + ' Bookmarks:', + ' FireFox: @0@ (@1@)'.format( + have_tracker_miner_firefox, tracker_miner_firefox_install_dir), + '', + ' Extract (secondary extraction): ' + have_tracker_extract.to_string(), + ' Writeback (writing changes back): ' + have_tracker_writeback.to_string(), +] + + +if have_tracker_extract + summary += [ + '\nMetadata Extractors:', + ' Support PNG: ' + libpng.found().to_string(), + ' Support PDF: ' + poppler.found().to_string(), + ' Support XPS: ' + libgxps.found().to_string(), + ' Support GIF: @0@ (xmp: @1@)'.format(libgif.found().to_string(), exempi.found().to_string()), + ' Support JPEG: @0@ (xmp: @1@, exif: @2@, iptc: @3@)'.format( + libjpeg.found().to_string(), exempi.found().to_string(), libexif.found().to_string(), libiptcdata.found().to_string()), + ' Support TIFF: @0@ (xmp: @1@, exif: @2@, iptc: @3@)'.format( + libtiff.found().to_string(), exempi.found().to_string(), libexif.found().to_string(), libiptcdata.found().to_string()), + ' Support Vorbis (ogg/etc): ' + libvorbis.found().to_string(), + ' Support Flac: ' + flac.found().to_string(), + ' Support MS & Open Office: ' + libgsf.found().to_string(), + ' Support XML / HTML: ' + libxml2.found().to_string(), + ' Support embedded / sidecar XMP: ' + exempi.found().to_string(), + ' Support generic media formats: @0@ (backend: @1@)'.format( + generic_media_handler_name, gstreamer_backend_name), + ' Support cue sheet parsing: ' + libcue.found().to_string(), + ' Support playlists (w/ Totem): ' + totem_plparser.found().to_string(), + ' Support ISO image parsing: ' + libosinfo.found().to_string(), + ' Support AbiWord document parsing: true', + ' Support DVI parsing: true', + ' Support MP3 parsing: true', + ' Support MP3 tag charset detection: ' + charset_library_name, + ' Support PS parsing: true', + ' Support text parsing: true', + ' Support icon parsing: true' + ] +endif + + +if have_tracker_writeback + summary += [ + '\nWriteback Formats:', + ' Audio files using Taglib: ' + taglib.found().to_string(), + ' XMP: ' + exempi.found().to_string(), + ] +endif + +summary += [ + '\nApplications:', + ' Build tracker-preferences: ' + have_tracker_preferences.to_string(), + ' Build tracker-needle: ' + have_tracker_needle.to_string(), + '\nFrameworks / Options:', + ' Support Nautilus file manager @0@ (@1@)'.format( + nautilus_extension.found().to_string(), tracker_nautilus_extension_install_dir), + ' Support Maemo false', + ' Support libmeegotouch ' + meegotouch.found().to_string(), + ' Support Guaranteed Metadata ' + get_option('guarantee_metadata').to_string(), +] + +message('\n'.join(summary)) + +if not sqlite_safe + message('''WARNING: + SQLite3 version @0@ is not safe. For detail + 3.7.10 - 3.7.13: https://mail.gnome.org/archives/tracker-list/2012-October/msg00028.html + 3.8.1: https://mail.gnome.org/archives/tracker-list/2013-November/msg00021.html + 3.8.4.2: https://mail.gnome.org/archives/tracker-list/2014-April/msg00001.html + ''').format(sqlite.version()) +endif diff --git a/meson_options.txt b/meson_options.txt new file mode 100644 index 000000000..943b48ae6 --- /dev/null +++ b/meson_options.txt @@ -0,0 +1,51 @@ +option('docs', type: 'boolean', value: true, + description: 'Enable the documentation') +option('extract', type: 'boolean', value: true, + description: 'Enable the Tracker metadata extractor') +option('fts', type: 'boolean', value: true, + description: 'Enable the Tracker full-text search feature') +option('functional_tests', type: 'boolean', value: true, + description: 'Enable the Tracker functional test suite') +option('guarantee_metadata', type: 'boolean', value: true, + description: 'Set nie:title and nie:contentCreated from filename and mtime if no metadata available') +option('journal', type: 'boolean', value: true, + description: 'Enable database journal backup mechanism') +option('writeback', type: 'boolean', value: true, + description: 'Enable Tracker writeback feature') + +option('abiword', type: 'boolean', value: 'true', + description: 'Enable extractor for AbiWord files') +option('dvi', type: 'boolean', value: 'true', + description: 'Enable extractor for DVI metadata') +option('icon', type: 'boolean', value: 'true', + description: 'Enable extractor for ICO metadata') +option('mp3', type: 'boolean', value: 'true', + description: 'Enable extractor for MP3 metadata') +option('ps', type: 'boolean', value: 'true', + description: 'Enable extractor for PS metadata') +option('text', type: 'boolean', value: 'true', + description: 'Enable extractor for TXT metadata') +option('unzip_ps_gz_files', type: 'boolean', value: 'true', + description: 'Enable extractor for PS.GZ metadata') + +option('battery_detection', type: 'combo', choices: ['auto', 'hal', 'upower', 'none'], value: 'auto', + description: 'Enable upower or HAL for battery/mains power detection') +option('charset_detection', type: 'combo', choices: ['auto', 'enca', 'icu', 'none'], value: 'auto', + description: 'Enable enca or libicu for charset detection in MP3s') +option('generic_media_extractor', type: 'combo', choices: ['auto', 'gstreamer', 'libav', 'none'], value: 'auto', + description: 'Enables one of the (gstreamer, libav, auto) generic media extractor backends') +option('gstreamer_backend', type: 'combo', choices: ['discoverer', 'gupnp'], value: 'discoverer', + description: 'When GStreamer is used, this enables one of the (discoverer, gupnp) GStreamer backends') +option('meegotouch', type: 'combo', choices: ['auto', 'no', 'yes'], value: 'no', + description: 'Enable libmeegotouch application extraction') +option('stemmer', type: 'combo', choices: ['auto', 'no', 'yes'], value: 'no', + description: 'Enable stemming words while indexing') +option('unicode_support', type: 'combo', choices: ['icu', 'unistring', 'auto'], value: 'auto', + description: 'Unicode support library to use') + +option('bash_completion', type: 'string', default: 'yes', + description: 'Directory to install Bash completion files (or "yes" for default directory, "no" to disable installation') +option('dbus_services', type: 'string', default: '', + description: 'Directory to install D-Bus .service files (leave blank to use the value from dbus-1.pc)') +option('systemd_user_services', type: 'string', default: 'yes', + description: 'Directory to install systemd user .service files (or "yes" for default directory, "no" to disable installation)') diff --git a/po/meson.build b/po/meson.build new file mode 100644 index 000000000..adb517649 --- /dev/null +++ b/po/meson.build @@ -0,0 +1,6 @@ +i18n.gettext('tracker', languages: + ['ar', 'as', 'be@latin', 'bg', 'bs', 'ca', 'ca@valencia', 'cs', 'da', 'de', + 'dz', 'el', 'en_GB', 'eo', 'es', 'et', 'eu', 'fi', 'fr', 'gl', 'he', 'hu', + 'id', 'it', 'ja', 'ko', 'lt', 'lv', 'mk', 'ml', 'nb', 'nds', 'nl', 'oc', + 'pa', 'pl', 'pt', 'pt_BR', 'ro', 'ru', 'sk', 'sl', 'sr', 'sr@latin', 'sv', + 'te', 'tg', 'th', 'tr', 'uk', 'zh_CN', 'zh_HK', 'zh_TW']) diff --git a/src/create-miner-symlinks.sh b/src/create-miner-symlinks.sh new file mode 100644 index 000000000..7233a028a --- /dev/null +++ b/src/create-miner-symlinks.sh @@ -0,0 +1,13 @@ +#!/bin/sh +# Post-install script for install stuff that Meson doesn't support directly. +# +# We can't pass the necessary variables directly to the script, so we +# substitute them using configure_file(). It's a bit of a Heath Robinson hack. + +set -e + +dbus_services_dir="$1" +tracker_miner_services_dir="$2" + +mkdir -p ${DESTDIR}/${tracker_miner_services_dir} +ln -sf "${dbus_services_dir}/tracker-extract.service" "${DESTDIR}/${tracker_miner_services_dir}/tracker-extract.service" diff --git a/src/gvdb/meson.build b/src/gvdb/meson.build new file mode 100644 index 000000000..82177dd7f --- /dev/null +++ b/src/gvdb/meson.build @@ -0,0 +1,14 @@ +gvdb_dependencies = [glib] + +libgvdb = static_library('gvdb', + 'gvdb-builder.c', + 'gvdb-reader.c', + dependencies: gvdb_dependencies, + pic: true, +) + +gvdb_dep = declare_dependency( + link_with: libgvdb, + dependencies: gvdb_dependencies, + include_directories: include_directories('..'), +) diff --git a/src/install-generated-header.sh b/src/install-generated-header.sh new file mode 100644 index 000000000..0078aaf53 --- /dev/null +++ b/src/install-generated-header.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +# Script to install generated .h files. This only exists to workaround +# a Meson bug: https://github.com/mesonbuild/meson/issues/705 + +set -e + +HEADER="$1" +TARGET_DIR="$2" + +mkdir -p "$DESTDIR$2" +cp $1 "$DESTDIR$2" diff --git a/src/libtracker-bus/meson.build b/src/libtracker-bus/meson.build new file mode 100644 index 000000000..695611aeb --- /dev/null +++ b/src/libtracker-bus/meson.build @@ -0,0 +1,28 @@ +libtracker_bus = static_library('tracker-bus', + 'tracker-bus.vala', + 'tracker-namespace.vala', + 'tracker-array-cursor.vala', + 'tracker-bus-fd-cursor.vala', + '../libtracker-common/libtracker-common.vapi', + c_args: [ + '-DTRACKER_COMPILATION', + ], + vala_args: [ + '--debug', + '--pkg', 'posix', + # FIXME: Meson has code to add --target-glib automatically, but it + # doesn't seem to work here. + '--target-glib', glib_required, + ], + # This doesn't depend on tracker_common_dep because of + # https://github.com/mesonbuild/meson/issues/671 + dependencies: [glib, gio, gio_unix, tracker_sparql_intermediate_dep], + include_directories: [commoninc, configinc, srcinc], + link_with: libtracker_common, + sources: tracker_common_enum_header, +) + +tracker_sparql_bus_dep = declare_dependency( + link_with: libtracker_bus, + include_directories: include_directories('.') +) diff --git a/src/libtracker-common/generate-tracker-parser-sha1-header.sh b/src/libtracker-common/generate-tracker-parser-sha1-header.sh new file mode 100755 index 000000000..9ff478547 --- /dev/null +++ b/src/libtracker-common/generate-tracker-parser-sha1-header.sh @@ -0,0 +1,23 @@ +#!/bin/sh + +# Write the Git SHA1 of the libtracker-common subdir to a header file. +# +# This is used in tracker-db-manager.c to regenerate FTS tables if the parser +# code used by the FTS tokenizer code could have changed. +# +# It's important that this script doesn't touch the output file unless it needs +# to. If it updates the file unconditionally, everything will rebuild from +# scratch every time Meson reexecutes. + +set -eu + +SRCDIR=${MESON_SOURCE_ROOT}/src/libtracker-common +BUILDDIR=${MESON_BUILD_ROOT}/src/libtracker-common + +cached_sha1=$(cat ${BUILDDIR}/tracker-parser-sha1.cached || echo "") +new_sha1=$(git -C ${SRCDIR} log -n1 --format=format:%H -- . ) + +if [ "$cached_sha1" != "$new_sha1" ]; then + echo "#define TRACKER_PARSER_SHA1 \"${new_sha1}\"" > ${BUILDDIR}/tracker-parser-sha1.h + echo ${new_sha1} > ${BUILDDIR}/tracker-parser-sha1.cached +fi diff --git a/src/libtracker-common/meson.build b/src/libtracker-common/meson.build new file mode 100644 index 000000000..8ab4af5c3 --- /dev/null +++ b/src/libtracker-common/meson.build @@ -0,0 +1,69 @@ +subdir('stop-words') + +enums = gnome.mkenums('tracker-enum-types', + sources: 'tracker-enums.h', + c_template: 'tracker-enum-types.c.template', + h_template: 'tracker-enum-types.h.template', +) + +tracker_common_enum_header = enums[1] + +parser_sha1_header = configure_file( + input: 'tracker-parser-sha1.h.in', + output: 'tracker-parser-sha1.h', + command: ['generate-tracker-parser-sha1-header.sh']) + +tracker_common_sources = [ + 'tracker-date-time.c', + 'tracker-dbus.c', + 'tracker-file-utils.c', + 'tracker-ioprio.c', + 'tracker-log.c', + 'tracker-sched.c', + 'tracker-type-utils.c', + 'tracker-utils.c', + 'tracker-locale.c', + 'tracker-parser-utils.c', + 'tracker-language.c', + 'tracker-seccomp.c', + enums[0], enums[1], + parser_sha1_header, +] + +if unicode_library_name == 'icu' + tracker_common_sources += 'tracker-parser-libicu.c' +else + tracker_common_sources += 'tracker-parser-libunistring.c' +endif + +# FIXME: need to link against -lkvm on OpenBSD, see configure.ac +tracker_common_dependencies = [glib, gio, gio_unix, libmath] + +libtracker_common = library('tracker-common', + tracker_common_sources, + dependencies: tracker_common_dependencies + [unicode_library], + c_args: [ + '-DTRACKER_COMPILATION', + ], + include_directories: [configinc, srcinc], + install: true, + install_dir: tracker_internal_libs_dir, +) + +commoninc = include_directories('.') + +# This dependency can't be used everywhere right now. The issue is that if +# every other library depends on this one, we end up with a combinatorial +# explosion that results in the link line for src/tracker/tracker being +# nearly 200,000 characters long which causes this kind of error: +# +# Linking target src/tracker/tracker +# ninja: fatal: posix_spawn: Argument list too long +# +# Upstream issue: https://github.com/mesonbuild/meson/issues/671 +tracker_common_dep = declare_dependency( + sources: enums[1], + link_with: libtracker_common, + dependencies: tracker_common_dependencies, + include_directories: [configinc, srcinc, commoninc], +) diff --git a/src/libtracker-common/stop-words/meson.build b/src/libtracker-common/stop-words/meson.build new file mode 100644 index 000000000..54f638b6f --- /dev/null +++ b/src/libtracker-common/stop-words/meson.build @@ -0,0 +1,21 @@ +stopwords_files = [ + 'stopwords.da', + 'stopwords.de', + 'stopwords.en', + 'stopwords.es', + 'stopwords.fi', + 'stopwords.fr', + 'stopwords.hu', + 'stopwords.it', + 'stopwords.nb', + 'stopwords.nl', + 'stopwords.pt', + 'stopwords.ru', + 'stopwords.sv' +] + +stopwords_install_dir = join_paths( + get_option('datadir'), 'tracker', 'stop-words') + +install_data(stopwords_files, + install_dir: stopwords_install_dir) diff --git a/src/libtracker-control/meson.build b/src/libtracker-control/meson.build new file mode 100644 index 000000000..5bb0b2254 --- /dev/null +++ b/src/libtracker-control/meson.build @@ -0,0 +1,41 @@ +sources = ['tracker-miner-manager.c'] + +headers = ['tracker-control.h', 'tracker-miner-manager.h'] + +libtracker_control = library('tracker-control-' + tracker_api_version, + sources, + c_args: '-DTRACKER_COMPILATION', + install: true, + install_rpath: tracker_internal_libs_dir, + # This doesn't depend on tracker_common_dep because of + # https://github.com/mesonbuild/meson/issues/671 + dependencies: [gio, tracker_sparql_dep, tracker_miner_dep], + include_directories: [commoninc, configinc, srcinc], + link_with: libtracker_common, + sources: tracker_common_enum_header, +) + +tracker_control_dep = declare_dependency( + link_with: libtracker_control, + dependencies: tracker_miner_dep +) + +tracker_control_gir = gnome.generate_gir(libtracker_control, + sources: sources + headers, + nsversion: tracker_api_version, + namespace: 'TrackerControl', + identifier_prefix: 'Tracker', + symbol_prefix: 'tracker', + includes : ['GLib-2.0', 'GObject-2.0', 'Gio-2.0' ], + install: true, + extra_args: '--c-include=libtracker-control/tracker-control.h') + +configure_file( + input: 'tracker-control.pc.in', + output: 'tracker-control-1.0.pc', + configuration: conf, + install: true, + install_dir: join_paths(get_option('prefix'), get_option('libdir'), 'pkgconfig')) + +install_headers (headers, + subdir: 'tracker-1.0/libtracker-control') diff --git a/src/libtracker-data/meson.build b/src/libtracker-data/meson.build new file mode 100644 index 000000000..c78702343 --- /dev/null +++ b/src/libtracker-data/meson.build @@ -0,0 +1,73 @@ +# Vala parts of libtracker-data are split out separately, because we can't link +# the Vala code to libicu. In the Makefile.am this library is called +# libtracker-sparql-query. +libtracker_data_vala = static_library('tracker-sparql-query', + 'tracker-vala-namespace.vala', + 'tracker-sparql-query.vala', + 'tracker-sparql-expression.vala', + 'tracker-sparql-pattern.vala', + 'tracker-sparql-scanner.vala', + 'tracker-turtle-reader.vala', + '../libtracker-common/libtracker-common.vapi', + '../libtracker-data/libtracker-data.vapi', + c_args: [ + '-DTRACKER_COMPILATION', + ], + vala_args: [ + '--debug', + '--pkg', 'posix', + # FIXME: Meson has code to add --target-glib automatically, but it + # doesn't seem to work here. + '--target-glib', glib_required, + ], + # This doesn't depend on tracker_common_dep because of + # https://github.com/mesonbuild/meson/issues/671 + dependencies: [glib, gio, tracker_sparql_intermediate_dep], + include_directories: [commoninc, configinc, srcinc], + sources: tracker_common_enum_header, +) + +tracker_data_dependencies = [ + tracker_sparql_intermediate_dep, gvdb_dep, sqlite, uuid, +] + +if get_option('fts') + tracker_data_dependencies += tracker_fts_dep +endif + + #[gio_unix, glib, libmath, sqlite, uuid] +libtracker_data = library('tracker-data', + 'tracker-class.c', + 'tracker-collation.c', + 'tracker-crc32.c', + 'tracker-data-backup.c', + 'tracker-data-manager.c', + 'tracker-data-query.c', + 'tracker-data-update.c', + 'tracker-db-config.c', + 'tracker-db-interface.c', + 'tracker-db-interface-sqlite.c', + 'tracker-db-manager.c', + 'tracker-db-journal.c', + 'tracker-db-backup.c', + 'tracker-namespace.c', + 'tracker-ontology.c', + 'tracker-ontologies.c', + 'tracker-property.c', + c_args: [ + '-DTRACKER_COMPILATION', + ], + install: true, + install_dir: tracker_internal_libs_dir, + # This doesn't depend on tracker_common_dep because of + # https://github.com/mesonbuild/meson/issues/671 + link_with: [libtracker_data_vala], + dependencies: tracker_data_dependencies + [unicode_library], + include_directories: [commoninc, configinc, srcinc], +) + +tracker_data_dep = declare_dependency( + link_with: [libtracker_data, libtracker_data_vala], + dependencies: tracker_data_dependencies, + include_directories: include_directories('.') +) diff --git a/src/libtracker-direct/meson.build b/src/libtracker-direct/meson.build new file mode 100644 index 000000000..50c9f3c5c --- /dev/null +++ b/src/libtracker-direct/meson.build @@ -0,0 +1,25 @@ +libtracker_direct = static_library('tracker-direct', + 'tracker-direct.vala', + 'tracker-namespace.vala', + '../libtracker-common/libtracker-common.vapi', + '../libtracker-data/libtracker-data.vapi', + c_args: [ + '-DTRACKER_COMPILATION', + ], + vala_args: [ + '--debug', + '--pkg', 'posix', + # FIXME: Meson has code to add --target-glib automatically, but it + # doesn't seem to work here. + '--target-glib', glib_required, + ], + # This doesn't depend on tracker_common_dep because of + # https://github.com/mesonbuild/meson/issues/671 + dependencies: [ glib, gio, tracker_data_dep ], + include_directories: [commoninc, configinc, srcinc], +) + +tracker_sparql_direct_dep = declare_dependency( + link_with: libtracker_direct, + include_directories: include_directories('.') +) diff --git a/src/libtracker-extract/meson.build b/src/libtracker-extract/meson.build new file mode 100644 index 000000000..96b6c8e44 --- /dev/null +++ b/src/libtracker-extract/meson.build @@ -0,0 +1,52 @@ +libtracker_extract_sources = [ + 'tracker-encoding.c', + 'tracker-exif.c', + 'tracker-extract-info.c', + 'tracker-guarantee.c', + 'tracker-iptc.c', + 'tracker-module-manager.c', + 'tracker-resource-helpers.c', + 'tracker-utils.c', + 'tracker-xmp.c', +] + +if charset_library_name == 'enca' + libtracker_extract_sources += 'tracker-encoding-enca.c' +elif charset_library_name == 'icu' + libtracker_extract_sources += 'tracker-encoding-libicu.c' +endif + +if have_meegotouch + libtracker_extract_sources += 'tracker-encoding-meegotouch.cpp' +endif + +tracker_extract_dependencies = [charset_library, gmodule] + +if exempi.found() + tracker_extract_dependencies += exempi +endif + +if libexif.found() + tracker_extract_dependencies += libexif +endif + +if libiptcdata.found() + tracker_extract_dependencies += libiptcdata +endif + +libtracker_extract = library('tracker-extract', + libtracker_extract_sources, + dependencies: [tracker_common_dep, tracker_sparql_dep] + tracker_extract_dependencies, + c_args: [ + '-DTRACKER_COMPILATION', + '-DTRACKER_EXTRACTOR_RULES_DIR="@0@"'.format(tracker_extract_rules_dir), + '-DTRACKER_EXTRACTORS_DIR="@0@"'.format(tracker_extract_modules_dir) + ], + install: true, + install_rpath: tracker_internal_libs_dir, +) + +tracker_extract_dep = declare_dependency( + link_with: libtracker_extract, + dependencies: [tracker_sparql_dep] + tracker_extract_dependencies, + include_directories: srcinc) diff --git a/src/libtracker-fts/meson.build b/src/libtracker-fts/meson.build new file mode 100644 index 000000000..d08bc5d15 --- /dev/null +++ b/src/libtracker-fts/meson.build @@ -0,0 +1,23 @@ +if sqlite3_has_builtin_fts5 + libtracker_fts_fts5 = [] +else + libtracker_fts_fts5 = files('fts5.c') +endif + +libtracker_fts_dependencies = [sqlite] + +libtracker_fts = static_library('libtracker-fts', + 'tracker-fts.c', + 'tracker-fts-config.c', + 'tracker-fts-tokenizer.c', + libtracker_fts_fts5, + dependencies: tracker_common_dep, + c_args: [ + '-DTRACKER_COMPILATION', + ], +) + +tracker_fts_dep = declare_dependency( + link_with: libtracker_fts, + dependencies: libtracker_fts_dependencies +) diff --git a/src/libtracker-miner/meson.build b/src/libtracker-miner/meson.build new file mode 100644 index 000000000..79ea723cc --- /dev/null +++ b/src/libtracker-miner/meson.build @@ -0,0 +1,113 @@ +shared_libtracker_miner_monitor_sources = files('tracker-monitor.c') +shared_libtracker_miner_file_system_sources = files('tracker-file-system.c') +shared_libtracker_miner_crawler_sources = files('tracker-crawler.c') + +miner_enums = gnome.mkenums('tracker-miner-enum-types', + sources: 'tracker-miner-enums.h', + c_template: 'tracker-miner-enum-types.c.template', + h_template: 'tracker-miner-enum-types.h.template', +) + +private_sources = [ + 'tracker-crawler.c', + 'tracker-file-data-provider.c', + 'tracker-file-enumerator.c', + 'tracker-file-notifier.c', + 'tracker-file-system.c', + 'tracker-priority-queue.c', + 'tracker-task-pool.c', + 'tracker-sparql-buffer.c', + 'tracker-thumbnailer.c', + 'tracker-utils.c'] + +if libmediaart.found() + private_sources.append(['tracker-media-art.c']) +endif + +miner_headers = [ + 'tracker-enumerator.h', + 'tracker-miner-online.h', + 'tracker-data-provider.h', + 'tracker-indexing-tree.h', + 'tracker-decorator-fs.h', + 'tracker-miner-fs.h', + 'tracker-miner-object.h', + 'tracker-decorator.h', + 'tracker-miner-enums.h', + 'tracker-miner.h', +] + +miner_sources = ( + shared_libtracker_miner_monitor_sources + + shared_libtracker_miner_file_system_sources + + shared_libtracker_miner_crawler_sources + + ['tracker-data-provider.c', + 'tracker-decorator.c', + 'tracker-decorator-fs.c', + 'tracker-enumerator.c', + 'tracker-indexing-tree.c', + 'tracker-miner-object.c', + 'tracker-miner-online.c', + 'tracker-miner-fs.c']) + +libtracker_miner_private = static_library( + 'tracker-miner-private', + miner_enums[0], miner_enums[1], private_sources, + dependencies: [tracker_common_dep, tracker_sparql_dep], + c_args: [ + '-DTRACKER_COMPILATION', + ], +) + +tracker_miner_dependencies = [] +if network_manager.found() + tracker_miner_dependencies += network_manager +endif + +libtracker_miner = library( + 'tracker-miner-' + tracker_api_version, + miner_enums[0], miner_enums[1], miner_sources, + c_args: [ '-DTRACKER_COMPILATION', ], + install: true, + install_rpath: tracker_internal_libs_dir, + # This doesn't depend on tracker_common_dep because of + # https://github.com/mesonbuild/meson/issues/671 + include_directories: [commoninc, configinc, srcinc], + dependencies: [tracker_sparql_dep] + tracker_miner_dependencies, + link_with: [libtracker_miner_private], +) + +tracker_miner_dep = declare_dependency( + sources: miner_enums[1], + link_with: libtracker_miner, + include_directories: include_directories('.') +) + +tracker_miner_gir = gnome.generate_gir(libtracker_miner, + sources: miner_sources + miner_headers, + nsversion: tracker_api_version, + namespace: 'TrackerMiner', + identifier_prefix: 'Tracker', + symbol_prefix: 'tracker', + # FIXME: also depends on Tracker-1.0.gir (output of libtracker-sparql) + # but we can't currently access that from the Vala target + includes : ['GLib-2.0', 'GObject-2.0', 'Gio-2.0' ], + install: true, + extra_args: [ + '--c-include=libtracker-miner/tracker-miner.h', + '-D', 'TRACKER_COMPILATION', + ]) + +configure_file( + input: 'tracker-miner.pc.in', + output: 'tracker-miner-1.0.pc', + configuration: conf, + install: true, + install_dir: join_paths(get_option('prefix'), get_option('libdir'), 'pkgconfig')) + +install_headers(miner_headers, subdir: 'tracker-1.0/libtracker-miner') + +# Work around https://github.com/mesonbuild/meson/issues/705 +meson.add_install_script('../install-generated-header.sh', + join_paths(meson.current_build_dir(), 'tracker-miner-enum-types.h'), + join_paths(get_option('prefix'), get_option('includedir'), 'tracker-1.0', 'libtracker-miner')) diff --git a/src/libtracker-remote/meson.build b/src/libtracker-remote/meson.build new file mode 100644 index 000000000..7a817c780 --- /dev/null +++ b/src/libtracker-remote/meson.build @@ -0,0 +1,28 @@ +tracker_remote_dependencies = [json_glib, libsoup, libxml2] + +sources = [ + 'tracker-json-cursor.vala', + 'tracker-xml-cursor.vala', + 'tracker-remote.vala', + '../libtracker-common/libtracker-common.vapi' +] + +libtracker_remote = static_library('tracker-remote', sources, + dependencies: tracker_remote_dependencies + [tracker_common_dep, tracker_sparql_intermediate_dep], + c_args: [ + '-DTRACKER_COMPILATION', + ], + vala_args: [ + '--debug', + '--pkg', 'posix', + # FIXME: Meson has code to add --target-glib automatically, but it + # doesn't seem to work here. + '--target-glib', glib_required, + ], +) + +tracker_sparql_remote_dep = declare_dependency( + link_with: libtracker_remote, + include_directories: include_directories('.'), + dependencies: tracker_remote_dependencies, +) diff --git a/src/libtracker-sparql-backend/meson.build b/src/libtracker-sparql-backend/meson.build new file mode 100644 index 000000000..cbbc890b2 --- /dev/null +++ b/src/libtracker-sparql-backend/meson.build @@ -0,0 +1,12 @@ +libtracker_sparql = library('tracker-sparql-' + tracker_api_version, + 'tracker-backend.vala', + install: true, + install_rpath: tracker_internal_libs_dir, + dependencies: [tracker_sparql_intermediate_dep, tracker_sparql_remote_dep, tracker_sparql_bus_dep, tracker_sparql_direct_dep], +) + +tracker_sparql_dep = declare_dependency( + link_with: [libtracker_sparql], + include_directories: srcinc, + dependencies: [tracker_sparql_intermediate_dep], +) diff --git a/src/libtracker-sparql/meson.build b/src/libtracker-sparql/meson.build new file mode 100644 index 000000000..9c6c4a718 --- /dev/null +++ b/src/libtracker-sparql/meson.build @@ -0,0 +1,119 @@ +enums_c = gnome.mkenums('tracker-sparql-enum-types', + sources: 'tracker-notifier.h', + c_template: 'tracker-sparql-enum-types.c.template', +) +enums_h = gnome.mkenums('tracker-sparql-enum-types', + sources: 'tracker-notifier.h', + h_template: 'tracker-sparql-enum-types.h.template', +) + +tracker_sparql_intermediate_dependencies = [uuid] + +libtracker_sparql_intermediate = static_library('tracker-sparql', + enums_c, enums_h, + 'tracker-namespace.vala', + 'tracker-builder.vala', + 'tracker-connection.vala', + 'tracker-cursor.vala', + 'tracker-utils.vala', + 'tracker-namespace-manager.c', + 'tracker-notifier.c', + 'tracker-resource.c', + 'tracker-uri.c', + 'tracker-version.c', + vala_header: 'tracker-generated-no-checks.h', + c_args: [ '-DTRACKER_COMPILATION', ], + # FIXME: getting Vala to output the GIR means that the symbols from the + # C files aren't included. This problem seems to affect the Autotools + # build system as well. + # FIXME: we also can't depend on this in the TrackerMiner GIR, which + # probably breaks stuff + vala_gir: 'Tracker-' + tracker_api_version + '.gir', + vala_args: [ + '--debug', + '--includedir', 'libtracker-sparql', + '--pkg', 'gio-2.0', '--pkg', 'posix', + # FIXME: Meson has code to add --target-glib automatically, but it + # doesn't seem to work here. + '--target-glib', glib_required, + ], + # This doesn't depend on tracker_common_dep because of + # https://github.com/mesonbuild/meson/issues/671 + dependencies: [glib, gio] + tracker_sparql_intermediate_dependencies, + include_directories: [commoninc, configinc, srcinc], + link_with: [libtracker_common], +) + +# We must postprocess the generated Vala header to have only-include-once guards +tracker_sparql_generated_header = custom_target('tracker-sparql-generated-header', + # FIXME: can't list tracker-generated-no-checks as an input, even though it + # is, because you'll see this: + # + # ninja: error: + # '../src/libtracker-sparql/tracker-generated-no-checks.h', needed by + # 'src/libtracker-sparql/tracker-generated.h', missing and no known + # rule to make it + # + output: 'tracker-generated.h', + command: [join_paths(meson.current_source_dir(), 'tracker-sparql-add-include-guards.sh'), join_paths(meson.current_build_dir(), 'tracker-generated-no-checks.h'), '@OUTPUT@'], + depends: libtracker_sparql_intermediate) + +tracker_sparql_intermediate_dep = declare_dependency( + link_with: [libtracker_sparql_intermediate], + sources: tracker_sparql_generated_header, + include_directories: [srcinc, include_directories('.')], + dependencies: tracker_sparql_intermediate_dependencies +) + +configure_file( + input: 'tracker-sparql.pc.in', + output: 'tracker-sparql-1.0.pc', + configuration: conf, + install: true, + install_dir: join_paths(get_option('prefix'), get_option('libdir'), 'pkgconfig')) + +install_headers( + 'tracker-notifier.h', + 'tracker-resource.h', + 'tracker-ontologies.h', + 'tracker-sparql.h', + 'tracker-namespace-manager.h', + 'tracker-version.h', + subdir: 'tracker-1.0/libtracker-sparql') + +# FIXME: we need a custom script to install generated Vala headers; see +# <https://github.com/mesonbuild/meson/issues/705>. +meson.add_install_script('../install-generated-header.sh', + join_paths(meson.current_build_dir(), 'tracker-generated.h'), + join_paths(get_option('prefix'), get_option('includedir'), 'tracker-1.0', 'libtracker-sparql')) + +custom_target('tracker-sparql-typelib', + command: ['g-ir-compiler', '--output', '@OUTPUT@', join_paths(meson.current_build_dir(), 'Tracker-1.0.gir')], + #input: join_paths(meson.current_build_dir(), 'Tracker-1.0.gir'), + output: 'Tracker-1.0.typelib', + depends: libtracker_sparql_intermediate, + install: true, + install_dir: join_paths(get_option('libdir'), 'girepository-1.0')) + +# FIXME: reusing the same script to install the .gir; see +# <https://github.com/mesonbuild/meson/issues/891>. +meson.add_install_script('../install-generated-header.sh', + join_paths(meson.current_build_dir(), 'Tracker-1.0.gir'), + join_paths(get_option('prefix'), get_option('datadir'), 'gir-1.0')) + +# FIXME: we can't depend properly on the generated .vapi to do this. +custom_target('tracker-sparql-' + tracker_api_version + '.vapi', + #input: 'tracker-sparql-vala.vapi', + output: 'tracker-sparql-' + tracker_api_version + '.vapi', + command: ['sed', '-e', 's/tracker-generated-no-checks.h/tracker-sparql.h/', join_paths(meson.current_build_dir(), 'tracker-sparql.vapi')], + depends: libtracker_sparql_intermediate, + capture: true, + install: true, + install_dir: vapi_dir) + +configure_file( + input: 'tracker-sparql.deps', + output: 'tracker-sparql-' + tracker_api_version + '.deps', + configuration: configuration_data(), # No changes here, just a rename + install: true, + install_dir: vapi_dir) diff --git a/src/libtracker-sparql/tracker-sparql-add-include-guards.sh b/src/libtracker-sparql/tracker-sparql-add-include-guards.sh new file mode 100755 index 000000000..b0d68ea61 --- /dev/null +++ b/src/libtracker-sparql/tracker-sparql-add-include-guards.sh @@ -0,0 +1,17 @@ +#!/bin/sh + +# Wrap the generated Vala header for libtracker-sparql with a #include guard. +# +# It's important that this only writes the header when necessary; if it gets +# written every time then builds will run more or less from scratch whenever +# Meson needs to reconfigure the project. + +set -eu + +in="$1" +out="$2" + +(echo "#if !defined (__LIBTRACKER_SPARQL_INSIDE__) && !defined (TRACKER_COMPILATION)"; + echo "#error \"only <libtracker-sparql/tracker-sparql.h> must be included directly.\""; + echo "#endif") > $out +cat $in >> $out diff --git a/src/meson.build b/src/meson.build new file mode 100644 index 000000000..1192caf07 --- /dev/null +++ b/src/meson.build @@ -0,0 +1,50 @@ +# Shared common code +subdir('libtracker-common') + +# Intermediate library of RDF & SPARQL helper functions. +# This gets used internally and also becomes part of the +# public libtracker-sparql library. +subdir('libtracker-sparql') + +# Internal database library +subdir('gvdb') +subdir('libtracker-fts') +subdir('libtracker-data') + +# Public libtracker-sparql library +subdir('libtracker-bus') +subdir('libtracker-direct') +subdir('libtracker-remote') +subdir('libtracker-sparql-backend') + +# Public libtracker-miner library +subdir('libtracker-miner') + +# Internal data extraction helpers +subdir('libtracker-extract') + +# Public data extract tool & modules +subdir('tracker-extract') + +# Public miners +subdir('miners') + +# Public metadata writeback tool & modiles +subdir('tracker-writeback') + +# Internal control library +subdir('libtracker-control') + +# Public commandline control tool +subdir('tracker') + +# Public shared database +subdir('tracker-store') + +# Example search application +subdir('tracker-needle') + +# Example configuration application +subdir('tracker-preferences') + +meson.add_install_script('create-miner-symlinks.sh', dbus_services_dir, tracker_miner_services_dir) diff --git a/src/miners/apps/meson.build b/src/miners/apps/meson.build new file mode 100644 index 000000000..685efa497 --- /dev/null +++ b/src/miners/apps/meson.build @@ -0,0 +1,45 @@ +sources = [ + 'tracker-main.c', + 'tracker-miner-applications.c', +] + +executable('tracker-miner-apps', sources, + dependencies: [tracker_common_dep, tracker_miner_dep, tracker_sparql_dep], + c_args: [ '-DTRACKER_COMPILATION', ], + install: true, + install_dir: get_option('libexecdir'), + install_rpath: tracker_internal_libs_dir, +) + +dbus_service_file_untranslated = configure_file( + input: 'org.freedesktop.Tracker1.Miner.Applications.service.in.in', + output: 'org.freedesktop.Tracker1.Miner.Applications.service.in', + configuration: conf) + +dbus_service_file = custom_target('tracker-miner-apps-dbus-service-file', + input: dbus_service_file_untranslated, + output: 'org.freedesktop.Tracker1.Miner.Applications.service', + command: ['intltool-merge', '--quiet', '--desktop-style', '--utf8', join_paths(meson.source_root(), 'po'), '@INPUT@', '@OUTPUT@'], + install: true, + install_dir: dbus_services_dir) + +desktop_file_untranslated = configure_file( + input: 'tracker-miner-apps.desktop.in.in', + output: 'tracker-miner-apps.desktop.in', + configuration: conf) + +desktop_file = custom_target('tracker-miner-apps-desktop-file', + input: desktop_file_untranslated, + output: 'tracker-miner-apps.desktop', + command: ['intltool-merge', '--quiet', '--desktop-style', '--utf8', join_paths(meson.source_root(), 'po'), '@INPUT@', '@OUTPUT@'], + install: true, + install_dir: join_paths(get_option('sysconfdir'), 'xdg/autostart')) + +if install_systemd_user_services + configure_file( + input: 'tracker-miner-apps.service.in', + output: 'tracker-miner-apps.service', + configuration: conf, + install: true, + install_dir: systemd_user_services_dir) +endif diff --git a/src/miners/fs/meson.build b/src/miners/fs/meson.build new file mode 100644 index 000000000..c886ad6ba --- /dev/null +++ b/src/miners/fs/meson.build @@ -0,0 +1,72 @@ +sources = [ + 'tracker-config.c', + 'tracker-extract-watchdog.c', + 'tracker-main.c', + 'tracker-miner-files.c', + 'tracker-miner-files-index.c', + 'tracker-miner-files-peer-listener.c', + 'tracker-storage.c', + 'tracker-writeback-listener.c', + 'tracker-writeback-dispatcher.c', + 'tracker-writeback.c', +] + +if battery_detection_library_name == 'upower' + sources += 'tracker-power-upower.c' +elif battery_detection_library_name == 'hal' + sources += 'tracker-power-hal.c' +endif + +executable('tracker-miner-fs', sources, + dependencies: [tracker_common_dep, tracker_miner_dep, tracker_extract_dep], + c_args: [ + '-DTRACKER_COMPILATION', + ], + install: true, + install_dir: get_option('libexecdir'), + install_rpath: tracker_internal_libs_dir, +) + +install_data( + sources: 'tracker-miner-files-index.xml', + install_dir: join_paths(get_option('datadir'), 'tracker')) + +dbus_service_file_untranslated = configure_file( + input: 'org.freedesktop.Tracker1.Miner.Files.service.in.in', + output: 'org.freedesktop.Tracker1.Miner.Files.service.in', + configuration: conf) + +dbus_service_file = custom_target('tracker-miner-files-dbus-service-file', + input: dbus_service_file_untranslated, + output: 'org.freedesktop.Tracker1.Miner.Files.service', + command: ['intltool-merge', '--quiet', '--desktop-style', '--utf8', join_paths(meson.source_root(), 'po'), '@INPUT@', '@OUTPUT@'], + install: true, + install_dir: dbus_services_dir) + +desktop_file_untranslated = configure_file( + input: 'tracker-miner-fs.desktop.in.in', + output: 'tracker-miner-fs.desktop.in', + configuration: conf) + +desktop_file = custom_target('tracker-miner-fs-desktop-file', + input: desktop_file_untranslated, + output: 'tracker-miner-fs.desktop', + command: ['intltool-merge', '--quiet', '--desktop-style', '--utf8', join_paths(meson.source_root(), 'po'), '@INPUT@', '@OUTPUT@'], + install: true, + install_dir: join_paths(get_option('sysconfdir'), 'xdg/autostart')) + +custom_target('tracker-miner-fs-settings-schema', + input: 'org.freedesktop.Tracker.Miner.Files.gschema.xml.in', + output: 'org.freedesktop.Tracker.Miner.Files.gschema.xml', + command: ['intltool-merge', '--quiet', '--xml-style', '--utf8', join_paths(meson.source_root(), 'po'), '@INPUT@', '@OUTPUT@'], + install: true, + install_dir: join_paths(get_option('datadir'), 'glib-2.0', 'schemas')) + +if install_systemd_user_services + configure_file( + input: 'tracker-miner-fs.service.in', + output: 'tracker-miner-fs.service', + configuration: conf, + install: true, + install_dir: systemd_user_services_dir) +endif diff --git a/src/miners/meson.build b/src/miners/meson.build new file mode 100644 index 000000000..605c7ec61 --- /dev/null +++ b/src/miners/meson.build @@ -0,0 +1,4 @@ +subdir('fs') +subdir('rss') +subdir('apps') +subdir('user-guides') diff --git a/src/miners/rss/meson.build b/src/miners/rss/meson.build new file mode 100644 index 000000000..536e1d817 --- /dev/null +++ b/src/miners/rss/meson.build @@ -0,0 +1,43 @@ +sources = [ + 'tracker-main.c', + 'tracker-miner-rss.c', +] + +executable('tracker-miner-rss', sources, + dependencies: [libgrss, tracker_common_dep, tracker_miner_dep, tracker_extract_dep], + c_args: [ '-DTRACKER_COMPILATION', ], + install_rpath: tracker_internal_libs_dir, +) + +dbus_service_file_untranslated = configure_file( + input: 'org.freedesktop.Tracker1.Miner.RSS.service.in.in', + output: 'org.freedesktop.Tracker1.Miner.RSS.service.in', + configuration: conf) + +dbus_service_file = custom_target('tracker-miner-rss-dbus-service-file', + input: dbus_service_file_untranslated, + output: 'org.freedesktop.Tracker1.Miner.RSS.service', + command: ['intltool-merge', '--quiet', '--desktop-style', '--utf8', join_paths(meson.source_root(), 'po'), '@INPUT@', '@OUTPUT@'], + install: true, + install_dir: dbus_services_dir) + +desktop_file_untranslated = configure_file( + input: 'tracker-miner-rss.desktop.in.in', + output: 'tracker-miner-rss.desktop.in', + configuration: conf) + +desktop_file = custom_target('tracker-miner-rss-desktop-file', + input: desktop_file_untranslated, + output: 'tracker-miner-rss.desktop', + command: ['intltool-merge', '--quiet', '--desktop-style', '--utf8', join_paths(meson.source_root(), 'po'), '@INPUT@', '@OUTPUT@'], + install: true, + install_dir: join_paths(get_option('sysconfdir'), 'xdg/autostart')) + +if install_systemd_user_services + configure_file( + input: 'tracker-miner-rss.service.in', + output: 'tracker-miner-rss.service', + configuration: conf, + install: true, + install_dir: systemd_user_services_dir) +endif diff --git a/src/miners/user-guides/meson.build b/src/miners/user-guides/meson.build new file mode 100644 index 000000000..05bbf1d83 --- /dev/null +++ b/src/miners/user-guides/meson.build @@ -0,0 +1,45 @@ +sources = [ + 'tracker-main.c', + 'tracker-miner-user-guides.c', +] + +executable('tracker-miner-user-guides', sources, + dependencies: [libxml2, tracker_common_dep, tracker_miner_dep, tracker_sparql_dep], + c_args: [ '-DTRACKER_COMPILATION', ], + install: true, + install_dir: get_option('libexecdir'), + install_rpath: tracker_internal_libs_dir, +) + +dbus_service_file_untranslated = configure_file( + input: 'org.freedesktop.Tracker1.Miner.Userguides.service.in.in', + output: 'org.freedesktop.Tracker1.Miner.Userguides.service.in', + configuration: conf) + +dbus_service_file = custom_target('tracker-miner-user-guides-dbus-service-file', + input: dbus_service_file_untranslated, + output: 'org.freedesktop.Tracker1.Miner.Userguides.service', + command: ['intltool-merge', '--quiet', '--desktop-style', '--utf8', join_paths(meson.source_root(), 'po'), '@INPUT@', '@OUTPUT@'], + install: true, + install_dir: dbus_services_dir) + +desktop_file_untranslated = configure_file( + input: 'tracker-miner-user-guides.desktop.in.in', + output: 'tracker-miner-user-guides.desktop.in', + configuration: conf) + +desktop_file = custom_target('tracker-miner-user-guides-desktop-file', + input: desktop_file_untranslated, + output: 'tracker-miner-user-guides.desktop', + command: ['intltool-merge', '--quiet', '--desktop-style', '--utf8', join_paths(meson.source_root(), 'po'), '@INPUT@', '@OUTPUT@'], + install: true, + install_dir: join_paths(get_option('sysconfdir'), 'xdg/autostart')) + +if install_systemd_user_services + configure_file( + input: 'tracker-miner-user-guides.service.in', + output: 'tracker-miner-user-guides.service', + configuration: conf, + install: true, + install_dir: systemd_user_services_dir) +endif diff --git a/src/tracker-extract/meson.build b/src/tracker-extract/meson.build new file mode 100644 index 000000000..2ce2a92ec --- /dev/null +++ b/src/tracker-extract/meson.build @@ -0,0 +1,205 @@ +# Extract modules are tracked here as arrays with the following elements: +# +# [ name, source-files, rule-files, dependencies ] +# +# This might be nicer if Meson supported dictionary types. + +modules = [ + ['extract-bmp', 'tracker-extract-bmp.c', '10-bmp.rule', [tracker_common_dep]], + ['extract-dummy', 'tracker-extract-dummy.c', ['10-comics.rule', '10-ebooks.rule'], [tracker_common_dep]] +] + +if get_option('abiword') + modules += [['extract-abw', 'tracker-extract-abw.c', '10-abw.rule', [tracker_common_dep]]] +endif + +if get_option('dvi') + modules += [['extract-dvi', 'tracker-extract-dvi.c', '10-dvi.rule', [tracker_common_dep]]] +endif + +if libgsf.found() + modules += [['extract-epub', 'tracker-extract-epub.c', '10-epub.rule', [libgsf, tracker_common_dep]]] + modules += [['extract-msoffice', 'tracker-extract-msoffice.c', '10-msoffice.rule', [libgsf, tracker_common_dep]]] + modules += [['extract-msoffice-xml', 'tracker-extract-msoffice-xml.c', '11-msoffice-xml.rule', [libgsf, tracker_common_dep]]] + modules += [['extract-oasis', 'tracker-extract-oasis.c', '10-oasis.rule', [libgsf, tracker_common_dep]]] +endif + +if flac.found() + modules += [['extract-flac', 'tracker-extract-flac.c', '10-flac.rule', [flac, tracker_common_dep]]] +endif + +if libgif.found() + modules += [['extract-gif', 'tracker-extract-gif.c', '10-gif.rule', [libgif, tracker_common_dep]]] +endif + +if generic_media_handler_name == 'gstreamer' + sources = ['tracker-extract-gstreamer.c', 'tracker-cue-sheet.c'] + rules = ['10-svg.rule', '15-gstreamer-guess.rule', '90-gstreamer-image-generic.rule', '90-gstreamer-audio-generic.rule', '90-gstreamer-video-generic.rule'] + dependencies = [gstreamer, libcue, tracker_common_dep] + + if gstreamer_backend_name == 'GUPnP-DNLA' + rules += '91-gstreamer-generic-dnla.rule' + dependencies += gupnp_dnla + elif gstreamer_backend_name == 'discoverer' + dependencies += gstreamer_pbutils + endif + + modules += [['extract-gstreamer', sources, rules, dependencies]] +endif + +if libxml2.found() + modules += [['extract-html', 'tracker-extract-html.c', '10-html.rule', [libxml2]]] +endif + +if libjpeg.found() + modules += [['extract-jpeg', 'tracker-extract-jpeg.c', '10-jpeg.rule', [libjpeg, tracker_common_dep]]] +endif + +if generic_media_handler_name == 'libav' + rules = ['90-libav-audio-generic.rule', '90-libav-video-generic.rule'] + dependencies = [avcodec, avformat, avutil, tracker_common_dep] + modules += [['extract-libav', 'tracker-extract-libav.c', rules, dependencies]] +endif + +if get_option('icon') + modules += [['extract-icon', 'tracker-extract-icon.c', '10-ico.rule', []]] +endif + +if libosinfo.found() + modules += [['extract-iso', 'tracker-extract-iso.c', '11-iso.rule', [libosinfo]]] +endif + +if get_option('mp3') + modules += [['extract-mp3', 'tracker-extract-mp3.c', '10-mp3.rule', [tracker_common_dep]]] +endif + +if poppler.found() + modules += [['extract-pdf', 'tracker-extract-pdf.c', '10-pdf.rule', [poppler, tracker_common_dep]]] +endif + +if totem_plparser.found() + modules += [['extract-playlist', 'tracker-extract-playlist.c', '15-playlist.rule', [totem_plparser]]] +endif + +if libpng.found() + modules += [['extract-png', 'tracker-extract-png.c', '10-png.rule', [libpng, tracker_common_dep]]] +endif + +if get_option('ps') + modules += [['extract-ps', 'tracker-extract-ps.c', '10-ps.rule', [tracker_common_dep]]] +endif + +if get_option('text') + modules += [['extract-text', 'tracker-extract-text.c', ['15-source-code.rule', '90-text-generic.rule'], []]] +endif + +if libtiff.found() + modules += [['extract-tiff', 'tracker-extract-tiff.c', '10-tiff.rule', [libtiff, tracker_common_dep]]] +endif + +if libvorbis.found() + modules += [['extract-vorbis', 'tracker-extract-vorbis.c', '10-vorbis.rule', [libvorbis, tracker_common_dep]]] +endif + +if exempi.found() + modules += [['extract-xmp', 'tracker-extract-xmp.c', '10-xmp.rule', []]] +endif + +if libgxps.found() + modules += [['extract-xps', 'tracker-extract-xps.c', '10-xps.rule', [libgxps, tracker_common_dep]]] +endif + + +foreach module : modules + name = module[0] + sources = module[1] + rule = module[2] + dependencies = module[3] + + shared_module(name, sources, + c_args: [ '-DTRACKER_COMPILATION' ], + dependencies: [tracker_extract_dep] + dependencies, + include_directories: configinc, + install: true, + install_dir: tracker_extract_modules_dir) + + install_data(rule, install_dir: tracker_extract_rules_dir) +endforeach + +tracker_extract_priority_dbus = gnome.gdbus_codegen( + 'tracker-extract-priority-dbus', + 'tracker-extract-priority.xml', + interface_prefix: 'org.freedesktop.Tracker1.Extract.', + namespace: 'TrackerExtractDBus') + +tracker_extract_sources = [ + 'tracker-config.c', + 'tracker-extract.c', + 'tracker-extract-controller.c', + 'tracker-extract-decorator.c', + 'tracker-extract-persistence.c', + 'tracker-read.c', + 'tracker-main.c', + tracker_extract_priority_dbus +] + +tracker_extract_dependencies = [ + tracker_common_dep, tracker_data_dep, tracker_extract_dep, + tracker_miner_dep, tracker_sparql_dep +] + +if libgsf.found() + tracker_extract_sources += 'tracker-gsf.c' + tracker_extract_dependencies += libgsf +endif + +executable('tracker-extract', + tracker_extract_sources, + c_args: [ '-DTRACKER_COMPILATION' ], + dependencies: tracker_extract_dependencies, + install: true, + install_dir: join_paths(get_option('prefix'), get_option('libexecdir'))) + +install_data( + 'tracker-extract-priority.xml', + install_dir: join_paths(get_option('prefix'), get_option('datadir'), 'tracker')) + +dbus_service_file_untranslated = configure_file( + input: 'org.freedesktop.Tracker1.Miner.Extract.service.in.in', + output: 'org.freedesktop.Tracker1.Miner.Extract.service.in', + configuration: conf) + +dbus_service_file = custom_target('tracker-extract-dbus-service-file', + input: dbus_service_file_untranslated, + output: 'org.freedesktop.Tracker1.Miner.Extract.service', + command: ['intltool-merge', '--quiet', '--desktop-style', '--utf8', join_paths(meson.source_root(), 'po'), '@INPUT@', '@OUTPUT@'], + install: true, + install_dir: dbus_services_dir) + +desktop_file_untranslated = configure_file( + input: 'tracker-extract.desktop.in.in', + output: 'tracker-extract.desktop.in', + configuration: conf) + +desktop_file = custom_target('tracker-extract-desktop-file', + input: desktop_file_untranslated, + output: 'tracker-extract.desktop', + command: ['intltool-merge', '--quiet', '--desktop-style', '--utf8', join_paths(meson.source_root(), 'po'), '@INPUT@', '@OUTPUT@'], + install: true, + install_dir: join_paths(get_option('sysconfdir'), 'xdg/autostart')) + +custom_target('tracker-extract-settings-schema', + input: 'org.freedesktop.Tracker.Extract.gschema.xml.in', + output: 'org.freedesktop.Tracker.Extract.gschema.xml', + command: ['intltool-merge', '--quiet', '--xml-style', '--utf8', join_paths(meson.source_root(), 'po'), '@INPUT@', '@OUTPUT@'], + install: true, + install_dir: join_paths(get_option('datadir'), 'glib-2.0', 'schemas')) + +if install_systemd_user_services + configure_file( + input: 'tracker-extract.service.in', + output: 'tracker-extract.service', + configuration: conf, + install: true, + install_dir: systemd_user_services_dir) +endif diff --git a/src/tracker-needle/meson.build b/src/tracker-needle/meson.build new file mode 100644 index 000000000..211940601 --- /dev/null +++ b/src/tracker-needle/meson.build @@ -0,0 +1,46 @@ +executable( + 'tracker-needle', + 'config.vapi', + 'tracker-needle.vala', + 'tracker-history.vala', + 'tracker-needle.vala', + 'tracker-query.vala', + 'tracker-result-store.vala', + 'tracker-stats.vala', + 'tracker-tags-view.vala', + 'tracker-utils.vala', + 'tracker-view.vala', + dependencies: [tracker_common_dep, tracker_sparql_dep, gtk3], + c_args: [ + '-D_XOPEN_SOURCE', + '-D_XOPEN_SOURCE_EXTENDED', + '-include', 'config.h' + ], + install: true, + install_rpath: tracker_internal_libs_dir +) + +custom_target('tracker-needle-settings-schema', + input: 'org.freedesktop.Tracker.Needle.gschema.xml.in', + output: 'org.freedesktop.Tracker.Needle.gschema.xml', + command: ['intltool-merge', '--quiet', '--xml-style', '--utf8', join_paths(meson.source_root(), 'po'), '@INPUT@', '@OUTPUT@'], + install: true, + install_dir: join_paths(get_option('datadir'), 'glib-2.0', 'schemas')) + +install_data('tracker-needle.ui', + install_dir: join_paths(get_option('datadir'), 'tracker')) + +desktop_file_untranslated = configure_file( + input: 'tracker-needle.desktop.in.in', + output: 'tracker-needle.desktop.in', + configuration: conf) + +desktop_file = custom_target('tracker-needle-desktop-file', + input: desktop_file_untranslated, + output: 'tracker-needle.desktop', + command: ['intltool-merge', '--quiet', '--desktop-style', '--utf8', join_paths(meson.source_root(), 'po'), '@INPUT@', '@OUTPUT@'], + install: true, + install_dir: join_paths(get_option('datadir'), 'applications')) + +install_data('tracker-needle.appdata.xml', + install_dir: join_paths(get_option('datadir'), 'tracker-needle.appdata.xml')) diff --git a/src/tracker-preferences/meson.build b/src/tracker-preferences/meson.build new file mode 100644 index 000000000..9ebe90209 --- /dev/null +++ b/src/tracker-preferences/meson.build @@ -0,0 +1,38 @@ +executable( + 'tracker-preferences', + 'config.vapi', + 'tracker-preferences.vala', + '../miners/fs/tracker-config.c', + dependencies: [tracker_common_dep, tracker_sparql_dep, gmodule, gtk3], + c_args: [ + '-D_XOPEN_SOURCE', + '-D_XOPEN_SOURCE_EXTENDED', + '-DTRACKER_COMPILATION', + '-include', 'config.h' + ], + vala_args: [ + '--pkg', 'posix' + ], + install: true, + install_rpath: tracker_internal_libs_dir +) + +desktop_file_untranslated = configure_file( + input: 'tracker-preferences.desktop.in.in', + output: 'tracker-preferences.desktop.in', + configuration: conf) + +desktop_file = custom_target('tracker-preferences-desktop-file', + input: desktop_file_untranslated, + output: 'tracker-preferences.desktop', + command: ['intltool-merge', '--quiet', '--desktop-style', '--utf8', join_paths(meson.source_root(), 'po'), '@INPUT@', '@OUTPUT@'], + install: true, + install_dir: join_paths(get_option('prefix'), get_option('datadir'), 'applications')) + +install_data( + 'tracker-preferences.appdata.xml', + install_dir: join_paths(get_option('prefix'), get_option('datadir'), 'appdata')) + +install_data( + 'tracker-preferences.ui', + install_dir: join_paths(get_option('prefix'), get_option('datadir'))) diff --git a/src/tracker-store/meson.build b/src/tracker-store/meson.build new file mode 100644 index 000000000..6b1b5408d --- /dev/null +++ b/src/tracker-store/meson.build @@ -0,0 +1,84 @@ +tracker_store_sources = [ + 'tracker-backup.vala', + 'tracker-config.c', + 'tracker-dbus.vala', + 'tracker-events.c', + 'tracker-main.vala', + 'tracker-resources.vala', + 'tracker-statistics.vala', + 'tracker-status.vala', + 'tracker-steroids.vala', + 'tracker-store.vala', + 'tracker-writeback.c', + 'tracker-config.vapi', + 'tracker-events.vapi', + 'tracker-locale-change.vapi', + 'tracker-writeback.vapi', + '../libtracker-common/libtracker-common.vapi', + '../libtracker-data/libtracker-data.vapi', +] + +executable('tracker-store', + tracker_store_sources, + c_args: [ + '-DTRACKER_COMPILATION', + '-include', 'config.h' + ], + vala_args: [ '--pkg', 'posix' ], + dependencies: [ + tracker_common_dep, tracker_data_dep, + gio_unix + ], + install: true, + install_dir: join_paths(get_option('prefix'), get_option('libexecdir')), + install_rpath: tracker_internal_libs_dir) + +install_data( + 'tracker-backup.xml', + 'tracker-resources.xml', + 'tracker-statistics.xml', + 'tracker-status.xml', + install_dir: join_paths(get_option('prefix'), get_option('datadir'), 'tracker')) + +dbus_service_file = custom_target('tracker-store-dbus-service-file', + input: 'org.freedesktop.Tracker1.service.in', + output: 'org.freedesktop.Tracker1.service', + command: ['intltool-merge', '--quiet', '--desktop-style', '--utf8', join_paths(meson.source_root(), 'po'), '@INPUT@', '@OUTPUT@'], + install: true, + install_dir: dbus_services_dir) + +desktop_file_untranslated = configure_file( + input: 'tracker-store.desktop.in.in', + output: 'tracker-store.desktop.in', + configuration: conf) + +desktop_file = custom_target('tracker-store-desktop-file', + input: desktop_file_untranslated, + output: 'tracker-store.desktop', + command: ['intltool-merge', '--quiet', '--desktop-style', '--utf8', join_paths(meson.source_root(), 'po'), '@INPUT@', '@OUTPUT@'], + install: true, + install_dir: join_paths(get_option('sysconfdir'), 'xdg/autostart')) + +if install_systemd_user_services + configure_file( + input: 'tracker-store.service.in', + output: 'tracker-store.service', + configuration: conf, + install: true, + install_dir: systemd_user_services_dir) +endif + +custom_target('tracker-store-settings-schema', + input: 'org.freedesktop.Tracker.Store.gschema.xml.in', + output: 'org.freedesktop.Tracker.Store.gschema.xml', + command: ['intltool-merge', '--quiet', '--xml-style', '--utf8', join_paths(meson.source_root(), 'po'), '@INPUT@', '@OUTPUT@'], + install: true, + install_dir: join_paths(get_option('datadir'), 'glib-2.0', 'schemas')) + +custom_target('tracker-store-settings-schemalist', + input: 'org.freedesktop.Tracker.gschema.xml.in', + output: 'org.freedesktop.Tracker.gschema.xml', + command: ['intltool-merge', '--quiet', '--xml-style', '--utf8', join_paths(meson.source_root(), 'po'), '@INPUT@', '@OUTPUT@'], + install: true, + install_dir: join_paths(get_option('datadir'), 'glib-2.0', 'schemas')) + diff --git a/src/tracker-writeback/Makefile.am b/src/tracker-writeback/Makefile.am index b4849c1ff..a86ef424b 100644 --- a/src/tracker-writeback/Makefile.am +++ b/src/tracker-writeback/Makefile.am @@ -87,12 +87,10 @@ gsettings_SCHEMAS = org.freedesktop.Tracker.Writeback.gschema.xml CLEANFILES = \ $(service_DATA) \ $(systemd_user_DATA) \ - $(gsettings_SCHEMAS) \ - $(man_MANS) + $(gsettings_SCHEMAS) EXTRA_DIST = \ $(service_DATA:.service=.service.in) \ $(systemd_user_DATA:.service=.service.in) \ $(config_DATA) \ - $(gsettings_SCHEMAS:.xml=.xml.in) \ - $(man_MANS) + $(gsettings_SCHEMAS:.xml=.xml.in) diff --git a/src/tracker-writeback/meson.build b/src/tracker-writeback/meson.build new file mode 100644 index 000000000..a525f3686 --- /dev/null +++ b/src/tracker-writeback/meson.build @@ -0,0 +1,77 @@ +# Writeback modules are tracked here as arrays with the following elements: +# +# [ name, source-files, dependencies ] +# +# This might be nicer if Meson supported dictionary types. + +modules = [] + +if taglib.found() + modules += [['writeback-taglib', 'tracker-writeback-taglib.c', [tracker_common_dep, tracker_miner_dep, tracker_sparql_dep, taglib]]] +endif + +if exempi.found() + modules += [['writeback-xmp', 'tracker-writeback-xmp.c', [tracker_common_dep, tracker_miner_dep, tracker_sparql_dep, exempi]]] +endif + +foreach module : modules + name = module[0] + sources = module[1] + dependencies = module[2] + + shared_module(name, sources, + c_args: [ '-DTRACKER_COMPILATION' ], + dependencies: dependencies, + include_directories: configinc, + install: true, + install_dir: tracker_writeback_modules_dir) +endforeach + +tracker_writeback_sources = [ + 'tracker-config.c', + 'tracker-config.h', + 'tracker-writeback-file.c', + 'tracker-writeback-file.h', + 'tracker-writeback-module.c', + 'tracker-writeback-module.h', + 'tracker-writeback.c', + 'tracker-writeback.h', + 'tracker-main.c' +] + +executable('tracker-writeback', + tracker_writeback_sources, + c_args: [ + '-DTRACKER_COMPILATION', + '-DWRITEBACK_MODULES_DIR="@0@"'.format(tracker_writeback_modules_dir), + ], + dependencies: [gmodule, tracker_common_dep, tracker_miner_dep, tracker_sparql_dep], + install: true, + install_dir: join_paths(get_option('prefix'), get_option('libexecdir'))) + +install_data( + 'tracker-writeback.xml', + install_dir: join_paths(get_option('prefix'), get_option('datadir'), 'tracker')) + +dbus_service_file = configure_file( + input: 'org.freedesktop.Tracker1.Writeback.service.in', + output: 'org.freedesktop.Tracker1.Writeback.service', + configuration: conf, + install: true, + install_dir: dbus_services_dir) + +custom_target('tracker-writeback-settings-schema', + input: 'org.freedesktop.Tracker.Writeback.gschema.xml.in', + output: 'org.freedesktop.Tracker.Writeback.gschema.xml', + command: ['intltool-merge', '--quiet', '--xml-style', '--utf8', join_paths(meson.source_root(), 'po'), '@INPUT@', '@OUTPUT@'], + install: true, + install_dir: join_paths(get_option('datadir'), 'glib-2.0', 'schemas')) + +if install_systemd_user_services + configure_file( + input: 'tracker-writeback.service.in', + output: 'tracker-writeback.service', + configuration: conf, + install: true, + install_dir: systemd_user_services_dir) +endif diff --git a/src/tracker/meson.build b/src/tracker/meson.build new file mode 100644 index 000000000..68ab52ecc --- /dev/null +++ b/src/tracker/meson.build @@ -0,0 +1,39 @@ +sources = [ + 'tracker-main.c', + 'tracker-config.c', + 'tracker-daemon.c', + 'tracker-dbus.c', + 'tracker-extract.c', + 'tracker-help.c', + 'tracker-index.c', + 'tracker-info.c', + 'tracker-process.c', + 'tracker-reset.c', + 'tracker-search.c', + 'tracker-sparql.c', + 'tracker-sql.c', + 'tracker-status.c', + 'tracker-tag.c', +] + +executable('tracker', sources, + c_args: [ + '-DLIBEXECDIR="@0@"'.format(join_paths(get_option('prefix'), get_option('libexecdir'))), + '-DMANDIR="@0@"'.format(join_paths(get_option('prefix'), get_option('datadir'), 'man')), + '-DTRACKER_EXTRACTOR_RULES_DIR="@0@"'.format(tracker_extract_rules_dir), + '-DTRACKER_COMPILATION', + ], + install: true, + install_rpath: tracker_internal_libs_dir, + # This doesn't depend on tracker_common_dep because of + # https://github.com/mesonbuild/meson/issues/671 + dependencies: [tracker_control_dep, tracker_sparql_dep, tracker_data_dep], + include_directories: [commoninc, configinc, srcinc], +) + + +if install_bash_completion + install_data( + sources: 'bash-completion/tracker', + install_dir: bash_completion_dir) +endif diff --git a/tests/common/meson.build b/tests/common/meson.build new file mode 100644 index 000000000..2598745fa --- /dev/null +++ b/tests/common/meson.build @@ -0,0 +1,15 @@ +tracker_testcommon_dependencies = [glib] + +libtracker_testcommon = library('tracker-testcommon', + 'tracker-test-helpers.c', + dependencies: tracker_testcommon_dependencies, + c_args: [ + '-DTEST_TEXT="@0@/tests/libtracker-common/non-utf8.txt"'.format(meson.source_root()), + ] +) + +tracker_testcommon_dep = declare_dependency( + link_with: libtracker_testcommon, + dependencies: tracker_testcommon_dependencies, + include_directories: include_directories('.'), +) diff --git a/tests/functional-tests/ipc/meson.build b/tests/functional-tests/ipc/meson.build new file mode 100644 index 000000000..c458ac806 --- /dev/null +++ b/tests/functional-tests/ipc/meson.build @@ -0,0 +1,53 @@ +insert_or_replace_test = executable('test-insert-or-replace', + 'test-insert-or-replace.vala', + dependencies: [tracker_common_dep, tracker_sparql_dep]) +test('functional-ipc-insert-or-replace', insert_or_replace_test) + +busy_handling_test = executable('test-busy-handling', + 'test-busy-handling.vala', + dependencies: [tracker_common_dep, tracker_sparql_dep]) +test('functional-ipc-busy-handling', busy_handling_test) + +direct_query_test = executable('test-direct-query', + 'test-direct-query.vala', + 'test-shared-query.vala', + dependencies: [tracker_common_dep, tracker_sparql_dep]) +test('functional-ipc-direct-query', direct_query_test) + +bus_query_test = executable('test-bus-query', + 'test-bus-query.vala', + 'test-shared-query.vala', + dependencies: [tracker_common_dep, tracker_sparql_dep, tracker_sparql_bus_dep]) +test('functional-ipc-bus-query', bus_query_test) + +default_update_test = executable('test-default-update', + 'test-default-update.vala', + 'test-shared-update.vala', + dependencies: [tracker_common_dep, tracker_sparql_dep]) +test('functional-ipc-default-update', default_update_test) + +bus_update_test = executable('test-bus-update', + 'test-bus-update.vala', + 'test-shared-update.vala', + dependencies: [tracker_common_dep, tracker_sparql_dep, tracker_sparql_bus_dep]) +test('functional-ipc-bus-update', bus_update_test) + +class_signal_test = executable('test-class-signal', + 'test-class-signal.vala', + dependencies: [tracker_common_dep, tracker_sparql_dep]) +test('functional-ipc-class-signal', class_signal_test) + +class_signal_performance_test = executable('test-class-signal-performance', + 'test-class-signal-performance.vala', + dependencies: [tracker_common_dep, tracker_sparql_dep]) +test('functional-ipc-class-signal-performance', class_signal_performance_test) + +class_signal_performance_batch_test = executable('test-class-signal-performance-batch', + 'test-class-signal-performance-batch.vala', + dependencies: [tracker_common_dep, tracker_sparql_dep]) +test('functional-ipc-class-signal-performance-batch', class_signal_performance_batch_test) + +update_array_performance_test = executable('test-update-array-performance', + 'test-update-array-performance.c', + dependencies: [tracker_common_dep, tracker_sparql_dep]) +test('functional-ipc-update-array-performance', update_array_performance_test) diff --git a/tests/functional-tests/meson.build b/tests/functional-tests/meson.build new file mode 100644 index 000000000..af8085389 --- /dev/null +++ b/tests/functional-tests/meson.build @@ -0,0 +1,41 @@ +subdir('ipc') + +test_runner = find_program('test-runner.sh') + +functional_tests = [ + '01-insertion', + '02-sparql-bugs', + '03-fts-functions', + '04-group-concat', + '05-coalesce', + '06-distance', + '07-graph', + '08-unique-insertions', + '09-concurrent-query', + '10-sqlite-misused', + '11-sqlite-batch-misused', + '12-transactions', + '13-threaded-store', + '14-signals', + '15-statistics', + '16-collation', + '17-ontology-changes', + '200-backup-restore', + '300-miner-basic-ops', + '301-miner-resource-removal', + '310-fts-indexing', + '400-extractor-metadata', + '410-extractor-decorator', + '500-writeback', + '501-writeback-details', + '600-applications-camera', + '601-applications-sync', +] + +foreach t: functional_tests + test('functional-' + t, test_runner, + args: './' + t + '.py', + workdir: meson.current_source_dir(), + # FIXME: these tests are all too slow + timeout: 180) +endforeach diff --git a/tests/gvdb/meson.build b/tests/gvdb/meson.build new file mode 100644 index 000000000..89ab72575 --- /dev/null +++ b/tests/gvdb/meson.build @@ -0,0 +1,7 @@ +gvdb_test = executable('gvdb-test', + 'gvdb-test.c', + dependencies: gvdb_dep, + include_directories: configinc, +) + +test('gvdb', gvdb_test) diff --git a/tests/libtracker-common/meson.build b/tests/libtracker-common/meson.build new file mode 100644 index 000000000..03c99539f --- /dev/null +++ b/tests/libtracker-common/meson.build @@ -0,0 +1,61 @@ +test_c_args = [ + '-DTRACKER_COMPILATION', + '-DTOP_BUILDDIR="@0@"'.format(meson.build_root()), + '-DTOP_SRCDIR="@0@"'.format(meson.source_root()), +] + +date_time_test = executable('tracker-date-time-test', + 'tracker-date-time-test.c', + dependencies: tracker_common_dep, + c_args: test_c_args, +) +test('common-date-time', date_time_test) + +dbus_test = executable('tracker-dbus-test', + 'tracker-dbus-test.c', + dependencies: [tracker_common_dep, tracker_testcommon_dep], + c_args: test_c_args, +) +test('common-dbus', dbus_test) + +file_utils_test = executable('tracker-file-utils-test', + 'tracker-file-utils-test.c', + dependencies: [tracker_common_dep, tracker_testcommon_dep], + c_args: test_c_args, +) +test('common-file-utils', file_utils_test) + +parser_test = executable('tracker-parser-test', + 'tracker-parser-test.c', + dependencies: [tracker_common_dep, tracker_testcommon_dep], + c_args: test_c_args, +) +test('common-parser', parser_test) + +sched_test = executable('tracker-sched-test', + 'tracker-sched-test.c', + dependencies: [tracker_common_dep, tracker_testcommon_dep], + c_args: test_c_args, +) +test('common-sched', sched_test) + +type_utils_test = executable('tracker-type-utils-test', + 'tracker-type-utils-test.c', + dependencies: tracker_common_dep, + c_args: test_c_args, +) +test('common-type-utils', type_utils_test) + +utils_test = executable('tracker-utils-test', + 'tracker-utils-test.c', + dependencies: tracker_common_dep, + c_args: test_c_args, +) +test('common-utils', utils_test) + +# This is a manual test case +parser_testcase = executable('tracker-parser', + 'tracker-parser.c', + dependencies: tracker_common_dep, + c_args: test_c_args, +) diff --git a/tests/libtracker-data/meson.build b/tests/libtracker-data/meson.build new file mode 100644 index 000000000..84a9e5b46 --- /dev/null +++ b/tests/libtracker-data/meson.build @@ -0,0 +1,51 @@ +test_c_args = [ + '-DTRACKER_COMPILATION', + '-DTOP_BUILDDIR="@0@"'.format(meson.build_root()), + '-DTOP_SRCDIR="@0@"'.format(meson.source_root()), +] + +backup_test = executable('tracker-backup-test', + 'tracker-backup-test.c', + dependencies: [tracker_common_dep, tracker_data_dep], + c_args: test_c_args) +test('data-backup', backup_test) + +crc32_test = executable('tracker-crc32-test', + 'tracker-crc32-test.c', + dependencies: [tracker_common_dep, tracker_data_dep], + c_args: test_c_args) +test('data-crc32', crc32_test) + +db_journal_test = executable('tracker-db-journal-test', + 'tracker-db-journal.c', + dependencies: [tracker_common_dep, tracker_data_dep], + c_args: test_c_args) +test('data-db-journal', db_journal_test) + +ontology_test = executable('tracker-ontology-test', + 'tracker-ontology-test.c', + dependencies: [tracker_common_dep, tracker_data_dep], + c_args: test_c_args) +test('data-ontology', ontology_test, + # FIXME: why is this test so slow? + timeout: 180) + +ontology_change_test = executable('tracker-ontology-change-test', + 'tracker-ontology-change-test.c', + dependencies: [tracker_common_dep, tracker_data_dep], + c_args: test_c_args) +test('data-ontology-change', ontology_change_test) + +sparql_test = executable('tracker-data-sparql-test', + 'tracker-sparql-test.c', + dependencies: [tracker_common_dep, tracker_data_dep], + c_args: test_c_args) +test('data-sparql', sparql_test, + # FIXME: why is this test so slow? + timeout: 180) + +sparql_blank_test = executable('tracker-sparql-blank-test', + 'tracker-sparql-blank-test.c', + dependencies: [tracker_common_dep, tracker_data_dep], + c_args: test_c_args) +test('data-sparql-blank', sparql_blank_test) diff --git a/tests/libtracker-extract/meson.build b/tests/libtracker-extract/meson.build new file mode 100644 index 000000000..9c0a5544d --- /dev/null +++ b/tests/libtracker-extract/meson.build @@ -0,0 +1,60 @@ +test_c_args = [ + '-DTRACKER_COMPILATION', + '-DTOP_BUILDDIR="@0@/"'.format(meson.build_root()), + '-DTOP_SRCDIR="@0@/"'.format(meson.source_root()), +] + +guarantee_test = executable('tracker-guarantee-test', + 'tracker-guarantee-test.c', + dependencies: [tracker_common_dep, tracker_extract_dep], + c_args: test_c_args, +) +test('extract-guarantee', guarantee_test) + +extract_info_test = executable('tracker-extract-info-test', + 'tracker-extract-info-test.c', + dependencies: [tracker_common_dep, tracker_extract_dep], + c_args: test_c_args, +) +test('extract-info-test', extract_info_test) + +utils_test = executable('tracker-test-utils', + 'tracker-test-utils.c', + dependencies: [tracker_common_dep, tracker_extract_dep], + c_args: test_c_args, +) +test('extract-utils', utils_test) + +xmp_test = executable('tracker-test-xmp', + 'tracker-test-xmp.c', + dependencies: [tracker_common_dep, tracker_extract_dep], + c_args: test_c_args, +) +test('extract-xmp', xmp_test) + +if libexif.found() + exif_test = executable('tracker-exif-test', + 'tracker-exif-test.c', + dependencies: [tracker_common_dep, tracker_extract_dep], + c_args: test_c_args, + ) + test('extract-exif', exif_test) +endif + +if libiptcdata.found() and libjpeg.found() + iptc_test = executable('tracker-iptc-test', + 'tracker-iptc-test.c', + dependencies: [tracker_common_dep, tracker_extract_dep, libjpeg], + c_args: test_c_args, + ) + test('extract-iptc', iptc_test) +endif + +if charset_library_name != 'none' + encoding_test = executable('tracker-encoding-test', + 'tracker-encoding-test.c', + dependencies: [tracker_common_dep, tracker_extract_dep], + c_args: test_c_args, + ) + test('extract-encoding', encoding_test) +endif diff --git a/tests/libtracker-fts/meson.build b/tests/libtracker-fts/meson.build new file mode 100644 index 000000000..ae6c6ec0f --- /dev/null +++ b/tests/libtracker-fts/meson.build @@ -0,0 +1,13 @@ +test_c_args = [ + '-DTRACKER_COMPILATION', + '-DTOP_BUILDDIR="@0@/"'.format(meson.build_root()), + '-DTOP_SRCDIR="@0@/"'.format(meson.source_root()), +] + +fts_test = executable('tracker-fts-test', + 'tracker-fts-test.c', + dependencies: [tracker_common_dep, tracker_sparql_dep, tracker_data_dep, tracker_testcommon_dep], + c_args: test_c_args +) + +test('fts', fts_test) diff --git a/tests/libtracker-miner/meson.build b/tests/libtracker-miner/meson.build new file mode 100644 index 000000000..1033a5e94 --- /dev/null +++ b/tests/libtracker-miner/meson.build @@ -0,0 +1,69 @@ +test_c_args = [ + '-DLIBEXEC_PATH="@0@/@1@"'.format(get_option('prefix'), get_option('libexecdir')), + '-DTEST', + '-DTRACKER_COMPILATION', + '-DTEST_DATA_DIR="@0@/data"'.format(meson.current_source_dir()), + '-DTEST_MINERS_DIR="@0@/mock-miners"'.format(meson.current_source_dir()), +] + +crawler_test = executable('tracker-crawler-test', + 'tracker-crawler-test.c', + shared_libtracker_miner_crawler_sources, + dependencies: [tracker_common_dep, tracker_miner_dep, tracker_sparql_dep], + c_args: test_c_args +) +test('miner-crawler', crawler_test) + +file_notifier_test = executable('tracker-file-notifier-test', + 'tracker-file-notifier-test.c', + dependencies: [tracker_common_dep, tracker_miner_dep, tracker_sparql_dep], + c_args: test_c_args +) +test('miner-file-notifier', file_notifier_test) + +file_system_test = executable('tracker-file-system-test', + 'tracker-file-system-test.c', + dependencies: [tracker_common_dep, tracker_miner_dep, tracker_sparql_dep], + c_args: test_c_args +) +test('miner-file-system', file_system_test) + +indexing_tree_test = executable('tracker-indexing-tree-test', + 'tracker-indexing-tree-test.c', + dependencies: [tracker_common_dep, tracker_miner_dep, tracker_sparql_dep], + c_args: test_c_args +) +test('miner-indexing-tree', indexing_tree_test) + +monitor_test = executable('tracker-monitor-test', + 'tracker-monitor-test.c', + shared_libtracker_miner_monitor_sources, + dependencies: [tracker_common_dep, tracker_miner_dep, tracker_sparql_dep], + c_args: test_c_args +) +test('miner-monitor', monitor_test, + # FIXME: why is this test so slow? + timeout: 180) + +priority_queue_test = executable('tracker-priority-queue-test', + 'tracker-priority-queue-test.c', + dependencies: [tracker_common_dep, tracker_miner_dep, tracker_sparql_dep], + c_args: test_c_args +) +test('miner-priority-queue', priority_queue_test) + +task_pool_test = executable('tracker-task-pool-test', + 'tracker-task-pool-test.c', + dependencies: [tracker_common_dep, tracker_miner_dep, tracker_sparql_dep], + c_args: test_c_args +) +test('miner-task-pool', task_pool_test) + +thumbnailer_test = executable('tracker-thumbnailer-test', + 'empty-gobject.c', + 'thumbnailer-mock.c', + 'tracker-thumbnailer-test.c', + dependencies: [tracker_common_dep, tracker_miner_dep, tracker_sparql_dep], + c_args: test_c_args +) +test('miner-thumbnailer', thumbnailer_test) diff --git a/tests/libtracker-sparql/meson.build b/tests/libtracker-sparql/meson.build new file mode 100644 index 000000000..91ab4a0d1 --- /dev/null +++ b/tests/libtracker-sparql/meson.build @@ -0,0 +1,19 @@ +test_c_args = ['-DTRACKER_COMPILATION'] + +resource_test = executable('tracker-resource-test', + 'tracker-resource-test.c', + dependencies: [tracker_common_dep, tracker_sparql_dep], + c_args: test_c_args) +test('sparql-resource', resource_test) + +sparql_test = executable('tracker-sparql-test', + 'tracker-sparql-test.c', + dependencies: [tracker_common_dep, tracker_sparql_dep], + c_args: test_c_args) +test('sparql', sparql_test) + +gb_737023_test = executable('tracker-gb-737023-test', + 'tracker-gb-737023.c', + dependencies: [tracker_common_dep, tracker_sparql_dep], + c_args: test_c_args) +test('gb_737023', sparql_test) diff --git a/tests/meson.build b/tests/meson.build new file mode 100644 index 000000000..0730a1121 --- /dev/null +++ b/tests/meson.build @@ -0,0 +1,26 @@ +subdir('common') + +subdir('gvdb') +subdir('libtracker-common') +subdir('libtracker-data') + +if enable_extract + subdir('libtracker-extract') +endif + +if enable_fts + subdir('libtracker-fts') +endif + +subdir('libtracker-miner') +subdir('libtracker-sparql') +subdir('tracker-steroids') + +# The test case for writeback doesn't seem to work. +#if enable_writeback +# subdir('tracker-writeback') +#endif + +if get_option('functional_tests') + subdir('functional-tests') +endif diff --git a/tests/tracker-steroids/meson.build b/tests/tracker-steroids/meson.build new file mode 100644 index 000000000..4cc69dcc4 --- /dev/null +++ b/tests/tracker-steroids/meson.build @@ -0,0 +1,7 @@ +test_c_args = ['-DTRACKER_COMPILATION'] + +steroids_test = executable('tracker-steroids-test', + 'tracker-test.c', + dependencies: [tracker_common_dep, tracker_sparql_dep], + c_args: test_c_args) +test('steroids', steroids_test) diff --git a/utils/meson.build b/utils/meson.build new file mode 100644 index 000000000..c624b4914 --- /dev/null +++ b/utils/meson.build @@ -0,0 +1,3 @@ +subdir('mtp') +subdir('ontology') +subdir('tracker-resdump') diff --git a/utils/mtp/meson.build b/utils/mtp/meson.build new file mode 100644 index 000000000..e5b180d31 --- /dev/null +++ b/utils/mtp/meson.build @@ -0,0 +1,2 @@ +executable('mtp', 'mtp-dummy.c', + dependencies: [tracker_common_dep, tracker_sparql_dep]) diff --git a/utils/ontology/meson.build b/utils/ontology/meson.build new file mode 100644 index 000000000..7ba45a1da --- /dev/null +++ b/utils/ontology/meson.build @@ -0,0 +1,7 @@ +executable('data-validator', 'data-validator.c', + dependencies: [tracker_common_dep, tracker_data_dep, tracker_sparql_dep], + c_args: ['-DTRACKER_COMPILATION']) + +executable('ontology-validator', 'ontology-validator.c', + dependencies: [tracker_common_dep, tracker_data_dep, tracker_sparql_dep], + c_args: ['-DTRACKER_COMPILATION']) diff --git a/utils/tracker-resdump/meson.build b/utils/tracker-resdump/meson.build new file mode 100644 index 000000000..86ae5d32c --- /dev/null +++ b/utils/tracker-resdump/meson.build @@ -0,0 +1,2 @@ +executable('tracker-resdump', 'tracker-resdump.vala', + dependencies: [tracker_common_dep, tracker_sparql_dep]) |