Move cURL dependent code out of CMakeLib to fix complex tests.

This commit is contained in:
Zach Mullen 2009-12-22 14:37:06 -05:00
parent 766ef1d011
commit 3cb2a0ffa6
4 changed files with 66 additions and 66 deletions

View File

@ -154,6 +154,58 @@ std::string cmCTest::CurrentTime()
return cmXMLSafe(cmCTest::CleanString(current_time)).str();
}
#ifdef CMAKE_BUILD_WITH_CMAKE
//----------------------------------------------------------------------------
static size_t
HTTPResponseCallback(void *ptr, size_t size, size_t nmemb, void *data)
{
register int realsize = (int)(size * nmemb);
std::string *response
= static_cast<std::string*>(data);
const char* chPtr = static_cast<char*>(ptr);
*response += chPtr;
return realsize;
}
//----------------------------------------------------------------------------
int cmCTest::HTTPRequest(std::string url, HTTPMethod method,
std::string& response,
std::string fields, int timeout)
{
CURL* curl;
::curl_global_init(CURL_GLOBAL_ALL);
curl = ::curl_easy_init();
//set request options
if(method == cmCTest::HTTP_GET && fields.size())
{
url += "?" + fields;
}
else
{
::curl_easy_setopt(curl, CURLOPT_POST, 1);
::curl_easy_setopt(curl, CURLOPT_POSTFIELDS, fields.c_str());
}
::curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
::curl_easy_setopt(curl, CURLOPT_TIMEOUT, timeout);
::curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);
//set response options
::curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, HTTPResponseCallback);
::curl_easy_setopt(curl, CURLOPT_FILE, (void *)&response);
::curl_easy_setopt(curl, CURLOPT_FAILONERROR, 1);
CURLcode res = ::curl_easy_perform(curl);
::curl_easy_cleanup(curl);
::curl_global_cleanup();
return static_cast<int>(res);
}
#endif
//----------------------------------------------------------------------
std::string cmCTest::MakeURLSafe(const std::string& str)
{
@ -326,7 +378,7 @@ std::string cmCTest::GetCDashVersion()
std::string url = "http://";
url += this->GetCTestConfiguration("DropSite") + "/CDash/api/getversion.php";
int res = cmSystemTools::HTTPRequest(url, cmSystemTools::HTTP_GET, response);
int res = cmCTest::HTTPRequest(url, cmCTest::HTTP_GET, response);
return res ? this->GetCTestConfiguration("CDashVersion") : response;
#else

View File

@ -80,6 +80,19 @@ public:
bool Enabled;
std::string Name;
};
#ifdef CMAKE_BUILD_WITH_CMAKE
enum HTTPMethod {
HTTP_GET,
HTTP_POST
};
/**
* Perform an HTTP request.
*/
static int HTTPRequest(std::string url, HTTPMethod method,
std::string& response,
std::string fields = "", int timeout = 10);
#endif
/** Get a testing part id from its string name. Returns PartCount
if the string does not name a valid part. */

View File

@ -26,7 +26,6 @@
#include <cmlibarchive/libarchive/archive.h>
#include <cmlibarchive/libarchive/archive_entry.h>
# include <cmsys/Terminal.h>
#include "cm_curl.h"
#endif
#include <cmsys/stl/algorithm>
@ -2926,55 +2925,3 @@ bool cmSystemTools::CheckRPath(std::string const& file,
return false;
#endif
}
//----------------------------------------------------------------------------
static size_t
HTTPResponseCallback(void *ptr, size_t size, size_t nmemb, void *data)
{
register int realsize = (int)(size * nmemb);
std::string *response
= static_cast<std::string*>(data);
const char* chPtr = static_cast<char*>(ptr);
*response += chPtr;
return realsize;
}
#ifdef CMAKE_BUILD_WITH_CMAKE
//----------------------------------------------------------------------------
int cmSystemTools::HTTPRequest(std::string url, HTTPMethod method,
std::string& response,
std::string fields, int timeout)
{
CURL* curl;
::curl_global_init(CURL_GLOBAL_ALL);
curl = ::curl_easy_init();
//set request options
if(method == cmSystemTools::HTTP_GET && fields.size())
{
url += "?" + fields;
}
else
{
::curl_easy_setopt(curl, CURLOPT_POST, 1);
::curl_easy_setopt(curl, CURLOPT_POSTFIELDS, fields.c_str());
}
::curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
::curl_easy_setopt(curl, CURLOPT_TIMEOUT, timeout);
::curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);
//set response options
::curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, HTTPResponseCallback);
::curl_easy_setopt(curl, CURLOPT_FILE, (void *)&response);
::curl_easy_setopt(curl, CURLOPT_FAILONERROR, 1);
CURLcode res = ::curl_easy_perform(curl);
::curl_easy_cleanup(curl);
::curl_global_cleanup();
return static_cast<int>(res);
}
#endif

View File

@ -342,18 +342,6 @@ public:
static std::string RelativePath(const char* local, const char* remote);
#ifdef CMAKE_BUILD_WITH_CMAKE
enum HTTPMethod {
HTTP_GET,
HTTP_POST
};
/**
* Perform an HTTP request.
*/
static int HTTPRequest(std::string url, HTTPMethod method,
std::string& response,
std::string fields = "", int timeout = 10);
/** Remove an environment variable */
static bool UnsetEnv(const char* value);