From 84796abb4ca7094673c01d5bc7919a5237a45791 Mon Sep 17 00:00:00 2001 From: Matthieu Gautier Date: Wed, 22 Feb 2017 12:05:44 +0100 Subject: [PATCH] Make use of ctpp2 optional. --- include/meson.build | 10 ++-- include/searcher.h | 12 +---- kiwix.pc.in | 10 ++++ meson.build | 108 +++++++++++++++++++++++++++----------------- src/config.h.in | 4 ++ src/meson.build | 10 +++- src/searcher.cpp | 11 ++++- 7 files changed, 107 insertions(+), 58 deletions(-) create mode 100644 kiwix.pc.in create mode 100644 src/config.h.in diff --git a/include/meson.build b/include/meson.build index c41fbfec0..e1ec8db36 100644 --- a/include/meson.build +++ b/include/meson.build @@ -23,8 +23,10 @@ install_headers( subdir:'kiwix/common' ) +if has_ctpp2_dep + install_headers( + 'ctpp2/CTPP2VMStringLoader.hpp', + subdir:'kiwix/ctpp2' + ) +endif -install_headers( - 'ctpp2/CTPP2VMStringLoader.hpp', - subdir:'kiwix/ctpp2' -) diff --git a/include/searcher.h b/include/searcher.h index c4318da68..08da3c993 100644 --- a/include/searcher.h +++ b/include/searcher.h @@ -31,15 +31,7 @@ #include "common/pathTools.h" #include "common/stringTools.h" #include - -#ifndef __ANDROID__ -#include -#include -#include -#include "ctpp2/CTPP2VMStringLoader.hpp" - -using namespace CTPP; -#endif +#include "kiwix_config.h" using namespace std; @@ -70,7 +62,7 @@ namespace kiwix { void reset(); void setContentHumanReadableId(const string &contentHumanReadableId); -#ifndef __ANDROID__ +#ifdef ENABLE_CTPP2 string getHtml(); #endif diff --git a/kiwix.pc.in b/kiwix.pc.in new file mode 100644 index 000000000..55dba087e --- /dev/null +++ b/kiwix.pc.in @@ -0,0 +1,10 @@ +prefix=@prefix@ +libdir=${prefix}/lib64 +includedir=${prefix}/include + +Name: libkiwix +Description: A library that contains a lot of things used by used by other kiwix programs +Version: 1.0 +Requires: @requires@ +Libs: -L${libdir} -lkiwix @extra_libs@ +Cflags: -I${includedir}/ @extra_cflags@ diff --git a/meson.build b/meson.build index 4338c730a..9830b5722 100644 --- a/meson.build +++ b/meson.build @@ -3,74 +3,98 @@ project('kiwixlib', 'cpp', license : 'GPL') compiler = meson.get_compiler('cpp') +find_library_in_compiler = meson.version().version_compare('>=0.31.0') thread_dep = dependency('threads') libicu_dep = dependency('icu-i18n') libzim_dep = dependency('libzim') pugixml_dep = dependency('pugixml') -find_library_in_compiler = meson.version().version_compare('>=0.31.0') + +has_ctpp2_dep = false ctpp2_prefix_install = get_option('ctpp2-install-prefix') +ctpp2_link_args = [] if ctpp2_prefix_install == '' - if not compiler.has_header('ctpp2/CTPP2Logger.hpp') - error('ctpp2/CTPP2Logger.hppnot found') - endif - if find_library_in_compiler - ctpp2_lib = compiler.find_library('ctpp2') - else - ctpp2_lib = find_library('ctpp2') - endif - link_args = ['-lctpp2'] -# if meson.is_cross_build() -# if host_machine.system() == 'windows' -# link_args += ['-liconv'] + if compiler.has_header('ctpp2/CTPP2Logger.hpp') + if find_library_in_compiler + ctpp2_lib = compiler.find_library('ctpp2') + else + ctpp2_lib = find_library('ctpp2') + endif +# if meson.is_cross_build() +# if host_machine.system() == 'windows' +# link_args += ['-liconv'] +# endif # endif -# endif - ctpp2_dep = declare_dependency(link_args:link_args) + ctpp2_link_args = ['-lctpp2'] + has_ctpp2_dep = true + ctpp2_dep = declare_dependency(link_args:ctpp2_link_args) + else + message('ctpp2/CTPP2Logger.hpp not found. Compiling without CTPP2 support') + endif else if not find_library_in_compiler error('For custom ctpp2_prefix_install you need a meson version >=0.31.0') endif ctpp2_include_path = ctpp2_prefix_install + '/include' ctpp2_include_args = ['-I'+ctpp2_include_path] - if not compiler.has_header('ctpp2/CTPP2Logger.hpp', args:ctpp2_include_args) - error('ctpp2/CTPP2Logger.hpp not found') - endif - ctpp2_include_path = include_directories(ctpp2_include_path, is_system:true) - ctpp2_lib_path = ctpp2_prefix_install+'/lib' - ctpp2_lib = compiler.find_library('ctpp2', dirs:ctpp2_lib_path) - link_args = ['-L'+ctpp2_lib_path, '-lctpp2'] -# if meson.is_cross_build() -# if host_machine.system() == 'windows' -# link_args += ['-liconv'] + if compiler.has_header('ctpp2/CTPP2Logger.hpp', args:ctpp2_include_args) + ctpp2_include_dir = include_directories(ctpp2_include_path, is_system:true) + ctpp2_lib_path = ctpp2_prefix_install+'/lib' + ctpp2_lib = compiler.find_library('ctpp2', dirs:ctpp2_lib_path) +# if meson.is_cross_build() +# if host_machine.system() == 'windows' +# link_args += ['-liconv'] +# endif # endif -# endif - ctpp2_dep = declare_dependency(include_directories:ctpp2_include_path, link_args:link_args) + ctpp2_link_args = ['-L'+ctpp2_lib_path, '-lctpp2'] + has_ctpp2_dep = true + ctpp2_dep = declare_dependency(include_directories:ctpp2_include_dir, link_args:ctpp2_link_args) + else + message('ctpp2/CTPP2Logger.hpp not found. Compiling without CTPP2 support') + endif endif -pkg_requires = ['libzim', 'icu-i18n', 'pugixml'] xapian_dep = dependency('xapian-core', required:false) -if xapian_dep.found() - pkg_requires += ['xapian-core'] - message('xapian_dep found') -else - message('xapian_dep not found') -endif -all_deps = [thread_dep, libicu_dep, libzim_dep, ctpp2_dep, xapian_dep, pugixml_dep] +all_deps = [thread_dep, libicu_dep, libzim_dep, xapian_dep, pugixml_dep] +if has_ctpp2_dep + all_deps += [ctpp2_dep] +endif inc = include_directories('include') +conf = configuration_data() +conf.set('VERSION', '"@0@"'.format(meson.project_version())) +conf.set('ENABLE_CTPP2', has_ctpp2_dep) + subdir('include') subdir('scripts') subdir('static') subdir('src') -pkg_mod = import('pkgconfig') -pkg_mod.generate(libraries : kiwixlib, - version : '1.0', - name : 'libkiwix', - filebase : 'kiwix', - description : 'A library that contains a lot of things used by used by other kiwix programs', - requires: pkg_requires) +pkg_requires = ['libzim', 'icu-i18n', 'pugixml'] +if xapian_dep.found() + pkg_requires += ['xapian-core'] +endif + +extra_libs = [] +extra_cflags = '' +if has_ctpp2_dep + extra_libs += ctpp2_link_args + if ctpp2_include_path != '' + extra_cflags = '-I'+ctpp2_include_path + endif +endif + +pkg_conf = configuration_data() +pkg_conf.set('prefix', get_option('prefix')) +pkg_conf.set('requires', ' '.join(pkg_requires)) +pkg_conf.set('extra_libs', ' '.join(extra_libs)) +pkg_conf.set('extra_cflags', extra_cflags) +configure_file(output : 'kiwix.pc', + configuration : pkg_conf, + input : 'kiwix.pc.in', + install_dir: get_option('libdir')+'/pkgconfig' + ) diff --git a/src/config.h.in b/src/config.h.in new file mode 100644 index 000000000..713be9c12 --- /dev/null +++ b/src/config.h.in @@ -0,0 +1,4 @@ + +#mesondefine VERSION + +#mesondefine ENABLE_CTPP2 diff --git a/src/meson.build b/src/meson.build index 90cb4921f..6046dd99a 100644 --- a/src/meson.build +++ b/src/meson.build @@ -10,7 +10,6 @@ kiwix_sources = [ 'common/stringTools.cpp', 'common/networkTools.cpp', 'common/otherTools.cpp', - 'ctpp2/CTPP2VMStringLoader.cpp', 'xapian/htmlparse.cc', 'xapian/myhtmlparse.cc' ] @@ -20,6 +19,15 @@ if xapian_dep.found() kiwix_sources += ['xapianIndexer.cpp', 'xapianSearcher.cpp'] endif +if has_ctpp2_dep + kiwix_sources += ['ctpp2/CTPP2VMStringLoader.cpp'] +endif + +config_h = configure_file(output : 'kiwix_config.h', + configuration : conf, + input : 'config.h.in') +install_headers(config_h, subdir:'kiwix') + kiwixlib = library('kiwix', kiwix_sources, include_directories : inc, diff --git a/src/searcher.cpp b/src/searcher.cpp index b86933a16..22a8adbcb 100644 --- a/src/searcher.cpp +++ b/src/searcher.cpp @@ -20,6 +20,15 @@ #include "searcher.h" #include "kiwixlib-resources.h" +#ifdef ENABLE_CTPP2 +#include +#include +#include +#include "ctpp2/CTPP2VMStringLoader.hpp" + +using namespace CTPP; +#endif + namespace kiwix { @@ -130,7 +139,7 @@ namespace kiwix { this->contentHumanReadableId = contentHumanReadableId; } -#ifndef __ANDROID__ +#ifdef ENABLE_CTPP2 string Searcher::getHtml() {