summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornpmccallum <npmccallum@c587cffe-e639-0410-9787-d7902ae8ed56>2010-01-17 06:25:48 +0000
committernpmccallum <npmccallum@c587cffe-e639-0410-9787-d7902ae8ed56>2010-01-17 06:25:48 +0000
commit19452a010b5562bd16cbf2f372e231be54800fe5 (patch)
treec4840683948da8265fd799beb5324f695debdb9a
parentefd6f0a96d1a1800f9eecc6b547d02769a17d4b4 (diff)
downloadlibproxy-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--.cproject70
-rw-r--r--libproxy/CMakeLists.txt42
-rw-r--r--libproxy/builtin_modules.hpp.in9
-rw-r--r--libproxy/dl_module.cpp5
-rw-r--r--libproxy/dl_module.hpp2
-rw-r--r--libproxy/module_manager.cpp12
-rw-r--r--libproxy/module_manager.hpp12
-rw-r--r--libproxy/module_types.hpp2
-rw-r--r--libproxy/modules/config_envvar.cpp2
-rw-r--r--libproxy/modules/config_file.cpp2
-rw-r--r--libproxy/modules/config_gnome.cpp2
-rw-r--r--libproxy/modules/config_kde4.cpp2
-rw-r--r--libproxy/modules/config_w32reg.cpp2
-rw-r--r--libproxy/modules/config_wpad.cpp2
-rw-r--r--libproxy/modules/ignore_domain.cpp2
-rw-r--r--libproxy/modules/ignore_ip.cpp2
-rw-r--r--libproxy/modules/network_networkmanager.cpp2
-rw-r--r--libproxy/modules/wpad_dns.cpp2
-rw-r--r--libproxy/modules/wpad_dnsdevolution.cpp2
19 files changed, 73 insertions, 103 deletions
diff --git a/.cproject b/.cproject
index 324fc1f..7d4704e 100644
--- a/.cproject
+++ b/.cproject
@@ -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);