diff options
author | npmccallum <npmccallum@c587cffe-e639-0410-9787-d7902ae8ed56> | 2010-01-17 06:25:48 +0000 |
---|---|---|
committer | npmccallum <npmccallum@c587cffe-e639-0410-9787-d7902ae8ed56> | 2010-01-17 06:25:48 +0000 |
commit | 19452a010b5562bd16cbf2f372e231be54800fe5 (patch) | |
tree | c4840683948da8265fd799beb5324f695debdb9a | |
parent | efd6f0a96d1a1800f9eecc6b547d02769a17d4b4 (diff) | |
download | libproxy-19452a010b5562bd16cbf2f372e231be54800fe5.tar.gz |
make it possible to build modules into the core libproxy
git-svn-id: http://libproxy.googlecode.com/svn/trunk@473 c587cffe-e639-0410-9787-d7902ae8ed56
-rw-r--r-- | .cproject | 70 | ||||
-rw-r--r-- | libproxy/CMakeLists.txt | 42 | ||||
-rw-r--r-- | libproxy/builtin_modules.hpp.in | 9 | ||||
-rw-r--r-- | libproxy/dl_module.cpp | 5 | ||||
-rw-r--r-- | libproxy/dl_module.hpp | 2 | ||||
-rw-r--r-- | libproxy/module_manager.cpp | 12 | ||||
-rw-r--r-- | libproxy/module_manager.hpp | 12 | ||||
-rw-r--r-- | libproxy/module_types.hpp | 2 | ||||
-rw-r--r-- | libproxy/modules/config_envvar.cpp | 2 | ||||
-rw-r--r-- | libproxy/modules/config_file.cpp | 2 | ||||
-rw-r--r-- | libproxy/modules/config_gnome.cpp | 2 | ||||
-rw-r--r-- | libproxy/modules/config_kde4.cpp | 2 | ||||
-rw-r--r-- | libproxy/modules/config_w32reg.cpp | 2 | ||||
-rw-r--r-- | libproxy/modules/config_wpad.cpp | 2 | ||||
-rw-r--r-- | libproxy/modules/ignore_domain.cpp | 2 | ||||
-rw-r--r-- | libproxy/modules/ignore_ip.cpp | 2 | ||||
-rw-r--r-- | libproxy/modules/network_networkmanager.cpp | 2 | ||||
-rw-r--r-- | libproxy/modules/wpad_dns.cpp | 2 | ||||
-rw-r--r-- | libproxy/modules/wpad_dnsdevolution.cpp | 2 |
19 files changed, 73 insertions, 103 deletions
@@ -244,34 +244,6 @@ <stopOnError>true</stopOnError> <useDefaultCommand>false</useDefaultCommand> </target> -<target name="[lib] config_envvar" path="libproxy" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> -<buildCommand>/usr/bin/gmake</buildCommand> -<buildArguments/> -<buildTarget>config_envvar</buildTarget> -<stopOnError>true</stopOnError> -<useDefaultCommand>false</useDefaultCommand> -</target> -<target name="[lib] config_envvar/fast" path="libproxy" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> -<buildCommand>/usr/bin/gmake</buildCommand> -<buildArguments/> -<buildTarget>config_envvar/fast</buildTarget> -<stopOnError>true</stopOnError> -<useDefaultCommand>false</useDefaultCommand> -</target> -<target name="[lib] config_file" path="libproxy" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> -<buildCommand>/usr/bin/gmake</buildCommand> -<buildArguments/> -<buildTarget>config_file</buildTarget> -<stopOnError>true</stopOnError> -<useDefaultCommand>false</useDefaultCommand> -</target> -<target name="[lib] config_file/fast" path="libproxy" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> -<buildCommand>/usr/bin/gmake</buildCommand> -<buildArguments/> -<buildTarget>config_file/fast</buildTarget> -<stopOnError>true</stopOnError> -<useDefaultCommand>false</useDefaultCommand> -</target> <target name="[lib] config_gnome" path="libproxy" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> <buildCommand>/usr/bin/gmake</buildCommand> <buildArguments/> @@ -314,34 +286,6 @@ <stopOnError>true</stopOnError> <useDefaultCommand>false</useDefaultCommand> </target> -<target name="[lib] ignore_domain" path="libproxy" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> -<buildCommand>/usr/bin/gmake</buildCommand> -<buildArguments/> -<buildTarget>ignore_domain</buildTarget> -<stopOnError>true</stopOnError> -<useDefaultCommand>false</useDefaultCommand> -</target> -<target name="[lib] ignore_domain/fast" path="libproxy" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> -<buildCommand>/usr/bin/gmake</buildCommand> -<buildArguments/> -<buildTarget>ignore_domain/fast</buildTarget> -<stopOnError>true</stopOnError> -<useDefaultCommand>false</useDefaultCommand> -</target> -<target name="[lib] ignore_ip" path="libproxy" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> -<buildCommand>/usr/bin/gmake</buildCommand> -<buildArguments/> -<buildTarget>ignore_ip</buildTarget> -<stopOnError>true</stopOnError> -<useDefaultCommand>false</useDefaultCommand> -</target> -<target name="[lib] ignore_ip/fast" path="libproxy" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> -<buildCommand>/usr/bin/gmake</buildCommand> -<buildArguments/> -<buildTarget>ignore_ip/fast</buildTarget> -<stopOnError>true</stopOnError> -<useDefaultCommand>false</useDefaultCommand> -</target> <target name="[lib] libproxy" path="libproxy" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> <buildCommand>/usr/bin/gmake</buildCommand> <buildArguments/> @@ -419,20 +363,6 @@ <stopOnError>true</stopOnError> <useDefaultCommand>false</useDefaultCommand> </target> -<target name="[lib] wpad_dns" path="libproxy" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> -<buildCommand>/usr/bin/gmake</buildCommand> -<buildArguments/> -<buildTarget>wpad_dns</buildTarget> -<stopOnError>true</stopOnError> -<useDefaultCommand>false</useDefaultCommand> -</target> -<target name="[lib] wpad_dns/fast" path="libproxy" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> -<buildCommand>/usr/bin/gmake</buildCommand> -<buildArguments/> -<buildTarget>wpad_dns/fast</buildTarget> -<stopOnError>true</stopOnError> -<useDefaultCommand>false</useDefaultCommand> -</target> <target name="[lib] wpad_dnsdevolution" path="libproxy" targetID="org.eclipse.cdt.make.MakeTargetBuilder"> <buildCommand>/usr/bin/gmake</buildCommand> <buildArguments/> diff --git a/libproxy/CMakeLists.txt b/libproxy/CMakeLists.txt index 97f6726..1c0141a 100644 --- a/libproxy/CMakeLists.txt +++ b/libproxy/CMakeLists.txt @@ -1,10 +1,6 @@ -### Main library -add_library(libproxy SHARED config_file.cpp dl_module.cpp module_manager.cpp module_types.cpp pac.cpp proxy.cpp url.cpp) -target_link_libraries(libproxy m pthread dl) -set_property(SOURCE proxy.cpp PROPERTY COMPILE_DEFINITIONS SYSCONFDIR="/etc/";MODULEDIR="${moduledir}") -set_target_properties(libproxy PROPERTIES PREFIX "" COMPILE_FLAGS -g VERSION 0 SOVERSION 0.0.0) -install(TARGETS libproxy LIBRARY DESTINATION ${rlibdir}) -install(FILES proxy.h DESTINATION ${rincludedir}) +set(lpSOURCES config_file.cpp dl_module.cpp module_manager.cpp module_types.cpp pac.cpp proxy.cpp url.cpp) +set(lpLIBRARIES m pthread dl) +set(BUILTIN_MODULES "") ### Misc files # PkgConfig file @@ -16,16 +12,22 @@ function(px_module name condition) if(${condition} GREATER 0) if(${condition} GREATER 1) message("\t+\t${name}") + set_property(SOURCE modules/${name}.cpp PROPERTY COMPILE_DEFINITIONS SYSCONFDIR="/etc/";LIBEXECDIR="${libexecdir}";BUILTIN=1) + set(lpSOURCES ${lpSOURCES};modules/${name}.cpp PARENT_SCOPE) + set(BUILTIN_MODULES "${BUILTIN_MODULES} \"${name}\"," PARENT_SCOPE) + if(${ARGC} GREATER 3) + set(lpLIBRARIES ${lpLIBRARIES};${ARGN} PARENT_SCOPE) + endif() else() message("\tm\t${name}") - endif() - add_library(${name} MODULE modules/${name}.cpp) - target_link_libraries(${name} libproxy) - set_target_properties(${name} PROPERTIES PREFIX "" COMPILE_FLAGS -g) - set_property(SOURCE modules/${name}.cpp PROPERTY COMPILE_DEFINITIONS SYSCONFDIR="/etc/";LIBEXECDIR="${libexecdir}";GCONFTOOLBIN="${GCONFTOOLBIN}") - install(TARGETS ${name} LIBRARY DESTINATION ${rmoduledir}) - if(${ARGC} GREATER 3) - target_link_libraries(${name} ${ARGN}) + add_library(${name} MODULE modules/${name}.cpp) + set_property(SOURCE modules/${name}.cpp PROPERTY COMPILE_DEFINITIONS SYSCONFDIR="/etc/";LIBEXECDIR="${libexecdir}") + target_link_libraries(${name} libproxy) + set_target_properties(${name} PROPERTIES PREFIX "" COMPILE_FLAGS -g) + install(TARGETS ${name} LIBRARY DESTINATION ${rmoduledir}) + if(${ARGC} GREATER 3) + target_link_libraries(${name} ${ARGN}) + endif() endif() else() message("\t\t${name}") @@ -102,6 +104,14 @@ endif() px_module(ignore_domain 2) px_module(ignore_ip 2) px_module(wpad_dns 2) -px_module(wpad_dnsdevolution 2) +px_module(wpad_dnsdevolution 1) message("") +### Main library +configure_file(builtin_modules.hpp.in builtin_modules.hpp @ONLY) +add_library(libproxy SHARED ${lpSOURCES}) +target_link_libraries(libproxy ${lpLIBRARIES}) +set_property(SOURCE proxy.cpp PROPERTY COMPILE_DEFINITIONS SYSCONFDIR="/etc/";MODULEDIR="${moduledir}") +set_target_properties(libproxy PROPERTIES PREFIX "" COMPILE_FLAGS -g VERSION 0 SOVERSION 0.0.0) +install(TARGETS libproxy LIBRARY DESTINATION ${rlibdir}) +install(FILES proxy.h DESTINATION ${rincludedir}) diff --git a/libproxy/builtin_modules.hpp.in b/libproxy/builtin_modules.hpp.in new file mode 100644 index 0000000..98fd233 --- /dev/null +++ b/libproxy/builtin_modules.hpp.in @@ -0,0 +1,9 @@ +#ifndef BUILTINMODULES_HPP_ +#define BUILTINMODULES_HPP_ + +const char* _builtins[] = { + @BUILTIN_MODULES@ + NULL +}; + +#endif /* BUILTINMODULES_HPP_ */ diff --git a/libproxy/dl_module.cpp b/libproxy/dl_module.cpp index ccceb44..cc52aca 100644 --- a/libproxy/dl_module.cpp +++ b/libproxy/dl_module.cpp @@ -61,7 +61,10 @@ dl_module::~dl_module() { } dl_module::dl_module(const string filename) throw (dl_error) { - this->dlobject = pdlopen(filename.c_str()); + if (filename == "") + this->dlobject = pdlopen(NULL); + else + this->dlobject = pdlopen(filename.c_str()); if (!this->dlobject) throw dl_error(pdlerror()); } diff --git a/libproxy/dl_module.hpp b/libproxy/dl_module.hpp index 5ed1cb0..aaa4b0d 100644 --- a/libproxy/dl_module.hpp +++ b/libproxy/dl_module.hpp @@ -37,7 +37,7 @@ public: class dl_module { public: ~dl_module(); - dl_module(const string filename) throw (dl_error); + dl_module(const string filename="") throw (dl_error); bool operator==(const dl_module& module) const; template <class T> T get_symbol(const string symbolname) const throw (dl_error) { return (T) this->getsym(symbolname); diff --git a/libproxy/module_manager.cpp b/libproxy/module_manager.cpp index 3aee77d..cbd52e5 100644 --- a/libproxy/module_manager.cpp +++ b/libproxy/module_manager.cpp @@ -21,6 +21,7 @@ #include <dirent.h> // For opendir(), readdir(), closedir() #include "module_manager.hpp" +#include "builtin_modules.hpp" namespace com { namespace googlecode { @@ -84,6 +85,17 @@ string module::_bnne(const string fn) const { return basename_noext(fn); } +module_manager::module_manager() { + dl_module* thisprog = new dl_module(); + this->dl_modules.insert(thisprog); + + for (unsigned int i=0 ; _builtins[i] ; i++) { + module_manager::INIT_TYPE load = thisprog->get_symbol<module_manager::INIT_TYPE>(string(_builtins[i]) + "_module_load"); + if (load) + load(*this); + } +} + module_manager::~module_manager() { // Free all modules for (map<const type_info*, vector<module*> >::iterator i=this->modules.begin() ; i != this->modules.end() ; i++) { diff --git a/libproxy/module_manager.hpp b/libproxy/module_manager.hpp index d855761..f51a061 100644 --- a/libproxy/module_manager.hpp +++ b/libproxy/module_manager.hpp @@ -28,10 +28,15 @@ #include "dl_module.hpp" +#ifdef BUILTIN +#define PX_MODULE_LOAD_NAME(type, name) type ## _ ## name ## _module_load +#else +#define PX_MODULE_LOAD_NAME(type, name) px_module_load +#endif #define PX_MODULE_ID(name) virtual string get_id() const { return this->_bnne(name ? name : __FILE__); } -#define PX_MODULE_LOAD(basetype, name, cond) \ - extern "C" bool px_module_load(module_manager& mm) { \ - if (cond) return mm.register_module<basetype>(new name ## _ ## basetype); \ +#define PX_MODULE_LOAD(type, name, cond) \ + extern "C" bool PX_MODULE_LOAD_NAME(type, name)(module_manager& mm) { \ + if (cond) return mm.register_module<type ## _module>(new name ## _ ## type ## _module); \ return false; \ } @@ -55,6 +60,7 @@ public: typedef bool (*INIT_TYPE)(module_manager&); static const char* INIT_NAME() { return "px_module_load"; } + module_manager(); ~module_manager(); template <class T> vector<T*> get_modules() const { diff --git a/libproxy/module_types.hpp b/libproxy/module_types.hpp index 20b20d4..314053c 100644 --- a/libproxy/module_types.hpp +++ b/libproxy/module_types.hpp @@ -108,7 +108,7 @@ private: return new name ## _pacrunner(pac); \ } \ }; \ - PX_MODULE_LOAD(pacrunner_module, name, cond) + PX_MODULE_LOAD(pacrunner, name, cond) // WPAD module class wpad_module : public module { diff --git a/libproxy/modules/config_envvar.cpp b/libproxy/modules/config_envvar.cpp index 91019ab..b33cad1 100644 --- a/libproxy/modules/config_envvar.cpp +++ b/libproxy/modules/config_envvar.cpp @@ -60,4 +60,4 @@ public: } }; -PX_MODULE_LOAD(config_module, envvar, true); +PX_MODULE_LOAD(config, envvar, true); diff --git a/libproxy/modules/config_file.cpp b/libproxy/modules/config_file.cpp index 462f6a3..83d16d1 100644 --- a/libproxy/modules/config_file.cpp +++ b/libproxy/modules/config_file.cpp @@ -58,7 +58,7 @@ protected: virtual string get_filename() { return string(getenv("HOME")) + string("/.proxy.conf"); } }; -extern "C" bool px_module_load(module_manager& mm) { +extern "C" bool PX_MODULE_LOAD_NAME(config, file)(module_manager& mm) { bool success = mm.register_module<config_module>(new user_file_config_module); return mm.register_module<config_module>(new system_file_config_module) || success; } diff --git a/libproxy/modules/config_gnome.cpp b/libproxy/modules/config_gnome.cpp index b273ae2..1d4fe21 100644 --- a/libproxy/modules/config_gnome.cpp +++ b/libproxy/modules/config_gnome.cpp @@ -253,7 +253,7 @@ private: }; // If we are running in GNOME, then make sure this plugin is registered. -extern "C" bool px_module_load(module_manager& mm) { +extern "C" bool PX_MODULE_LOAD_NAME(config, gnome)(module_manager& mm) { if (xhasclient("gnome-session", "gnome-settings-daemon", "gnome-panel", NULL)) { try { return mm.register_module<config_module>(new gnome_config_module); } catch (io_error) {} diff --git a/libproxy/modules/config_kde4.cpp b/libproxy/modules/config_kde4.cpp index 87a0968..b9b9daa 100644 --- a/libproxy/modules/config_kde4.cpp +++ b/libproxy/modules/config_kde4.cpp @@ -76,4 +76,4 @@ private: config_file cf; }; -PX_MODULE_LOAD(config_module, kde, xhasclient("kicker", NULL)); +PX_MODULE_LOAD(config, kde, xhasclient("kicker", NULL)); diff --git a/libproxy/modules/config_w32reg.cpp b/libproxy/modules/config_w32reg.cpp index 3f3ac95..f47cfa5 100644 --- a/libproxy/modules/config_w32reg.cpp +++ b/libproxy/modules/config_w32reg.cpp @@ -154,4 +154,4 @@ public: } } -PX_MODULE_LOAD(config_module, w32reg, true); +PX_MODULE_LOAD(config, w32reg, true); diff --git a/libproxy/modules/config_wpad.cpp b/libproxy/modules/config_wpad.cpp index c0507bc..3399bd8 100644 --- a/libproxy/modules/config_wpad.cpp +++ b/libproxy/modules/config_wpad.cpp @@ -30,4 +30,4 @@ public: } }; -PX_MODULE_LOAD(config_module, wpad, true); +PX_MODULE_LOAD(config, wpad, true); diff --git a/libproxy/modules/ignore_domain.cpp b/libproxy/modules/ignore_domain.cpp index b9bd990..1887767 100644 --- a/libproxy/modules/ignore_domain.cpp +++ b/libproxy/modules/ignore_domain.cpp @@ -59,4 +59,4 @@ public: } }; -PX_MODULE_LOAD(ignore_module, domain, true); +PX_MODULE_LOAD(ignore, domain, true); diff --git a/libproxy/modules/ignore_ip.cpp b/libproxy/modules/ignore_ip.cpp index ce040cd..c1a998f 100644 --- a/libproxy/modules/ignore_ip.cpp +++ b/libproxy/modules/ignore_ip.cpp @@ -190,4 +190,4 @@ public: } }; -PX_MODULE_LOAD(ignore_module, ip, true); +PX_MODULE_LOAD(ignore, ip, true); diff --git a/libproxy/modules/network_networkmanager.cpp b/libproxy/modules/network_networkmanager.cpp index e37a4c7..90f9e56 100644 --- a/libproxy/modules/network_networkmanager.cpp +++ b/libproxy/modules/network_networkmanager.cpp @@ -90,4 +90,4 @@ private: DBusConnection *conn; }; -PX_MODULE_LOAD(network_module, networkmanager, true); +PX_MODULE_LOAD(network, networkmanager, true); diff --git a/libproxy/modules/wpad_dns.cpp b/libproxy/modules/wpad_dns.cpp index 8918560..f61dbbd 100644 --- a/libproxy/modules/wpad_dns.cpp +++ b/libproxy/modules/wpad_dns.cpp @@ -50,4 +50,4 @@ private: pac* last; }; -PX_MODULE_LOAD(wpad_module, dns, true); +PX_MODULE_LOAD(wpad, dns, true); diff --git a/libproxy/modules/wpad_dnsdevolution.cpp b/libproxy/modules/wpad_dnsdevolution.cpp index 37e7770..cc5aa95 100644 --- a/libproxy/modules/wpad_dnsdevolution.cpp +++ b/libproxy/modules/wpad_dnsdevolution.cpp @@ -101,4 +101,4 @@ private: pac* lpac; }; -PX_MODULE_LOAD(wpad_module, dnsdevolution, true); +PX_MODULE_LOAD(wpad, dnsdevolution, true); |