svn merge -r90150:90340 svn+ssh://svn.lindenlab.com/svn/linden/branches/qar-699_combo-merge --> release
QAR-699 - Combo merge for QAR-687, QAR-637, QAR-586 * QAR-687 - Test build with libs on S3 * QAR-637 Test dynamic sound throttle * QAR-586 Test new http features branchmaster
parent
af080d1c62
commit
dc3f5ff87c
|
|
@ -63,7 +63,6 @@ set(cmake_SOURCE_FILES
|
|||
PNG.cmake
|
||||
Python.cmake
|
||||
QuickTime.cmake
|
||||
Smartheap.cmake
|
||||
TemplateCheck.cmake
|
||||
UI.cmake
|
||||
UnixInstall.cmake
|
||||
|
|
|
|||
|
|
@ -55,28 +55,31 @@ class LLKeyThrottleImpl
|
|||
protected:
|
||||
struct Entry {
|
||||
U32 count;
|
||||
BOOL blocked;
|
||||
bool blocked;
|
||||
|
||||
Entry() : count(0), blocked(FALSE) { }
|
||||
Entry() : count(0), blocked(false) { }
|
||||
};
|
||||
|
||||
typedef std::map<T, Entry> EntryMap;
|
||||
|
||||
EntryMap * prevMap;
|
||||
EntryMap * currMap;
|
||||
EntryMap* prevMap;
|
||||
EntryMap* currMap;
|
||||
|
||||
U32 countLimit;
|
||||
// maximum number of keys allowed per interval
|
||||
|
||||
U64 intervalLength; // each map covers this time period (usec or frame number)
|
||||
U64 startTime; // start of the time period (usec or frame number)
|
||||
|
||||
// currMap started counting at this time
|
||||
// prevMap covers the previous interval
|
||||
|
||||
LLKeyThrottleImpl() : prevMap(0), currMap(0),
|
||||
countLimit(0), intervalLength(1),
|
||||
startTime(0) { };
|
||||
LLKeyThrottleImpl() :
|
||||
prevMap(NULL),
|
||||
currMap(NULL),
|
||||
countLimit(0),
|
||||
intervalLength(1),
|
||||
startTime(0)
|
||||
{}
|
||||
|
||||
static U64 getTime()
|
||||
{
|
||||
|
|
@ -93,7 +96,9 @@ template< class T >
|
|||
class LLKeyThrottle
|
||||
{
|
||||
public:
|
||||
LLKeyThrottle(U32 limit, F32 interval, BOOL realtime = TRUE) // realtime = FALSE for frame-based throttle, TRUE for usec real-time throttle
|
||||
// @param realtime = FALSE for frame-based throttle, TRUE for usec
|
||||
// real-time throttle
|
||||
LLKeyThrottle(U32 limit, F32 interval, BOOL realtime = TRUE)
|
||||
: m(* new LLKeyThrottleImpl<T>)
|
||||
{
|
||||
setParameters( limit, interval, realtime );
|
||||
|
|
@ -149,7 +154,7 @@ public:
|
|||
}
|
||||
|
||||
U32 prevCount = 0;
|
||||
BOOL prevBlocked = FALSE;
|
||||
bool prevBlocked = false;
|
||||
|
||||
typename LLKeyThrottleImpl<T>::EntryMap::const_iterator prev = m.prevMap->find(id);
|
||||
if (prev != m.prevMap->end())
|
||||
|
|
@ -198,17 +203,17 @@ public:
|
|||
noteAction(id);
|
||||
typename LLKeyThrottleImpl<T>::Entry& curr = (*m.currMap)[id];
|
||||
curr.count = llmax(m.countLimit, curr.count);
|
||||
curr.blocked = TRUE;
|
||||
curr.blocked = true;
|
||||
}
|
||||
|
||||
// returns TRUE if key is blocked
|
||||
BOOL isThrottled(const T& id) const
|
||||
// returns true if key is blocked
|
||||
bool isThrottled(const T& id) const
|
||||
{
|
||||
if (m.currMap->empty()
|
||||
&& m.prevMap->empty())
|
||||
{
|
||||
// most of the time we'll fall in here
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
// NOTE, we ignore the case where id is in the map but the map is stale.
|
||||
|
|
@ -226,7 +231,7 @@ public:
|
|||
{
|
||||
return entry->second.blocked;
|
||||
}
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
|
||||
// Get the throttling parameters
|
||||
|
|
|
|||
|
|
@ -112,6 +112,15 @@ LLCurl::Responder::~Responder()
|
|||
{
|
||||
}
|
||||
|
||||
// virtual
|
||||
void LLCurl::Responder::error(
|
||||
U32 status,
|
||||
const std::string& reason,
|
||||
const LLSD&)
|
||||
{
|
||||
error(status, reason);
|
||||
}
|
||||
|
||||
// virtual
|
||||
void LLCurl::Responder::error(U32 status, const std::string& reason)
|
||||
{
|
||||
|
|
@ -124,38 +133,16 @@ void LLCurl::Responder::result(const LLSD& content)
|
|||
}
|
||||
|
||||
// virtual
|
||||
void LLCurl::Responder::completedRaw(U32 status, const std::string& reason,
|
||||
const LLChannelDescriptors& channels,
|
||||
const LLIOPipe::buffer_ptr_t& buffer)
|
||||
void LLCurl::Responder::completedRaw(
|
||||
U32 status,
|
||||
const std::string& reason,
|
||||
const LLChannelDescriptors& channels,
|
||||
const LLIOPipe::buffer_ptr_t& buffer)
|
||||
{
|
||||
if (isGoodStatus(status))
|
||||
{
|
||||
LLSD content;
|
||||
LLBufferStream istr(channels, buffer.get());
|
||||
LLSDSerialize::fromXML(content, istr);
|
||||
/*
|
||||
const S32 parseError = -1;
|
||||
if(LLSDSerialize::fromXML(content, istr) == parseError)
|
||||
{
|
||||
mStatus = 498;
|
||||
mReason = "Client Parse Error";
|
||||
}
|
||||
*/
|
||||
completed(status, reason, content);
|
||||
}
|
||||
else if (status == 400)
|
||||
{
|
||||
// Get reason from buffer
|
||||
char tbuf[4096];
|
||||
S32 len = 4096;
|
||||
buffer->readAfter(channels.in(), NULL, (U8*)tbuf, len);
|
||||
tbuf[len] = 0;
|
||||
completed(status, std::string(tbuf), LLSD());
|
||||
}
|
||||
else
|
||||
{
|
||||
completed(status, reason, LLSD());
|
||||
}
|
||||
LLSD content;
|
||||
LLBufferStream istr(channels, buffer.get());
|
||||
LLSDSerialize::fromXML(content, istr);
|
||||
completed(status, reason, content);
|
||||
}
|
||||
|
||||
// virtual
|
||||
|
|
@ -167,10 +154,7 @@ void LLCurl::Responder::completed(U32 status, const std::string& reason, const L
|
|||
}
|
||||
else
|
||||
{
|
||||
// *NOTE: This is kind of messed up. This should probably call
|
||||
// the full error method which then provides a default impl
|
||||
// which calls the thinner method.
|
||||
error(status, reason);
|
||||
error(status, reason, content);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -84,17 +84,31 @@ public:
|
|||
return((200 <= status) && (status < 300));
|
||||
}
|
||||
|
||||
virtual void error(
|
||||
U32 status,
|
||||
const std::string& reason,
|
||||
const LLSD& content);
|
||||
//< called by completed() on bad status
|
||||
|
||||
virtual void error(U32 status, const std::string& reason);
|
||||
// called with non-200 status codes
|
||||
//< called by default error(status, reason, content)
|
||||
|
||||
virtual void result(const LLSD& content);
|
||||
|
||||
// Override point for clients that may want to use this class when the response is some other format besides LLSD
|
||||
virtual void completedRaw(U32 status, const std::string& reason,
|
||||
const LLChannelDescriptors& channels,
|
||||
const LLIOPipe::buffer_ptr_t& buffer);
|
||||
//< called by completed for good status codes.
|
||||
|
||||
virtual void completed(U32 status, const std::string& reason, const LLSD& content);
|
||||
virtual void completedRaw(
|
||||
U32 status,
|
||||
const std::string& reason,
|
||||
const LLChannelDescriptors& channels,
|
||||
const LLIOPipe::buffer_ptr_t& buffer);
|
||||
/**< Override point for clients that may want to use this
|
||||
class when the response is some other format besides LLSD
|
||||
*/
|
||||
|
||||
virtual void completed(
|
||||
U32 status,
|
||||
const std::string& reason,
|
||||
const LLSD& content);
|
||||
/**< The default implemetnation calls
|
||||
either:
|
||||
* result(), or
|
||||
|
|
|
|||
|
|
@ -205,9 +205,7 @@ static void request(
|
|||
Injector* body_injector,
|
||||
LLCurl::ResponderPtr responder,
|
||||
const F32 timeout = HTTP_REQUEST_EXPIRY_SECS,
|
||||
const LLSD& headers = LLSD(),
|
||||
S32 offset = 0,
|
||||
S32 bytes = 0)
|
||||
const LLSD& headers = LLSD())
|
||||
{
|
||||
if (!LLHTTPClient::hasPump())
|
||||
{
|
||||
|
|
@ -216,7 +214,7 @@ static void request(
|
|||
}
|
||||
LLPumpIO::chain_t chain;
|
||||
|
||||
LLURLRequest *req = new LLURLRequest(method, url);
|
||||
LLURLRequest* req = new LLURLRequest(method, url);
|
||||
req->checkRootCertificate(true);
|
||||
|
||||
// Insert custom headers is the caller sent any
|
||||
|
|
@ -235,7 +233,7 @@ static void request(
|
|||
//to not use the proxy (read: llurlrequest.cpp)
|
||||
if ((iter->first == "Pragma") && (iter->second.asString() == ""))
|
||||
{
|
||||
req->useProxy(FALSE);
|
||||
req->useProxy(false);
|
||||
}
|
||||
header << iter->first << ": " << iter->second.asString() ;
|
||||
lldebugs << "header = " << header.str() << llendl;
|
||||
|
|
@ -258,34 +256,27 @@ static void request(
|
|||
chain.push_back(LLIOPipe::ptr_t(body_injector));
|
||||
}
|
||||
|
||||
if (method == LLURLRequest::HTTP_GET && (offset > 0 || bytes > 0))
|
||||
{
|
||||
std::string range = llformat("Range: bytes=%d-%d", offset,offset+bytes-1);
|
||||
req->addHeader(range.c_str());
|
||||
}
|
||||
|
||||
chain.push_back(LLIOPipe::ptr_t(req));
|
||||
|
||||
theClientPump->addChain(chain, timeout);
|
||||
}
|
||||
|
||||
|
||||
void LLHTTPClient::getByteRange(const std::string& url,
|
||||
S32 offset, S32 bytes,
|
||||
ResponderPtr responder,
|
||||
const LLSD& headers,
|
||||
const F32 timeout)
|
||||
void LLHTTPClient::getByteRange(
|
||||
const std::string& url,
|
||||
S32 offset,
|
||||
S32 bytes,
|
||||
ResponderPtr responder,
|
||||
const LLSD& hdrs,
|
||||
const F32 timeout)
|
||||
{
|
||||
// *FIX: Why is the headers argument ignored? Phoenix 2008-04-28
|
||||
request(
|
||||
url,
|
||||
LLURLRequest::HTTP_GET,
|
||||
NULL,
|
||||
responder,
|
||||
timeout,
|
||||
LLSD(), // WTF? Shouldn't this be used?
|
||||
offset,
|
||||
bytes);
|
||||
LLSD headers = hdrs;
|
||||
if(offset > 0 || bytes > 0)
|
||||
{
|
||||
std::string range = llformat("bytes=%d-%d", offset, offset+bytes-1);
|
||||
headers["Range"] = range;
|
||||
}
|
||||
request(url,LLURLRequest::HTTP_GET, NULL, responder, timeout, headers);
|
||||
}
|
||||
|
||||
void LLHTTPClient::head(const std::string& url, ResponderPtr responder, const F32 timeout)
|
||||
|
|
|
|||
|
|
@ -174,6 +174,26 @@ LLSD LLHTTPNode::del(const LLSD&) const
|
|||
throw NotImplemented();
|
||||
}
|
||||
|
||||
// virtual
|
||||
void LLHTTPNode::options(ResponsePtr response, const LLSD& context) const
|
||||
{
|
||||
//llinfos << "options context: " << context << llendl;
|
||||
|
||||
// default implementation constructs an url to the documentation.
|
||||
std::string host = context[CONTEXT_REQUEST]["headers"]["host"].asString();
|
||||
if(host.empty())
|
||||
{
|
||||
response->status(400, "Bad Request -- need Host header");
|
||||
return;
|
||||
}
|
||||
std::ostringstream ostr;
|
||||
ostr << "http://" << host << "/web/server/api";
|
||||
ostr << context[CONTEXT_REQUEST]["path"].asString();
|
||||
static const std::string DOC_HEADER("X-Documentation-URL");
|
||||
response->addHeader(DOC_HEADER, ostr.str());
|
||||
response->status(200, "OK");
|
||||
}
|
||||
|
||||
|
||||
// virtual
|
||||
LLHTTPNode* LLHTTPNode::getChild(const std::string& name, LLSD& context) const
|
||||
|
|
@ -386,6 +406,13 @@ void LLHTTPNode::Response::methodNotAllowed()
|
|||
status(405, "Method Not Allowed");
|
||||
}
|
||||
|
||||
void LLHTTPNode::Response::addHeader(
|
||||
const std::string& name,
|
||||
const std::string& value)
|
||||
{
|
||||
mHeaders[name] = value;
|
||||
}
|
||||
|
||||
void LLHTTPNode::describe(Description& desc) const
|
||||
{
|
||||
desc.shortInfo("unknown service (missing describe() method)");
|
||||
|
|
|
|||
|
|
@ -82,33 +82,79 @@ public:
|
|||
*/
|
||||
//@{
|
||||
public:
|
||||
virtual LLSD get() const;
|
||||
virtual LLSD put(const LLSD& input) const;
|
||||
virtual LLSD post(const LLSD& input) const;
|
||||
|
||||
virtual LLSD del(const LLSD& context) const;
|
||||
virtual LLSD get() const;
|
||||
virtual LLSD put(const LLSD& input) const;
|
||||
virtual LLSD post(const LLSD& input) const;
|
||||
virtual LLSD del(const LLSD& context) const;
|
||||
|
||||
class Response : public LLRefCount
|
||||
{
|
||||
protected:
|
||||
virtual ~Response();
|
||||
class Response : public LLRefCount
|
||||
{
|
||||
protected:
|
||||
virtual ~Response();
|
||||
|
||||
public:
|
||||
virtual void result(const LLSD&) = 0;
|
||||
virtual void status(S32 code, const std::string& message) = 0;
|
||||
public:
|
||||
/**
|
||||
* @brief Return the LLSD content and a 200 OK.
|
||||
*/
|
||||
virtual void result(const LLSD&) = 0;
|
||||
|
||||
void status(S32 code);
|
||||
void notFound(const std::string& message);
|
||||
void notFound();
|
||||
void methodNotAllowed();
|
||||
};
|
||||
/**
|
||||
* @brief return status code and reason string on http header,
|
||||
* but do not return a payload.
|
||||
*/
|
||||
virtual void status(S32 code, const std::string& message) = 0;
|
||||
|
||||
typedef LLPointer<Response> ResponsePtr;
|
||||
/**
|
||||
* @brief Return no body, just status code and 'UNKNOWN ERROR'.
|
||||
*/
|
||||
void status(S32 code);
|
||||
|
||||
virtual void get(ResponsePtr, const LLSD& context) const;
|
||||
virtual void put(ResponsePtr, const LLSD& context, const LLSD& input) const;
|
||||
virtual void post(ResponsePtr, const LLSD& context, const LLSD& input) const;
|
||||
virtual void del(ResponsePtr, const LLSD& context) const;
|
||||
void notFound(const std::string& message);
|
||||
void notFound();
|
||||
void methodNotAllowed();
|
||||
|
||||
/**
|
||||
* @breif Add a name: value http header.
|
||||
*
|
||||
* No effort is made to ensure the response is a valid http
|
||||
* header.
|
||||
* The headers are stored as a map of header name : value.
|
||||
* Though HTTP allows the same header name to be transmitted
|
||||
* more than once, this implementation only stores a header
|
||||
* name once.
|
||||
* @param name The name of the header, eg, "Content-Encoding"
|
||||
* @param value The value of the header, eg, "gzip"
|
||||
*/
|
||||
void addHeader(const std::string& name, const std::string& value);
|
||||
|
||||
protected:
|
||||
/**
|
||||
* @brief Headers to be sent back with the HTTP response.
|
||||
*
|
||||
* Protected class membership since derived classes are
|
||||
* expected to use it and there is no use case yet for other
|
||||
* uses. If such a use case arises, I suggest making a
|
||||
* headers() public method, and moving this member data into
|
||||
* private.
|
||||
*/
|
||||
LLSD mHeaders;
|
||||
};
|
||||
|
||||
|
||||
typedef LLPointer<Response> ResponsePtr;
|
||||
|
||||
virtual void get(ResponsePtr, const LLSD& context) const;
|
||||
virtual void put(
|
||||
ResponsePtr,
|
||||
const LLSD& context,
|
||||
const LLSD& input) const;
|
||||
virtual void post(
|
||||
ResponsePtr,
|
||||
const LLSD& context,
|
||||
const LLSD& input) const;
|
||||
virtual void del(ResponsePtr, const LLSD& context) const;
|
||||
virtual void options(ResponsePtr, const LLSD& context) const;
|
||||
//@}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -57,10 +57,13 @@
|
|||
static const char HTTP_VERSION_STR[] = "HTTP/1.0";
|
||||
static const std::string CONTEXT_REQUEST("request");
|
||||
static const std::string CONTEXT_RESPONSE("response");
|
||||
static const std::string CONTEXT_VERB("verb");
|
||||
static const std::string CONTEXT_HEADERS("headers");
|
||||
static const std::string HTTP_VERB_GET("GET");
|
||||
static const std::string HTTP_VERB_PUT("PUT");
|
||||
static const std::string HTTP_VERB_POST("POST");
|
||||
static const std::string HTTP_VERB_DELETE("DELETE");
|
||||
static const std::string HTTP_VERB_OPTIONS("OPTIONS");
|
||||
|
||||
static LLIOHTTPServer::timing_callback_t sTimingCallback = NULL;
|
||||
static void* sTimingCallbackData = NULL;
|
||||
|
|
@ -130,6 +133,7 @@ private:
|
|||
LLSD mGoodResult;
|
||||
S32 mStatusCode;
|
||||
std::string mStatusMessage;
|
||||
LLSD mHeaders;
|
||||
};
|
||||
|
||||
LLIOPipe::EStatus LLHTTPPipe::process_impl(
|
||||
|
|
@ -164,7 +168,7 @@ LLIOPipe::EStatus LLHTTPPipe::process_impl(
|
|||
static LLTimer timer;
|
||||
timer.reset();
|
||||
|
||||
std::string verb = context[CONTEXT_REQUEST]["verb"];
|
||||
std::string verb = context[CONTEXT_REQUEST][CONTEXT_VERB];
|
||||
if(verb == HTTP_VERB_GET)
|
||||
{
|
||||
mNode.get(LLHTTPNode::ResponsePtr(mResponse), context);
|
||||
|
|
@ -185,6 +189,10 @@ LLIOPipe::EStatus LLHTTPPipe::process_impl(
|
|||
{
|
||||
mNode.del(LLHTTPNode::ResponsePtr(mResponse), context);
|
||||
}
|
||||
else if(verb == HTTP_VERB_OPTIONS)
|
||||
{
|
||||
mNode.options(LLHTTPNode::ResponsePtr(mResponse), context);
|
||||
}
|
||||
else
|
||||
{
|
||||
mResponse->methodNotAllowed();
|
||||
|
|
@ -231,7 +239,9 @@ LLIOPipe::EStatus LLHTTPPipe::process_impl(
|
|||
|
||||
case STATE_GOOD_RESULT:
|
||||
{
|
||||
context[CONTEXT_RESPONSE]["contentType"] = "application/xml";
|
||||
LLSD headers = mHeaders;
|
||||
headers["Content-Type"] = "application/xml";
|
||||
context[CONTEXT_RESPONSE][CONTEXT_HEADERS] = headers;
|
||||
LLBufferStream ostr(channels, buffer.get());
|
||||
LLSDSerialize::toXML(mGoodResult, ostr);
|
||||
|
||||
|
|
@ -240,7 +250,9 @@ LLIOPipe::EStatus LLHTTPPipe::process_impl(
|
|||
|
||||
case STATE_STATUS_RESULT:
|
||||
{
|
||||
context[CONTEXT_RESPONSE]["contentType"] = "text/plain";
|
||||
LLSD headers = mHeaders;
|
||||
headers["Content-Type"] = "text/plain";
|
||||
context[CONTEXT_RESPONSE][CONTEXT_HEADERS] = headers;
|
||||
context[CONTEXT_RESPONSE]["statusCode"] = mStatusCode;
|
||||
context[CONTEXT_RESPONSE]["statusMessage"] = mStatusMessage;
|
||||
LLBufferStream ostr(channels, buffer.get());
|
||||
|
|
@ -287,6 +299,7 @@ void LLHTTPPipe::Response::result(const LLSD& r)
|
|||
mPipe->mStatusMessage = "OK";
|
||||
mPipe->mGoodResult = r;
|
||||
mPipe->mState = STATE_GOOD_RESULT;
|
||||
mPipe->mHeaders = mHeaders;
|
||||
mPipe->unlockChain();
|
||||
}
|
||||
|
||||
|
|
@ -302,6 +315,7 @@ void LLHTTPPipe::Response::status(S32 code, const std::string& message)
|
|||
mPipe->mStatusCode = code;
|
||||
mPipe->mStatusMessage = message;
|
||||
mPipe->mState = STATE_STATUS_RESULT;
|
||||
mPipe->mHeaders = mHeaders;
|
||||
mPipe->unlockChain();
|
||||
}
|
||||
|
||||
|
|
@ -389,17 +403,24 @@ LLIOPipe::EStatus LLHTTPResponseHeader::process_impl(
|
|||
}
|
||||
|
||||
ostr << HTTP_VERSION_STR << " " << code << " " << message << "\r\n";
|
||||
|
||||
std::string type = context[CONTEXT_RESPONSE]["contentType"].asString();
|
||||
if (!type.empty())
|
||||
{
|
||||
ostr << "Content-Type: " << type << "\r\n";
|
||||
}
|
||||
S32 content_length = buffer->countAfter(channels.in(), NULL);
|
||||
if(0 < content_length)
|
||||
{
|
||||
ostr << "Content-Length: " << content_length << "\r\n";
|
||||
}
|
||||
// *NOTE: This guard can go away once the LLSD static map
|
||||
// iterator is available. Phoenix. 2008-05-09
|
||||
LLSD headers = context[CONTEXT_RESPONSE][CONTEXT_HEADERS];
|
||||
if(headers.isDefined())
|
||||
{
|
||||
LLSD::map_iterator iter = headers.beginMap();
|
||||
LLSD::map_iterator end = headers.endMap();
|
||||
for(; iter != end; ++iter)
|
||||
{
|
||||
ostr << (*iter).first << ": " << (*iter).second.asString()
|
||||
<< "\r\n";
|
||||
}
|
||||
}
|
||||
ostr << "\r\n";
|
||||
|
||||
LLChangeChannel change(channels.in(), channels.out());
|
||||
|
|
@ -606,11 +627,12 @@ LLIOPipe::EStatus LLHTTPResponder::process_impl(
|
|||
read_next_line = true;
|
||||
LLMemoryStream header((U8*)buf, len);
|
||||
header >> mVerb;
|
||||
|
||||
|
||||
if((HTTP_VERB_GET == mVerb)
|
||||
|| (HTTP_VERB_POST == mVerb)
|
||||
|| (HTTP_VERB_PUT == mVerb)
|
||||
|| (HTTP_VERB_DELETE == mVerb))
|
||||
|| (HTTP_VERB_DELETE == mVerb)
|
||||
|| (HTTP_VERB_OPTIONS == mVerb))
|
||||
{
|
||||
header >> mAbsPathAndQuery;
|
||||
header >> mVersion;
|
||||
|
|
@ -721,7 +743,7 @@ LLIOPipe::EStatus LLHTTPResponder::process_impl(
|
|||
{
|
||||
// hey, hey, we should have everything now, so we pass it to
|
||||
// a content handler.
|
||||
context[CONTEXT_REQUEST]["verb"] = mVerb;
|
||||
context[CONTEXT_REQUEST][CONTEXT_VERB] = mVerb;
|
||||
const LLHTTPNode* node = mRootNode.traverse(mPath, context);
|
||||
if(node)
|
||||
{
|
||||
|
|
@ -765,7 +787,7 @@ LLIOPipe::EStatus LLHTTPResponder::process_impl(
|
|||
= mBuildContext["remote-host"];
|
||||
context[CONTEXT_REQUEST]["remote-port"]
|
||||
= mBuildContext["remote-port"];
|
||||
context[CONTEXT_REQUEST]["headers"] = mHeaders;
|
||||
context[CONTEXT_REQUEST][CONTEXT_HEADERS] = mHeaders;
|
||||
|
||||
const LLChainIOFactory* protocolHandler
|
||||
= node->getProtocolHandler();
|
||||
|
|
|
|||
|
|
@ -28,7 +28,6 @@ include(LScript)
|
|||
include(Linking)
|
||||
include(Mozlib)
|
||||
include(NDOF)
|
||||
include(Smartheap)
|
||||
include(TemplateCheck)
|
||||
include(UI)
|
||||
include(UnixInstall)
|
||||
|
|
|
|||
|
|
@ -327,6 +327,23 @@ namespace tut
|
|||
ensure_starts_with("large echo status", result, "HTTP/1.0 200 OK\r\n");
|
||||
}
|
||||
|
||||
template<> template<>
|
||||
void HTTPServiceTestObject::test<8>()
|
||||
{
|
||||
// test the OPTIONS http method -- the default implementation
|
||||
// should return the X-Documentation-URL
|
||||
std::ostringstream http_request;
|
||||
http_request << "OPTIONS / HTTP/1.0\r\nHost: localhost\r\n\r\n";
|
||||
bool timeout = false;
|
||||
std::string result = makeRequest("/", http_request.str(), timeout);
|
||||
ensure_starts_with("OPTIONS verb ok", result, "HTTP/1.0 200 OK\r\n");
|
||||
ensure_contains(
|
||||
"Doc url header exists",
|
||||
result,
|
||||
"X-Documentation-URL: http://localhost");
|
||||
}
|
||||
|
||||
|
||||
/* TO DO:
|
||||
test generation of not found and method not allowed errors
|
||||
*/
|
||||
|
|
|
|||
342
install.xml
342
install.xml
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" ?>
|
||||
<llsd>
|
||||
<map>
|
||||
<key>binaries</key>
|
||||
<key>installables</key>
|
||||
<map>
|
||||
<key>GL</key>
|
||||
<map>
|
||||
|
|
@ -16,23 +16,23 @@
|
|||
<key>darwin</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>7b147162449c216a016dc2bfe2a4380c</string>
|
||||
<string>0bd2795a2afe09f6c563f2f888f24cc9</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/GL-darwin-20080610.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/GL-darwin-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
<key>linux</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>d78e3e4d8c33e5233d88ec8096307ee8</string>
|
||||
<string>85f2ed989f853beb3d6cc94413b35f1a</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/GL-linux-20080610.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/GL-linux-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>e0736f3f17fe980ef68b8a65ef90011d</string>
|
||||
<string>e6ba152b7edd4ad2c9db4f9ff7bd38e1</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/GL-windows-20080611.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/GL-windows-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
</map>
|
||||
</map>
|
||||
|
|
@ -49,23 +49,23 @@
|
|||
<key>darwin</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>d7500212b654e9380c4dc24166285407</string>
|
||||
<string>025bb5e76fd964b89c508d88d37bb802</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/SDL-1.2.5-darwin-20080610.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/SDL-1.2.5-darwin-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
<key>linux</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>c7f3da1da96ccc1f26ec92634e7771b8</string>
|
||||
<string>a28fe914d3f3241c824aabba69f1d946</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/SDL-1.2.5-linux-20080610.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/SDL-1.2.5-linux-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>1c081cc35730919781e23b916a56722e</string>
|
||||
<string>149626b0c10d7eb8b9f9be96b5318218</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/SDL-1.2.5-windows-20080611.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/SDL-1.2.5-windows-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
</map>
|
||||
</map>
|
||||
|
|
@ -78,23 +78,23 @@
|
|||
<key>darwin</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>ee3014eda3d5f912c1e3ec21bbdddcaf</string>
|
||||
<string>10b11783907b72712daef3ed5803d56d</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/apr_suite-1.2.8-darwin-20080610.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/apr_suite-1.2.8-darwin-20080618.tar.bz2</uri>
|
||||
</map>
|
||||
<key>linux</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>4b0f2cc3ec66162be6cf0b13186bc838</string>
|
||||
<string>b99f6bd3548c4f4613fe95320e14dbf3</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/apr_suite-1.2.8-linux-20080610.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/apr_suite-1.2.8-linux-20080618.tar.bz2</uri>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>979257a1b24d9200be58872d9c658114</string>
|
||||
<string>352c46f39773b9415f8a9bf868c4c305</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/apr_suite-1.2.8-windows-20080611.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/apr_suite-1.2.8-windows-20080618.tar.bz2</uri>
|
||||
</map>
|
||||
</map>
|
||||
</map>
|
||||
|
|
@ -111,23 +111,23 @@
|
|||
<key>darwin</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>19aae45edfd29a269cd10af7729489e7</string>
|
||||
<string>b6109b75e53c72e021625e375ba52080</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/ares-1.3.0-darwin-20080610.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ares-1.3.0-darwin-20080618.tar.bz2</uri>
|
||||
</map>
|
||||
<key>linux</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>8b163aa08cf4a5b70f93519137fa6cf0</string>
|
||||
<string>1e800e34d2799abb0797f05c6e38ea1a</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/ares-1.3.0-linux-20080610.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ares-1.3.0-linux-20080618.tar.bz2</uri>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>bbbe5e5f8504125e2ab813f666fd61ba</string>
|
||||
<string>085a62de4c264d6a3718ad789aacd297</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/ares-1.3.0-windows-20080611.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ares-1.3.0-windows-20080618.tar.bz2</uri>
|
||||
</map>
|
||||
</map>
|
||||
</map>
|
||||
|
|
@ -153,23 +153,23 @@
|
|||
<key>darwin</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>4afb62f563bb2fd9d43fc071e2eeb167</string>
|
||||
<string>792601ce1f38067c086394842852fa11</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/boost-1.32.0-darwin-20080610.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/boost-1.32.0-darwin-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
<key>linux</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>14aba81fa0993e420882314a3fea5127</string>
|
||||
<string>e65f06e2500db0bbc34506194ac49f6a</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/boost-1.32.0-linux-20080610.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/boost-1.32.0-linux-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>2b627d2a598f883950c21bae52738176</string>
|
||||
<string>6f03592f4db4c177c7b255520283f547</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/boost-1.32.0-windows-20080611.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/boost-1.32.0-windows-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
</map>
|
||||
</map>
|
||||
|
|
@ -186,23 +186,23 @@
|
|||
<key>darwin</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>722c0e0eccf28b00e0f759362ef81ddf</string>
|
||||
<string>73965ddba50e5c4d46d50a966b472626</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/curl-7.16.0-darwin-20080610.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/curl-7.16.0-darwin-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
<key>linux</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>cd89f34324acf1222078298974c1dfb3</string>
|
||||
<string>a7791ee5ca19f208808f71730c3c2feb</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/curl-7.16.0-linux-20080610.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/curl-7.16.0-linux-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>08d17bc997494a852537b0c7b4425d47</string>
|
||||
<string>fb42c5b40e34b043cee236aa216b141e</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/curl-7.16.0-windows-20080611.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/curl-7.16.0-windows-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
</map>
|
||||
</map>
|
||||
|
|
@ -215,9 +215,9 @@
|
|||
<key>linux</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>e4f5109f8c119613d7b2c3706d786e43</string>
|
||||
<string>feb9d72c373c5dd4c6b88ed02e2b2bf0</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/elfio-1.0.3-linux-20080610.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/elfio-1.0.3-linux-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
</map>
|
||||
</map>
|
||||
|
|
@ -234,23 +234,23 @@
|
|||
<key>darwin</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>93760196ea3e851b1a334743816e189d</string>
|
||||
<string>7b9380e6bac8d9ba5e6ff20da5cad91a</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/expat-1.95.8-darwin-20080610.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/expat-1.95.8-darwin-20080617.tar.bz2</uri>
|
||||
</map>
|
||||
<key>linux</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>8e990a9e3c30c7c37c147ac0df70a323</string>
|
||||
<string>e59d8314185e3d87d72ff90d6cff0d30</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/expat-1.95.8-linux-20080610.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/expat-1.95.8-linux-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>e58538aae9982209e095bbf6660c8d6b</string>
|
||||
<string>abd100b16dbe4621019a229af0411f5d</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/expat-1.95.8-windows-20080611.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/expat-1.95.8-windows-20080617.tar.bz2</uri>
|
||||
</map>
|
||||
</map>
|
||||
</map>
|
||||
|
|
@ -296,9 +296,9 @@
|
|||
<key>linux</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>6630fea6b036f3e937608b3d4186adfa</string>
|
||||
<string>9af6a1ed39fa540bfcaa402b0ea22f78</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/fontconfig-2.2.3-linux-20080610.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/fontconfig-2.2.3-linux-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
</map>
|
||||
</map>
|
||||
|
|
@ -315,23 +315,23 @@
|
|||
<key>darwin</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>b34eb8af0a2b736a1d70d8b32b3e009d</string>
|
||||
<string>cd8a8f8af5a01fac015e5b0325daa2ae</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/freetype-2.1.5-darwin-20080610.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/freetype-2.1.5-darwin-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
<key>linux</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>a52b44f89b7422c565da5f4a5c7f582c</string>
|
||||
<string>83e7aafe0807c2adec68f67b5738d856</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/freetype-2.1.5-linux-20080610.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/freetype-2.1.5-linux-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>5b1aae54ea3313a9f424719323eb5ad3</string>
|
||||
<string>b22d33d86567561eb116aa2ccd024d88</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/freetype-2.1.5-windows-20080611.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/freetype-2.1.5-windows-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
</map>
|
||||
</map>
|
||||
|
|
@ -348,23 +348,23 @@
|
|||
<key>darwin</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>64ea2fca2ca9457b9305ec416c574a61</string>
|
||||
<string>23bd9a75e5a2365a827461e6c324f52b</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/glh_linear-darwin-20080610.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glh_linear-darwin-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
<key>linux</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>6fd9c490b7460e2b433381050495e48e</string>
|
||||
<string>2965646aea1d2a6aec1fbc431c02733f</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/glh_linear-linux-20080610.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glh_linear-linux-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>e286dc9f7ce90856a7ac291874b6fc34</string>
|
||||
<string>38b9ddfe8dceff55ee4351016a937d1b</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/glh_linear-windows-20080611.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glh_linear-windows-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
</map>
|
||||
</map>
|
||||
|
|
@ -377,9 +377,9 @@
|
|||
<key>linux</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>6df3889822deb8b80ac6f6d421a35137</string>
|
||||
<string>589a8385979d2b0561daaec2148f8b77</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/google-linux-20080610.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/google-linux-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
</map>
|
||||
</map>
|
||||
|
|
@ -392,9 +392,9 @@
|
|||
<key>linux</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>5e0e4ee938b56a118c90d51447009ba9</string>
|
||||
<string>c829b638b6eef71ca63418cb9aea46a2</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/gstreamer-linux-20080610.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/gstreamer-linux-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
</map>
|
||||
</map>
|
||||
|
|
@ -411,16 +411,16 @@
|
|||
<key>linux</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>72801a23b43586b822c8a1dfc1a6e313</string>
|
||||
<string>83eddf6114f1e306c61fbda16ad02f0c</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/gtk-atk-pango-glib-linux-20080610.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/gtk-atk-pango-glib-linux-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>492b04de6ba02167cef7a04e8dc5e748</string>
|
||||
<string>d963750bcd333a108b3697d220c87d09</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/gtk-atk-pango-glib-windows-20080611.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/gtk-atk-pango-glib-windows-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
</map>
|
||||
</map>
|
||||
|
|
@ -470,23 +470,23 @@
|
|||
<key>darwin</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>62cc07ef64f31f493f55e618c915125b</string>
|
||||
<string>30b12debc3efce275a335b824dda22d2</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/jpeglib-6b-darwin-20080610.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jpeglib-6b-darwin-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
<key>linux</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>6bb623a88116002124686248ebd35fd9</string>
|
||||
<string>9297565a09754fdf2b58cefef60450c7</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/jpeglib-6b-linux-20080610.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jpeglib-6b-linux-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>b28852df715401eae575ccd9d5c84cf1</string>
|
||||
<string>475ab2d2f4b769834bd3f35562b8c445</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/jpeglib-6b-windows-20080611.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jpeglib-6b-windows-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
</map>
|
||||
</map>
|
||||
|
|
@ -503,23 +503,56 @@
|
|||
<key>darwin</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>a351af91b5a102d1b6fe95b5d1ab4347</string>
|
||||
<string>4db422310f3b35710e44f69ecda19195</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/kdu-5.2.1-darwin-20080610.tar.bz2</uri>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/kdu-5.2.1-darwin-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
<key>linux</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>155ecb6f704c1082aa6565537ada024b</string>
|
||||
<string>5a70296632fa973e6484f60de067088c</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/kdu-5.2.1-linux-20080610.tar.bz2</uri>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/kdu-5.2.1-linux-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>5cd4c0db91e3687290de685203634ab8</string>
|
||||
<string>15528c24ca657b524d9ab3ccbb33c766</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/kdu-5.2.1-windows-20080611.tar.bz2</uri>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/kdu-5.2.1-windows-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
</map>
|
||||
</map>
|
||||
<key>kdu-binaries</key>
|
||||
<map>
|
||||
<key>copyright</key>
|
||||
<string>see kdu</string>
|
||||
<key>description</key>
|
||||
<string>see kdu</string>
|
||||
<key>license</key>
|
||||
<string>kdu</string>
|
||||
<key>packages</key>
|
||||
<map>
|
||||
<key>darwin</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>480fbeeb47c9b9c4a2f947e310c9821c</string>
|
||||
<key>url</key>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/kdu-binaries-5.2.1-darwin-20080617.tar.bz2</uri>
|
||||
</map>
|
||||
<key>linux</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>ca87644e377a6cf16db4ba6dbd2f8689</string>
|
||||
<key>url</key>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/kdu-binaries-5.2.1-linux-20080617.tar.bz2</uri>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>87af253b1d76437290355e8e20029377</string>
|
||||
<key>url</key>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/kdu-binaries-5.2.1-windows-20080617.tar.bz2</uri>
|
||||
</map>
|
||||
</map>
|
||||
</map>
|
||||
|
|
@ -536,23 +569,23 @@
|
|||
<key>darwin</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>2e41f3710b5769e58d2e00944feb7bee</string>
|
||||
<string>90488b309856a82a152348db177a44c5</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/libpng-1.2.18-darwin-20080610.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libpng-1.2.18-darwin-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
<key>linux</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>642dd0ba1fa7ac55fae555cd622b36f6</string>
|
||||
<string>b47eca741c218e13e6838583c9169b64</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/libpng-1.2.18-linux-20080610.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libpng-1.2.18-linux-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>0274c3d4a3b7cce8eede207348438f3b</string>
|
||||
<string>96ad03239a2b1d50584dcaf66162e03e</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/libpng-1.2.18-windows-20080611.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libpng-1.2.18-windows-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
</map>
|
||||
</map>
|
||||
|
|
@ -569,9 +602,9 @@
|
|||
<key>linux</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>8c39ea5d1feebbe9b8ee5d5933eeabe5</string>
|
||||
<string>0591314df0293ba948b0445b0215a18d</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/libstdc++-6.0-linux-20080610.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libstdc++-6.0-linux-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
</map>
|
||||
</map>
|
||||
|
|
@ -588,9 +621,9 @@
|
|||
<key>linux</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>cf68933edc8d556d6901179a7993bbc0</string>
|
||||
<string>495f01afa67ed1ae59b7b8005cfa55ff</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/libuuid-linux-20080610.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libuuid-linux-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
</map>
|
||||
</map>
|
||||
|
|
@ -603,9 +636,9 @@
|
|||
<key>linux</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>3a71ea5ff924e70c6786ef2c202f553b</string>
|
||||
<string>4b5d2dcfe8a49b73fb69f10aab441092</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/libxml-2.6.24-linux-20080610.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libxml-2.6.24-linux-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
</map>
|
||||
</map>
|
||||
|
|
@ -618,23 +651,23 @@
|
|||
<key>darwin</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>e2969baf0e39f6a586141a75c3360330</string>
|
||||
<string>056ad496f0ec2bf386d50f694f6bade3</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/llmozlib-darwin-20080610.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llmozlib-darwin-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
<key>linux</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>55ab8be3f18e27095f7ecae7d90804d5</string>
|
||||
<string>c80e060867b07dd3e3c1dce70f2316eb</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/llmozlib-linux-20080610.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llmozlib-linux-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>73a0bc8ea770a4035175161d2b1e903f</string>
|
||||
<string>4bf828c670fb9848c7d2a91bf4eccafc</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/llmozlib-windows-20080611.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llmozlib-windows-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
</map>
|
||||
</map>
|
||||
|
|
@ -651,16 +684,16 @@
|
|||
<key>linux</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>461891f44070780d9ca0b26988b6f44e</string>
|
||||
<string>13802606c5f6e98af7cfa72cc85e3a92</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/mesa-7.0-linux-20080610.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/mesa-7.0-linux-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>e0a27aef7b2de0d5c78c753f72214e8d</string>
|
||||
<string>82cdcdcb2d0615389a7480485ea35f4c</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/mesa-7.0-windows-20080611.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/mesa-7.0-windows-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
</map>
|
||||
</map>
|
||||
|
|
@ -689,7 +722,7 @@
|
|||
<key>ndofdev</key>
|
||||
<map>
|
||||
<key>copyright</key>
|
||||
<string>(c) 2008 Linden Lab.</string>
|
||||
<string>Copyright (c) 2007, 3Dconnexion, Inc. - All rights reserved.</string>
|
||||
<key>description</key>
|
||||
<string>in use on windows and darwin for joystick support.</string>
|
||||
<key>license</key>
|
||||
|
|
@ -699,23 +732,23 @@
|
|||
<key>darwin</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>dae6e00c7eed6bacdecd639c4f5cef1d</string>
|
||||
<string>15df716b66bd83e2198450eed93197cd</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/ndofdev-darwin-20080610.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ndofdev-darwin-20080618.tar.bz2</uri>
|
||||
</map>
|
||||
<key>linux</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>ccaf379968c886258d5390d06ff1a2c0</string>
|
||||
<string>489612b246b2f4b2f239611d786c79de</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/ndofdev-linux-20080610.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ndofdev-linux-20080618.tar.bz2</uri>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>af8249252bcd3782606bf17cdc145ea4</string>
|
||||
<string>03cbdf59996f468f907f11cb9c64f93f</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/ndofdev-windows-20080611.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ndofdev-windows-20080618.tar.bz2</uri>
|
||||
</map>
|
||||
</map>
|
||||
</map>
|
||||
|
|
@ -732,23 +765,23 @@
|
|||
<key>darwin</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>59d3f15d89d9433f931f480878f46d4c</string>
|
||||
<string>8d9bb71c06f6494cc767965145f31c63</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/ogg-vorbis-1.03-1.1.2-darwin-20080610.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ogg-vorbis-1.03-1.1.2-darwin-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
<key>linux</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>54a29d28fbce6dd6abb875975a42acf1</string>
|
||||
<string>1e912aef160c1d8f46f4194942922654</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/ogg-vorbis-1.03-1.1.2-linux-20080610.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ogg-vorbis-1.03-1.1.2-linux-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>2800543038e88c233976a2301e67325f</string>
|
||||
<string>9667525f28adb4ad54bbc883b14324ac</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/ogg-vorbis-1.03-1.1.2-windows-20080611.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ogg-vorbis-1.03-1.1.2-windows-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
</map>
|
||||
</map>
|
||||
|
|
@ -761,23 +794,23 @@
|
|||
<key>darwin</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>5da0ef41618a024795508f5c93d61754</string>
|
||||
<string>a708e7b41b91852b060bb3d62112b4d7</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/openSSL-0.9.7c-darwin-20080610.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openSSL-0.9.7c-darwin-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
<key>linux</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>fb54b93f881e587363b134f42e2f1c0b</string>
|
||||
<string>727f2a9399b7f414260a03fdf700aef4</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/openSSL-0.9.7c-linux-20080610.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openSSL-0.9.7c-linux-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>0f0e8ea5014f2112f2d04a85a0b8720e</string>
|
||||
<string>8a75180cae12d268071c090abb031ba5</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/openSSL-0.9.7c-windows-20080611.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openSSL-0.9.7c-windows-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
</map>
|
||||
</map>
|
||||
|
|
@ -794,23 +827,23 @@
|
|||
<key>darwin</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>e169d2372539fc96b72dc59aa7a656e6</string>
|
||||
<string>85b34723ab22591ebbc51c474588c2e0</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/openjpeg-1.2-darwin-20080610.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openjpeg-1.2-darwin-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
<key>linux</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>8b2733f8e4b7d58db7392d7a6837675f</string>
|
||||
<string>406ceca1c85b64df18deed95f3b7854c</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/openjpeg-1.2-linux-20080610.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openjpeg-1.2-linux-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>9f7ae7023fad3c823a303c57610973c5</string>
|
||||
<string>33ceb9232a59c0399ef4d239373c3e42</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/openjpeg-1.2-windows-20080611.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openjpeg-1.2-windows-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
</map>
|
||||
</map>
|
||||
|
|
@ -879,23 +912,23 @@
|
|||
<key>darwin</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>fe8045e47dc505786e1d45d480190f96</string>
|
||||
<string>1116d9ba0c34c042788421d4e520e747</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/tut-darwin-20080610.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/tut-darwin-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
<key>linux</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>2e28af0b6124a472b9aac6f2225dca8d</string>
|
||||
<string>da7872a8a5cfe5d14ceeeebe73e58d6b</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/tut-linux-20080610.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/tut-linux-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>953cc124943a05e474687a127d2e88d9</string>
|
||||
<string>aa5e69f024bb408fac41d77d1101ccb6</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/tut-windows-20080611.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/tut-windows-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
</map>
|
||||
</map>
|
||||
|
|
@ -914,7 +947,7 @@
|
|||
<key>md5sum</key>
|
||||
<string>6353aff33d7d03b22055aec76f53a866</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/unistd-windows-20080611.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/unistd-windows-20080611.tar.bz2</uri>
|
||||
</map>
|
||||
</map>
|
||||
</map>
|
||||
|
|
@ -929,23 +962,23 @@
|
|||
<key>darwin</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>121199818b827e147179c3d3494815e1</string>
|
||||
<string>4d786ce5732b70cf230f0eebcec9571c</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/vivox-darwin-20080610.tar.bz2</uri>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/vivox-darwin-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
<key>linux</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>c58f03002a9c452d4c8cb1874d3ac44b</string>
|
||||
<string>3b7dc33c106e1c4c10fc515249ac7bda</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/vivox-linux-20080610.tar.bz2</uri>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/vivox-linux-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>fce352d6d99233b2dac1cd51add0f0d1</string>
|
||||
<string>ef09fcc8dea5d5fc911667f03c8b8a99</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/vivox-windows-20080611.tar.bz2</uri>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/vivox-windows-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
</map>
|
||||
</map>
|
||||
|
|
@ -962,23 +995,23 @@
|
|||
<key>darwin</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>d116c41b95ec41adee7bbfdbf2c74ffb</string>
|
||||
<string>f3e2f3428913bf8b8d70d28a3d079811</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/xmlrpc-epi-0.51-darwin-20080610.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/xmlrpc-epi-0.51-darwin-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
<key>linux</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>dd08d9f03c9fb84406aa31494e4e5663</string>
|
||||
<string>0cc87341785bf23c253e6e69a7c16ca0</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/xmlrpc-epi-0.51-linux-20080610.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/xmlrpc-epi-0.51-linux-20080618.tar.bz2</uri>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>e904dd2653fdb9dac15cc452a74f4bcb</string>
|
||||
<string>ef96676498fef5c2bd1a1de0144163e2</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/xmlrpc-epi-0.51-windows-20080611.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/xmlrpc-epi-0.51-windows-20080613.tar.bz2</uri>
|
||||
</map>
|
||||
</map>
|
||||
</map>
|
||||
|
|
@ -995,30 +1028,23 @@
|
|||
<key>darwin</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>99be09df2ec92282293761cd9ae242ac</string>
|
||||
<string>6f5d1799ffacaec4b61d53051443c672</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/zlib-1.1.4-darwin-20080610.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/zlib-1.1.4-darwin-20080618.tar.bz2</uri>
|
||||
</map>
|
||||
<key>linux</key>
|
||||
<map>
|
||||
<key>i686</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>7efbde55728369e76ab9d46bff60c87f</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~aaronb/install_pkgs/zlib-1.2.1-linux-i686.tar.gz</uri>
|
||||
</map>
|
||||
<key>md5sum</key>
|
||||
<string>a93da3d0a1fcf05c70d545991e0be227</string>
|
||||
<string>4140bc104e828c5c33f251a2d5bfe144</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/zlib-1.1.4-linux-20080610.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/zlib-1.1.4-linux-20080618.tar.bz2</uri>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>md5sum</key>
|
||||
<string>7058b7aeded6d8bb10bd0de8539f8392</string>
|
||||
<string>bebeba689d2a8d19cfde150582a4f85a</string>
|
||||
<key>url</key>
|
||||
<uri>http://int.codex.lindenlab.com/~jenn/install_pkgs/zlib-1.1.4-windows-20080611.tar.bz2</uri>
|
||||
<uri>https://s3.amazonaws.com/viewer-source-downloads/install_pkgs/zlib-1.1.4-windows-20080618.tar.bz2</uri>
|
||||
</map>
|
||||
</map>
|
||||
</map>
|
||||
|
|
|
|||
|
|
@ -121,7 +121,7 @@ class LicenseDefinition(object):
|
|||
self._definition = definition
|
||||
|
||||
|
||||
class BinaryDefinition(object):
|
||||
class InstallableDefinition(object):
|
||||
def __init__(self, definition):
|
||||
#probably looks like:
|
||||
# { packages : {platform...},
|
||||
|
|
@ -223,9 +223,9 @@ class Installer(object):
|
|||
if os.path.exists(self._install_filename):
|
||||
install = llsd.parse(file(self._install_filename, 'rb').read())
|
||||
try:
|
||||
for name in install['binaries']:
|
||||
self._installables[name] = BinaryDefinition(
|
||||
install['binaries'][name])
|
||||
for name in install['installables']:
|
||||
self._installables[name] = InstallableDefinition(
|
||||
install['installables'][name])
|
||||
except KeyError:
|
||||
pass
|
||||
try:
|
||||
|
|
@ -236,7 +236,7 @@ class Installer(object):
|
|||
if os.path.exists(self._installed_filename):
|
||||
installed = llsd.parse(file(self._installed_filename, 'rb').read())
|
||||
try:
|
||||
bins = installed['binaries']
|
||||
bins = installed['installables']
|
||||
for name in bins:
|
||||
self._installed[name] = InstalledPackage(bins[name])
|
||||
except KeyError:
|
||||
|
|
@ -254,29 +254,31 @@ class Installer(object):
|
|||
for name in self._licenses:
|
||||
state['licenses'][name] = self._licenses[name]._definition
|
||||
#print "self._installables:",self._installables
|
||||
state['binaries'] = {}
|
||||
state['installables'] = {}
|
||||
for name in self._installables:
|
||||
state['binaries'][name] = self._installables[name]._definition
|
||||
state['installables'][name] = \
|
||||
self._installables[name]._definition
|
||||
self._write(self._install_filename, state)
|
||||
if self._installed_changed:
|
||||
state = {}
|
||||
state['binaries'] = {}
|
||||
bin = state['binaries']
|
||||
state['installables'] = {}
|
||||
bin = state['installables']
|
||||
for name in self._installed:
|
||||
#print "installed:",name,self._installed[name]._installed
|
||||
bin[name] = self._installed[name]._installed
|
||||
self._write(self._installed_filename, state)
|
||||
|
||||
def is_valid_license(self, bin):
|
||||
"@brief retrun true if we have valid license info for binary."
|
||||
binary = self._installables[bin]._definition
|
||||
if 'license' not in binary:
|
||||
"@brief retrun true if we have valid license info for installable."
|
||||
installable = self._installables[bin]._definition
|
||||
if 'license' not in installable:
|
||||
print >>sys.stderr, "No license info found for", bin
|
||||
print >>sys.stderr, 'Please add the license with the',
|
||||
print >>sys.stderr, '--add-installable option. See', sys.argv[0], '--help'
|
||||
print >>sys.stderr, '--add-installable option. See', \
|
||||
sys.argv[0], '--help'
|
||||
return False
|
||||
if binary['license'] not in self._licenses:
|
||||
lic = binary['license']
|
||||
if installable['license'] not in self._licenses:
|
||||
lic = installable['license']
|
||||
print >>sys.stderr, "Missing license info for '" + lic + "'.",
|
||||
print >>sys.stderr, 'Please add the license with the',
|
||||
print >>sys.stderr, '--add-license option. See', sys.argv[0],
|
||||
|
|
@ -285,11 +287,11 @@ class Installer(object):
|
|||
return True
|
||||
|
||||
def list_installables(self):
|
||||
"Return a list of all known binaries."
|
||||
"Return a list of all known installables."
|
||||
return self._installables.keys()
|
||||
|
||||
def detail_binary(self, name):
|
||||
"Return a binary definition detail"
|
||||
def detail_installable(self, name):
|
||||
"Return a installable definition detail"
|
||||
return self._installables[name]._definition
|
||||
|
||||
def list_licenses(self):
|
||||
|
|
@ -304,43 +306,49 @@ class Installer(object):
|
|||
"Return a list of installed packages."
|
||||
return self._installed.keys()
|
||||
|
||||
def _update_field(self, binary, field, value):
|
||||
def _update_field(self, description, field, value, multiline=False):
|
||||
"""Given a block and a field name, add or update it.
|
||||
@param binary[in,out] a dict containing all the details about a binary.
|
||||
@param description a dict containing all the details of a description.
|
||||
@param field the name of the field to update.
|
||||
@param value the value of the field to update; if omitted, interview
|
||||
will ask for value.
|
||||
@param multiline boolean specifying whether field is multiline or not.
|
||||
"""
|
||||
if value:
|
||||
binary[field] = value
|
||||
description[field] = value
|
||||
else:
|
||||
if field in binary:
|
||||
if field in description:
|
||||
print "Update value for '" + field + "'"
|
||||
print "(Leave blank to keep current value)"
|
||||
print "Current Value: '" + binary[field] + "'"
|
||||
print "Current Value: '" + description[field] + "'"
|
||||
else:
|
||||
print "Specify value for '" + field + "'"
|
||||
new_value = raw_input("Enter New Value: ")
|
||||
if field in binary and not new_value:
|
||||
if not multiline:
|
||||
new_value = raw_input("Enter New Value: ")
|
||||
else:
|
||||
print "Please enter " + field + ". End input with EOF (^D)."
|
||||
new_value = sys.stdin.read()
|
||||
|
||||
if field in description and not new_value:
|
||||
pass
|
||||
elif new_value:
|
||||
binary[field] = new_value
|
||||
description[field] = new_value
|
||||
|
||||
self._install_changed = True
|
||||
return True
|
||||
|
||||
def _update_installable(self, name, platform, url, md5sum):
|
||||
"""Update installable entry with specific package information.
|
||||
@param binary[in,out] a dict containing all the details about a binary.
|
||||
@param installable[in,out] a dict containing installable details.
|
||||
@param platform Platform info, i.e. linux/i686, windows/i686 etc.
|
||||
@param url URL of tar file
|
||||
@param md5sum md5sum of tar file
|
||||
"""
|
||||
binary = self._installables[name]._definition
|
||||
installable = self._installables[name]._definition
|
||||
path = platform.split('/')
|
||||
if 'packages' not in binary:
|
||||
binary['packages'] = {}
|
||||
update = binary['packages']
|
||||
if 'packages' not in installable:
|
||||
installable['packages'] = {}
|
||||
update = installable['packages']
|
||||
for child in path:
|
||||
if child not in update:
|
||||
update[child] = {}
|
||||
|
|
@ -354,8 +362,8 @@ class Installer(object):
|
|||
|
||||
|
||||
def add_installable_package(self, name, **kwargs):
|
||||
"""Add an url for a platform path to the binary.
|
||||
@param binary[in,out] a dict containing all the details about a binary.
|
||||
"""Add an url for a platform path to the installable.
|
||||
@param installable[in,out] a dict containing installable details.
|
||||
"""
|
||||
platform_help_str = """\
|
||||
Please enter a new package location and url. Some examples:
|
||||
|
|
@ -369,10 +377,11 @@ windows/i686/vs/2003 -- specify a windows visual studio 2003 package"""
|
|||
+"--add-installable-package option"
|
||||
return False
|
||||
else:
|
||||
print "Updating binary '" + name + "'."
|
||||
print "Updating installable '" + name + "'."
|
||||
for arg in ('platform', 'url', 'md5sum'):
|
||||
if not kwargs[arg]:
|
||||
if arg == 'platform': print platform_help_str
|
||||
if arg == 'platform':
|
||||
print platform_help_str
|
||||
kwargs[arg] = raw_input("Package "+arg+":")
|
||||
path = kwargs['platform'].split('/')
|
||||
|
||||
|
|
@ -381,22 +390,22 @@ windows/i686/vs/2003 -- specify a windows visual studio 2003 package"""
|
|||
|
||||
def add_installable_metadata(self, name, **kwargs):
|
||||
"""Interactively add (only) library metadata into install,
|
||||
w/o adding binary"""
|
||||
w/o adding installable"""
|
||||
if name not in self._installables:
|
||||
print "Adding installable '" + name + "'."
|
||||
self._installables[name] = BinaryDefinition({})
|
||||
self._installables[name] = InstallableDefinition({})
|
||||
else:
|
||||
print "Updating installable '" + name + "'."
|
||||
binary = self._installables[name]._definition
|
||||
installable = self._installables[name]._definition
|
||||
for field in ('copyright', 'license', 'description'):
|
||||
self._update_field(binary, field, kwargs[field])
|
||||
self._update_field(installable, field, kwargs[field])
|
||||
print "Added installable '" + name + "':"
|
||||
pprint.pprint(self._installables[name])
|
||||
|
||||
return True
|
||||
|
||||
def add_installable(self, name, **kwargs):
|
||||
"Interactively pull a new binary into the install"
|
||||
"Interactively pull a new installable into the install"
|
||||
ret_a = self.add_installable_metadata(name, **kwargs)
|
||||
ret_b = self.add_installable_package(name, **kwargs)
|
||||
return (ret_a and ret_b)
|
||||
|
|
@ -405,17 +414,18 @@ windows/i686/vs/2003 -- specify a windows visual studio 2003 package"""
|
|||
self._installables.pop(name)
|
||||
self._install_changed = True
|
||||
|
||||
def add_license(self, name, text, url):
|
||||
if name in self._licenses:
|
||||
print "License '" + name + "' being overwritten."
|
||||
definition = {}
|
||||
if url:
|
||||
definition['url'] = url
|
||||
if not url and text is None:
|
||||
print "Please enter license text. End input with EOF (^D)."
|
||||
text = sys.stdin.read()
|
||||
definition['text'] = text
|
||||
self._licenses[name] = LicenseDefinition(definition)
|
||||
def add_license(self, name, **kwargs):
|
||||
if name not in self._licenses:
|
||||
print "Adding license '" + name + "'."
|
||||
self._licenses[name] = LicenseDefinition({})
|
||||
else:
|
||||
print "Updating license '" + name + "'."
|
||||
license = self._licenses[name]._definition
|
||||
for field in ('url', 'text'):
|
||||
multiline = False
|
||||
if field == 'text':
|
||||
multiline = True
|
||||
self._update_field(license, field, kwargs[field], multiline)
|
||||
self._install_changed = True
|
||||
return True
|
||||
|
||||
|
|
@ -423,15 +433,15 @@ windows/i686/vs/2003 -- specify a windows visual studio 2003 package"""
|
|||
self._licenses.pop(name)
|
||||
self._install_changed = True
|
||||
|
||||
def _uninstall(self, binaries):
|
||||
def _uninstall(self, installables):
|
||||
"""@brief Do the actual removal of files work.
|
||||
*NOTE: This method is not transactionally safe -- ie, if it
|
||||
raises an exception, internal state may be inconsistent. How
|
||||
should we address this?
|
||||
@param binaries The package names to remove
|
||||
@param installables The package names to remove
|
||||
"""
|
||||
remove_file_list = []
|
||||
for pkgname in binaries:
|
||||
for pkgname in installables:
|
||||
for url in self._installed[pkgname].urls():
|
||||
remove_file_list.extend(
|
||||
self._installed[pkgname].files_in(url))
|
||||
|
|
@ -455,16 +465,16 @@ windows/i686/vs/2003 -- specify a windows visual studio 2003 package"""
|
|||
# normal failures.
|
||||
pass
|
||||
|
||||
def uninstall(self, binaries, install_dir):
|
||||
def uninstall(self, installables, install_dir):
|
||||
"""@brief Remove the packages specified.
|
||||
@param binaries The package names to remove
|
||||
@param installables The package names to remove
|
||||
@param install_dir The directory to work from
|
||||
"""
|
||||
print "uninstall",binaries,"from",install_dir
|
||||
print "uninstall",installables,"from",install_dir
|
||||
cwd = os.getcwdu()
|
||||
os.chdir(install_dir)
|
||||
try:
|
||||
self._uninstall(binaries)
|
||||
self._uninstall(installables)
|
||||
finally:
|
||||
os.chdir(cwd)
|
||||
|
||||
|
|
@ -476,7 +486,9 @@ windows/i686/vs/2003 -- specify a windows visual studio 2003 package"""
|
|||
"""
|
||||
ifiles = []
|
||||
for bin in self._installables:
|
||||
ifiles.extend(self._installables[bin].ifiles(bin, platform, cache_dir))
|
||||
ifiles.extend(self._installables[bin].ifiles(bin,
|
||||
platform,
|
||||
cache_dir))
|
||||
to_install = []
|
||||
#print "self._installed",self._installed
|
||||
for ifile in ifiles:
|
||||
|
|
@ -484,13 +496,15 @@ windows/i686/vs/2003 -- specify a windows visual studio 2003 package"""
|
|||
to_install.append(ifile)
|
||||
elif ifile.url not in self._installed[ifile.pkgname].urls():
|
||||
to_install.append(ifile)
|
||||
elif ifile.md5sum != self._installed[ifile.pkgname].get_md5sum(ifile.url):
|
||||
elif ifile.md5sum != \
|
||||
self._installed[ifile.pkgname].get_md5sum(ifile.url):
|
||||
# *TODO: We may want to uninstall the old version too
|
||||
# when we detect it is installed, but the md5 sum is
|
||||
# different.
|
||||
to_install.append(ifile)
|
||||
else:
|
||||
#print "Installation up to date:",ifile.pkgname,ifile.platform_path
|
||||
#print "Installation up to date:",
|
||||
# ifile.pkgname,ifile.platform_path
|
||||
pass
|
||||
#print "to_install",to_install
|
||||
return to_install
|
||||
|
|
@ -521,9 +535,9 @@ windows/i686/vs/2003 -- specify a windows visual studio 2003 package"""
|
|||
self._installed[ifile.pkgname] = InstalledPackage(definition)
|
||||
self._installed_changed = True
|
||||
|
||||
def install(self, binaries, platform, install_dir, cache_dir):
|
||||
def install(self, installables, platform, install_dir, cache_dir):
|
||||
"""@brief Do the installation for for the platform.
|
||||
@param binaries The requested binaries to install.
|
||||
@param installables The requested installables to install.
|
||||
@param platform The target platform. Eg, windows or linux/i686/gcc/3.3
|
||||
@param install_dir The root directory to install into. Created
|
||||
if missing.
|
||||
|
|
@ -537,7 +551,7 @@ windows/i686/vs/2003 -- specify a windows visual studio 2003 package"""
|
|||
to_install = self._build_ifiles(platform, cache_dir)
|
||||
|
||||
# Filter for files which we actually requested to install.
|
||||
to_install = [ifl for ifl in to_install if ifl.pkgname in binaries]
|
||||
to_install = [ifl for ifl in to_install if ifl.pkgname in installables]
|
||||
for ifile in to_install:
|
||||
ifile.fetch_local()
|
||||
self._install(to_install, install_dir)
|
||||
|
|
@ -614,9 +628,9 @@ def _getuser():
|
|||
import win32api
|
||||
return win32api.GetUserName()
|
||||
|
||||
def _default_binary_cache():
|
||||
"""In general, the binary files do not change much, so find a host/user
|
||||
specific location to cache files."""
|
||||
def _default_installable_cache():
|
||||
"""In general, the installable files do not change much, so find a
|
||||
host/user specific location to cache files."""
|
||||
user = _getuser()
|
||||
cache_dir = "/var/tmp/%s/install.cache" % user
|
||||
if _get_platform() == 'windows':
|
||||
|
|
@ -628,23 +642,23 @@ def _default_binary_cache():
|
|||
|
||||
def parse_args():
|
||||
parser = optparse.OptionParser(
|
||||
usage="usage: %prog [options] [binary1 [binary2 [binary3...]]]",
|
||||
usage="usage: %prog [options] [installable1 [installable2...]]",
|
||||
formatter = helpformatter.Formatter(),
|
||||
description="""This script fetches and installs binary packages.
|
||||
description="""This script fetches and installs installable packages.
|
||||
It also handles uninstalling those packages and manages the mapping between
|
||||
packages and their license.
|
||||
|
||||
The process is to open and read an install manifest file which specifies
|
||||
what files should be installed. For each binary to be installed.
|
||||
what files should be installed. For each installable to be installed.
|
||||
* make sure it has a license
|
||||
* check the installed version
|
||||
** if not installed and needs to be, download and install
|
||||
** if installed version differs, download & install
|
||||
|
||||
If no binaries are specified on the command line, then the defaut
|
||||
behavior is to install all known binaries appropriate for the platform
|
||||
specified or uninstall all binaries if --uninstall is set. You can specify
|
||||
more than one binary on the command line.
|
||||
If no installables are specified on the command line, then the defaut
|
||||
behavior is to install all known installables appropriate for the platform
|
||||
specified or uninstall all installables if --uninstall is set. You can specify
|
||||
more than one installable on the command line.
|
||||
|
||||
When specifying a platform, you can specify 'all' to install all
|
||||
packages, or any platform of the form:
|
||||
|
|
@ -696,13 +710,14 @@ darwin/universal/gcc/4.0
|
|||
default=_get_platform(),
|
||||
dest='platform',
|
||||
help="""Override the automatically determined platform. \
|
||||
You can specify 'all' to do a installation of binaries for all platforms.""")
|
||||
You can specify 'all' to do a installation of installables for all platforms.""")
|
||||
parser.add_option(
|
||||
'--cache-dir',
|
||||
type='string',
|
||||
default=_default_binary_cache(),
|
||||
default=_default_installable_cache(),
|
||||
dest='cache_dir',
|
||||
help='Where to download files. Default: %s'%(_default_binary_cache()))
|
||||
help='Where to download files. Default: %s'% \
|
||||
(_default_installable_cache()))
|
||||
parser.add_option(
|
||||
'--install-dir',
|
||||
type='string',
|
||||
|
|
@ -767,14 +782,14 @@ Ignored if --add-license is not specified.""")
|
|||
type='string',
|
||||
default=None,
|
||||
dest='remove_installable',
|
||||
help="Remove a binary from the install file.")
|
||||
help="Remove a installable from the install file.")
|
||||
parser.add_option(
|
||||
'--add-installable',
|
||||
type='string',
|
||||
default=None,
|
||||
dest='add_installable',
|
||||
help="""Add a binary into the install file. Argument is the name of \
|
||||
the binary to add.""")
|
||||
help="""Add a installable into the install file. Argument is \
|
||||
the name of the installable to add.""")
|
||||
parser.add_option(
|
||||
'--add-installable-metadata',
|
||||
type='string',
|
||||
|
|
@ -836,21 +851,22 @@ Ignored if --add-installable or --add-installable-package is not specified.""")
|
|||
action='store_true',
|
||||
default=False,
|
||||
dest='list_installables',
|
||||
help="List the binaries in the install manifest and exit.")
|
||||
help="List the installables in the install manifest and exit.")
|
||||
parser.add_option(
|
||||
'--detail',
|
||||
type='string',
|
||||
default=None,
|
||||
dest='detail_binary',
|
||||
help="Get detailed information on specified binary and exit.")
|
||||
dest='detail_installable',
|
||||
help="Get detailed information on specified installable and exit.")
|
||||
parser.add_option(
|
||||
'--uninstall',
|
||||
action='store_true',
|
||||
default=False,
|
||||
dest='uninstall',
|
||||
help="""Remove the binaries specified in the arguments. Just like \
|
||||
during installation, if no binaries are listed then all installed binaries \
|
||||
are removed.""")
|
||||
help="""Remove the installables specified in the arguments. Just like \
|
||||
during installation, if no installables are listed then all installed \
|
||||
installables are removed.""")
|
||||
|
||||
return parser.parse_args()
|
||||
|
||||
def main():
|
||||
|
|
@ -867,15 +883,15 @@ def main():
|
|||
print "installed list:", installer.list_installed()
|
||||
return 0
|
||||
if options.list_installables:
|
||||
print "binary list:", installer.list_installables()
|
||||
print "installable list:", installer.list_installables()
|
||||
return 0
|
||||
if options.detail_binary:
|
||||
if options.detail_installable:
|
||||
try:
|
||||
detail = installer.detail_binary(options.detail_binary)
|
||||
print "Detail on binary",options.detail_binary+":"
|
||||
detail = installer.detail_installable(options.detail_installable)
|
||||
print "Detail on installable",options.detail_installable+":"
|
||||
pprint.pprint(detail)
|
||||
except KeyError:
|
||||
print "Bianry '"+options.detail_binary+"' not found in",
|
||||
print "Binary '"+options.detail_installable+"' not found in",
|
||||
print "install file."
|
||||
return 0
|
||||
if options.list_licenses:
|
||||
|
|
@ -887,7 +903,7 @@ def main():
|
|||
print "Detail on license",options.detail_license+":"
|
||||
pprint.pprint(detail)
|
||||
except KeyError:
|
||||
print "License '"+options.detail_binary+"' not defined in",
|
||||
print "License '"+options.detail_license+"' not defined in",
|
||||
print "install file."
|
||||
return 0
|
||||
if options.export_manifest:
|
||||
|
|
@ -905,8 +921,8 @@ def main():
|
|||
if options.new_license:
|
||||
if not installer.add_license(
|
||||
options.new_license,
|
||||
options.license_text,
|
||||
options.license_url):
|
||||
text=options.license_text,
|
||||
url=options.license_url):
|
||||
return 1
|
||||
elif options.remove_license:
|
||||
installer.remove_license(options.remove_license)
|
||||
|
|
@ -945,14 +961,15 @@ def main():
|
|||
# passed in on the command line. We'll need to verify we
|
||||
# know about them here.
|
||||
uninstall_installables = args
|
||||
for binary in uninstall_installables:
|
||||
if binary not in all_installed:
|
||||
raise RuntimeError('Binary not installed: %s' % (binary,))
|
||||
for installable in uninstall_installables:
|
||||
if installable not in all_installed:
|
||||
raise RuntimeError('Binary not installed: %s' %
|
||||
(installable,))
|
||||
installer.uninstall(uninstall_installables, options.install_dir)
|
||||
else:
|
||||
# Determine what binaries should be installed. If they were
|
||||
# Determine what installables should be installed. If they were
|
||||
# passed in on the command line, use them, otherwise install
|
||||
# all known binaries.
|
||||
# all known installables.
|
||||
all_installables = installer.list_installables()
|
||||
if not len(args):
|
||||
install_installables = all_installables
|
||||
|
|
@ -960,18 +977,19 @@ def main():
|
|||
# passed in on the command line. We'll need to verify we
|
||||
# know about them here.
|
||||
install_installables = args
|
||||
for binary in install_installables:
|
||||
if binary not in all_installables:
|
||||
raise RuntimeError('Unknown binary: %s' % (binary,))
|
||||
for installable in install_installables:
|
||||
if installable not in all_installables:
|
||||
raise RuntimeError('Unknown installable: %s' %
|
||||
(installable,))
|
||||
if options.check_license:
|
||||
# *TODO: check against a list of 'known good' licenses.
|
||||
# *TODO: check for urls which conflict -- will lead to
|
||||
# problems.
|
||||
for binary in install_installables:
|
||||
if not installer.is_valid_license(binary):
|
||||
for installable in install_installables:
|
||||
if not installer.is_valid_license(installable):
|
||||
return 1
|
||||
|
||||
# Do the work of installing the requested binaries.
|
||||
# Do the work of installing the requested installables.
|
||||
installer.install(
|
||||
install_installables,
|
||||
options.platform,
|
||||
|
|
|
|||
Loading…
Reference in New Issue