summaryrefslogtreecommitdiffstats
path: root/Source/cmCTest.cxx
diff options
context:
space:
mode:
authorZach Mullen <zach.mullen@kitware.com>2009-12-22 19:37:06 (GMT)
committerZach Mullen <zach.mullen@kitware.com>2009-12-22 19:37:06 (GMT)
commit3cb2a0ffa6f87954825cb311999fde1902b576de (patch)
tree25c17b2af4e41bbee08606554b765f3e2d2dbcf0 /Source/cmCTest.cxx
parent766ef1d01136747605b58c243e6074dda00667f8 (diff)
downloadCMake-3cb2a0ffa6f87954825cb311999fde1902b576de.zip
CMake-3cb2a0ffa6f87954825cb311999fde1902b576de.tar.gz
CMake-3cb2a0ffa6f87954825cb311999fde1902b576de.tar.bz2
Move cURL dependent code out of CMakeLib to fix complex tests.
Diffstat (limited to 'Source/cmCTest.cxx')
-rw-r--r--Source/cmCTest.cxx54
1 files changed, 53 insertions, 1 deletions
diff --git a/Source/cmCTest.cxx b/Source/cmCTest.cxx
index 01f5836..c9ef5f3 100644
--- a/Source/cmCTest.cxx
+++ b/Source/cmCTest.cxx
@@ -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