summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
author Robby Workman <rworkman@slackbuilds.org>2012-04-15 23:38:50 -0500
committer Robby Workman <rworkman@slackbuilds.org>2012-04-15 23:38:50 -0500
commitc4e1a92e0b14e056ad7a347d7bd2ccd968437af9 (patch)
tree3d8d4e1a67bc0ee286897f22bacbbf08e38ec985
parent32aa63932afd4ec700349652983091262db93e80 (diff)
downloadslackbuilds-c4e1a92e0b14e056ad7a347d7bd2ccd968437af9.tar.gz
slackbuilds-c4e1a92e0b14e056ad7a347d7bd2ccd968437af9.tar.xz
libraries/libproxy: Add unistd.h include for gcc47
Thanks to Shane Riddle <sh4neriddle@yahoo.com> for the report. Note that this is not an issue on 13.37 (gcc47 is in -currnet), but the fix won't hurt anything, and since I'm working on this in a private -current branch, I may as well fix it here too... Signed-off-by: Robby Workman <rworkman@slackbuilds.org>
-rw-r--r--libraries/libproxy/4.6-r797.patch798
-rw-r--r--libraries/libproxy/gcc47-include-unistd.h.diff22
-rw-r--r--libraries/libproxy/libproxy.SlackBuild3
3 files changed, 25 insertions, 798 deletions
diff --git a/libraries/libproxy/4.6-r797.patch b/libraries/libproxy/4.6-r797.patch
deleted file mode 100644
index 7b23bd9dbb..0000000000
--- a/libraries/libproxy/4.6-r797.patch
+++ /dev/null
@@ -1,798 +0,0 @@
-Index: cmake/mingw32.cmake
-===================================================================
---- cmake/mingw32.cmake (revision 753)
-+++ cmake/mingw32.cmake (revision 797)
-@@ -15,3 +15,5 @@
- set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
- set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
-
-+# We want libgcc being statically linked. Everything else is annoying
-+set(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} -static-libgcc")
-Index: cmake/paths.cmk
-===================================================================
---- cmake/paths.cmk (revision 753)
-+++ cmake/paths.cmk (revision 797)
-@@ -1,11 +1,11 @@
- if(WIN32)
- set(CMAKE_INSTALL_PREFIX "" CACHE PATH "Install prefix")
-- set(BIN_INSTALL_DIR "" CACHE PATH "Binary install dir")
-- set(LIB_INSTALL_DIR "" CACHE PATH "Library install dir")
-- set(LIBEXEC_INSTALL_DIR "" CACHE PATH "Private executable install dir")
-+ set(BIN_INSTALL_DIR . CACHE PATH "Binary install dir")
-+ set(LIB_INSTALL_DIR . CACHE PATH "Library install dir")
-+ set(LIBEXEC_INSTALL_DIR . CACHE PATH "Private executable install dir")
- set(INCLUDE_INSTALL_DIR include CACHE PATH "Include install dir")
-- set(SYSCONF_INSTALL_DIR "" CACHE PATH "Configuration install dir")
-- set(SHARE_INSTALL_DIR "" CACHE PATH "Data install dir")
-+ set(SYSCONF_INSTALL_DIR . CACHE PATH "Configuration install dir")
-+ set(SHARE_INSTALL_DIR . CACHE PATH "Data install dir")
- else(WIN32)
- set(CMAKE_INSTALL_PREFIX /usr/local CACHE PATH "Install prefix")
- set(BIN_INSTALL_DIR bin CACHE PATH "Binary install dir")
-Index: bindings/ruby/Libproxy.i
-===================================================================
---- bindings/ruby/Libproxy.i (revision 753)
-+++ bindings/ruby/Libproxy.i (revision 797)
-@@ -4,7 +4,6 @@
- #include "../../libproxy/proxy.h"
- %}
-
--
- %typemap(out) char ** {
- VALUE arr = rb_ary_new2(255);
- int i;
-@@ -15,7 +14,7 @@
- }
-
- %typemap(freearg) char ** {
-- free($source);
-+ free($source);
- }
-
- %include "../../libproxy/proxy.h"
-Index: bindings/ruby/test.rb
-===================================================================
---- bindings/ruby/test.rb (revision 753)
-+++ bindings/ruby/test.rb (revision 797)
-@@ -1,8 +1,7 @@
- require 'Libproxy'
-
- pf = Libproxy.px_proxy_factory_new
--
- proxies = Libproxy.px_proxy_factory_get_proxies(pf, "http://www.google.com")
-
--print proxies
--
-+proxies.each { |proxy| print proxy + " " }
-+print "\n"
-Index: bindings/python/CMakeLists.txt
-===================================================================
---- bindings/python/CMakeLists.txt (revision 753)
-+++ bindings/python/CMakeLists.txt (revision 797)
-@@ -12,21 +12,11 @@
-
- message(STATUS "Found python version ${PYTHON_VERSION}")
-
-- if (IS_ABSOLUTE "${LIB_INSTALL_DIR}")
-- set(libdir "${LIB_INSTALL_DIR}")
-- else()
-- set(libdir "${CMAKE_INSTALL_PREFIX}/${LIB_INSTALL_DIR}")
-- endif()
--
-- if (IS_DIRECTORY "${libdir}/python${PYTHON_VERSION}/site-packages")
-- set(PYTHON_SITEPKG_DIR "${libdir}/python${PYTHON_VERSION}/site-packages")
-- else()
-- execute_process(COMMAND
-- ${PYTHON_EXECUTABLE}
-- -c "import distutils.sysconfig ; print distutils.sysconfig.get_python_lib(plat_specific=0)"
-- OUTPUT_VARIABLE PYTHON_SITEPKG_DIR
-- OUTPUT_STRIP_TRAILING_WHITESPACE)
-- endif()
-+ execute_process(COMMAND
-+ ${PYTHON_EXECUTABLE}
-+ -c "import distutils.sysconfig ; print distutils.sysconfig.get_python_lib(plat_specific=0)"
-+ OUTPUT_VARIABLE PYTHON_SITEPKG_DIR
-+ OUTPUT_STRIP_TRAILING_WHITESPACE)
- endif()
-
- message(STATUS "Using PYTHON_SITEPKG_DIR=${PYTHON_SITEPKG_DIR}")
-Index: bindings/perl/src/CMakeLists.txt
-===================================================================
---- bindings/perl/src/CMakeLists.txt (revision 753)
-+++ bindings/perl/src/CMakeLists.txt (revision 797)
-@@ -1,5 +1,4 @@
- include_directories( ${PERL_INCLUDE_PATH} ${CMAKE_SOURCE_DIR}/libproxy )
--link_directories(${LIBPROXY_LIBRARY_DIRS})
-
- # Run doxsubpp.pl to run xsubpp on Libproxy.xs
- add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/Libproxy.c
-@@ -10,9 +9,6 @@
-
- set(Libproxy_LIB_SRCS Libproxy.c)
-
--set(CMAKE_C_COMPILER ${CMAKE_CXX_COMPILER})
--set(CMAKE_C_FLAGS ${PERL_CXX_FLAGS} )
--
- set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/perl/blib/arch/auto/Net)
- add_library(PLlibproxy SHARED ${Libproxy_LIB_SRCS})
-
-Index: utils/CMakeLists.txt
-===================================================================
---- utils/CMakeLists.txt (revision 753)
-+++ utils/CMakeLists.txt (revision 797)
-@@ -1,5 +1,4 @@
- include_directories("../libproxy")
--link_directories(${LIBPROXY_LIBRARY_DIRS})
-
- add_executable(proxy proxy.c)
- target_link_libraries(proxy libproxy)
-Index: libmodman/test/main.hpp
-===================================================================
---- libmodman/test/main.hpp (revision 753)
-+++ libmodman/test/main.hpp (revision 797)
-@@ -20,6 +20,8 @@
- #ifndef MAIN_HPP_
- #define MAIN_HPP_
-
-+#include <typeinfo>
-+
- #include "../module_manager.hpp"
-
- using namespace std;
-Index: libmodman/module_manager.cpp
-===================================================================
---- libmodman/module_manager.cpp (revision 753)
-+++ libmodman/module_manager.cpp (revision 797)
-@@ -20,6 +20,7 @@
- #include <algorithm> // For sort()
- #include <sys/stat.h> // For stat()
- #include <iostream>
-+#include <typeinfo>
-
- #ifdef WIN32
- #include <windows.h>
-@@ -42,7 +43,7 @@
- #define pdlopenl(filename) LoadLibraryEx(filename, NULL, DONT_RESOLVE_DLL_REFERENCES)
- #define pdlclose(module) FreeLibrary((pdlmtype) module)
- static void* pdlsym(pdlmtype mod, string sym) {
-- return GetProcAddress(mod, sym.c_str());
-+ return (void *) GetProcAddress(mod, sym.c_str());
- }
-
- static pdlmtype pdlreopen(const char* filename, pdlmtype module) {
-Index: libmodman/module.hpp
-===================================================================
---- libmodman/module.hpp (revision 753)
-+++ libmodman/module.hpp (revision 797)
-@@ -26,10 +26,9 @@
- #define MM_MODULE_BUILTIN
- #endif
-
--#ifdef WIN32
-+#ifdef _MSC_VER
- #define __MM_DLL_EXPORT __declspec(dllexport)
- #else
--#include <typeinfo>
- #define __MM_DLL_EXPORT __attribute__ ((visibility("default")))
- #endif
-
-@@ -79,10 +78,10 @@
- template <class basetype, bool sngl=false>
- class __MM_DLL_EXPORT extension : public base_extension {
- public:
--#ifdef WIN32
-+#ifdef _MSC_VER
- static const char* base_type() { return __FUNCSIG__; }
- #else
-- static const char* base_type() { return typeid(basetype).name(); }
-+ static const char* base_type() { return __PRETTY_FUNCTION__; }
- #endif
-
- static bool singleton() { return sngl; }
-@@ -96,7 +95,11 @@
-
- struct __MM_DLL_EXPORT mm_module
- {
-- const unsigned int vers;
-+/* For some unknown reason, when vers is const VC++ (win32) NULLs out the whole struct.
-+ * This obviously breaks module loading. I'd love to know the reason for this, so if
-+ * anyone knows, please tell me. In the meantime, vers not being const is by design,
-+ * so don't change it. */
-+ unsigned int vers;
- const char* name;
- const char* (*type)();
- libmodman::base_extension** (*init)();
-Index: libmodman/CMakeLists.txt
-===================================================================
---- libmodman/CMakeLists.txt (revision 753)
-+++ libmodman/CMakeLists.txt (revision 797)
-@@ -3,19 +3,17 @@
- if (WIN32)
- add_definitions(-D_CRT_SECURE_NO_WARNINGS=1)
- else(WIN32)
-- set(CMAKE_CXX_FLAGS "-fvisibility=hidden ${CMAKE_CXX_FLAGS}")
-+ set(CMAKE_CXX_FLAGS "-fvisibility=hidden -fPIC ${CMAKE_CXX_FLAGS}")
- endif(WIN32)
- include_directories(${CMAKE_SOURCE_DIR})
-
--add_library(modman SHARED
-+add_library(modman STATIC
- module.hpp
- module_manager.hpp
- module_manager.cpp)
- if(NOT WIN32)
- target_link_libraries(modman dl)
- endif()
--set_target_properties(modman PROPERTIES PREFIX "lib" VERSION 1.0.0 SOVERSION 1)
--install(TARGETS modman DESTINATION ${LIB_INSTALL_DIR})
-
- ### Tests
- add_testdirectory(test)
-Index: libproxy/test/url-test.cpp
-===================================================================
---- libproxy/test/url-test.cpp (revision 753)
-+++ libproxy/test/url-test.cpp (revision 797)
-@@ -59,6 +59,12 @@
- {
- bool rtv = true;
-
-+#ifdef WIN32
-+ WSADATA wsadata;
-+ WORD vers = MAKEWORD(2, 2);
-+ WSAStartup(vers, &wsadata);
-+#endif
-+
- try_url ("file:///allo", rtv,
- "file",
- "", "",
-@@ -131,6 +137,17 @@
- "", "",
- "", 0,
- "80");
-+
-+ /* Handle the case where there is nothing other than the scheme */
-+ try_url ("http://", rtv,
-+ "http",
-+ "", "",
-+ "", 80,
-+ "");
-+
-+#ifdef WIN32
-+ WSACleanup();
-+#endif
-
- return !rtv;
- }
-Index: libproxy/cmake/libproxy.cmk
-===================================================================
---- libproxy/cmake/libproxy.cmk (revision 753)
-+++ libproxy/cmake/libproxy.cmk (revision 797)
-@@ -18,5 +18,6 @@
- set_property(SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/proxy.cpp
- PROPERTY COMPILE_DEFINITIONS MODULEDIR="${MODULEDIR}";BUILTIN_MODULES=${BUILTIN_MODULES})
- set_target_properties(libproxy PROPERTIES PREFIX "" VERSION 1.0.0 SOVERSION 1)
-+set_target_properties(libproxy PROPERTIES LINK_INTERFACE_LIBRARIES "")
- install(TARGETS libproxy DESTINATION ${LIB_INSTALL_DIR})
- install(FILES proxy.h DESTINATION ${INCLUDE_INSTALL_DIR})
-Index: libproxy/cmake/modules.cmk
-===================================================================
---- libproxy/cmake/modules.cmk (revision 753)
-+++ libproxy/cmake/modules.cmk (revision 797)
-@@ -14,11 +14,12 @@
- include(cmake/modules/config_macosx.cmk)
- include(cmake/modules/network_networkmanager.cmk)
- include(cmake/modules/pacrunner_mozjs.cmk)
-+include(cmake/modules/pacrunner_natus.cmk)
- include(cmake/modules/pacrunner_webkit.cmk)
-
- # Build the pacrunner into libproxy unless we are building for multiple engines
- set(BIPR 1)
--if(MOZJS_FOUND AND WEBKIT_FOUND)
-+if((MOZJS_FOUND AND WEBKIT_FOUND) OR (MOZJS_FOUND AND NATUS_FOUND) OR (WEBKIT_FOUND AND NATUS_FOUND))
- set(BIPR 0)
- endif()
-
-@@ -36,6 +37,7 @@
- px_module(ignore_ip 1 1)
- px_module(network_networkmanager "${NM_FOUND}" 0 ${NM_LIBRARIES})
- px_module(pacrunner_mozjs "${MOZJS_FOUND}" ${BIPR} ${MOZJS_LIBRARIES})
-+px_module(pacrunner_natus "${NATUS_FOUND}" ${BIPR} ${NATUS_LIBRARIES})
- px_module(pacrunner_webkit "${WEBKIT_FOUND}" ${BIPR} ${WEBKIT_LIBRARIES})
- px_module(wpad_dns_alias 1 1)
- message("")
-Index: libproxy/cmake/modules/pacrunner_natus.cmk
-===================================================================
---- libproxy/cmake/modules/pacrunner_natus.cmk (revision 0)
-+++ libproxy/cmake/modules/pacrunner_natus.cmk (revision 797)
-@@ -0,0 +1,7 @@
-+if(WIN32)
-+ set(NATUS_FOUND 0)
-+elseif(APPLE)
-+ set(NATUS_FOUND 0)
-+else()
-+ px_check_modules(NATUS natus)
-+endif()
-\ No newline at end of file
-Index: libproxy/cmake/modules/pacrunner_mozjs.cmk
-===================================================================
---- libproxy/cmake/modules/pacrunner_mozjs.cmk (revision 753)
-+++ libproxy/cmake/modules/pacrunner_mozjs.cmk (revision 797)
-@@ -7,16 +7,19 @@
- include_directories("${MOZJS_INCLUDE_DIR}")
- endif()
- elseif(NOT APPLE)
-- set(MOZJS_SEARCH_ORDER "xulrunner-js;firefox-js;mozilla-js;seamonkey-js" CACHE STRING "MozJS search order")
-+ set(MOZJS_SEARCH_ORDER "mozilla-js;xulrunner-js;firefox-js;seamonkey-js" CACHE STRING "MozJS search order")
- option(WITH_MOZJS "Search for MOZJS package" ON)
- if (WITH_MOZJS)
-- pkg_search_module(MOZJS ${MOZJS_SEARCH_ORDER})
-- if(MOZJS_FOUND)
-- include_directories(${MOZJS_INCLUDE_DIRS})
-- link_directories(${MOZJS_LIBRARY_DIRS})
-- else()
-- set(MOZJS_FOUND 0)
-- endif()
-+ foreach(MOZJSLIB ${MOZJS_SEARCH_ORDER})
-+ pkg_search_module(MOZJS ${MOZJSLIB}>=2.0b12)
-+ if(MOZJS_FOUND)
-+ include_directories(${MOZJS_INCLUDE_DIRS})
-+ link_directories(${MOZJS_LIBRARY_DIRS})
-+ break()
-+ else()
-+ set(MOZJS_FOUND 0)
-+ endif()
-+ endforeach()
- else()
- set(MOZJS_FOUND 0)
- endif()
-Index: libproxy/cmake/modules/pacrunner_webkit.cmk
-===================================================================
---- libproxy/cmake/modules/pacrunner_webkit.cmk (revision 753)
-+++ libproxy/cmake/modules/pacrunner_webkit.cmk (revision 797)
-@@ -12,5 +12,9 @@
- set(WEBKIT_FOUND 1)
- endif()
- else()
-- px_check_modules(WEBKIT webkit-1.0)
--endif()
-\ No newline at end of file
-+ if(WITH_WEBKIT3)
-+ px_check_modules(WEBKIT webkitgtk-3.0)
-+ else()
-+ px_check_modules(WEBKIT webkit-1.0)
-+ endif()
-+endif()
-Index: libproxy/url.cpp
-===================================================================
---- libproxy/url.cpp (revision 753)
-+++ libproxy/url.cpp (revision 797)
-@@ -36,12 +36,9 @@
-
- #ifdef WIN32
- #include <io.h>
--#define pfsize(st) (st.st_size)
- #define close _close
- #define read _read
- #define SHUT_RDWR SD_BOTH
--#else
--#define pfsize(st) (st.st_blksize * st.st_blocks)
- #endif
-
- #include "url.hpp"
-@@ -56,13 +53,6 @@
- // This is the maximum pac size (to avoid memory attacks)
- #define PAC_MAX_SIZE 102400
-
--const string url::GENERIC_DELIMITERS(":/?#[]@");
--const string url::SUBCOMPONENT_DELIMITERS("!$&'()*+,;=");
--const string url::ALLOWED_IN_USERINFO_ELEMENT(url::SUBCOMPONENT_DELIMITERS);
--const string url::ALLOWED_IN_USERINFO(url::ALLOWED_IN_USERINFO_ELEMENT + ":");
--const string url::ALLOWED_IN_PATH_ELEMENT(url::SUBCOMPONENT_DELIMITERS + ":@");
--const string url::ALLOWED_IN_PATH(url::ALLOWED_IN_PATH_ELEMENT + "/");
--
- static inline int get_default_port(string scheme) {
- struct servent *serv;
- size_t plus = scheme.find('+');
-@@ -109,8 +99,8 @@
-
- string url::encode(const string &data, const string &valid_reserved) {
- ostringstream encoded;
-- for (int i=0; data[i]; i++) {
-- if (isalnum(data[i])
-+ for (unsigned int i=0; i < data.size(); i++) {
-+ if (isalnum((unsigned char)data[i])
- || valid_reserved.find(data[i]) != string::npos
- || string("-._~").find(data[i]) != string::npos)
- encoded << data[i];
-@@ -211,7 +201,8 @@
- host_start = userinfo_end + 1;
-
- /* Check for IPv6 IP */
-- if (hier_part[host_start] == '[') {
-+ if (host_start < hier_part.size()
-+ && hier_part[host_start] == '[') {
- host_end = hier_part.find(']', host_start);
- if (host_end == string::npos)
- throw parse_error("Invalid URL: " + url);
-@@ -232,7 +223,7 @@
- /* Get port */
- m_port = get_default_port(m_scheme);
-
-- if (host_end != hier_part.size()
-+ if (host_end < hier_part.size()
- && hier_part[host_end] == ':') {
- size_t port_start = host_end + 1;
- m_port = atoi(hier_part.c_str() + port_start);
-@@ -400,10 +391,12 @@
- struct stat st;
- if ((sock = ::open(m_path.c_str(), O_RDONLY)) < 0)
- return NULL;
-- if (!fstat(sock, &st) && pfsize(st) < PAC_MAX_SIZE) {
-- buffer = new char[pfsize(st)+1];
-- if (read(sock, buffer, pfsize(st)) == 0) {
-- delete buffer;
-+
-+ if (!fstat(sock, &st) && st.st_size < PAC_MAX_SIZE) {
-+ buffer = new char[st.st_size+1];
-+ memset(buffer, 0, st.st_size+1);
-+ if (read(sock, buffer, st.st_size) == 0) {
-+ delete[] buffer;
- buffer = NULL;
- }
- }
-@@ -435,7 +428,7 @@
- if (sock < 0) return NULL;
-
- // Build the request string
-- request = "GET " + m_path + " HTTP/1.1\r\n";
-+ request = "GET " + (m_path.size() > 0 ? m_path : "/") + " HTTP/1.1\r\n";
- request += "Host: " + m_host + "\r\n";
- request += "Accept: " + string(PAC_MIME_TYPE) + "\r\n";
- request += "Connection: close\r\n";
-Index: libproxy/url.hpp
-===================================================================
---- libproxy/url.hpp (revision 753)
-+++ libproxy/url.hpp (revision 797)
-@@ -27,6 +27,13 @@
-
- #include "config.hpp"
-
-+#define URL_GENERIC_DELIMITERS ":/?#[]@"
-+#define URL_SUBCOMPONENT_DELIMITERS "!$&'()*+,;="
-+#define URL_ALLOWED_IN_USERINFO_ELEMENT URL_SUBCOMPONENT_DELIMITERS
-+#define URL_ALLOWED_IN_USERINFO URL_ALLOWED_IN_USERINFO_ELEMENT ":"
-+#define URL_ALLOWED_IN_PATH_ELEMENT URL_SUBCOMPONENT_DELIMITERS ":@"
-+#define URL_ALLOWED_IN_PATH URL_ALLOWED_IN_PATH_ELEMENT "/"
-+
- namespace libproxy {
-
- using namespace std;
-@@ -38,13 +45,6 @@
-
- class DLL_PUBLIC url {
- public:
-- static const string ALLOWED_IN_PATH;
-- static const string ALLOWED_IN_PATH_ELEMENT;
-- static const string ALLOWED_IN_USERINFO;
-- static const string ALLOWED_IN_USERINFO_ELEMENT;
-- static const string GENERIC_DELIMITERS;
-- static const string SUBCOMPONENT_DELIMITERS;
--
- static bool is_valid(const string url);
- static string encode(const string &data, const string &valid_reserved = "");
-
-Index: libproxy/proxy.cpp
-===================================================================
---- libproxy/proxy.cpp (revision 753)
-+++ libproxy/proxy.cpp (revision 797)
-@@ -21,6 +21,7 @@
- #include <cstring> // For strdup()
- #include <iostream> // For cerr
- #include <stdexcept> // For exception
-+#include <typeinfo> // Only for debug messages.
-
- #include <libmodman/module_manager.hpp>
-
-@@ -164,7 +165,7 @@
- proxy_factory::~proxy_factory() {
- lock();
-
-- if (this->pac) delete this->pac;
-+ if (this->pac) delete[] this->pac;
- if (this->pacurl) delete this->pacurl;
-
- unlock();
-@@ -260,7 +261,7 @@
-
- /* Check our ignore patterns */
- ignores = this->mm.get_extensions<ignore_extension>();
-- invign = confign[0] == '-';
-+ invign = confign.size() > 0 && confign[0] == '-';
- if (invign) confign = confign.substr(1);
- for (size_t i=0 ; i < confign.size() && !ignored;) {
- size_t next = confign.find(',', i);
-Index: libproxy/modules/pacrunner_mozjs.cpp
-===================================================================
---- libproxy/modules/pacrunner_mozjs.cpp (revision 753)
-+++ libproxy/modules/pacrunner_mozjs.cpp (revision 797)
-@@ -42,12 +42,12 @@
- #define INET6_ADDRSTRLEN 46
- #endif
-
--static JSBool dnsResolve(JSContext *cx, JSObject * /*obj*/, uintN /*argc*/, jsval *argv, jsval *rval) {
-+static JSBool dnsResolve_(JSContext *cx, jsval hostname, jsval *vp) {
- // Get hostname argument
-- char *tmp = JS_strdup(cx, JS_GetStringBytes(JS_ValueToString(cx, argv[0])));
-+ char *tmp = JS_EncodeString(cx, JS_ValueToString(cx, hostname));
-
- // Set the default return value
-- *rval = JSVAL_NULL;
-+ JS_SET_RVAL(cx, vp, JSVAL_NULL);
-
- // Look it up
- struct addrinfo *info = NULL;
-@@ -66,7 +66,7 @@
- NI_NUMERICHOST)) goto out;
-
- // We succeeded
-- *rval = STRING_TO_JSVAL(JS_NewString(cx, tmp, strlen(tmp)));
-+ JS_SET_RVAL(cx, vp, STRING_TO_JSVAL(JS_NewStringCopyN(cx, tmp, strlen(tmp))));
- tmp = NULL;
-
- out:
-@@ -75,15 +75,20 @@
- return true;
- }
-
--static JSBool myIpAddress(JSContext *cx, JSObject *obj, uintN /*argc*/, jsval * /*argv*/, jsval *rval) {
-+static JSBool dnsResolve(JSContext *cx, uintN /*argc*/, jsval *vp) {
-+ jsval *argv = JS_ARGV(cx, vp);
-+ return dnsResolve_(cx, argv[0], vp);
-+}
-+
-+static JSBool myIpAddress(JSContext *cx, uintN /*argc*/, jsval *vp) {
- char *hostname = (char *) JS_malloc(cx, 1024);
- if (!gethostname(hostname, 1023)) {
-- JSString *myhost = JS_NewString(cx, hostname, strlen(hostname));
-+ JSString *myhost = JS_NewStringCopyN(cx, hostname, strlen(hostname));
- jsval arg = STRING_TO_JSVAL(myhost);
-- return dnsResolve(cx, obj, 1, &arg, rval);
-+ return dnsResolve_(cx, 1, &arg);
- }
- JS_free(cx, hostname);
-- *rval = JSVAL_NULL;
-+ JS_SET_RVAL(cx, vp, JSVAL_NULL);
- return true;
- }
-
-@@ -91,7 +96,7 @@
- // This MUST be a static global
- static JSClass cls = {
- "global", JSCLASS_GLOBAL_FLAGS,
-- JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_PropertyStub,
-+ JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_StrictPropertyStub,
- JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, JS_FinalizeStub,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
- };
-@@ -111,7 +116,7 @@
- //JS_SetOptions(this->jsctx, JSOPTION_VAROBJFIX);
- //JS_SetVersion(this->jsctx, JSVERSION_LATEST);
- //JS_SetErrorReporter(cx, reportError);
-- if (!(this->jsglb = JS_NewObject(this->jsctx, &cls, NULL, NULL))) goto error;
-+ if (!(this->jsglb = JS_NewCompartmentAndGlobalObject(this->jsctx, &cls, NULL))) goto error;
- if (!JS_InitStandardClasses(this->jsctx, this->jsglb)) goto error;
-
- // Define Javascript functions
-@@ -147,15 +152,19 @@
- throw bad_alloc();
- }
- jsval args[2] = {
-- STRING_TO_JSVAL(JS_NewString(this->jsctx, tmpurl, strlen(tmpurl))),
-- STRING_TO_JSVAL(JS_NewString(this->jsctx, tmphost, strlen(tmphost)))
-+ STRING_TO_JSVAL(JS_NewStringCopyN(this->jsctx, tmpurl, strlen(tmpurl))),
-+ STRING_TO_JSVAL(JS_NewStringCopyN(this->jsctx, tmphost, strlen(tmphost)))
- };
-
- // Find the proxy (call FindProxyForURL())
- jsval rval;
- JSBool result = JS_CallFunctionName(this->jsctx, this->jsglb, "FindProxyForURL", 2, args, &rval);
- if (!result) return "";
-- string answer = string(JS_GetStringBytes(JS_ValueToString(this->jsctx, rval)));
-+
-+ char * tmpanswer = JS_EncodeString(this->jsctx, JS_ValueToString(this->jsctx, rval));
-+ string answer = string(tmpanswer);
-+ JS_free(this->jsctx, tmpanswer);
-+
- if (answer == "undefined") return "";
- return answer;
- }
-Index: libproxy/modules/pacrunner_natus.cpp
-===================================================================
---- libproxy/modules/pacrunner_natus.cpp (revision 0)
-+++ libproxy/modules/pacrunner_natus.cpp (revision 797)
-@@ -0,0 +1,111 @@
-+/*******************************************************************************
-+ * libproxy - A library for proxy configuration
-+ * Copyright (C) 2006 Nathaniel McCallum <nathaniel@natemccallum.com>
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-+ ******************************************************************************/
-+
-+#include "../extension_pacrunner.hpp"
-+using namespace libproxy;
-+
-+#define I_ACKNOWLEDGE_THAT_NATUS_IS_NOT_STABLE
-+#include <natus/natus.h>
-+#include "pacutils.h"
-+
-+using namespace natus;
-+
-+static Value dnsResolve(Value& ths, Value& fnc, vector<Value>& arg) {
-+ Value exc = checkArguments(ths, arg, "s");
-+ if (exc.isException()) return exc;
-+
-+ // Look it up
-+ struct addrinfo *info;
-+ if (getaddrinfo(arg[0].toString().c_str(), NULL, NULL, &info))
-+ return NULL;
-+
-+ // Try for IPv4
-+ char* tmp = new char[INET6_ADDRSTRLEN+1];
-+ if (getnameinfo(info->ai_addr, info->ai_addrlen,
-+ tmp, INET6_ADDRSTRLEN+1,
-+ NULL, 0,
-+ NI_NUMERICHOST)) {
-+ freeaddrinfo(info);
-+ delete tmp;
-+ return NULL;
-+ }
-+ freeaddrinfo(info);
-+
-+ // Create the return value
-+ Value ret = ths.newString(tmp);
-+ delete tmp;
-+ return ret;
-+}
-+
-+static Value myIpAddress(Value& ths, Value& fnc, vector<Value>& arg) {
-+ char hostname[1024];
-+ if (!gethostname(hostname, 1023)) {
-+ vector<Value> dnsargs;
-+ dnsargs.push_back(ths.newString(hostname));
-+ return dnsResolve(ths, fnc, dnsargs);
-+ }
-+ return ths.newString("Unable to find hostname!").toException();
-+}
-+
-+class natus_pacrunner : public pacrunner {
-+public:
-+ natus_pacrunner(string pac, const url& pacurl) throw (bad_alloc) : pacrunner(pac, pacurl) {
-+ Value exc;
-+
-+ // Create the basic context
-+ if (!eng.initialize()) goto error;
-+ glb = this->eng.newGlobal();
-+ if (glb.isException()) goto error;
-+
-+ // Add dnsResolve into the context
-+ if (!glb.set("dnsResolve", glb.newFunction(dnsResolve))) goto error;
-+
-+ // Add myIpAddress into the context
-+ if (!glb.set("myIpAddress", glb.newFunction(myIpAddress))) goto error;
-+
-+ // Add all other routines into the context
-+ exc = glb.evaluate(JAVASCRIPT_ROUTINES);
-+ if (exc.isException()) goto error;
-+
-+ // Add the PAC into the context
-+ exc = glb.evaluate(pac.c_str(), pacurl.to_string());
-+ if (exc.isException()) goto error;
-+ return;
-+
-+ error:
-+ throw bad_alloc();
-+ }
-+
-+ string run(const url& url_) throw (bad_alloc) {
-+ vector<Value> args;
-+ args.push_back(glb.newString(url_.to_string()));
-+ args.push_back(glb.newString(url_.get_host()));
-+
-+ Value res = glb.call("FindProxyForURL", args);
-+ if (res.isString() && !res.isException())
-+ return res.toString();
-+ return "";
-+ }
-+
-+private:
-+ Engine eng;
-+ Value glb;
-+};
-+
-+PX_PACRUNNER_MODULE_EZ(natus, "nt_engine_init", "natus");
-Index: libproxy/modules/config_gnome.cpp
-===================================================================
---- libproxy/modules/config_gnome.cpp (revision 753)
-+++ libproxy/modules/config_gnome.cpp (revision 797)
-@@ -102,10 +102,8 @@
- if (dup2(rpipe[1], STDOUT_FILENO) != STDOUT_FILENO) _exit(2);
-
- // Close unneeded fds
-- close(rpipe[0]);
-- close(rpipe[1]);
-- close(wpipe[0]);
-- close(wpipe[1]);
-+ for (int i = 3; i < sysconf(_SC_OPEN_MAX); i++)
-+ close(i);
-
- // Exec
- execl("/bin/sh", "sh", "-c", program, (char*) NULL);
-@@ -194,8 +192,8 @@
- else if (this->data[PROXY_MODE] == "manual") {
- string type, host, port;
- bool auth = this->data[PROXY_USE_AUTHENTICATION] == "true";
-- string username = url::encode(this->data[PROXY_AUTH_USER], url::ALLOWED_IN_USERINFO_ELEMENT);
-- string password = url::encode(this->data[PROXY_AUTH_PASSWORD], url::ALLOWED_IN_USERINFO_ELEMENT);
-+ string username = url::encode(this->data[PROXY_AUTH_USER], URL_ALLOWED_IN_USERINFO_ELEMENT);
-+ string password = url::encode(this->data[PROXY_AUTH_PASSWORD], URL_ALLOWED_IN_USERINFO_ELEMENT);
- bool same_proxy = this->data[PROXY_SAME_FOR_ALL] == "true";
-
- // If socks is set use it (except when same_proxy is set)
-Index: NEWS
-===================================================================
---- NEWS (revision 753)
-+++ NEWS (revision 797)
-@@ -1,3 +1,14 @@
-+New in version 0.4.7
-+==============================
-+* Support/require xulrunner 2.0+
-+* Support linking againgst libwebkit-gtk3 (-DWITH_WEBKIT3=ON)
-+* Issues closed:
-+ - #149: always test for the right python noarch module path
-+ - #155: Cannot compile with Firefox 4
-+ - #156: libproxy should build against webkitgtk-3.0
-+ - #158: Won't compile w/ xulrunner 2.0 final
-+ - #159: libproxy fails with autoconfiguration "http://proxy.domain.com"
-+
- New in version 0.4.6
- ==============================
- * Fixed a crash in the URL parser
-Index: CMakeLists.txt
-===================================================================
---- CMakeLists.txt (revision 753)
-+++ CMakeLists.txt (revision 797)
-@@ -24,6 +24,8 @@
- include(cmake/ctest.cmk)
- include(cmake/paths.cmk)
-
-+option(WITH_WEBKIT3 "Build against gtk-3 version of webkitgtk" OFF)
-+
- ### Subdirectories
- # Conditionally build bundled libmodman
- option(FORCE_SYSTEM_LIBMODMAN "Force using system libmodman" OFF)
-@@ -44,8 +46,12 @@
- endif()
- endif()
-
-+# Conditionally build bindings
-+if(NOT WIN32)
-+ add_subdirectory(bindings)
-+endif()
-+
- # Always build these
- add_subdirectory(libproxy)
--add_subdirectory(bindings)
- add_subdirectory(utils)
-
diff --git a/libraries/libproxy/gcc47-include-unistd.h.diff b/libraries/libproxy/gcc47-include-unistd.h.diff
new file mode 100644
index 0000000000..fc08aeeae7
--- /dev/null
+++ b/libraries/libproxy/gcc47-include-unistd.h.diff
@@ -0,0 +1,22 @@
+diff -Nur libproxy-0.4.7.orig/libproxy/modules/config_sysconfig.cpp libproxy-0.4.7/libproxy/modules/config_sysconfig.cpp
+--- libproxy-0.4.7.orig/libproxy/modules/config_sysconfig.cpp 2011-06-06 16:44:37.220019451 -0500
++++ libproxy-0.4.7/libproxy/modules/config_sysconfig.cpp 2012-04-15 23:35:45.752467960 -0500
+@@ -18,6 +18,7 @@
+ ******************************************************************************/
+
+ #include <sys/stat.h>
++#include <unistd.h>
+ #include <cstdlib>
+ #include <map>
+ #include <fstream>
+diff -Nur libproxy-0.4.7.orig/libproxy/url.cpp libproxy-0.4.7/libproxy/url.cpp
+--- libproxy-0.4.7.orig/libproxy/url.cpp 2011-06-06 16:44:37.216019447 -0500
++++ libproxy-0.4.7/libproxy/url.cpp 2012-04-15 23:35:05.654783125 -0500
+@@ -27,6 +27,7 @@
+ #define close _close
+ #endif
+ #include <fcntl.h> // For ::open()
++#include <unistd.h> //For close(), read()
+ #include <cstring> // For memcpy()
+ #include <sstream> // For int/string conversion (using stringstream)
+ #include <cstdio> // For sscanf()
diff --git a/libraries/libproxy/libproxy.SlackBuild b/libraries/libproxy/libproxy.SlackBuild
index 8e440ef3d6..5b431ddecf 100644
--- a/libraries/libproxy/libproxy.SlackBuild
+++ b/libraries/libproxy/libproxy.SlackBuild
@@ -73,6 +73,9 @@ find . \
# svn after that release disables its use in favor of nspr and js185
patch -p0 < $CWD/only_link_mozjs185.diff
+# Include unistd.h for gcc-4.7.x
+patch -p1 < $CWD/gcc47-include-unistd.h.diff
+
cmake . \
-DCMAKE_C_FLAGS="$SLKCFLAGS" \
-DCMAKE_CXX_FLAGS="$SLKCFLAGS" \