diff --git a/include/downloader.h b/include/downloader.h index 347fb1f19..a8b373cd6 100644 --- a/include/downloader.h +++ b/include/downloader.h @@ -21,7 +21,9 @@ #define KIWIX_DOWNLOADER_H #include -#include +#ifdef ENABLE_LIBARIA2 +# include +#endif #include namespace kiwix @@ -56,14 +58,15 @@ class Downloader private: static pthread_mutex_t globalLock; - aria2::Session* session; - DownloadedFile* fileHandle; std::string tmpDir; - +#ifdef ENABLE_LIBARIA2 + DownloadedFile* fileHandle; + aria2::Session* session; static int downloadEventCallback(aria2::Session* session, aria2::DownloadEvent event, aria2::A2Gid gid, void* userData); +#endif }; } diff --git a/meson.build b/meson.build index 50ae99ffe..43f87846b 100644 --- a/meson.build +++ b/meson.build @@ -17,7 +17,7 @@ thread_dep = dependency('threads') libicu_dep = dependency('icu-i18n', static:static_deps) libzim_dep = dependency('libzim', version : '>=4.0.0', static:static_deps) pugixml_dep = dependency('pugixml', static:static_deps) -libaria2_dep = dependency('libaria2', static:static_deps) +libaria2_dep = dependency('libaria2', static:static_deps, required:false) ctpp2_include_path = '' has_ctpp2_dep = false @@ -88,6 +88,13 @@ inc = include_directories('include') conf = configuration_data() conf.set('VERSION', '"@0@"'.format(meson.project_version())) conf.set('ENABLE_CTPP2', has_ctpp2_dep) +conf.set('ENABLE_LIBARIA2', libaria2_dep.found()) + +if build_machine.system() == 'windows' + extra_link_args = ['-lshlwapi', '-lwinmm'] +else + extra_link_args = [] +endif subdir('include') subdir('scripts') @@ -95,7 +102,10 @@ subdir('static') subdir('src') subdir('test') -pkg_requires = ['libzim', 'icu-i18n', 'pugixml', 'libaria2'] +pkg_requires = ['libzim', 'icu-i18n', 'pugixml'] +if libaria2_dep.found() + pkg_requires += ['libaria2'] +endif if xapian_dep.found() pkg_requires += ['xapian-core'] endif diff --git a/src/config.h.in b/src/config.h.in index 713be9c12..c6162d720 100644 --- a/src/config.h.in +++ b/src/config.h.in @@ -2,3 +2,5 @@ #mesondefine VERSION #mesondefine ENABLE_CTPP2 + +#mesondefine ENABLE_LIBARIA2 diff --git a/src/downloader.cpp b/src/downloader.cpp index b22429008..e5a565b71 100644 --- a/src/downloader.cpp +++ b/src/downloader.cpp @@ -20,7 +20,9 @@ #include "downloader.h" #include "common/pathTools.h" -#include +#ifndef _WIN32 +# include +#endif #include namespace kiwix @@ -32,6 +34,7 @@ pthread_mutex_t Downloader::globalLock = PTHREAD_MUTEX_INITIALIZER; /* Constructor */ Downloader::Downloader() { +#ifdef ENABLE_LIBARIA2 aria2::SessionConfig config; config.downloadEventCallback = Downloader::downloadEventCallback; config.userData = this; @@ -39,17 +42,20 @@ Downloader::Downloader() aria2::KeyVals options; options.push_back(std::pair("dir", tmpDir)); session = aria2::sessionNew(options, config); +#endif } /* Destructor */ Downloader::~Downloader() { +#ifdef ENABLE_LIBARIA2 aria2::sessionFinal(session); +#endif rmdir(tmpDir.c_str()); } - +#ifdef ENABLE_LIBARIA2 int Downloader::downloadEventCallback(aria2::Session* session, aria2::DownloadEvent event, aria2::A2Gid gid, @@ -85,10 +91,12 @@ int Downloader::downloadEventCallback(aria2::Session* session, aria2::deleteDownloadHandle(dh); return 0; } +#endif DownloadedFile Downloader::download(const std::string& url) { pthread_mutex_lock(&globalLock); DownloadedFile fileHandle; +#ifdef ENABLE_LIBARIA2 try { std::vector uris = {url}; aria2::KeyVals options; @@ -106,6 +114,7 @@ DownloadedFile Downloader::download(const std::string& url) { } catch (...) {}; this->fileHandle = nullptr; pthread_mutex_unlock(&globalLock); +#endif return fileHandle; } diff --git a/src/xapianSearcher.cpp b/src/xapianSearcher.cpp index e3102b49d..3040edebf 100644 --- a/src/xapianSearcher.cpp +++ b/src/xapianSearcher.cpp @@ -20,7 +20,9 @@ #include "xapianSearcher.h" #include #include -#include +#ifndef _WIN32 +# include +#endif #include #include #include diff --git a/test/meson.build b/test/meson.build index 9accb6562..9d29177fe 100644 --- a/test/meson.build +++ b/test/meson.build @@ -10,6 +10,7 @@ gtest_dep = dependency('gtest', fallback: ['gtest', 'gtest_dep']) foreach test_name : tests test_exe = executable(test_name, [test_name+'.cpp'], link_with : kiwixlib, + link_args: extra_link_args, dependencies : all_deps + [gtest_dep], build_rpath : '$ORIGIN') test(test_name, test_exe)