mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-03-02 23:11:48 +08:00
Compare commits
25 Commits
core-win-3
...
v4.5.dev.2
| Author | SHA1 | Date | |
|---|---|---|---|
| 8c2637b89c | |||
| ef389872df | |||
| 6fc611fdfc | |||
| 0cabb63336 | |||
| f501bf7930 | |||
| 7b617dc9e9 | |||
| 245f989ae3 | |||
| 429729b979 | |||
| d709652992 | |||
| 776d799fd2 | |||
| a975cb8261 | |||
| c932b5af26 | |||
| 423e8dda86 | |||
| afcf6b079e | |||
| 3ed2224f93 | |||
| 5307855120 | |||
| 3c9a91af45 | |||
| 9f06f94c93 | |||
| 4954ef2934 | |||
| 721e8800f1 | |||
| ef8e5cab6d | |||
| 028e58ad51 | |||
| 424e0e34cc | |||
| d8988cd101 | |||
| 440a884c0a |
@ -49,8 +49,8 @@
|
||||
6967917D1D9E8AEE002CA4BA /* BinReaderWriterDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 696791791D9E8AEE002CA4BA /* BinReaderWriterDefines.h */; };
|
||||
6967917E1D9E8AEE002CA4BA /* BinWriters.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6967917A1D9E8AEE002CA4BA /* BinWriters.cpp */; };
|
||||
6967917F1D9E8AEE002CA4BA /* BinWriters.h in Headers */ = {isa = PBXBuildFile; fileRef = 6967917B1D9E8AEE002CA4BA /* BinWriters.h */; };
|
||||
69BBDF251F0B8AAC00EB1BF7 /* FileDownloader_mac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 69BBDF241F0B8AAC00EB1BF7 /* FileDownloader_mac.mm */; };
|
||||
69F181AF1C77274E00B2952B /* FileDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = 69F181AD1C77274E00B2952B /* FileDownloader.h */; };
|
||||
69F181B51C77276D00B2952B /* FileDownloader_curl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 69F181B31C77276D00B2952B /* FileDownloader_curl.cpp */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
@ -97,8 +97,8 @@
|
||||
696791791D9E8AEE002CA4BA /* BinReaderWriterDefines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BinReaderWriterDefines.h; path = ../../BinWriter/BinReaderWriterDefines.h; sourceTree = "<group>"; };
|
||||
6967917A1D9E8AEE002CA4BA /* BinWriters.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = BinWriters.cpp; path = ../../BinWriter/BinWriters.cpp; sourceTree = "<group>"; };
|
||||
6967917B1D9E8AEE002CA4BA /* BinWriters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BinWriters.h; path = ../../BinWriter/BinWriters.h; sourceTree = "<group>"; };
|
||||
69BBDF241F0B8AAC00EB1BF7 /* FileDownloader_mac.mm */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp.preprocessed; fileEncoding = 4; name = FileDownloader_mac.mm; path = ../../../Common/FileDownloader/FileDownloader_mac.mm; sourceTree = "<group>"; };
|
||||
69F181AD1C77274E00B2952B /* FileDownloader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FileDownloader.h; path = ../../../Common/FileDownloader/FileDownloader.h; sourceTree = "<group>"; };
|
||||
69F181B31C77276D00B2952B /* FileDownloader_curl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = FileDownloader_curl.cpp; path = ../../../Common/FileDownloader/FileDownloader_curl.cpp; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
@ -230,7 +230,7 @@
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
69F181AD1C77274E00B2952B /* FileDownloader.h */,
|
||||
69F181B31C77276D00B2952B /* FileDownloader_curl.cpp */,
|
||||
69BBDF241F0B8AAC00EB1BF7 /* FileDownloader_mac.mm */,
|
||||
);
|
||||
name = Common;
|
||||
sourceTree = "<group>";
|
||||
@ -339,7 +339,6 @@
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
69F181B51C77276D00B2952B /* FileDownloader_curl.cpp in Sources */,
|
||||
17C1FE961ACC42C4006B99B3 /* Common.cpp in Sources */,
|
||||
17C1FE971ACC42C4006B99B3 /* ChartFromToBinary.cpp in Sources */,
|
||||
17C1FE981ACC42C4006B99B3 /* CSVReader.cpp in Sources */,
|
||||
@ -348,6 +347,7 @@
|
||||
17C1FE9B1ACC42C4006B99B3 /* CSVWriter.cpp in Sources */,
|
||||
69414A301CB51666003E771B /* ChartWriter.cpp in Sources */,
|
||||
6967917E1D9E8AEE002CA4BA /* BinWriters.cpp in Sources */,
|
||||
69BBDF251F0B8AAC00EB1BF7 /* FileDownloader_mac.mm in Sources */,
|
||||
17C1FE9C1ACC42C4006B99B3 /* XlsxSerializer.cpp in Sources */,
|
||||
690FE0851E9BBD68004B26D0 /* Readers.cpp in Sources */,
|
||||
17C1FE9D1ACC42C4006B99B3 /* FontProcessor.cpp in Sources */,
|
||||
@ -379,6 +379,7 @@
|
||||
unix,
|
||||
_IOS,
|
||||
DONT_WRITE_EMBEDDED_FONTS,
|
||||
_XCODE,
|
||||
);
|
||||
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
||||
HEADER_SEARCH_PATHS = (
|
||||
@ -416,6 +417,7 @@
|
||||
unix,
|
||||
_IOS,
|
||||
DONT_WRITE_EMBEDDED_FONTS,
|
||||
_XCODE,
|
||||
);
|
||||
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
||||
HEADER_SEARCH_PATHS = (
|
||||
|
||||
@ -92,13 +92,16 @@ public:
|
||||
bool bResult = pInfo->ReadFromStream(&oUserAtom, pStream);
|
||||
|
||||
offsetToEdit = pInfo->m_oUser.m_nOffsetLastEdit;
|
||||
m_oCurrentUser.m_bIsEncrypt = pInfo->m_bEncrypt;
|
||||
|
||||
if (bResult == false)
|
||||
{
|
||||
delete pInfo;
|
||||
|
||||
if (pInfo->m_bEncrypt) return false;
|
||||
else continue;
|
||||
if (pInfo->m_bEncrypt)
|
||||
return false;
|
||||
else
|
||||
continue;
|
||||
}
|
||||
|
||||
m_arUsers.push_back(pInfo);
|
||||
|
||||
@ -116,7 +116,7 @@ bool CPPTFileReader::ReadPersists()
|
||||
CFStreamPtr pStream = GetDocumentStream();
|
||||
if (!pStream) return false;
|
||||
|
||||
if (m_oDocumentInfo.ReadFromStream(&m_oCurrentUser, pStream->stream_) == false) return false;
|
||||
return m_oDocumentInfo.ReadFromStream(&m_oCurrentUser, pStream->stream_);
|
||||
}
|
||||
void CPPTFileReader::ReadDocument()
|
||||
{
|
||||
|
||||
@ -60,7 +60,7 @@ int _tmain(int argc, _TCHAR* argv[])
|
||||
|
||||
pptFile.put_TempDirectory(tempPath);
|
||||
|
||||
HRESULT hRes = pptFile.LoadFromFile(sSrcPpt, dstTempPath, L"password");
|
||||
HRESULT hRes = pptFile.LoadFromFile(sSrcPpt, dstTempPath, L"");
|
||||
|
||||
if (hRes == S_OK)
|
||||
{
|
||||
|
||||
@ -36,8 +36,6 @@
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
|
||||
// Logical representation of BkHim record in BIFF8
|
||||
class BkHim: public BiffRecordContinued
|
||||
{
|
||||
BIFF_RECORD_DEFINE_TYPE_INFO(BkHim)
|
||||
@ -48,10 +46,9 @@ public:
|
||||
|
||||
BaseObjectPtr clone();
|
||||
|
||||
|
||||
void readFields(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeBkHim;
|
||||
static const ElementType type = typeBkHim;
|
||||
|
||||
_UINT16 cf;
|
||||
_UINT32 lcb;
|
||||
|
||||
@ -52,8 +52,13 @@ BaseObjectPtr SXDBB::clone()
|
||||
|
||||
void SXDBB::readFields(CFRecord& record)
|
||||
{
|
||||
int skip = record.getDataSize() - record.getRdPtr();
|
||||
record.skipNunBytes(skip);
|
||||
size = record.getDataSize() - record.getRdPtr();
|
||||
|
||||
blob = boost::shared_array<unsigned char>(new unsigned char[size]);
|
||||
|
||||
memcpy(blob.get(), record.getCurData<unsigned char>(), size);
|
||||
|
||||
record.skipNunBytes(size);
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -31,12 +31,12 @@
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include "BiffRecord.h"
|
||||
#include "BiffRecordContinued.h"
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
class SXDBB: public BiffRecord
|
||||
class SXDBB: public BiffRecordContinued
|
||||
{
|
||||
BIFF_RECORD_DEFINE_TYPE_INFO(SXDBB)
|
||||
BASE_OBJECT_DEFINE_CLASS_NAME(SXDBB)
|
||||
@ -50,6 +50,8 @@ public:
|
||||
|
||||
static const ElementType type = typeSXDBB;
|
||||
|
||||
boost::shared_array<unsigned char> blob;
|
||||
unsigned int size;
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -39,12 +39,10 @@ SXDI::SXDI()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
SXDI::~SXDI()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
BaseObjectPtr SXDI::clone()
|
||||
{
|
||||
return BaseObjectPtr(new SXDI(*this));
|
||||
@ -61,5 +59,22 @@ void SXDI::readFields(CFRecord& record)
|
||||
}
|
||||
}
|
||||
|
||||
int SXDI::serialize(std::wostream & strm)
|
||||
{
|
||||
CP_XML_WRITER(strm)
|
||||
{
|
||||
CP_XML_NODE(L"dataField")
|
||||
{
|
||||
if (stName.value().empty() == false)
|
||||
CP_XML_ATTR(L"name", stName.value());
|
||||
|
||||
CP_XML_ATTR(L"fld", isxvdData);
|
||||
CP_XML_ATTR(L"baseField", df);
|
||||
CP_XML_ATTR(L"baseItem", isxvi);
|
||||
CP_XML_ATTR(L"numFmtId", ifmt);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
} // namespace XLS
|
||||
|
||||
|
||||
@ -49,6 +49,8 @@ public:
|
||||
|
||||
void readFields(CFRecord& record);
|
||||
|
||||
int serialize(std::wostream & strm);
|
||||
|
||||
static const ElementType type = typeSXDI;
|
||||
|
||||
short isxvdData;
|
||||
|
||||
@ -51,6 +51,30 @@ BaseObjectPtr SXDtr::clone()
|
||||
|
||||
void SXDtr::readFields(CFRecord& record)
|
||||
{
|
||||
record >> yr >> mon >> dom >> hr >> min >> sec;
|
||||
}
|
||||
|
||||
std::wstring SXDtr::get_string_date()
|
||||
{
|
||||
std::wstringstream s;
|
||||
s << yr << L"-" << (mon < 10 ? L"0" : L"") << mon << L"-" << (dom < 10 ? L"0" : L"") << dom << L"T"
|
||||
<< (hr < 10 ? L"0" : L"") << hr << L":" << (min < 10 ? L"0" : L"") << min << L":" << (sec < 10 ? L"0" : L"") << sec;
|
||||
|
||||
return s.str();
|
||||
}
|
||||
|
||||
int SXDtr::serialize(std::wostream & strm)
|
||||
{
|
||||
CP_XML_WRITER(strm)
|
||||
{
|
||||
CP_XML_NODE(L"d")
|
||||
{
|
||||
|
||||
CP_XML_ATTR(L"v", get_string_date());
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -32,7 +32,6 @@
|
||||
#pragma once
|
||||
|
||||
#include "BiffRecord.h"
|
||||
//#include "../Biff_structures/CellRangeRef.h"
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
@ -49,8 +48,18 @@ public:
|
||||
|
||||
void readFields(CFRecord& record);
|
||||
|
||||
int serialize(std::wostream & strm);
|
||||
|
||||
static const ElementType type = typeSXDtr;
|
||||
|
||||
unsigned short yr;
|
||||
unsigned short mon;
|
||||
unsigned char dom;
|
||||
unsigned char hr;
|
||||
unsigned char min;
|
||||
unsigned char sec;
|
||||
|
||||
std::wstring get_string_date();
|
||||
|
||||
};
|
||||
|
||||
|
||||
@ -69,6 +69,12 @@ void SXFDB::readFields(CFRecord& record)
|
||||
fServerBased = GETBIT(flags, 13);
|
||||
fCantGetUniqueItems = GETBIT(flags, 14);
|
||||
fCalculatedField = GETBIT(flags, 15);
|
||||
|
||||
if (fAllAtoms)
|
||||
{
|
||||
GlobalWorkbookInfoPtr global_info = record.getGlobalWorkbookInfo();
|
||||
global_info->arCacheFieldShortSize.push_back(fShortIitms);
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -51,6 +51,7 @@ BaseObjectPtr SXFDBType::clone()
|
||||
|
||||
void SXFDBType::readFields(CFRecord& record)
|
||||
{
|
||||
record >> wTypeSql;
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -50,7 +50,7 @@ public:
|
||||
|
||||
static const ElementType type = typeSXFDBType;
|
||||
|
||||
|
||||
short wTypeSql; //ODBCType enum
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -51,6 +51,9 @@ BaseObjectPtr SXFormula::clone()
|
||||
|
||||
void SXFormula::readFields(CFRecord& record)
|
||||
{
|
||||
unsigned short reserved;
|
||||
|
||||
record >> reserved >> ifdb;
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -50,7 +50,7 @@ public:
|
||||
|
||||
static const ElementType type = typeSXFormula;
|
||||
|
||||
|
||||
short ifdb;
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -51,6 +51,7 @@ BaseObjectPtr SXInt::clone()
|
||||
|
||||
void SXInt::readFields(CFRecord& record)
|
||||
{
|
||||
record >> num;
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -32,7 +32,6 @@
|
||||
#pragma once
|
||||
|
||||
#include "BiffRecord.h"
|
||||
//#include "../Biff_structures/CellRangeRef.h"
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
@ -51,7 +50,7 @@ public:
|
||||
|
||||
static const ElementType type = typeSXInt;
|
||||
|
||||
|
||||
short num;
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -50,17 +50,15 @@ BaseObjectPtr SXLI::clone()
|
||||
}
|
||||
|
||||
void SXLI::readFields(CFRecord& record)
|
||||
{// 0 or 2 records SXLIItem
|
||||
int size_item = (record.getDataSize() - record.getRdPtr()) / 2;
|
||||
|
||||
if (size_item < 8)
|
||||
{
|
||||
while(true)
|
||||
{
|
||||
//??
|
||||
return;
|
||||
}
|
||||
int size_item = record.getDataSize() - record.getRdPtr();
|
||||
|
||||
for (int k = 0; k < 2; k++)
|
||||
{
|
||||
if (size_item < 8)
|
||||
{
|
||||
break;
|
||||
}
|
||||
SXLIItem item;
|
||||
|
||||
unsigned short flags;
|
||||
@ -74,12 +72,13 @@ void SXLI::readFields(CFRecord& record)
|
||||
item.fGrand = GETBIT(flags, 11);
|
||||
item.fMultiDataOnAxis = GETBIT(flags, 12);
|
||||
|
||||
int count = (size_item - 8) / 2;
|
||||
|
||||
for (int i = 0; i < count; i++)
|
||||
//if (!item.fGrand && item.itmType != 0x000E)
|
||||
{
|
||||
short val; record >> val;
|
||||
item.rgisxvi.push_back(val);
|
||||
for (short i = 0; i < item.isxviMac; i++)
|
||||
{
|
||||
short val; record >> val;
|
||||
item.rgisxvi.push_back(val);
|
||||
}
|
||||
}
|
||||
m_arItems.push_back(item);
|
||||
}
|
||||
|
||||
@ -39,7 +39,6 @@ SXNum::SXNum()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
SXNum::~SXNum()
|
||||
{
|
||||
}
|
||||
@ -51,7 +50,20 @@ BaseObjectPtr SXNum::clone()
|
||||
|
||||
void SXNum::readFields(CFRecord& record)
|
||||
{
|
||||
record >> num;
|
||||
}
|
||||
|
||||
int SXNum::serialize(std::wostream & strm)
|
||||
{
|
||||
CP_XML_WRITER(strm)
|
||||
{
|
||||
CP_XML_NODE(L"n")
|
||||
{
|
||||
CP_XML_ATTR(L"v", num.data.value);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
} // namespace XLS
|
||||
|
||||
|
||||
@ -32,7 +32,7 @@
|
||||
#pragma once
|
||||
|
||||
#include "BiffRecord.h"
|
||||
//#include "../Biff_structures/CellRangeRef.h"
|
||||
#include "../Biff_structures/Xnum.h"
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
@ -49,9 +49,11 @@ public:
|
||||
|
||||
void readFields(CFRecord& record);
|
||||
|
||||
int serialize(std::wostream & strm);
|
||||
|
||||
static const ElementType type = typeSXNum;
|
||||
|
||||
|
||||
Xnum num;
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -51,6 +51,13 @@ BaseObjectPtr SXPair::clone()
|
||||
|
||||
void SXPair::readFields(CFRecord& record)
|
||||
{
|
||||
unsigned short reserved1, flags;
|
||||
|
||||
record >> isxvd >> iCache >> reserved1 >> flags;
|
||||
|
||||
fFormula = GETBIT(flags, 0);
|
||||
fPhysical = GETBIT(flags, 3);
|
||||
fRelative = GETBIT(flags, 4);
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -51,7 +51,12 @@ public:
|
||||
|
||||
static const ElementType type = typeSXPair;
|
||||
|
||||
unsigned short isxvd;
|
||||
short iCache;
|
||||
|
||||
bool fFormula;
|
||||
bool fPhysical;
|
||||
bool fRelative;
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -51,6 +51,13 @@ BaseObjectPtr SXRng::clone()
|
||||
|
||||
void SXRng::readFields(CFRecord& record)
|
||||
{
|
||||
unsigned short flags;
|
||||
|
||||
record >> flags;
|
||||
|
||||
fAutoStart = GETBIT(flags, 0);
|
||||
fAutoEnd = GETBIT(flags, 1);
|
||||
iByType = GETBITS(flags, 2, 4);
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -51,7 +51,9 @@ public:
|
||||
|
||||
static const ElementType type = typeSXRng;
|
||||
|
||||
|
||||
bool fAutoStart;
|
||||
bool fAutoEnd;
|
||||
unsigned char iByType;
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -61,6 +61,17 @@ void SXString::readFields(CFRecord& record)
|
||||
record >> segment;
|
||||
}
|
||||
}
|
||||
|
||||
int SXString::serialize(std::wostream & strm)
|
||||
{
|
||||
CP_XML_WRITER(strm)
|
||||
{
|
||||
CP_XML_NODE(L"s")
|
||||
{
|
||||
CP_XML_ATTR(L"v", segment.value());
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
} // namespace XLS
|
||||
|
||||
|
||||
@ -49,6 +49,8 @@ public:
|
||||
|
||||
void readFields(CFRecord& record);
|
||||
|
||||
int serialize(std::wostream & strm);
|
||||
|
||||
static const ElementType type = typeSXString;
|
||||
|
||||
unsigned short cch;
|
||||
|
||||
@ -57,8 +57,8 @@ void SXVI::readFields(CFRecord& record)
|
||||
|
||||
fHidden = GETBIT(flags, 0);
|
||||
fHideDetail = GETBIT(flags, 1);
|
||||
fFormula = GETBIT(flags, 4);
|
||||
fMissing = GETBIT(flags, 5);
|
||||
fFormula = GETBIT(flags, 3);
|
||||
fMissing = GETBIT(flags, 4);
|
||||
|
||||
if (cchName > 0 && cchName < 0xFFFF)
|
||||
{
|
||||
@ -67,6 +67,43 @@ void SXVI::readFields(CFRecord& record)
|
||||
|
||||
}
|
||||
}
|
||||
int SXVI::serialize(std::wostream & strm)
|
||||
{
|
||||
CP_XML_WRITER(strm)
|
||||
{
|
||||
CP_XML_NODE(L"item")
|
||||
{
|
||||
if (fMissing)
|
||||
CP_XML_ATTR(L"m", 1);
|
||||
if (fHidden)
|
||||
CP_XML_ATTR(L"h", 1);
|
||||
if (fHideDetail)
|
||||
CP_XML_ATTR(L"h", 1);
|
||||
if (fFormula)
|
||||
CP_XML_ATTR(L"f", 1);
|
||||
|
||||
if (itmType == 0)
|
||||
{
|
||||
CP_XML_ATTR(L"x", iCache);
|
||||
}
|
||||
switch(itmType)
|
||||
{
|
||||
case 0x0001: CP_XML_ATTR(L"t", L"default"); break;
|
||||
case 0x0002: CP_XML_ATTR(L"t", L"sum"); break;
|
||||
case 0x0003: CP_XML_ATTR(L"t", L"countA"); break;
|
||||
case 0x0004: CP_XML_ATTR(L"t", L"avg"); break;
|
||||
case 0x0005: CP_XML_ATTR(L"t", L"max"); break;
|
||||
case 0x0006: CP_XML_ATTR(L"t", L"min"); break;
|
||||
case 0x0007: CP_XML_ATTR(L"t", L"product"); break;
|
||||
case 0x0008: CP_XML_ATTR(L"t", L"count"); break;
|
||||
case 0x0009: CP_XML_ATTR(L"t", L"stdDev"); break;
|
||||
case 0x000a: CP_XML_ATTR(L"t", L"stdDevP"); break;
|
||||
case 0x000b: CP_XML_ATTR(L"t", L"var"); break;
|
||||
case 0x000c: CP_XML_ATTR(L"t", L"varP"); break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
} // namespace XLS
|
||||
|
||||
|
||||
@ -48,6 +48,8 @@ public:
|
||||
|
||||
void readFields(CFRecord& record);
|
||||
|
||||
int serialize(std::wostream & strm);
|
||||
|
||||
static const ElementType type = typeSXVI;
|
||||
|
||||
unsigned short itmType; //enum
|
||||
|
||||
@ -51,6 +51,10 @@ BaseObjectPtr SxBool::clone()
|
||||
|
||||
void SxBool::readFields(CFRecord& record)
|
||||
{
|
||||
unsigned short flags;
|
||||
record >> flags;
|
||||
|
||||
val = (flags != 0);
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -32,7 +32,6 @@
|
||||
#pragma once
|
||||
|
||||
#include "BiffRecord.h"
|
||||
//#include "../Biff_structures/CellRangeRef.h"
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
@ -51,7 +50,7 @@ public:
|
||||
|
||||
static const ElementType type = typeSxBool;
|
||||
|
||||
|
||||
bool val;
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -54,7 +54,6 @@ public:
|
||||
|
||||
DXFN dxfn;
|
||||
XFExtNoFRT xfext;
|
||||
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -51,6 +51,7 @@ BaseObjectPtr SxErr::clone()
|
||||
|
||||
void SxErr::readFields(CFRecord& record)
|
||||
{
|
||||
record >> wbe;
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -51,7 +51,7 @@ public:
|
||||
|
||||
static const ElementType type = typeSxErr;
|
||||
|
||||
|
||||
unsigned short wbe;
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -52,57 +52,7 @@ BaseObjectPtr SxFmla::clone()
|
||||
|
||||
void SxFmla::readFields(CFRecord& record)
|
||||
{
|
||||
//record >> csxformat >> cchErrorString >> cchNullString >> cchTag >> csxselect;
|
||||
|
||||
//_UINT32 flags;
|
||||
//record >> crwPage >> ccolPage >> flags;
|
||||
|
||||
//fAcrossPageLay = GETBIT(flags, 0);
|
||||
//cWrapPage = GETBITS(flags, 1, 9);
|
||||
//fEnableWizard = GETBIT(flags, 16);
|
||||
//fEnableDrilldown = GETBIT(flags, 17);
|
||||
//fEnableFieldDialog = GETBIT(flags, 18);
|
||||
//fPreserveFormatting = GETBIT(flags, 19);
|
||||
//fMergeLabels = GETBIT(flags, 20);
|
||||
//fDisplayErrorString = GETBIT(flags, 21);
|
||||
//fDisplayNullString = GETBIT(flags, 22);
|
||||
//fSubtotalHiddenPageItems = GETBIT(flags, 23);
|
||||
|
||||
//record >> cchPageFieldStyle >> cchTableStyle >> cchVacateStyle;
|
||||
|
||||
//if (cchErrorString > 0 && cchErrorString != 0xffff)
|
||||
//{
|
||||
// stError.setSize(cchErrorString);
|
||||
// record >> stError;
|
||||
//}
|
||||
//if (cchNullString > 0 && cchNullString != 0xffff)
|
||||
//{
|
||||
// stDisplayNull.setSize(cchNullString);
|
||||
// record >> stDisplayNull;
|
||||
//}
|
||||
//if (cchTag > 0 && cchTag != 0xffff)
|
||||
//{
|
||||
// stTag.setSize(cchTag);
|
||||
// record >> stTag;
|
||||
//}
|
||||
//if (cchPageFieldStyle > 0 && cchPageFieldStyle != 0xffff)
|
||||
//{
|
||||
// stPageFieldStyle.setSize(cchPageFieldStyle);
|
||||
// record >> stPageFieldStyle;
|
||||
//}
|
||||
//if (cchTableStyle > 0 && cchTableStyle != 0xffff)
|
||||
//{
|
||||
// stTableStyle.setSize(cchTableStyle);
|
||||
// record >> cchTableStyle;
|
||||
//}
|
||||
//if (cchVacateStyle > 0 && cchVacateStyle != 0xffff)
|
||||
//{
|
||||
// stVacateStyle.setSize(cchVacateStyle);
|
||||
// record >> cchVacateStyle;
|
||||
//}
|
||||
|
||||
//int skip = record.getDataSize() - record.getRdPtr();
|
||||
//record.skipNunBytes(skip);
|
||||
fmla.load(record);
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -32,8 +32,9 @@
|
||||
#pragma once
|
||||
|
||||
#include "BiffRecord.h"
|
||||
//#include "../Biff_structures/BiffString.h"
|
||||
//#include "../Biff_structures/CellRangeRef.h"
|
||||
|
||||
#include "../Biff_structures/PivotParsedFormula.h"
|
||||
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
@ -52,36 +53,7 @@ public:
|
||||
|
||||
static const ElementType type = typeSxFmla;
|
||||
|
||||
//unsigned short csxformat;
|
||||
//unsigned short cchErrorString;
|
||||
//unsigned short cchNullString;
|
||||
//unsigned short cchTag;
|
||||
//unsigned short csxselect;
|
||||
|
||||
//DRw crwPage;
|
||||
//ColU ccolPage;
|
||||
|
||||
//bool fAcrossPageLay;
|
||||
//unsigned char cWrapPage;
|
||||
//bool fEnableWizard;
|
||||
//bool fEnableDrilldown;
|
||||
//bool fEnableFieldDialog;
|
||||
//bool fPreserveFormatting;
|
||||
//bool fMergeLabels;
|
||||
//bool fDisplayErrorString;
|
||||
//bool fDisplayNullString;
|
||||
//bool fSubtotalHiddenPageItems;
|
||||
|
||||
//unsigned short cchPageFieldStyle;
|
||||
//unsigned short cchTableStyle;
|
||||
//unsigned short cchVacateStyle;
|
||||
|
||||
//XLUnicodeStringNoCch stError;
|
||||
//XLUnicodeStringNoCch stDisplayNull;
|
||||
//XLUnicodeStringNoCch stTag;
|
||||
//XLUnicodeStringNoCch stPageFieldStyle;
|
||||
//XLUnicodeStringNoCch stTableStyle;
|
||||
//XLUnicodeStringNoCch stVacateStyle;
|
||||
PivotParsedFormula fmla;
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -51,7 +51,6 @@ public:
|
||||
static const ElementType type = typeSxIvd;
|
||||
|
||||
std::vector<short> rgSxivd;
|
||||
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -51,6 +51,10 @@ BaseObjectPtr SxName::clone()
|
||||
|
||||
void SxName::readFields(CFRecord& record)
|
||||
{
|
||||
unsigned short flags;
|
||||
record >> flags >> ifdb >> ifn >> csxpair;
|
||||
|
||||
fErrName = GETBIT(flags, 0);
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -32,7 +32,6 @@
|
||||
#pragma once
|
||||
|
||||
#include "BiffRecord.h"
|
||||
//#include "../Biff_structures/CellRangeRef.h"
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
@ -51,7 +50,10 @@ public:
|
||||
|
||||
static const ElementType type = typeSxName;
|
||||
|
||||
|
||||
bool fErrName;
|
||||
short ifdb;
|
||||
short ifn;
|
||||
unsigned short csxpair;
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -39,7 +39,6 @@ SxNil::SxNil()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
SxNil::~SxNil()
|
||||
{
|
||||
}
|
||||
@ -53,5 +52,14 @@ void SxNil::readFields(CFRecord& record)
|
||||
{
|
||||
}
|
||||
|
||||
int SxNil::serialize(std::wostream & strm)
|
||||
{
|
||||
CP_XML_WRITER(strm)
|
||||
{
|
||||
CP_XML_NODE(L"m");
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
} // namespace XLS
|
||||
|
||||
|
||||
@ -32,7 +32,6 @@
|
||||
#pragma once
|
||||
|
||||
#include "BiffRecord.h"
|
||||
//#include "../Biff_structures/CellRangeRef.h"
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
@ -49,9 +48,9 @@ public:
|
||||
|
||||
void readFields(CFRecord& record);
|
||||
|
||||
int serialize(std::wostream & strm);
|
||||
|
||||
static const ElementType type = typeSxNil;
|
||||
|
||||
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -45,7 +45,6 @@ Sxvd::~Sxvd()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
BaseObjectPtr Sxvd::clone()
|
||||
{
|
||||
return BaseObjectPtr(new Sxvd(*this));
|
||||
|
||||
@ -45,8 +45,6 @@ public:
|
||||
|
||||
BiffStructurePtr clone();
|
||||
void load(CFRecord& record);
|
||||
|
||||
|
||||
|
||||
std::vector<CellRangeRef> cell_ranges;
|
||||
|
||||
|
||||
@ -0,0 +1,58 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2017
|
||||
*
|
||||
* This program is a free software product. You can redistribute it and/or
|
||||
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
||||
* version 3 as published by the Free Software Foundation. In accordance with
|
||||
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
||||
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
||||
* of any third-party rights.
|
||||
*
|
||||
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
||||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
||||
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
||||
*
|
||||
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
|
||||
* EU, LV-1021.
|
||||
*
|
||||
* The interactive user interfaces in modified source and object code versions
|
||||
* of the Program must display Appropriate Legal Notices, as required under
|
||||
* Section 5 of the GNU AGPL version 3.
|
||||
*
|
||||
* Pursuant to Section 7(b) of the License you must retain the original Product
|
||||
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
||||
* grant you any rights under trademark law for use of our trademarks.
|
||||
*
|
||||
* All the Product's GUI elements, including illustrations and icon sets, as
|
||||
* well as technical writing content are licensed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
||||
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
*
|
||||
*/
|
||||
|
||||
#include "PivotParsedFormula.h"
|
||||
#include <Binary/CFRecord.h>
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
PivotParsedFormula::PivotParsedFormula()
|
||||
: ParsedFormula(CellRef())
|
||||
{
|
||||
}
|
||||
|
||||
BiffStructurePtr PivotParsedFormula::clone()
|
||||
{
|
||||
return BiffStructurePtr(new PivotParsedFormula(*this));
|
||||
}
|
||||
|
||||
void PivotParsedFormula::load(CFRecord& record)
|
||||
{
|
||||
unsigned short cce;
|
||||
|
||||
record >> cce >> cSxName;
|
||||
rgce.load(record, cce);
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -0,0 +1,52 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2017
|
||||
*
|
||||
* This program is a free software product. You can redistribute it and/or
|
||||
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
||||
* version 3 as published by the Free Software Foundation. In accordance with
|
||||
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
||||
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
||||
* of any third-party rights.
|
||||
*
|
||||
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
||||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
||||
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
||||
*
|
||||
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
|
||||
* EU, LV-1021.
|
||||
*
|
||||
* The interactive user interfaces in modified source and object code versions
|
||||
* of the Program must display Appropriate Legal Notices, as required under
|
||||
* Section 5 of the GNU AGPL version 3.
|
||||
*
|
||||
* Pursuant to Section 7(b) of the License you must retain the original Product
|
||||
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
||||
* grant you any rights under trademark law for use of our trademarks.
|
||||
*
|
||||
* All the Product's GUI elements, including illustrations and icon sets, as
|
||||
* well as technical writing content are licensed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
||||
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
*
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include "ParsedFormula.h"
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
class PivotParsedFormula: public ParsedFormula
|
||||
{
|
||||
BASE_STRUCTURE_DEFINE_CLASS_NAME(PivotParsedFormula)
|
||||
public:
|
||||
PivotParsedFormula();
|
||||
|
||||
BiffStructurePtr clone();
|
||||
void load(CFRecord& record);
|
||||
|
||||
unsigned short cSxName;
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -38,11 +38,15 @@
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
|
||||
DBB::DBB()
|
||||
{
|
||||
}
|
||||
bString = false;
|
||||
bDate = false;
|
||||
bNumber = false;
|
||||
bEmpty = false;
|
||||
|
||||
fShortIitms = false;
|
||||
}
|
||||
|
||||
DBB::~DBB()
|
||||
{
|
||||
@ -53,7 +57,6 @@ BaseObjectPtr DBB::clone()
|
||||
return BaseObjectPtr(new DBB(*this));
|
||||
}
|
||||
|
||||
|
||||
// DBB = [SXDBB] *SXOPER
|
||||
const bool DBB::loadContent(BinProcessor& proc)
|
||||
{
|
||||
@ -66,6 +69,12 @@ const bool DBB::loadContent(BinProcessor& proc)
|
||||
while(count--)
|
||||
{
|
||||
m_arSXOPER.push_back(elements_.front()); elements_.pop_front();
|
||||
SXOPER* operatr = dynamic_cast<SXOPER*>(m_arSXOPER.back().get());
|
||||
|
||||
bString |= operatr->bString;
|
||||
bDate |= operatr->bDate;
|
||||
bNumber |= operatr->bNumber;
|
||||
bEmpty |= operatr->bEmpty;
|
||||
}
|
||||
|
||||
if (!m_SXDBB && m_arSXOPER.empty())
|
||||
@ -73,6 +82,50 @@ const bool DBB::loadContent(BinProcessor& proc)
|
||||
|
||||
return true;
|
||||
}
|
||||
int DBB::serialize(std::wostream & strm)
|
||||
{
|
||||
SXDBB* dbb = dynamic_cast<SXDBB*>(m_SXDBB.get());
|
||||
|
||||
if (!dbb && m_arSXOPER.empty()) return 0;
|
||||
|
||||
CP_XML_WRITER(strm)
|
||||
{
|
||||
CP_XML_NODE(L"r")
|
||||
{
|
||||
if (m_arSXOPER.empty() == false)
|
||||
{
|
||||
for (size_t i = 0; i < m_arSXOPER.size(); i++)
|
||||
{
|
||||
m_arSXOPER[i]->serialize(CP_XML_STREAM());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (fShortIitms == false)
|
||||
{
|
||||
for (size_t i = 0; i < dbb->size; i++)
|
||||
{
|
||||
CP_XML_NODE(L"x")
|
||||
{
|
||||
CP_XML_ATTR(L"v", dbb->blob[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
unsigned short * values = (unsigned short *)dbb->blob.get();
|
||||
for (size_t i = 0; i < dbb->size / 2; i++)
|
||||
{
|
||||
CP_XML_NODE(L"x")
|
||||
{
|
||||
CP_XML_ATTR(L"v", values[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
} // namespace XLS
|
||||
|
||||
|
||||
@ -47,10 +47,20 @@ public:
|
||||
|
||||
virtual const bool loadContent(BinProcessor& proc);
|
||||
|
||||
int serialize(std::wostream & strm);
|
||||
|
||||
static const ElementType type = typeDBB;
|
||||
|
||||
BaseObjectPtr m_SXDBB;
|
||||
std::vector<BaseObjectPtr> m_arSXOPER;
|
||||
|
||||
//---------------------------------------------------
|
||||
bool fShortIitms;
|
||||
|
||||
bool bString;
|
||||
bool bDate;
|
||||
bool bNumber;
|
||||
bool bEmpty;
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -43,18 +43,15 @@ DREF::DREF()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
DREF::~DREF()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
BaseObjectPtr DREF::clone()
|
||||
{
|
||||
return BaseObjectPtr(new DREF(*this));
|
||||
}
|
||||
|
||||
|
||||
// DREF = DConName / DConBin / DConRef
|
||||
const bool DREF::loadContent(BinProcessor& proc)
|
||||
{
|
||||
@ -68,8 +65,48 @@ const bool DREF::loadContent(BinProcessor& proc)
|
||||
}
|
||||
}
|
||||
}
|
||||
m_DCon = elements_.back();
|
||||
elements_.pop_back();
|
||||
return true;
|
||||
}
|
||||
|
||||
int DREF::serialize(std::wostream & strm)
|
||||
{
|
||||
if (!m_DCon)return 0;
|
||||
|
||||
DConName* name = dynamic_cast<DConName*>(m_DCon.get());
|
||||
DConBin* bin = dynamic_cast<DConBin*>(m_DCon.get());
|
||||
DConRef* ref = dynamic_cast<DConRef*>(m_DCon.get());
|
||||
|
||||
CP_XML_WRITER(strm)
|
||||
{
|
||||
CP_XML_NODE(L"cacheSource")
|
||||
{
|
||||
if (name)
|
||||
{
|
||||
CP_XML_ATTR(L"type", L"worksheet");
|
||||
CP_XML_NODE(L"worksheetSource")
|
||||
{
|
||||
CP_XML_ATTR(L"name", name->stName.value());
|
||||
}
|
||||
}
|
||||
else if(bin)
|
||||
{
|
||||
}
|
||||
else if(ref)
|
||||
{
|
||||
CP_XML_ATTR(L"type", L"worksheet");
|
||||
CP_XML_NODE(L"worksheetSource")
|
||||
{
|
||||
CP_XML_ATTR(L"ref", ref->ref.toString());
|
||||
CP_XML_ATTR(L"sheet", ref->stFile);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
|
||||
@ -36,8 +36,6 @@
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
|
||||
// Logical representation of DREF union of records
|
||||
class DREF: public CompositeObject
|
||||
{
|
||||
BASE_OBJECT_DEFINE_CLASS_NAME(DREF)
|
||||
@ -49,7 +47,11 @@ public:
|
||||
|
||||
virtual const bool loadContent(BinProcessor& proc);
|
||||
|
||||
static const ElementType type = typeDREF;
|
||||
int serialize(std::wostream & stream);
|
||||
|
||||
static const ElementType type = typeDREF;
|
||||
|
||||
BaseObjectPtr m_DCon;
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -47,6 +47,10 @@ class Parenthesis_FDB: public ABNFParenthesis
|
||||
{
|
||||
BASE_OBJECT_DEFINE_CLASS_NAME(Parenthesis_FDB)
|
||||
public:
|
||||
Parenthesis_FDB(int count = 0)
|
||||
{
|
||||
m_count = count;
|
||||
}
|
||||
BaseObjectPtr clone()
|
||||
{
|
||||
return BaseObjectPtr(new Parenthesis_FDB(*this));
|
||||
@ -54,7 +58,9 @@ public:
|
||||
|
||||
const bool loadContent(BinProcessor& proc)
|
||||
{
|
||||
int count = proc.repeated<SXOPER>(0, 0);
|
||||
if (m_count < 1) return false;
|
||||
|
||||
int count = proc.repeated<SXOPER>(0, m_count);
|
||||
|
||||
if (!proc.optional<SXRANGE>())
|
||||
{
|
||||
@ -62,18 +68,22 @@ public:
|
||||
}
|
||||
return true;
|
||||
};
|
||||
private:
|
||||
int m_count;
|
||||
};
|
||||
|
||||
FDB::FDB()
|
||||
{
|
||||
bString = false;
|
||||
bDate = false;
|
||||
bNumber = false;
|
||||
bEmpty = false;
|
||||
}
|
||||
|
||||
|
||||
FDB::~FDB()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
BaseObjectPtr FDB::clone()
|
||||
{
|
||||
return BaseObjectPtr(new FDB(*this));
|
||||
@ -91,6 +101,8 @@ const bool FDB::loadContent(BinProcessor& proc)
|
||||
}
|
||||
m_SXFDB = elements_.back();
|
||||
elements_.pop_back();
|
||||
|
||||
SXFDB* fdb = dynamic_cast<SXFDB*>(m_SXFDB.get());
|
||||
|
||||
if(proc.mandatory<SXFDBType>())
|
||||
{
|
||||
@ -103,31 +115,41 @@ const bool FDB::loadContent(BinProcessor& proc)
|
||||
m_SXFMLA = elements_.back();
|
||||
elements_.pop_back();
|
||||
}
|
||||
else if(proc.optional<Parenthesis_FDB>())
|
||||
else
|
||||
{
|
||||
int count = elements_.size();
|
||||
|
||||
while(count > 0)
|
||||
Parenthesis_FDB parenthesis_FDB(fdb->csxoper);
|
||||
|
||||
if (proc.optional(parenthesis_FDB))
|
||||
{
|
||||
SXOPER * oper = dynamic_cast<SXOPER*> (elements_.front().get());
|
||||
if (oper)
|
||||
int count = elements_.size();
|
||||
|
||||
while(count > 0)
|
||||
{
|
||||
m_arGRPSXOPER.push_back(elements_.front());
|
||||
}
|
||||
else
|
||||
{
|
||||
SXRANGE *range = dynamic_cast<SXRANGE*> (elements_.front().get());
|
||||
if (range)
|
||||
m_SXRANGE = elements_.front();
|
||||
SXOPER * operatr = dynamic_cast<SXOPER*> (elements_.front().get());
|
||||
if (operatr)
|
||||
{
|
||||
m_arGRPSXOPER.push_back(elements_.front());
|
||||
|
||||
//bString |= operatr->bString;
|
||||
//bDate |= operatr->bDate;
|
||||
//bNumber |= operatr->bNumber;
|
||||
//bEmpty |= operatr->bEmpty;
|
||||
}
|
||||
else
|
||||
{
|
||||
SxIsxoper * isOper = dynamic_cast<SxIsxoper*> (elements_.front().get());
|
||||
if (isOper)
|
||||
m_arSxIsxoper.push_back(elements_.front());
|
||||
SXRANGE *range = dynamic_cast<SXRANGE*> (elements_.front().get());
|
||||
if (range)
|
||||
m_SXRANGE = elements_.front();
|
||||
else
|
||||
{
|
||||
SxIsxoper * isOper = dynamic_cast<SxIsxoper*> (elements_.front().get());
|
||||
if (isOper)
|
||||
m_arSxIsxoper.push_back(elements_.front());
|
||||
}
|
||||
}
|
||||
elements_.pop_front();
|
||||
count--;
|
||||
}
|
||||
elements_.pop_front();
|
||||
count--;
|
||||
}
|
||||
}
|
||||
|
||||
@ -135,10 +157,146 @@ const bool FDB::loadContent(BinProcessor& proc)
|
||||
while(count--)
|
||||
{
|
||||
m_arSRCSXOPER.push_back(elements_.front()); elements_.pop_front();
|
||||
|
||||
SXOPER* operatr = dynamic_cast<SXOPER*> (m_arSRCSXOPER.back().get());
|
||||
|
||||
bString |= operatr->bString;
|
||||
bDate |= operatr->bDate;
|
||||
bNumber |= operatr->bNumber;
|
||||
bEmpty |= operatr->bEmpty;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int FDB::serialize(std::wostream & strm)
|
||||
{
|
||||
SXFDB* fdb = dynamic_cast<SXFDB*>(m_SXFDB.get());
|
||||
SXFDBType* fdb_type = dynamic_cast<SXFDBType*>(m_SXFDBType.get());
|
||||
|
||||
if (!fdb || !fdb_type) return 0;
|
||||
|
||||
CP_XML_WRITER(strm)
|
||||
{
|
||||
CP_XML_NODE(L"cacheField")
|
||||
{
|
||||
CP_XML_ATTR(L"name", fdb->stFieldName.value());
|
||||
|
||||
if (fdb_type->wTypeSql > 0)
|
||||
{
|
||||
CP_XML_ATTR(L"numFmtId", fdb_type->wTypeSql);
|
||||
}
|
||||
if (m_arSRCSXOPER.empty())
|
||||
{
|
||||
CP_XML_ATTR(L"databaseField", 0);
|
||||
}
|
||||
|
||||
switch(fdb_type->wTypeSql)//format code
|
||||
{
|
||||
case 0x0000:
|
||||
case 0x0001:
|
||||
case 0x0003:
|
||||
case 0x0004:
|
||||
case 0x0005:
|
||||
case 0x0006:
|
||||
case 0x0007:
|
||||
case 0x0008:
|
||||
case 0x000B:
|
||||
case 0x000C:
|
||||
case 0xFFF9:
|
||||
case 0xFFFE:
|
||||
break;
|
||||
}
|
||||
if(m_SXFMLA)
|
||||
{
|
||||
//{formula
|
||||
}
|
||||
|
||||
if (m_arSRCSXOPER.empty() == false)
|
||||
{
|
||||
CP_XML_NODE(L"sharedItems")
|
||||
{
|
||||
//использовать поля присутствия из xls низя - они частенько записаны неверно!!
|
||||
//if (!fdb->fNonDates) CP_XML_ATTR(L"containsNonDate", fdb->fNonDates);
|
||||
//if (fdb->fDateInField) CP_XML_ATTR(L"containsDate", fdb->fDateInField);
|
||||
//if (fdb->fNumField) CP_XML_ATTR(L"containsNumber", fdb->fNumField);
|
||||
////CP_XML_ATTR(L"containsBlank", fdb->fTextEtcField);
|
||||
|
||||
//if (m_arSRCSXOPER.empty())
|
||||
//{
|
||||
// if (!fdb->fTextEtcField)
|
||||
// {
|
||||
// CP_XML_ATTR(L"containsString", 0);
|
||||
// }
|
||||
// else if (fdb->fNumField || fdb->fDateInField)
|
||||
// {
|
||||
// CP_XML_ATTR(L"containsBlank", 1);
|
||||
// CP_XML_ATTR(L"containsString", 0);
|
||||
// }
|
||||
//}
|
||||
if ((bDate & bNumber) || (bNumber & bString))
|
||||
{
|
||||
CP_XML_ATTR(L"containsSemiMixedTypes", 1);
|
||||
}
|
||||
else if ( bDate & bString)
|
||||
{
|
||||
CP_XML_ATTR(L"containsMixedTypes", 1);
|
||||
}
|
||||
else if (!bEmpty && !bString)
|
||||
{
|
||||
CP_XML_ATTR(L"containsSemiMixedTypes", 0);
|
||||
}
|
||||
if (bNumber) CP_XML_ATTR(L"containsNumber", 1);
|
||||
if (bDate) CP_XML_ATTR(L"containsDate", 1);
|
||||
if (!bString) CP_XML_ATTR(L"containsString", 0);
|
||||
if (bEmpty) CP_XML_ATTR(L"containsBlank", 1);
|
||||
|
||||
if (fdb->fnumMinMaxValid)
|
||||
{
|
||||
//if (fdb->fDateInField)
|
||||
//{
|
||||
// CP_XML_ATTR(L"minDate", 0); // "2007-11-18T00:00:00"
|
||||
// CP_XML_ATTR(L"maxDate", 0); // "2007-12-25T00:00:00"
|
||||
//}
|
||||
//else if (fdb->fNumField)
|
||||
//{
|
||||
// CP_XML_ATTR(L"minValue", 0);
|
||||
// CP_XML_ATTR(L"maxValue", 0);
|
||||
//}
|
||||
}
|
||||
CP_XML_ATTR(L"count", m_arSRCSXOPER.size());
|
||||
|
||||
for (size_t i = 0; i < m_arSRCSXOPER.size(); i++)
|
||||
{
|
||||
m_arSRCSXOPER[i]->serialize(CP_XML_STREAM());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (m_arGRPSXOPER.empty() == false)
|
||||
{
|
||||
CP_XML_NODE(L"fieldGroup")
|
||||
{
|
||||
if (fdb->ifdbParent > 0)
|
||||
CP_XML_ATTR(L"par", fdb->ifdbParent);
|
||||
|
||||
if (m_SXRANGE)
|
||||
m_SXRANGE->serialize(CP_XML_STREAM());
|
||||
CP_XML_NODE(L"groupItems")
|
||||
{
|
||||
CP_XML_ATTR(L"count", m_arGRPSXOPER.size());
|
||||
for (size_t i = 0; i < m_arGRPSXOPER.size(); i++)
|
||||
{
|
||||
m_arGRPSXOPER[i]->serialize(CP_XML_STREAM());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
|
||||
@ -47,6 +47,8 @@ public:
|
||||
|
||||
virtual const bool loadContent(BinProcessor& proc);
|
||||
|
||||
int serialize(std::wostream & strm);
|
||||
|
||||
static const ElementType type = typeFDB;
|
||||
|
||||
BaseObjectPtr m_SXFDB;
|
||||
@ -57,6 +59,12 @@ public:
|
||||
std::vector<BaseObjectPtr> m_arGRPSXOPER;
|
||||
BaseObjectPtr m_SXRANGE;
|
||||
std::vector<BaseObjectPtr> m_arSxIsxoper;
|
||||
|
||||
bool bString;
|
||||
bool bDate;
|
||||
bool bNumber;
|
||||
bool bEmpty;
|
||||
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -36,8 +36,6 @@
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
|
||||
// Logical representation of GLOBALS union of records
|
||||
class GLOBALS: public CompositeObject
|
||||
{
|
||||
BASE_OBJECT_DEFINE_CLASS_NAME(GLOBALS)
|
||||
@ -49,7 +47,7 @@ public:
|
||||
|
||||
virtual const bool loadContent (BinProcessor& proc);
|
||||
|
||||
static const ElementType type = typeGLOBALS;
|
||||
static const ElementType type = typeGLOBALS;
|
||||
|
||||
int serialize(std::wostream & stream);
|
||||
|
||||
|
||||
@ -47,7 +47,6 @@ PIVOTCACHE::PIVOTCACHE()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
PIVOTCACHE::~PIVOTCACHE()
|
||||
{
|
||||
}
|
||||
@ -61,6 +60,8 @@ BaseObjectPtr PIVOTCACHE::clone()
|
||||
// PIVOTCACHE = SXDB SXDBEx *SXFORMULA *FDB *DBB EOF
|
||||
const bool PIVOTCACHE::loadContent(BinProcessor& proc)
|
||||
{
|
||||
GlobalWorkbookInfoPtr global_info = proc.getGlobalWorkbookInfo();
|
||||
|
||||
if(!proc.mandatory<SXDB>())
|
||||
{
|
||||
return false;
|
||||
@ -91,6 +92,17 @@ const bool PIVOTCACHE::loadContent(BinProcessor& proc)
|
||||
while(count--)
|
||||
{
|
||||
m_arDBB.push_back(elements_.front()); elements_.pop_front();
|
||||
|
||||
DBB* dbb = dynamic_cast<DBB*>(m_arDBB.back().get());
|
||||
|
||||
if (global_info->arCacheFieldShortSize.size() >= m_arDBB.size())
|
||||
{
|
||||
dbb->fShortIitms = global_info->arCacheFieldShortSize[m_arDBB.size() - 1];
|
||||
}
|
||||
else
|
||||
{
|
||||
//???? группы??
|
||||
}
|
||||
}
|
||||
if (proc.optional<EOF_T>())
|
||||
{
|
||||
|
||||
@ -31,10 +31,14 @@
|
||||
*/
|
||||
|
||||
#include "PIVOTCACHEDEFINITION.h"
|
||||
#include <Logic/Biff_records/SXStreamID.h>
|
||||
#include <Logic/Biff_records/SXVS.h>
|
||||
#include <Logic/Biff_unions/SXSRC.h>
|
||||
#include <Logic/Biff_unions/SXADDLCACHE.h>
|
||||
#include "PIVOTCACHE.h"
|
||||
#include "SXSRC.h"
|
||||
#include "SXADDLCACHE.h"
|
||||
|
||||
#include "../Biff_records/SXStreamID.h"
|
||||
#include "../Biff_records/SXVS.h"
|
||||
#include "../Biff_records/SXDB.h"
|
||||
#include "../Biff_records/SXDBEx.h"
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
@ -59,6 +63,8 @@ BaseObjectPtr PIVOTCACHEDEFINITION::clone()
|
||||
// PIVOTCACHEDEFINITION = SXStreamID SXVS [SXSRC] [SXADDLCACHE]
|
||||
const bool PIVOTCACHEDEFINITION::loadContent(BinProcessor& proc)
|
||||
{
|
||||
global_info_ = proc.getGlobalWorkbookInfo();
|
||||
|
||||
if(!proc.mandatory<SXStreamID>())
|
||||
{
|
||||
return false;
|
||||
@ -83,6 +89,94 @@ const bool PIVOTCACHEDEFINITION::loadContent(BinProcessor& proc)
|
||||
}
|
||||
return true;
|
||||
}
|
||||
int PIVOTCACHEDEFINITION::serialize_definitions(std::wostream & strm)
|
||||
{
|
||||
SXStreamID* streamId = dynamic_cast<SXStreamID*>(m_SXStreamID.get());
|
||||
if (!streamId) return 0;
|
||||
|
||||
std::map<int, BaseObjectPtr>::iterator pFind = global_info_->mapPivotCache.find(streamId->idStm);
|
||||
if (pFind == global_info_->mapPivotCache.end()) return 0;
|
||||
|
||||
PIVOTCACHE* pivot_cache = dynamic_cast<PIVOTCACHE*>(pFind->second.get());
|
||||
if (!pivot_cache) return 0;
|
||||
|
||||
SXDB* db = dynamic_cast<SXDB*>(pivot_cache->m_SXDB.get());
|
||||
SXDBEx* db_ex = dynamic_cast<SXDBEx*>(pivot_cache->m_SXDBEx.get());
|
||||
|
||||
if (!db || !db_ex)return 0;
|
||||
|
||||
CP_XML_WRITER(strm)
|
||||
{
|
||||
CP_XML_NODE(L"pivotCacheDefinition")
|
||||
{
|
||||
CP_XML_ATTR(L"xmlns", L"http://schemas.openxmlformats.org/spreadsheetml/2006/main");
|
||||
CP_XML_ATTR(L"xmlns:r", L"http://schemas.openxmlformats.org/officeDocument/2006/relationships");
|
||||
|
||||
if (pivot_cache->m_arDBB.empty() == false)
|
||||
{
|
||||
CP_XML_ATTR(L"r:id", L"rId1" );
|
||||
}
|
||||
CP_XML_ATTR(L"enableRefresh", 1);
|
||||
CP_XML_ATTR(L"refreshedBy", db->rgb.value());
|
||||
CP_XML_ATTR(L"refreshedDate", db_ex->numDate.data.value);
|
||||
CP_XML_ATTR(L"recordCount", db->crdbUsed);
|
||||
//createdVersion="1"
|
||||
//refreshedVersion="2"
|
||||
//upgradeOnRefresh="1">
|
||||
SXSRC* src = dynamic_cast<SXSRC*>(m_SXSRC.get());
|
||||
if (src)
|
||||
src->serialize(CP_XML_STREAM());
|
||||
|
||||
if (pivot_cache->m_arFDB.empty() == false)
|
||||
{
|
||||
CP_XML_NODE(L"cacheFields")
|
||||
{
|
||||
CP_XML_ATTR(L"count", pivot_cache->m_arFDB.size());
|
||||
|
||||
for (size_t i = 0; i < pivot_cache->m_arFDB.size(); i++)
|
||||
{
|
||||
pivot_cache->m_arFDB[i]->serialize(CP_XML_STREAM());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int PIVOTCACHEDEFINITION::serialize_records(std::wostream & strm)
|
||||
{
|
||||
SXStreamID* streamId = dynamic_cast<SXStreamID*>(m_SXStreamID.get());
|
||||
if (!streamId) return 0;
|
||||
|
||||
std::map<int, BaseObjectPtr>::iterator pFind = global_info_->mapPivotCache.find(streamId->idStm);
|
||||
if (pFind == global_info_->mapPivotCache.end()) return 0;
|
||||
|
||||
PIVOTCACHE* pivot_cache = dynamic_cast<PIVOTCACHE*>(pFind->second.get());
|
||||
if (!pivot_cache) return 0;
|
||||
|
||||
if (pivot_cache->m_arDBB.empty()) return 0;
|
||||
|
||||
CP_XML_WRITER(strm)
|
||||
{
|
||||
CP_XML_NODE(L"pivotCacheRecords")
|
||||
{
|
||||
CP_XML_ATTR(L"xmlns", L"http://schemas.openxmlformats.org/spreadsheetml/2006/main");
|
||||
CP_XML_ATTR(L"xmlns:r", L"http://schemas.openxmlformats.org/officeDocument/2006/relationships");
|
||||
|
||||
CP_XML_ATTR(L"count", pivot_cache->m_arDBB.size());
|
||||
|
||||
for (size_t i = 0; i < pivot_cache->m_arDBB.size(); i++)
|
||||
{
|
||||
pivot_cache->m_arDBB[i]->serialize(CP_XML_STREAM());
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
|
||||
@ -48,6 +48,9 @@ public:
|
||||
BaseObjectPtr clone();
|
||||
|
||||
virtual const bool loadContent(BinProcessor& proc);
|
||||
|
||||
int serialize_definitions(std::wostream & stream);
|
||||
int serialize_records(std::wostream & stream);
|
||||
|
||||
static const ElementType type = typePIVOTCACHEDEFINITION;
|
||||
|
||||
@ -55,6 +58,8 @@ public:
|
||||
BaseObjectPtr m_SXVS;
|
||||
BaseObjectPtr m_SXSRC;
|
||||
BaseObjectPtr m_SXADDLCACHE;
|
||||
|
||||
GlobalWorkbookInfoPtr global_info_;
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -31,34 +31,31 @@
|
||||
*/
|
||||
|
||||
#include "PIVOTCORE.h"
|
||||
#include <Logic/Biff_records/SxView.h>
|
||||
#include <Logic/Biff_unions/PIVOTVD.h>
|
||||
#include <Logic/Biff_unions/PIVOTIVD.h>
|
||||
#include <Logic/Biff_unions/PIVOTPI.h>
|
||||
#include <Logic/Biff_records/SXDI.h>
|
||||
#include <Logic/Biff_unions/PIVOTLI.h>
|
||||
#include <Logic/Biff_unions/PIVOTEX.h>
|
||||
#include "PIVOTVD.h"
|
||||
#include "PIVOTIVD.h"
|
||||
#include "PIVOTPI.h"
|
||||
#include "PIVOTLI.h"
|
||||
#include "PIVOTEX.h"
|
||||
|
||||
#include "../Biff_records/SXDI.h"
|
||||
#include "../Biff_records/SxView.h"
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
|
||||
PIVOTCORE::PIVOTCORE()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
PIVOTCORE::~PIVOTCORE()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
BaseObjectPtr PIVOTCORE::clone()
|
||||
{
|
||||
return BaseObjectPtr(new PIVOTCORE(*this));
|
||||
}
|
||||
|
||||
|
||||
// PIVOTCORE = SxView *PIVOTVD *2PIVOTIVD [PIVOTPI] *SXDI *PIVOTLI PIVOTEX
|
||||
const bool PIVOTCORE::loadContent(BinProcessor& proc)
|
||||
{
|
||||
|
||||
@ -55,7 +55,6 @@ BaseObjectPtr PIVOTFRT9::clone()
|
||||
return BaseObjectPtr(new PIVOTFRT9(*this));
|
||||
}
|
||||
|
||||
|
||||
// PIVOTFRT9 = QsiSXTag [DBQUERYEXT] [PIVOTVIEWEX] SXViewEx9
|
||||
const bool PIVOTFRT9::loadContent(BinProcessor& proc)
|
||||
{
|
||||
|
||||
@ -31,13 +31,12 @@
|
||||
*/
|
||||
|
||||
#include "PIVOTIVD.h"
|
||||
#include <Logic/Biff_records/SxIvd.h>
|
||||
#include <Logic/Biff_records/Continue.h>
|
||||
#include "../Biff_records/SxIvd.h"
|
||||
#include "../Biff_records/Continue.h"
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
|
||||
PIVOTIVD::PIVOTIVD()
|
||||
{
|
||||
}
|
||||
@ -53,7 +52,6 @@ BaseObjectPtr PIVOTIVD::clone()
|
||||
return BaseObjectPtr(new PIVOTIVD(*this));
|
||||
}
|
||||
|
||||
|
||||
// PIVOTIVD = SxIvd *Continue
|
||||
const bool PIVOTIVD::loadContent(BinProcessor& proc)
|
||||
{
|
||||
@ -68,6 +66,21 @@ const bool PIVOTIVD::loadContent(BinProcessor& proc)
|
||||
|
||||
return true;
|
||||
}
|
||||
int PIVOTIVD::serialize(std::wostream & strm)
|
||||
{
|
||||
SxIvd* vd = dynamic_cast<SxIvd*>(m_SxIvd.get());
|
||||
|
||||
CP_XML_WRITER(strm)
|
||||
{
|
||||
for (size_t i = 0; i < vd->rgSxivd.size(); i++)
|
||||
{
|
||||
CP_XML_NODE(L"field")
|
||||
{
|
||||
CP_XML_ATTR(L"x", vd->rgSxivd[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
} // namespace XLS
|
||||
|
||||
|
||||
@ -47,6 +47,8 @@ public:
|
||||
|
||||
virtual const bool loadContent(BinProcessor& proc);
|
||||
|
||||
int serialize(std::wostream & strm);
|
||||
|
||||
static const ElementType type = typePIVOTIVD;
|
||||
|
||||
BaseObjectPtr m_SxIvd;
|
||||
|
||||
@ -31,29 +31,26 @@
|
||||
*/
|
||||
|
||||
#include "PIVOTLI.h"
|
||||
#include <Logic/Biff_records/SXLI.h>
|
||||
#include <Logic/Biff_records/Continue.h>
|
||||
|
||||
#include "../Biff_records/SXLI.h"
|
||||
#include "../Biff_records/Continue.h"
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
|
||||
PIVOTLI::PIVOTLI()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
PIVOTLI::~PIVOTLI()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
BaseObjectPtr PIVOTLI::clone()
|
||||
{
|
||||
return BaseObjectPtr(new PIVOTLI(*this));
|
||||
}
|
||||
|
||||
|
||||
// PIVOTLI = SXLI *Continue
|
||||
const bool PIVOTLI::loadContent(BinProcessor& proc)
|
||||
{
|
||||
@ -61,10 +58,53 @@ const bool PIVOTLI::loadContent(BinProcessor& proc)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
m_SXLI = elements_.back();
|
||||
elements_.pop_back();
|
||||
|
||||
proc.repeated<Continue>(0, 0);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int PIVOTLI::serialize(std::wostream & strm)
|
||||
{
|
||||
SXLI* line_items = dynamic_cast<SXLI*>(m_SXLI.get());
|
||||
if (!line_items) return 0;
|
||||
|
||||
CP_XML_WRITER(strm)
|
||||
{
|
||||
for (size_t i = 0; i < line_items->m_arItems.size(); i++)
|
||||
{
|
||||
CP_XML_NODE(L"i")
|
||||
{
|
||||
switch(line_items->m_arItems[i].itmType)
|
||||
{
|
||||
case 0x0001: CP_XML_ATTR(L"t", L"default"); break;
|
||||
case 0x0002: CP_XML_ATTR(L"t", L"sum"); break;
|
||||
case 0x0003: CP_XML_ATTR(L"t", L"countA"); break;
|
||||
case 0x0004: CP_XML_ATTR(L"t", L"count"); break;
|
||||
case 0x0005: CP_XML_ATTR(L"t", L"avg"); break;
|
||||
case 0x0006: CP_XML_ATTR(L"t", L"max"); break;
|
||||
case 0x0007: CP_XML_ATTR(L"t", L"min"); break;
|
||||
case 0x0008: CP_XML_ATTR(L"t", L"product"); break;
|
||||
case 0x0009: CP_XML_ATTR(L"t", L"stdDev"); break;
|
||||
case 0x000A: CP_XML_ATTR(L"t", L"stdDevP"); break;
|
||||
case 0x000B: CP_XML_ATTR(L"t", L"var"); break;
|
||||
case 0x000C: CP_XML_ATTR(L"t", L"varP"); break;
|
||||
case 0x000D: CP_XML_ATTR(L"t", L"grand"); break;
|
||||
case 0x000E: CP_XML_ATTR(L"t", L"blank"); break;
|
||||
}
|
||||
|
||||
for (size_t j = 0; j < line_items->m_arItems[i].rgisxvi.size(); j++)
|
||||
{
|
||||
CP_XML_NODE(L"x")
|
||||
{
|
||||
CP_XML_ATTR(L"v", line_items->m_arItems[i].rgisxvi[j]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} // namespace XLS
|
||||
|
||||
|
||||
@ -36,8 +36,6 @@
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
|
||||
// Logical representation of PIVOTLI union of records
|
||||
class PIVOTLI: public CompositeObject
|
||||
{
|
||||
BASE_OBJECT_DEFINE_CLASS_NAME(PIVOTLI)
|
||||
@ -49,7 +47,11 @@ public:
|
||||
|
||||
virtual const bool loadContent(BinProcessor& proc);
|
||||
|
||||
static const ElementType type = typePIVOTLI;
|
||||
int serialize(std::wostream & strm);
|
||||
|
||||
static const ElementType type = typePIVOTLI;
|
||||
|
||||
BaseObjectPtr m_SXLI;
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -31,13 +31,12 @@
|
||||
*/
|
||||
|
||||
#include "PIVOTPI.h"
|
||||
#include <Logic/Biff_records/SXPI.h>
|
||||
#include <Logic/Biff_records/Continue.h>
|
||||
#include "../Biff_records/SXPI.h"
|
||||
#include "../Biff_records/Continue.h"
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
|
||||
PIVOTPI::PIVOTPI()
|
||||
{
|
||||
}
|
||||
@ -53,7 +52,6 @@ BaseObjectPtr PIVOTPI::clone()
|
||||
return BaseObjectPtr(new PIVOTPI(*this));
|
||||
}
|
||||
|
||||
|
||||
// PIVOTPI = SXPI *Continue
|
||||
const bool PIVOTPI::loadContent(BinProcessor& proc)
|
||||
{
|
||||
@ -69,5 +67,22 @@ const bool PIVOTPI::loadContent(BinProcessor& proc)
|
||||
return true;
|
||||
}
|
||||
|
||||
int PIVOTPI::serialize(std::wostream & strm)
|
||||
{
|
||||
SXPI* page_items = dynamic_cast<SXPI*>(m_SXPI.get());
|
||||
if (!page_items) return 0;
|
||||
|
||||
CP_XML_WRITER(strm)
|
||||
{
|
||||
for (size_t i = 0; i < page_items->m_arItems.size(); i++)
|
||||
{
|
||||
CP_XML_NODE(L"pageField")
|
||||
{
|
||||
CP_XML_ATTR(L"fld", page_items->m_arItems[i].isxvd);
|
||||
CP_XML_ATTR(L"hier",0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} // namespace XLS
|
||||
|
||||
|
||||
@ -47,6 +47,8 @@ public:
|
||||
|
||||
virtual const bool loadContent(BinProcessor& proc);
|
||||
|
||||
int serialize(std::wostream & strm);
|
||||
|
||||
static const ElementType type = typePIVOTPI;
|
||||
|
||||
BaseObjectPtr m_SXPI;
|
||||
|
||||
@ -31,30 +31,26 @@
|
||||
*/
|
||||
|
||||
#include "PIVOTVD.h"
|
||||
#include <Logic/Biff_records/Sxvd.h>
|
||||
#include <Logic/Biff_records/SXVI.h>
|
||||
#include <Logic/Biff_records/SXVDEx.h>
|
||||
#include "../Biff_records/Sxvd.h"
|
||||
#include "../Biff_records/SXVI.h"
|
||||
#include "../Biff_records/SXVDEx.h"
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
|
||||
PIVOTVD::PIVOTVD()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
PIVOTVD::~PIVOTVD()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
BaseObjectPtr PIVOTVD::clone()
|
||||
{
|
||||
return BaseObjectPtr(new PIVOTVD(*this));
|
||||
}
|
||||
|
||||
|
||||
// PIVOTVD = Sxvd *SXVI SXVDEx
|
||||
const bool PIVOTVD::loadContent(BinProcessor& proc)
|
||||
{
|
||||
@ -79,6 +75,92 @@ const bool PIVOTVD::loadContent(BinProcessor& proc)
|
||||
|
||||
return true;
|
||||
}
|
||||
int PIVOTVD::serialize(std::wostream & strm)
|
||||
{
|
||||
Sxvd* vd = dynamic_cast<Sxvd*>(m_Sxvd.get());
|
||||
SXVDEx* vd_ex = dynamic_cast<SXVDEx*>(m_SXVDEx.get());
|
||||
|
||||
if (!vd || !vd_ex) return 0;
|
||||
|
||||
CP_XML_WRITER(strm)
|
||||
{
|
||||
CP_XML_NODE(L"pivotField")
|
||||
{
|
||||
if (vd->sxaxis.bRw) CP_XML_ATTR(L"axis", L"axisRow");
|
||||
else if (vd->sxaxis.bCol) CP_XML_ATTR(L"axis", L"axisCol");
|
||||
else if (vd->sxaxis.bPage) CP_XML_ATTR(L"axis", L"axisPage");
|
||||
else if (vd->sxaxis.bData)
|
||||
{
|
||||
CP_XML_ATTR(L"dataField", 1);
|
||||
}
|
||||
|
||||
CP_XML_ATTR(L"compact", 0);
|
||||
|
||||
if (vd_ex->ifmt > 0)
|
||||
{
|
||||
CP_XML_ATTR(L"numFmtId", vd_ex->ifmt);
|
||||
}
|
||||
|
||||
if (vd->stName.value().empty() == false)
|
||||
CP_XML_ATTR(L"name", vd->stName.value());
|
||||
|
||||
if (vd->fCounta) CP_XML_ATTR(L"countASubtotal", 1);
|
||||
if (vd->fCount) CP_XML_ATTR(L"countSubtotal", 1);
|
||||
if (vd->fDefault) CP_XML_ATTR(L"defaultSubtotal", 1);
|
||||
if (vd->fSum) CP_XML_ATTR(L"sumSubtotal", 1);
|
||||
if (vd->fAverage) CP_XML_ATTR(L"avgSubtotal", 1);
|
||||
if (vd->fMax) CP_XML_ATTR(L"maxSubtotal", 1);
|
||||
if (vd->fMin) CP_XML_ATTR(L"minSubtotal", 1);
|
||||
if (vd->fProduct) CP_XML_ATTR(L"productSubtotal", 1);
|
||||
if (vd->fStdev) CP_XML_ATTR(L"stdSubtotal", 1);
|
||||
if (vd->fStdevp) CP_XML_ATTR(L"stdDevSubtotal", 1);
|
||||
if (vd->fVariance) CP_XML_ATTR(L"varSubtotal", 1);
|
||||
if (vd->fVariancep) CP_XML_ATTR(L"varPSubtotal", 1);
|
||||
|
||||
CP_XML_ATTR(L"outline", vd_ex->fOutline);
|
||||
CP_XML_ATTR(L"subtotalTop", vd_ex->fSubtotalAtTop);
|
||||
CP_XML_ATTR(L"showAll", vd_ex->fShowAllItems);
|
||||
|
||||
if (vd_ex->fNotDragToData) CP_XML_ATTR(L"dragToData", 0);
|
||||
if (!vd_ex->fDragToRow) CP_XML_ATTR(L"dragToRow", 0);
|
||||
if (!vd_ex->fDragToColumn) CP_XML_ATTR(L"dragToCol", 0);
|
||||
if (!vd_ex->fDragToPage) CP_XML_ATTR(L"dragToPage", 0);
|
||||
|
||||
if (vd_ex->fHideNewItems) CP_XML_ATTR(L"hideNewItems", 1);
|
||||
if (vd_ex->fInsertBlankRow) CP_XML_ATTR(L"insertBlankRow", 1);
|
||||
if (vd_ex->fPageBreaksBetweenItems) CP_XML_ATTR(L"insertPageBreak", 1);
|
||||
if (!vd_ex->fTopAutoShow) CP_XML_ATTR(L"topAutoShow", 0);
|
||||
//if (!vd_ex->fDragToHide) CP_XML_ATTR(L"dragOff", 0); //??
|
||||
if (vd_ex->fServerBased) CP_XML_ATTR(L"serverField", 1);
|
||||
|
||||
//CP_XML_ATTR(L"", vd_ex->fCalculatedField);
|
||||
CP_XML_ATTR(L"includeNewItemsInFilter", 1);
|
||||
|
||||
//CP_XML_ATTR(L"nonAutoSortDefault", !vd_ex->fAutoSort);
|
||||
if (vd_ex->fAutoSort)
|
||||
{
|
||||
// vd_ex->isxdiAutoSort
|
||||
|
||||
if (vd_ex->fAscendSort) CP_XML_ATTR(L"sortType", L"ascending");
|
||||
}
|
||||
if (vd_ex->isxdiAutoShow >= 0)
|
||||
{
|
||||
CP_XML_ATTR(L"rankBy", vd_ex->isxdiAutoShow);
|
||||
}
|
||||
if (!m_arSXVI.empty())
|
||||
{
|
||||
CP_XML_NODE(L"items")
|
||||
{
|
||||
CP_XML_ATTR(L"count", m_arSXVI.size());
|
||||
for (size_t i = 0; i < m_arSXVI.size(); i++)
|
||||
{
|
||||
m_arSXVI[i]->serialize(CP_XML_STREAM());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
} // namespace XLS
|
||||
|
||||
|
||||
@ -49,6 +49,8 @@ public:
|
||||
|
||||
static const ElementType type = typePIVOTVD;
|
||||
|
||||
int serialize(std::wostream & strm);
|
||||
|
||||
BaseObjectPtr m_Sxvd;
|
||||
std::vector<BaseObjectPtr> m_arSXVI;
|
||||
BaseObjectPtr m_SXVDEx;
|
||||
|
||||
@ -31,29 +31,34 @@
|
||||
*/
|
||||
|
||||
#include "PIVOTVIEW.h"
|
||||
#include <Logic/Biff_unions/PIVOTCORE.h>
|
||||
#include <Logic/Biff_unions/PIVOTFRT.h>
|
||||
#include "PIVOTCORE.h"
|
||||
#include "PIVOTFRT.h"
|
||||
#include "PIVOTVD.h"
|
||||
#include "PIVOTIVD.h"
|
||||
#include "PIVOTPI.h"
|
||||
#include "PIVOTLI.h"
|
||||
#include "PIVOTEX.h"
|
||||
|
||||
#include "../Biff_records/SXDI.h"
|
||||
#include "../Biff_records/SxView.h"
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
|
||||
PIVOTVIEW::PIVOTVIEW()
|
||||
{
|
||||
indexCache = -1;
|
||||
}
|
||||
|
||||
|
||||
PIVOTVIEW::~PIVOTVIEW()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
BaseObjectPtr PIVOTVIEW::clone()
|
||||
{
|
||||
return BaseObjectPtr(new PIVOTVIEW(*this));
|
||||
}
|
||||
|
||||
|
||||
// PIVOTVIEW = PIVOTCORE [PIVOTFRT]
|
||||
const bool PIVOTVIEW::loadContent(BinProcessor& proc)
|
||||
{
|
||||
@ -73,5 +78,135 @@ const bool PIVOTVIEW::loadContent(BinProcessor& proc)
|
||||
return true;
|
||||
}
|
||||
|
||||
int PIVOTVIEW::serialize(std::wostream & strm)
|
||||
{
|
||||
PIVOTCORE* core = dynamic_cast<PIVOTCORE*>(m_PIVOTCORE.get());
|
||||
if (!core) return 0;
|
||||
|
||||
SxView* view = dynamic_cast<SxView*>(core->m_SxView.get());
|
||||
if (!view) return 0;
|
||||
|
||||
PIVOTFRT* frt = dynamic_cast<PIVOTFRT*>(m_PIVOTFRT.get());
|
||||
|
||||
indexCache = view->iCache;
|
||||
|
||||
CP_XML_WRITER(strm)
|
||||
{
|
||||
CP_XML_NODE(L"pivotTableDefinition")
|
||||
{
|
||||
CP_XML_ATTR(L"xmlns", L"http://schemas.openxmlformats.org/spreadsheetml/2006/main");
|
||||
|
||||
CP_XML_ATTR(L"name", view->stTable.value());
|
||||
CP_XML_ATTR(L"cacheId", view->iCache);
|
||||
CP_XML_ATTR(L"useAutoFormatting", view->fAutoFormat);
|
||||
CP_XML_ATTR(L"dataOnRows", view->sxaxis4Data.bRw);
|
||||
CP_XML_ATTR(L"autoFormatId", view->itblAutoFmt);
|
||||
CP_XML_ATTR(L"applyNumberFormats", view->fAtrNum);
|
||||
CP_XML_ATTR(L"applyBorderFormats", view->fAtrBdr);
|
||||
CP_XML_ATTR(L"applyFontFormats", view->fAtrFnt);
|
||||
CP_XML_ATTR(L"applyPatternFormats", view->fAtrPat);
|
||||
CP_XML_ATTR(L"applyAlignmentFormats", view->fAtrAlc);
|
||||
CP_XML_ATTR(L"applyWidthHeightFormats", view->fAtrProc);
|
||||
if (!view->stData.value().empty())
|
||||
{
|
||||
CP_XML_ATTR(L"dataCaption", view->stData.value());
|
||||
}
|
||||
//updatedVersion="2"
|
||||
//asteriskTotals="1"
|
||||
//showMemberPropertyTips="0"
|
||||
//itemPrintTitles="1"
|
||||
//createdVersion="1"
|
||||
//indent="0"
|
||||
//compact="0"
|
||||
//compactData="0"
|
||||
//gridDropZones="1"
|
||||
CP_XML_NODE(L"location")
|
||||
{
|
||||
CP_XML_ATTR(L"ref", view->ref.toString());
|
||||
CP_XML_ATTR(L"firstHeaderRow", view->rwFirstHead - view->ref.rowFirst );
|
||||
CP_XML_ATTR(L"firstDataRow", view->rwFirstData - view->ref.rowFirst);
|
||||
CP_XML_ATTR(L"firstDataCol", view->colFirstData - view->ref.columnFirst);
|
||||
CP_XML_ATTR(L"rowPageCount", 1);
|
||||
CP_XML_ATTR(L"colPageCount", 1);
|
||||
}
|
||||
CP_XML_NODE(L"pivotFields")
|
||||
{
|
||||
CP_XML_ATTR(L"count", view->cDim);//Sxvd
|
||||
for (size_t i = 0; i < core->m_arPIVOTVD.size(); i++)
|
||||
{
|
||||
core->m_arPIVOTVD[i]->serialize(CP_XML_STREAM());
|
||||
}
|
||||
}
|
||||
if (core->m_arPIVOTIVD.size() == 2)//0 or 2
|
||||
{
|
||||
CP_XML_NODE(L"rowFields")
|
||||
{
|
||||
CP_XML_ATTR(L"count", view->cDimRw);
|
||||
|
||||
PIVOTIVD* ivd = dynamic_cast<PIVOTIVD*>(core->m_arPIVOTIVD[0].get());
|
||||
ivd->serialize(CP_XML_STREAM());
|
||||
}
|
||||
}
|
||||
if (core->m_arPIVOTLI.size() == 2)//0 or 2
|
||||
{
|
||||
CP_XML_NODE(L"rowItems")
|
||||
{
|
||||
CP_XML_ATTR(L"count", view->cRw);
|
||||
|
||||
PIVOTLI* line = dynamic_cast<PIVOTLI*>(core->m_arPIVOTLI[0].get());
|
||||
line->serialize(CP_XML_STREAM());
|
||||
}
|
||||
}
|
||||
if (core->m_arPIVOTIVD.size() == 2)//0 or 2
|
||||
{
|
||||
CP_XML_NODE(L"colFields")
|
||||
{
|
||||
CP_XML_ATTR(L"count", view->cDimCol);
|
||||
|
||||
PIVOTIVD* ivd = dynamic_cast<PIVOTIVD*>(core->m_arPIVOTIVD[1].get());
|
||||
ivd->serialize(CP_XML_STREAM());
|
||||
}
|
||||
}
|
||||
if (core->m_arPIVOTLI.size() == 2)//0 or 2
|
||||
{
|
||||
CP_XML_NODE(L"colItems")
|
||||
{
|
||||
CP_XML_ATTR(L"count", view->cCol);
|
||||
|
||||
PIVOTLI* line = dynamic_cast<PIVOTLI*>(core->m_arPIVOTLI[1].get());
|
||||
line->serialize(CP_XML_STREAM());
|
||||
}
|
||||
}
|
||||
if (core->m_PIVOTPI)
|
||||
{
|
||||
CP_XML_NODE(L"pageFields")
|
||||
{
|
||||
CP_XML_ATTR(L"count", view->cDimPg);
|
||||
|
||||
core->m_PIVOTPI->serialize(CP_XML_STREAM());
|
||||
}
|
||||
}
|
||||
CP_XML_NODE(L"dataFields")
|
||||
{
|
||||
CP_XML_ATTR(L"count", view->cDimData);
|
||||
for (size_t i = 0; i < core->m_arSXDI.size(); i++)
|
||||
{
|
||||
core->m_arSXDI[i]->serialize(CP_XML_STREAM());
|
||||
}
|
||||
}
|
||||
//CP_XML_NODE(L"pivotTableStyleInfo")
|
||||
//{
|
||||
// CP_XML_ATTR(L"showRowHeaders", 1);
|
||||
// CP_XML_ATTR(L"showColHeaders", 1);
|
||||
// CP_XML_ATTR(L"showRowStripes", 0);
|
||||
// CP_XML_ATTR(L"showColStripes", 0);
|
||||
// CP_XML_ATTR(L"showLastColumn", 1);
|
||||
//}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
|
||||
@ -47,10 +47,14 @@ public:
|
||||
|
||||
virtual const bool loadContent(BinProcessor& proc);
|
||||
|
||||
int serialize(std::wostream & strm);
|
||||
|
||||
static const ElementType type = typePIVOTVIEW;
|
||||
|
||||
BaseObjectPtr m_PIVOTCORE;
|
||||
BaseObjectPtr m_PIVOTFRT;
|
||||
//----------------------------------
|
||||
int indexCache;
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -39,23 +39,19 @@
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
|
||||
PIVOTVIEWEX::PIVOTVIEWEX()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
PIVOTVIEWEX::~PIVOTVIEWEX()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
BaseObjectPtr PIVOTVIEWEX::clone()
|
||||
{
|
||||
return BaseObjectPtr(new PIVOTVIEWEX(*this));
|
||||
}
|
||||
|
||||
|
||||
// PIVOTVIEWEX = SXViewEx *PIVOTTH *SXPIEx *PIVOTVDTEX
|
||||
const bool PIVOTVIEWEX::loadContent(BinProcessor& proc)
|
||||
{
|
||||
|
||||
@ -43,9 +43,12 @@ namespace XLS
|
||||
|
||||
SXOPER::SXOPER()
|
||||
{
|
||||
bString = false;
|
||||
bDate = false;
|
||||
bNumber = false;
|
||||
bEmpty = false;
|
||||
}
|
||||
|
||||
|
||||
SXOPER::~SXOPER()
|
||||
{
|
||||
}
|
||||
@ -60,27 +63,42 @@ const bool SXOPER::loadContent(BinProcessor& proc)
|
||||
{
|
||||
if(proc.optional<SxNil>())
|
||||
{
|
||||
bEmpty = true;
|
||||
}
|
||||
else if(proc.optional<SXNum>())
|
||||
{
|
||||
bNumber = true;
|
||||
}
|
||||
else if(proc.optional<SxBool>())
|
||||
{
|
||||
bNumber = true;
|
||||
}
|
||||
else if(proc.optional<SxErr>())
|
||||
{
|
||||
bNumber = true;
|
||||
}
|
||||
else if(proc.optional<SXString>())
|
||||
{
|
||||
bString = true;
|
||||
}
|
||||
else if(proc.optional<SXDtr>())
|
||||
{
|
||||
bDate =true;
|
||||
}
|
||||
else
|
||||
return false;
|
||||
|
||||
m_element = elements_.back();
|
||||
elements_.pop_back();
|
||||
|
||||
return true;
|
||||
}
|
||||
int SXOPER::serialize(std::wostream & strm)
|
||||
{
|
||||
if (!m_element) return 0;
|
||||
|
||||
m_element->serialize(strm);
|
||||
return 0;
|
||||
}
|
||||
} // namespace XLS
|
||||
|
||||
|
||||
@ -47,9 +47,16 @@ public:
|
||||
|
||||
virtual const bool loadContent(BinProcessor& proc);
|
||||
|
||||
static const ElementType type = typeSXOPER;
|
||||
int serialize(std::wostream & strm);
|
||||
|
||||
BaseObjectPtr m_SXOPER;
|
||||
static const ElementType type = typeSXOPER;
|
||||
|
||||
BaseObjectPtr m_element;
|
||||
|
||||
bool bString;
|
||||
bool bDate;
|
||||
bool bNumber;
|
||||
bool bEmpty;
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -92,10 +92,65 @@ const bool SXRANGE::loadContent(BinProcessor& proc)
|
||||
|
||||
if(proc.optional<Parenthesis_SXRANGE>())
|
||||
{
|
||||
while(elements_.empty() == false)
|
||||
{
|
||||
SXNum* num = dynamic_cast<SXNum*>(elements_.front().get());
|
||||
if (num)
|
||||
{
|
||||
m_arSXNum.push_back(elements_.front());
|
||||
}
|
||||
else
|
||||
{
|
||||
SXDtr* dtr = dynamic_cast<SXDtr*>(elements_.front().get());
|
||||
if (dtr)
|
||||
{
|
||||
m_arSXDtr.push_back(elements_.front());
|
||||
}
|
||||
}
|
||||
elements_.pop_front();
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int SXRANGE::serialize(std::wostream & strm)
|
||||
{
|
||||
SXRng* rng = dynamic_cast<SXRng*>(m_SXRng.get());
|
||||
|
||||
if (!rng) return 0;
|
||||
|
||||
CP_XML_WRITER(strm)
|
||||
{
|
||||
CP_XML_NODE(L"rangePr")
|
||||
{
|
||||
switch(rng->iByType)
|
||||
{
|
||||
case 0: CP_XML_ATTR(L"groupBy", L"range"); break;
|
||||
case 1: CP_XML_ATTR(L"groupBy", L"seconds"); break;
|
||||
case 2: CP_XML_ATTR(L"groupBy", L"minutes"); break;
|
||||
case 3: CP_XML_ATTR(L"groupBy", L"hours"); break;
|
||||
case 4: CP_XML_ATTR(L"groupBy", L"days"); break;
|
||||
case 5: CP_XML_ATTR(L"groupBy", L"months"); break;
|
||||
case 6: CP_XML_ATTR(L"groupBy", L"quarters"); break;
|
||||
case 7: CP_XML_ATTR(L"groupBy", L"years"); break;
|
||||
}
|
||||
if (m_arSXDtr.size() == 2)
|
||||
{
|
||||
SXDtr* startDate = dynamic_cast<SXDtr*>(m_arSXDtr[0].get());
|
||||
SXDtr* endDate = dynamic_cast<SXDtr*>(m_arSXDtr[1].get());
|
||||
|
||||
CP_XML_ATTR(L"startDate", startDate->get_string_date());
|
||||
CP_XML_ATTR(L"endDate", endDate->get_string_date());
|
||||
}
|
||||
if (m_arSXNum.size() == 3)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
} // namespace XLS
|
||||
|
||||
|
||||
@ -47,9 +47,13 @@ public:
|
||||
|
||||
virtual const bool loadContent(BinProcessor& proc);
|
||||
|
||||
static const ElementType type = typeSXRANGE;
|
||||
int serialize(std::wostream & strm);
|
||||
|
||||
BaseObjectPtr m_SXRng;
|
||||
static const ElementType type = typeSXRANGE;
|
||||
|
||||
BaseObjectPtr m_SXRng;
|
||||
std::vector<BaseObjectPtr> m_arSXNum;
|
||||
std::vector<BaseObjectPtr> m_arSXDtr;
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -73,5 +73,13 @@ const bool SXSRC::loadContent(BinProcessor& proc)
|
||||
return true;
|
||||
}
|
||||
|
||||
int SXSRC::serialize(std::wostream & stream)
|
||||
{
|
||||
if (m_source)
|
||||
m_source->serialize(stream);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
|
||||
@ -47,7 +47,9 @@ public:
|
||||
|
||||
virtual const bool loadContent(BinProcessor& proc);
|
||||
|
||||
static const ElementType type = typeSXSRC;
|
||||
int serialize(std::wostream & stream);
|
||||
|
||||
static const ElementType type = typeSXSRC;
|
||||
|
||||
BaseObjectPtr m_source;
|
||||
};
|
||||
|
||||
@ -100,6 +100,8 @@ public:
|
||||
const static unsigned int initial_AXES_id = 0x2000000;
|
||||
|
||||
std::map<int, BaseObjectPtr> mapPivotCache;
|
||||
std::vector<bool> arCacheFieldShortSize;
|
||||
|
||||
std::map<std::wstring, std::vector<std::wstring>> mapDefineNames;
|
||||
std::vector<std::wstring> arDefineNames;
|
||||
std::vector<std::wstring> arExternalNames;
|
||||
|
||||
@ -1916,22 +1916,28 @@ void XlsConverter::convert(XLS::PIVOTVIEW * pivot_view)
|
||||
{
|
||||
if (pivot_view == NULL) return;
|
||||
|
||||
std::wstringstream strm;
|
||||
|
||||
pivot_view->serialize(strm);
|
||||
|
||||
int index_view = xlsx_context->get_pivots_context().add_view(strm.str(), pivot_view->indexCache);
|
||||
|
||||
if (index_view > 0)
|
||||
{
|
||||
xlsx_context->current_sheet().sheet_rels().add(oox::relationship(L"pvId" + std::to_wstring(index_view),
|
||||
L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/pivotTable",
|
||||
L"../pivotTables/pivotTable" + std::to_wstring(index_view) + L".xml"));
|
||||
}
|
||||
}
|
||||
|
||||
void XlsConverter::convert(XLS::PIVOTCACHEDEFINITION * pivot_cached)
|
||||
{
|
||||
if (pivot_cached == NULL) return;
|
||||
|
||||
xlsx_context->start_pivot_cache();
|
||||
|
||||
pivot_cached->serialize(xlsx_context->current_pivot_cache().definitions());
|
||||
|
||||
//if (pivot_cached->is_records())//??
|
||||
{
|
||||
xlsx_context->current_pivot_cache().isRecordsPresent = true;
|
||||
|
||||
//pivot_cached->serialize_records(xlsx_context->current_pivot_cache().records());
|
||||
}
|
||||
std::wstringstream strmD, strmR;
|
||||
|
||||
xlsx_context->end_pivot_cache();
|
||||
pivot_cached->serialize_definitions(strmD);
|
||||
pivot_cached->serialize_records(strmR);
|
||||
|
||||
xlsx_context->get_pivots_context().add_cache(strmD.str(), strmR.str());
|
||||
}
|
||||
@ -84,17 +84,7 @@ xlsx_xml_worksheet & xlsx_conversion_context::current_sheet()
|
||||
throw std::runtime_error("internal error");
|
||||
}
|
||||
}
|
||||
xlsx_pivot_cache_context & xlsx_conversion_context::current_pivot_cache()
|
||||
{
|
||||
if (!pivot_caches_.empty())
|
||||
{
|
||||
return *pivot_caches_.back().get();
|
||||
}
|
||||
else
|
||||
{
|
||||
throw std::runtime_error("internal error");
|
||||
}
|
||||
}
|
||||
|
||||
oox_chart_context & xlsx_conversion_context::current_chart()
|
||||
{
|
||||
if (!charts_.empty())
|
||||
@ -133,15 +123,6 @@ void xlsx_conversion_context::end_chart()
|
||||
{
|
||||
}
|
||||
|
||||
void xlsx_conversion_context::start_pivot_cache()
|
||||
{
|
||||
pivot_caches_.push_back(xlsx_pivot_cache_context::create());
|
||||
|
||||
}
|
||||
void xlsx_conversion_context::end_pivot_cache()
|
||||
{
|
||||
}
|
||||
|
||||
void xlsx_conversion_context::end_table()
|
||||
{
|
||||
get_table_context().serialize_hyperlinks(current_sheet().hyperlinks());
|
||||
@ -246,6 +227,7 @@ void xlsx_conversion_context::end_document()
|
||||
{
|
||||
CP_XML_ATTR(L"xmlns", L"http://schemas.openxmlformats.org/spreadsheetml/2006/main");
|
||||
CP_XML_ATTR(L"xmlns:r", L"http://schemas.openxmlformats.org/officeDocument/2006/relationships");
|
||||
CP_XML_ATTR(L"xmlns:mc", L"http://schemas.openxmlformats.org/markup-compatibility/2006");
|
||||
|
||||
CP_XML_NODE(L"bookViews")
|
||||
{
|
||||
@ -271,11 +253,12 @@ void xlsx_conversion_context::end_document()
|
||||
CP_XML_STREAM() << str_;
|
||||
}
|
||||
}
|
||||
if (!pivot_caches_.empty())
|
||||
int pivot_cache_count = xlsx_pivots_context_.get_cache_count();
|
||||
if (pivot_cache_count > 0)
|
||||
{
|
||||
CP_XML_NODE(L"pivotCaches")
|
||||
{
|
||||
for (size_t i = 0; i < pivot_caches_.size(); i++)
|
||||
for (int i = 0; i < pivot_cache_count; i++)
|
||||
{
|
||||
std::wstring rId = L"pcId" + std::to_wstring(i+1);
|
||||
static const std::wstring sType = L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/pivotCacheDefinition";
|
||||
@ -289,18 +272,27 @@ void xlsx_conversion_context::end_document()
|
||||
CP_XML_ATTR(L"r:id", rId);
|
||||
}
|
||||
|
||||
pivot_caches_[i]->dump_rels(content->get_rels());
|
||||
pivot_caches_[i]->write_to(content->definitions());
|
||||
xlsx_pivots_context_.dump_rels_cache(i, content->get_rels());
|
||||
xlsx_pivots_context_.write_cache_definitions_to(i, content->definitions());
|
||||
xlsx_pivots_context_.write_cache_records_to(i, content->records());
|
||||
|
||||
if (pivot_caches_[i]->isRecordsPresent)
|
||||
{
|
||||
pivot_caches_[i]->write_records_to(content->records());
|
||||
|
||||
}
|
||||
output_document_->get_xl_files().add_pivot_cache(content);
|
||||
}
|
||||
}
|
||||
}
|
||||
int pivot_view_count = xlsx_pivots_context_.get_view_count();
|
||||
if (pivot_view_count > 0)
|
||||
{
|
||||
for (int i = 0; i < pivot_view_count; i++)
|
||||
{
|
||||
package::pivot_table_content_ptr content = package::pivot_table_content::create();
|
||||
|
||||
xlsx_pivots_context_.dump_rels_view(i, content->get_rels());
|
||||
xlsx_pivots_context_.write_table_view_to(i, content->content());
|
||||
|
||||
output_document_->get_xl_files().add_pivot_table(content);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
output_document_->get_xl_files().set_workbook( package::simple_element::create(L"workbook.xml", strm_workbook.str()) );
|
||||
|
||||
@ -41,7 +41,7 @@
|
||||
#include "xlsx_drawing_context.h"
|
||||
#include "xlsx_chart_context.h"
|
||||
#include "xlsx_comments_context.h"
|
||||
#include "xlsx_pivot_cache_context.h"
|
||||
#include "xlsx_pivots_context.h"
|
||||
|
||||
#include "xlsx_output_xml.h"
|
||||
|
||||
@ -71,9 +71,6 @@ public:
|
||||
void start_chart();
|
||||
void end_chart();
|
||||
|
||||
void start_pivot_cache();
|
||||
void end_pivot_cache();
|
||||
|
||||
std::wostream & shared_strings() { return xlsx_shared_strings_; }
|
||||
std::wostream & defined_names() { return xlsx_defined_names_; }
|
||||
std::wostream & workbook_views() { return xlsx_workbook_views_; }
|
||||
@ -84,8 +81,8 @@ public:
|
||||
xlsx_xml_worksheet & current_sheet();
|
||||
|
||||
oox_chart_context & current_chart();
|
||||
xlsx_pivot_cache_context & current_pivot_cache();
|
||||
|
||||
xlsx_pivots_context & get_pivots_context() {return xlsx_pivots_context_;}
|
||||
xlsx_drawing_context & get_drawing_context();
|
||||
xlsx_drawing_context_handle & get_drawing_context_handle();
|
||||
xlsx_comments_context & get_comments_context();
|
||||
@ -102,7 +99,6 @@ private:
|
||||
|
||||
std::vector<xlsx_xml_worksheet_ptr> sheets_;
|
||||
std::vector<oox_chart_context_ptr> charts_;
|
||||
std::vector<xlsx_pivot_cache_context_ptr> pivot_caches_;
|
||||
|
||||
//std::wstringstream defaultOutput_;
|
||||
//std::pair<float,float> maxDigitSize_;
|
||||
@ -111,6 +107,7 @@ private:
|
||||
|
||||
size_t next_vml_file_id_; //используется для footer/header & comments
|
||||
|
||||
xlsx_pivots_context xlsx_pivots_context_;
|
||||
xlsx_table_context xlsx_table_context_;
|
||||
xlsx_text_context xlsx_text_context_;
|
||||
|
||||
|
||||
@ -89,13 +89,20 @@ _CP_PTR(pivot_cache_content) pivot_cache_content::create()
|
||||
{
|
||||
return boost::make_shared<pivot_cache_content>();
|
||||
}
|
||||
//--------------------------------------------------------------------------------------------
|
||||
pivot_table_content::pivot_table_content() : rels_file_(rels_file::create(L""))
|
||||
{
|
||||
}
|
||||
|
||||
_CP_PTR(pivot_table_content) pivot_table_content::create()
|
||||
{
|
||||
return boost::make_shared<pivot_table_content>();
|
||||
}
|
||||
//--------------------------------------------------------------------------------------------
|
||||
sheet_content::sheet_content() : rels_(rels_file::create(L""))
|
||||
{
|
||||
|
||||
}
|
||||
//--------------------------------------------------------------------------------------------
|
||||
|
||||
_CP_PTR(sheet_content) sheet_content::create()
|
||||
{
|
||||
return boost::make_shared<sheet_content>();
|
||||
@ -169,16 +176,20 @@ void xl_files::write(const std::wstring & RootPath)
|
||||
std::wstring path = RootPath + FILE_SEPARATOR_STR + L"xl";
|
||||
NSDirectory::CreateDirectory(path.c_str());
|
||||
|
||||
sheets_files_.set_rels(&rels_files_);
|
||||
{
|
||||
pivot_cache_files_.set_rels(&rels_files_);
|
||||
pivot_cache_files_.set_main_document(get_main_document());
|
||||
pivot_cache_files_.write(path);
|
||||
}
|
||||
{
|
||||
pivot_table_files_.set_main_document(get_main_document());
|
||||
pivot_table_files_.write(path);
|
||||
}
|
||||
|
||||
sheets_files_.set_rels(&rels_files_);
|
||||
sheets_files_.set_main_document( this->get_main_document() );
|
||||
sheets_files_.write(path);
|
||||
|
||||
int index = 1;
|
||||
if (true)
|
||||
{
|
||||
//workbook_->hyperlinks->write(path);
|
||||
rels_files_.add( relationship( L"hId1", L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument", L"xl/workbook.xml" ) );
|
||||
}
|
||||
if (sharedStrings_)
|
||||
{
|
||||
sharedStrings_->write(path);
|
||||
@ -206,16 +217,11 @@ void xl_files::write(const std::wstring & RootPath)
|
||||
media_->set_main_document(get_main_document());
|
||||
media_->write(path);
|
||||
}
|
||||
|
||||
{
|
||||
charts_files_.set_main_document(get_main_document());
|
||||
charts_files_.write(path);
|
||||
}
|
||||
{
|
||||
pivot_cache_files_.set_rels(&rels_files_);
|
||||
pivot_cache_files_.set_main_document(get_main_document());
|
||||
pivot_cache_files_.write(path);
|
||||
}
|
||||
|
||||
if (drawings_)
|
||||
{
|
||||
drawings_->set_main_document(get_main_document());
|
||||
@ -281,6 +287,10 @@ void xl_files::add_pivot_cache(pivot_cache_content_ptr pivot_cache)
|
||||
{
|
||||
pivot_cache_files_.add_pivot_cache(pivot_cache);
|
||||
}
|
||||
void xl_files::add_pivot_table(pivot_table_content_ptr pivot_table)
|
||||
{
|
||||
pivot_table_files_.add_pivot_table(pivot_table);
|
||||
}
|
||||
//----------------------------------------------------------------------------------------
|
||||
void xl_pivot_cache_files::add_pivot_cache(pivot_cache_content_ptr pivot_cache)
|
||||
{
|
||||
@ -326,7 +336,7 @@ void xl_pivot_cache_files::write(const std::wstring & RootPath)
|
||||
{
|
||||
const std::wstring fileNameR = std::wstring(L"pivotCacheRecords") + std::to_wstring(i + 1) + L".xml";
|
||||
|
||||
contentTypes.add_override(std::wstring(L"/xl/pivotCache/") + fileNameR, kWSConTypeD);
|
||||
contentTypes.add_override(std::wstring(L"/xl/pivotCache/") + fileNameR, kWSConTypeR);
|
||||
|
||||
package::simple_element(fileNameR, content_records).write(path);
|
||||
}
|
||||
@ -334,6 +344,41 @@ void xl_pivot_cache_files::write(const std::wstring & RootPath)
|
||||
}
|
||||
}
|
||||
//----------------------------------------------------------------------------------------
|
||||
void xl_pivot_table_files::add_pivot_table(pivot_table_content_ptr pivot_table)
|
||||
{
|
||||
pivot_tables_.push_back(pivot_table);
|
||||
}
|
||||
void xl_pivot_table_files::write(const std::wstring & RootPath)
|
||||
{
|
||||
std::wstring path = RootPath + FILE_SEPARATOR_STR + L"pivotTables";
|
||||
NSDirectory::CreateDirectory(path.c_str());
|
||||
|
||||
content_type & contentTypes = this->get_main_document()->content_type().get_content_type();
|
||||
|
||||
static const std::wstring kWSConType = L"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml";
|
||||
|
||||
for (size_t i = 0; i < pivot_tables_.size(); i++)
|
||||
{
|
||||
if (pivot_tables_[i])
|
||||
{
|
||||
const std::wstring fileName = std::wstring(L"pivotTable") + std::to_wstring(i + 1) + L".xml";
|
||||
|
||||
contentTypes.add_override(std::wstring(L"/xl/pivotTables/") + fileName, kWSConType);
|
||||
|
||||
package::simple_element(fileName, pivot_tables_[i]->str()).write(path);
|
||||
|
||||
if (pivot_tables_[i]->get_rels().empty() == false)
|
||||
{
|
||||
rels_files relFiles;
|
||||
pivot_tables_[i]->rels_file_->set_file_name(fileName + L".rels");
|
||||
|
||||
relFiles.add_rel_file(pivot_tables_[i]->rels_file_);
|
||||
relFiles.write(path);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//----------------------------------------------------------------------------------------
|
||||
void xl_charts_files::add_chart(chart_content_ptr chart)
|
||||
{
|
||||
charts_.push_back(chart);
|
||||
|
||||
@ -89,6 +89,26 @@ private:
|
||||
rels_file_ptr definitions_rels_file_;
|
||||
};
|
||||
//------------------------------------------------------------------------
|
||||
class pivot_table_content;
|
||||
typedef _CP_PTR(pivot_table_content) pivot_table_content_ptr;
|
||||
|
||||
class pivot_table_content : boost::noncopyable
|
||||
{
|
||||
public:
|
||||
pivot_table_content();
|
||||
static _CP_PTR(pivot_table_content) create();
|
||||
|
||||
std::wostream & content() { return content_; }
|
||||
rels & get_rels() { return rels_file_->get_rels(); }
|
||||
|
||||
std::wstring str() { return content_.str(); }
|
||||
|
||||
friend class xl_pivot_table_files;
|
||||
private:
|
||||
std::wstringstream content_;
|
||||
rels_file_ptr rels_file_;
|
||||
};
|
||||
//------------------------------------------------------------------------
|
||||
class sheets_files : public element
|
||||
{
|
||||
public:
|
||||
@ -119,7 +139,16 @@ public:
|
||||
std::vector<chart_content_ptr> charts_;
|
||||
|
||||
};
|
||||
|
||||
class xl_pivot_table_files : public element
|
||||
{
|
||||
public:
|
||||
xl_pivot_table_files(){}
|
||||
|
||||
void add_pivot_table(pivot_table_content_ptr pivot_table);
|
||||
virtual void write(const std::wstring & RootPath);
|
||||
|
||||
std::vector<pivot_table_content_ptr> pivot_tables_;
|
||||
};
|
||||
class xl_pivot_cache_files : public element
|
||||
{
|
||||
public:
|
||||
@ -200,13 +229,14 @@ public:
|
||||
void set_vml_drawings (element_ptr Element);
|
||||
void set_comments (element_ptr Element);
|
||||
void add_charts (chart_content_ptr chart);
|
||||
void add_pivot_cache (pivot_cache_content_ptr pivot);
|
||||
|
||||
void add_pivot_cache (pivot_cache_content_ptr cache);
|
||||
void add_pivot_table (pivot_table_content_ptr table);
|
||||
private:
|
||||
rels_files rels_files_;
|
||||
sheets_files sheets_files_;
|
||||
xl_charts_files charts_files_;
|
||||
xl_pivot_cache_files pivot_cache_files_;
|
||||
xl_pivot_table_files pivot_table_files_;
|
||||
|
||||
element_ptr theme_;
|
||||
element_ptr workbook_;
|
||||
|
||||
@ -1,155 +0,0 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2017
|
||||
*
|
||||
* This program is a free software product. You can redistribute it and/or
|
||||
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
||||
* version 3 as published by the Free Software Foundation. In accordance with
|
||||
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
||||
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
||||
* of any third-party rights.
|
||||
*
|
||||
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
||||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
||||
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
||||
*
|
||||
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
|
||||
* EU, LV-1021.
|
||||
*
|
||||
* The interactive user interfaces in modified source and object code versions
|
||||
* of the Program must display Appropriate Legal Notices, as required under
|
||||
* Section 5 of the GNU AGPL version 3.
|
||||
*
|
||||
* Pursuant to Section 7(b) of the License you must retain the original Product
|
||||
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
||||
* grant you any rights under trademark law for use of our trademarks.
|
||||
*
|
||||
* All the Product's GUI elements, including illustrations and icon sets, as
|
||||
* well as technical writing content are licensed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
||||
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
*
|
||||
*/
|
||||
#include "xlsx_pivot_cache_context.h"
|
||||
|
||||
#include "oox_rels.h"
|
||||
#include "mediaitems_utils.h"
|
||||
|
||||
#include <boost/make_shared.hpp>
|
||||
#include <simple_xml_writer.h>
|
||||
|
||||
namespace oox {
|
||||
|
||||
class xlsx_pivot_cache_context::Impl
|
||||
{
|
||||
// struct rel_
|
||||
// {
|
||||
// rel_(bool is_internal, std::wstring const & rid, std::wstring const & target, external_items::Type type) :
|
||||
// is_internal_(is_internal),
|
||||
// rid_(rid),
|
||||
//target_(target),
|
||||
// type_(type)
|
||||
// {}
|
||||
|
||||
// bool is_internal_;
|
||||
// std::wstring rid_;
|
||||
// std::wstring target_;
|
||||
// external_items::Type type_;
|
||||
// };
|
||||
|
||||
public:
|
||||
Impl() {}
|
||||
|
||||
std::wstringstream definitionsData_;
|
||||
std::wstringstream recordsData_;
|
||||
|
||||
//rels rels_;
|
||||
|
||||
};
|
||||
|
||||
xlsx_pivot_cache_context_ptr xlsx_pivot_cache_context::create()
|
||||
{
|
||||
return boost::make_shared<xlsx_pivot_cache_context>();
|
||||
}
|
||||
|
||||
int countPivotCaches = 0;
|
||||
|
||||
xlsx_pivot_cache_context::xlsx_pivot_cache_context() : impl_(new xlsx_pivot_cache_context::Impl()), isRecordsPresent(false)
|
||||
{
|
||||
index = ++countPivotCaches;
|
||||
}
|
||||
std::wostream & xlsx_pivot_cache_context::definitions()
|
||||
{
|
||||
return impl_->definitionsData_;
|
||||
}
|
||||
std::wostream & xlsx_pivot_cache_context::records()
|
||||
{
|
||||
return impl_->recordsData_;
|
||||
}
|
||||
//void xlsx_pivot_cache_context::add_rels(
|
||||
// bool isInternal,
|
||||
// std::wstring const & rid,
|
||||
// std::wstring const & target,
|
||||
// external_items::Type type)
|
||||
//{
|
||||
// impl_->add_rels(isInternal, rid, target, type);
|
||||
//}
|
||||
void xlsx_pivot_cache_context::dump_rels(rels & Rels)
|
||||
{
|
||||
if (isRecordsPresent)
|
||||
{
|
||||
Rels.add(relationship(L"rId1",
|
||||
L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/pivotCacheRecords",
|
||||
L"pivotCacheRecords" + std::to_wstring(index) + L".xml", L""));
|
||||
}
|
||||
}
|
||||
void xlsx_pivot_cache_context::write_to(std::wostream & strm)
|
||||
{
|
||||
CP_XML_WRITER(strm)
|
||||
{
|
||||
CP_XML_NODE(L"pivotCacheDefinition")
|
||||
{
|
||||
CP_XML_ATTR(L"xmlns", L"http://schemas.openxmlformats.org/spreadsheetml/2006/main");
|
||||
CP_XML_ATTR(L"xmlns:r", L"http://schemas.openxmlformats.org/officeDocument/2006/relationships");
|
||||
|
||||
if (isRecordsPresent)
|
||||
{
|
||||
CP_XML_ATTR(L"r:id", L"rId1" );
|
||||
}
|
||||
CP_XML_ATTR(L"recordCount", 0);
|
||||
//refreshedBy="Debra S Dalgleish"
|
||||
//refreshedDate="39449.496381365738"
|
||||
//createdVersion="1"
|
||||
//refreshedVersion="2"
|
||||
//recordCount="11"
|
||||
//upgradeOnRefresh="1">
|
||||
|
||||
CP_XML_STREAM() << impl_->definitionsData_.str();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void xlsx_pivot_cache_context::write_records_to(std::wostream & strm)
|
||||
{
|
||||
CP_XML_WRITER(strm)
|
||||
{
|
||||
CP_XML_NODE(L"pivotCacheRecords")
|
||||
{
|
||||
CP_XML_ATTR(L"xmlns", L"http://schemas.openxmlformats.org/spreadsheetml/2006/main");
|
||||
CP_XML_ATTR(L"xmlns:r", L"http://schemas.openxmlformats.org/officeDocument/2006/relationships");
|
||||
|
||||
CP_XML_ATTR(L"count", 0);
|
||||
|
||||
CP_XML_STREAM() << impl_->recordsData_.str();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
xlsx_pivot_cache_context::~xlsx_pivot_cache_context()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -0,0 +1,126 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2017
|
||||
*
|
||||
* This program is a free software product. You can redistribute it and/or
|
||||
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
||||
* version 3 as published by the Free Software Foundation. In accordance with
|
||||
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
||||
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
||||
* of any third-party rights.
|
||||
*
|
||||
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
||||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
||||
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
||||
*
|
||||
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
|
||||
* EU, LV-1021.
|
||||
*
|
||||
* The interactive user interfaces in modified source and object code versions
|
||||
* of the Program must display Appropriate Legal Notices, as required under
|
||||
* Section 5 of the GNU AGPL version 3.
|
||||
*
|
||||
* Pursuant to Section 7(b) of the License you must retain the original Product
|
||||
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
||||
* grant you any rights under trademark law for use of our trademarks.
|
||||
*
|
||||
* All the Product's GUI elements, including illustrations and icon sets, as
|
||||
* well as technical writing content are licensed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
||||
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
*
|
||||
*/
|
||||
#include "xlsx_pivots_context.h"
|
||||
|
||||
#include <boost/make_shared.hpp>
|
||||
#include <simple_xml_writer.h>
|
||||
|
||||
namespace oox {
|
||||
|
||||
class xlsx_pivots_context::Impl
|
||||
{
|
||||
public:
|
||||
struct _pivot_cache
|
||||
{
|
||||
std::wstring definitionsData_;
|
||||
std::wstring recordsData_;
|
||||
};
|
||||
struct _pivot_view
|
||||
{
|
||||
std::wstring data_;
|
||||
int indexCache_;
|
||||
};
|
||||
|
||||
Impl() {}
|
||||
|
||||
std::vector<_pivot_cache> caches_;
|
||||
std::vector<_pivot_view> views_;
|
||||
};
|
||||
|
||||
xlsx_pivots_context::xlsx_pivots_context() : impl_(new xlsx_pivots_context::Impl())
|
||||
{
|
||||
}
|
||||
|
||||
void xlsx_pivots_context::add_cache(std::wstring definitions, std::wstring records)
|
||||
{
|
||||
Impl::_pivot_cache c = {definitions, records};
|
||||
impl_->caches_.push_back(c);
|
||||
}
|
||||
|
||||
int xlsx_pivots_context::get_cache_count()
|
||||
{
|
||||
return (int)impl_->caches_.size();
|
||||
}
|
||||
|
||||
void xlsx_pivots_context::dump_rels_cache(int index, rels & Rels)
|
||||
{
|
||||
if (impl_->caches_[index].recordsData_.empty() == false)
|
||||
{
|
||||
Rels.add(relationship(L"rId1",
|
||||
L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/pivotCacheRecords",
|
||||
L"pivotCacheRecords" + std::to_wstring(index + 1) + L".xml", L""));
|
||||
}
|
||||
}
|
||||
void xlsx_pivots_context::dump_rels_view(int index, rels & Rels)
|
||||
{
|
||||
if (impl_->views_[index].indexCache_ >= 0)
|
||||
{
|
||||
Rels.add(relationship(L"rId1",
|
||||
L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/pivotCacheDefinition",
|
||||
L"../pivotCache/pivotCacheDefinition" + std::to_wstring(impl_->views_[index].indexCache_ + 1) + L".xml", L""));
|
||||
}
|
||||
}
|
||||
void xlsx_pivots_context::write_cache_definitions_to(int index, std::wostream & strm)
|
||||
{
|
||||
strm << impl_->caches_[index].definitionsData_;
|
||||
}
|
||||
|
||||
void xlsx_pivots_context::write_cache_records_to(int index, std::wostream & strm)
|
||||
{
|
||||
strm << impl_->caches_[index].recordsData_;
|
||||
}
|
||||
void xlsx_pivots_context::write_table_view_to(int index, std::wostream & strm)
|
||||
{
|
||||
strm << impl_->views_[index].data_;
|
||||
}
|
||||
int xlsx_pivots_context::add_view(std::wstring table_view, int indexCache)
|
||||
{
|
||||
if (table_view.empty()) return 0;
|
||||
|
||||
Impl::_pivot_view v = {table_view, indexCache};
|
||||
impl_->views_.push_back(v);
|
||||
|
||||
return (int)impl_->views_.size();
|
||||
}
|
||||
|
||||
int xlsx_pivots_context::get_view_count()
|
||||
{
|
||||
return (int)impl_->views_.size();
|
||||
}
|
||||
|
||||
xlsx_pivots_context::~xlsx_pivots_context()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -37,28 +37,25 @@ namespace oox {
|
||||
class xlsx_pivot_cache_context;
|
||||
typedef _CP_PTR(xlsx_pivot_cache_context) xlsx_pivot_cache_context_ptr;
|
||||
|
||||
class xlsx_pivot_cache_context
|
||||
class xlsx_pivots_context
|
||||
{
|
||||
public:
|
||||
xlsx_pivot_cache_context();
|
||||
~xlsx_pivot_cache_context();
|
||||
xlsx_pivots_context();
|
||||
~xlsx_pivots_context();
|
||||
|
||||
std::wostream & definitions();
|
||||
std::wostream & records();
|
||||
int add_view(std::wstring table_view, int indexCache);
|
||||
int get_view_count();
|
||||
|
||||
void write_to(std::wostream & strm);
|
||||
void write_records_to(std::wostream & strm);
|
||||
void add_cache(std::wstring definitions, std::wstring records);
|
||||
int get_cache_count();
|
||||
|
||||
void dump_rels(rels & Rels);
|
||||
void write_cache_definitions_to (int index, std::wostream & strm);
|
||||
void write_cache_records_to (int index, std::wostream & strm);
|
||||
|
||||
static xlsx_pivot_cache_context_ptr create();
|
||||
//void add_rels( bool isInternal,
|
||||
// std::wstring const & rid,
|
||||
// std::wstring const & target,
|
||||
// external_items::Type type);
|
||||
void write_table_view_to (int index, std::wostream & strm);
|
||||
|
||||
bool isRecordsPresent;
|
||||
int index;
|
||||
void dump_rels_cache(int index, rels & Rels);
|
||||
void dump_rels_view (int index, rels & Rels);
|
||||
private:
|
||||
class Impl;
|
||||
_CP_PTR(Impl) impl_;
|
||||
@ -613,6 +613,7 @@ SOURCES += \
|
||||
../XlsFormat/Logic/Biff_structures/DConnStringSequence.cpp \
|
||||
../XlsFormat/Logic/Biff_structures/TxtWf.cpp \
|
||||
../XlsFormat/Logic/Biff_structures/Xnum.cpp \
|
||||
../XlsFormat/Logic/Biff_structures/PivotParsedFormula.cpp \
|
||||
../XlsFormat/Logic/Biff_structures/ODRAW/MSOCR.cpp \
|
||||
../XlsFormat/Logic/Biff_structures/ODRAW/MSOSHADECOLOR.cpp \
|
||||
../XlsFormat/Logic/Biff_structures/ODRAW/OfficeArtBlip.cpp \
|
||||
@ -839,7 +840,7 @@ SOURCES += \
|
||||
../XlsXlsxConverter/xlsx_tablecontext.cpp \
|
||||
../XlsXlsxConverter/xlsx_textcontext.cpp \
|
||||
../XlsXlsxConverter/xlsx_chart_context.cpp \
|
||||
../XlsXlsxConverter/xlsx_pivot_cache_context.cpp \
|
||||
../XlsXlsxConverter/xlsx_pivots_context.cpp \
|
||||
../XlsXlsxConverter/xlsx_comments.cpp \
|
||||
../XlsXlsxConverter/xlsx_comments_context.cpp \
|
||||
|
||||
@ -1597,7 +1598,7 @@ HEADERS += \
|
||||
../XlsXlsxConverter/xlsx_conversion_context.h \
|
||||
../XlsXlsxConverter/xlsx_drawing_context.h \
|
||||
../XlsXlsxConverter/xlsx_drawings.h \
|
||||
../XlsXlsxConverter/xlsx_pivot_cache_context.cpp \
|
||||
../XlsXlsxConverter/xlsx_pivots_context.cpp \
|
||||
../XlsXlsxConverter/xlsx_hyperlinks.h \
|
||||
../XlsXlsxConverter/xlsx_output_xml.h \
|
||||
../XlsXlsxConverter/xlsx_package.h \
|
||||
|
||||
@ -618,6 +618,7 @@
|
||||
#include "../XlsFormat/Logic/Biff_structures/SharedProperty.cpp"
|
||||
#include "../XlsFormat/Logic/Biff_structures/AFDOperBoolErr.cpp"
|
||||
#include "../XlsFormat/Logic/Biff_structures/AFDOperXNum.cpp"
|
||||
#include "../XlsFormat/Logic/Biff_structures/PivotParsedFormula.cpp"
|
||||
|
||||
#include "../XlsFormat/Logic/Biff_unions/AI.cpp"
|
||||
#include "../XlsFormat/Logic/Biff_unions/ATTACHEDLABEL_bu.cpp"
|
||||
|
||||
@ -4237,6 +4237,14 @@
|
||||
RelativePath="..\XlsFormat\Logic\Biff_structures\PictFmlaKey.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\XlsFormat\Logic\Biff_structures\PivotParsedFormula.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\XlsFormat\Logic\Biff_structures\PivotParsedFormula.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\XlsFormat\Logic\Biff_structures\PropertyBag.cpp"
|
||||
>
|
||||
|
||||
@ -417,11 +417,11 @@
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\XlsXlsxConverter\xlsx_pivot_cache_context.cpp"
|
||||
RelativePath="..\XlsXlsxConverter\xlsx_pivots_context.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\XlsXlsxConverter\xlsx_pivot_cache_context.h"
|
||||
RelativePath="..\XlsXlsxConverter\xlsx_pivots_context.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,2 +0,0 @@
|
||||
@CMAKE_CONFIGURABLE_FILE_CONTENT@
|
||||
|
||||
@ -1,535 +0,0 @@
|
||||
/***************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
*
|
||||
* This software is licensed as described in the file COPYING, which
|
||||
* you should have received as part of this distribution. The terms
|
||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
*
|
||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
* copies of the Software, and permit persons to whom the Software is
|
||||
* furnished to do so, under the terms of the COPYING file.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
***************************************************************************/
|
||||
#ifdef TIME_WITH_SYS_TIME
|
||||
/* Time with sys/time test */
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/time.h>
|
||||
#include <time.h>
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
if ((struct tm *) 0)
|
||||
return 0;
|
||||
;
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_FCNTL_O_NONBLOCK
|
||||
|
||||
/* headers for FCNTL_O_NONBLOCK test */
|
||||
#include <sys/types.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
/* */
|
||||
#if defined(sun) || defined(__sun__) || \
|
||||
defined(__SUNPRO_C) || defined(__SUNPRO_CC)
|
||||
# if defined(__SVR4) || defined(__srv4__)
|
||||
# define PLATFORM_SOLARIS
|
||||
# else
|
||||
# define PLATFORM_SUNOS4
|
||||
# endif
|
||||
#endif
|
||||
#if (defined(_AIX) || defined(__xlC__)) && !defined(_AIX41)
|
||||
# define PLATFORM_AIX_V3
|
||||
#endif
|
||||
/* */
|
||||
#if defined(PLATFORM_SUNOS4) || defined(PLATFORM_AIX_V3) || defined(__BEOS__)
|
||||
#error "O_NONBLOCK does not work on this platform"
|
||||
#endif
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
/* O_NONBLOCK source test */
|
||||
int flags = 0;
|
||||
if(0 != fcntl(0, F_SETFL, flags | O_NONBLOCK))
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* tests for gethostbyaddr_r or gethostbyname_r */
|
||||
#if defined(HAVE_GETHOSTBYADDR_R_5_REENTRANT) || \
|
||||
defined(HAVE_GETHOSTBYADDR_R_7_REENTRANT) || \
|
||||
defined(HAVE_GETHOSTBYADDR_R_8_REENTRANT) || \
|
||||
defined(HAVE_GETHOSTBYNAME_R_3_REENTRANT) || \
|
||||
defined(HAVE_GETHOSTBYNAME_R_5_REENTRANT) || \
|
||||
defined(HAVE_GETHOSTBYNAME_R_6_REENTRANT)
|
||||
# define _REENTRANT
|
||||
/* no idea whether _REENTRANT is always set, just invent a new flag */
|
||||
# define TEST_GETHOSTBYFOO_REENTRANT
|
||||
#endif
|
||||
#if defined(HAVE_GETHOSTBYADDR_R_5) || \
|
||||
defined(HAVE_GETHOSTBYADDR_R_7) || \
|
||||
defined(HAVE_GETHOSTBYADDR_R_8) || \
|
||||
defined(HAVE_GETHOSTBYNAME_R_3) || \
|
||||
defined(HAVE_GETHOSTBYNAME_R_5) || \
|
||||
defined(HAVE_GETHOSTBYNAME_R_6) || \
|
||||
defined(TEST_GETHOSTBYFOO_REENTRANT)
|
||||
#include <sys/types.h>
|
||||
#include <netdb.h>
|
||||
int main(void)
|
||||
{
|
||||
char *address = "example.com";
|
||||
int length = 0;
|
||||
int type = 0;
|
||||
struct hostent h;
|
||||
int rc = 0;
|
||||
#if defined(HAVE_GETHOSTBYADDR_R_5) || \
|
||||
defined(HAVE_GETHOSTBYADDR_R_5_REENTRANT) || \
|
||||
\
|
||||
defined(HAVE_GETHOSTBYNAME_R_3) || \
|
||||
defined(HAVE_GETHOSTBYNAME_R_3_REENTRANT)
|
||||
struct hostent_data hdata;
|
||||
#elif defined(HAVE_GETHOSTBYADDR_R_7) || \
|
||||
defined(HAVE_GETHOSTBYADDR_R_7_REENTRANT) || \
|
||||
defined(HAVE_GETHOSTBYADDR_R_8) || \
|
||||
defined(HAVE_GETHOSTBYADDR_R_8_REENTRANT) || \
|
||||
\
|
||||
defined(HAVE_GETHOSTBYNAME_R_5) || \
|
||||
defined(HAVE_GETHOSTBYNAME_R_5_REENTRANT) || \
|
||||
defined(HAVE_GETHOSTBYNAME_R_6) || \
|
||||
defined(HAVE_GETHOSTBYNAME_R_6_REENTRANT)
|
||||
char buffer[8192];
|
||||
int h_errnop;
|
||||
struct hostent *hp;
|
||||
#endif
|
||||
|
||||
#ifndef gethostbyaddr_r
|
||||
(void)gethostbyaddr_r;
|
||||
#endif
|
||||
|
||||
#if defined(HAVE_GETHOSTBYADDR_R_5) || \
|
||||
defined(HAVE_GETHOSTBYADDR_R_5_REENTRANT)
|
||||
rc = gethostbyaddr_r(address, length, type, &h, &hdata);
|
||||
#elif defined(HAVE_GETHOSTBYADDR_R_7) || \
|
||||
defined(HAVE_GETHOSTBYADDR_R_7_REENTRANT)
|
||||
hp = gethostbyaddr_r(address, length, type, &h, buffer, 8192, &h_errnop);
|
||||
(void)hp;
|
||||
#elif defined(HAVE_GETHOSTBYADDR_R_8) || \
|
||||
defined(HAVE_GETHOSTBYADDR_R_8_REENTRANT)
|
||||
rc = gethostbyaddr_r(address, length, type, &h, buffer, 8192, &hp, &h_errnop);
|
||||
#endif
|
||||
|
||||
#if defined(HAVE_GETHOSTBYNAME_R_3) || \
|
||||
defined(HAVE_GETHOSTBYNAME_R_3_REENTRANT)
|
||||
rc = gethostbyname_r(address, &h, &hdata);
|
||||
#elif defined(HAVE_GETHOSTBYNAME_R_5) || \
|
||||
defined(HAVE_GETHOSTBYNAME_R_5_REENTRANT)
|
||||
rc = gethostbyname_r(address, &h, buffer, 8192, 0, &h_errnop);
|
||||
(void)hp; /* not used for test */
|
||||
#elif defined(HAVE_GETHOSTBYNAME_R_6) || \
|
||||
defined(HAVE_GETHOSTBYNAME_R_6_REENTRANT)
|
||||
rc = gethostbyname_r(address, &h, buffer, 8192, &hp, &h_errnop);
|
||||
#endif
|
||||
|
||||
(void)length;
|
||||
(void)type;
|
||||
(void)rc;
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_SOCKLEN_T
|
||||
#ifdef _WIN32
|
||||
#include <ws2tcpip.h>
|
||||
#else
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#endif
|
||||
int
|
||||
main ()
|
||||
{
|
||||
if ((socklen_t *) 0)
|
||||
return 0;
|
||||
if (sizeof (socklen_t))
|
||||
return 0;
|
||||
;
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
#ifdef HAVE_IN_ADDR_T
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <arpa/inet.h>
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
if ((in_addr_t *) 0)
|
||||
return 0;
|
||||
if (sizeof (in_addr_t))
|
||||
return 0;
|
||||
;
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_BOOL_T
|
||||
#ifdef HAVE_SYS_TYPES_H
|
||||
#include <sys/types.h>
|
||||
#endif
|
||||
#ifdef HAVE_STDBOOL_H
|
||||
#include <stdbool.h>
|
||||
#endif
|
||||
int
|
||||
main ()
|
||||
{
|
||||
if (sizeof (bool *) )
|
||||
return 0;
|
||||
;
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef STDC_HEADERS
|
||||
#include <stdlib.h>
|
||||
#include <stdarg.h>
|
||||
#include <string.h>
|
||||
#include <float.h>
|
||||
int main() { return 0; }
|
||||
#endif
|
||||
#ifdef RETSIGTYPE_TEST
|
||||
#include <sys/types.h>
|
||||
#include <signal.h>
|
||||
#ifdef signal
|
||||
# undef signal
|
||||
#endif
|
||||
#ifdef __cplusplus
|
||||
extern "C" void (*signal (int, void (*)(int)))(int);
|
||||
#else
|
||||
void (*signal ()) ();
|
||||
#endif
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
#ifdef HAVE_INET_NTOA_R_DECL
|
||||
#include <arpa/inet.h>
|
||||
|
||||
typedef void (*func_type)();
|
||||
|
||||
int main()
|
||||
{
|
||||
#ifndef inet_ntoa_r
|
||||
func_type func;
|
||||
func = (func_type)inet_ntoa_r;
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
#ifdef HAVE_INET_NTOA_R_DECL_REENTRANT
|
||||
#define _REENTRANT
|
||||
#include <arpa/inet.h>
|
||||
|
||||
typedef void (*func_type)();
|
||||
|
||||
int main()
|
||||
{
|
||||
#ifndef inet_ntoa_r
|
||||
func_type func;
|
||||
func = (func_type)&inet_ntoa_r;
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
#ifdef HAVE_GETADDRINFO
|
||||
#include <netdb.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
|
||||
int main(void) {
|
||||
struct addrinfo hints, *ai;
|
||||
int error;
|
||||
|
||||
memset(&hints, 0, sizeof(hints));
|
||||
hints.ai_family = AF_UNSPEC;
|
||||
hints.ai_socktype = SOCK_STREAM;
|
||||
#ifndef getaddrinfo
|
||||
(void)getaddrinfo;
|
||||
#endif
|
||||
error = getaddrinfo("127.0.0.1", "8080", &hints, &ai);
|
||||
if (error) {
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
#ifdef HAVE_FILE_OFFSET_BITS
|
||||
#ifdef _FILE_OFFSET_BITS
|
||||
#undef _FILE_OFFSET_BITS
|
||||
#endif
|
||||
#define _FILE_OFFSET_BITS 64
|
||||
#include <sys/types.h>
|
||||
/* Check that off_t can represent 2**63 - 1 correctly.
|
||||
We can't simply define LARGE_OFF_T to be 9223372036854775807,
|
||||
since some C++ compilers masquerading as C compilers
|
||||
incorrectly reject 9223372036854775807. */
|
||||
#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
|
||||
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
|
||||
&& LARGE_OFF_T % 2147483647 == 1)
|
||||
? 1 : -1];
|
||||
int main () { ; return 0; }
|
||||
#endif
|
||||
#ifdef HAVE_IOCTLSOCKET
|
||||
/* includes start */
|
||||
#ifdef HAVE_WINDOWS_H
|
||||
# ifndef WIN32_LEAN_AND_MEAN
|
||||
# define WIN32_LEAN_AND_MEAN
|
||||
# endif
|
||||
# include <windows.h>
|
||||
# ifdef HAVE_WINSOCK2_H
|
||||
# include <winsock2.h>
|
||||
# else
|
||||
# ifdef HAVE_WINSOCK_H
|
||||
# include <winsock.h>
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
|
||||
/* ioctlsocket source code */
|
||||
int socket;
|
||||
unsigned long flags = ioctlsocket(socket, FIONBIO, &flags);
|
||||
|
||||
;
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
#ifdef HAVE_IOCTLSOCKET_CAMEL
|
||||
/* includes start */
|
||||
#ifdef HAVE_WINDOWS_H
|
||||
# ifndef WIN32_LEAN_AND_MEAN
|
||||
# define WIN32_LEAN_AND_MEAN
|
||||
# endif
|
||||
# include <windows.h>
|
||||
# ifdef HAVE_WINSOCK2_H
|
||||
# include <winsock2.h>
|
||||
# else
|
||||
# ifdef HAVE_WINSOCK_H
|
||||
# include <winsock.h>
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
|
||||
/* IoctlSocket source code */
|
||||
if(0 != IoctlSocket(0, 0, 0))
|
||||
return 1;
|
||||
;
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
#ifdef HAVE_IOCTLSOCKET_CAMEL_FIONBIO
|
||||
/* includes start */
|
||||
#ifdef HAVE_WINDOWS_H
|
||||
# ifndef WIN32_LEAN_AND_MEAN
|
||||
# define WIN32_LEAN_AND_MEAN
|
||||
# endif
|
||||
# include <windows.h>
|
||||
# ifdef HAVE_WINSOCK2_H
|
||||
# include <winsock2.h>
|
||||
# else
|
||||
# ifdef HAVE_WINSOCK_H
|
||||
# include <winsock.h>
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
|
||||
/* IoctlSocket source code */
|
||||
long flags = 0;
|
||||
if(0 != ioctlsocket(0, FIONBIO, &flags))
|
||||
return 1;
|
||||
;
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
#ifdef HAVE_IOCTLSOCKET_FIONBIO
|
||||
/* includes start */
|
||||
#ifdef HAVE_WINDOWS_H
|
||||
# ifndef WIN32_LEAN_AND_MEAN
|
||||
# define WIN32_LEAN_AND_MEAN
|
||||
# endif
|
||||
# include <windows.h>
|
||||
# ifdef HAVE_WINSOCK2_H
|
||||
# include <winsock2.h>
|
||||
# else
|
||||
# ifdef HAVE_WINSOCK_H
|
||||
# include <winsock.h>
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
|
||||
int flags = 0;
|
||||
if(0 != ioctlsocket(0, FIONBIO, &flags))
|
||||
return 1;
|
||||
|
||||
;
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
#ifdef HAVE_IOCTL_FIONBIO
|
||||
/* headers for FIONBIO test */
|
||||
/* includes start */
|
||||
#ifdef HAVE_SYS_TYPES_H
|
||||
# include <sys/types.h>
|
||||
#endif
|
||||
#ifdef HAVE_UNISTD_H
|
||||
# include <unistd.h>
|
||||
#endif
|
||||
#ifdef HAVE_SYS_SOCKET_H
|
||||
# include <sys/socket.h>
|
||||
#endif
|
||||
#ifdef HAVE_SYS_IOCTL_H
|
||||
# include <sys/ioctl.h>
|
||||
#endif
|
||||
#ifdef HAVE_STROPTS_H
|
||||
# include <stropts.h>
|
||||
#endif
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
|
||||
int flags = 0;
|
||||
if(0 != ioctl(0, FIONBIO, &flags))
|
||||
return 1;
|
||||
|
||||
;
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
#ifdef HAVE_IOCTL_SIOCGIFADDR
|
||||
/* headers for FIONBIO test */
|
||||
/* includes start */
|
||||
#ifdef HAVE_SYS_TYPES_H
|
||||
# include <sys/types.h>
|
||||
#endif
|
||||
#ifdef HAVE_UNISTD_H
|
||||
# include <unistd.h>
|
||||
#endif
|
||||
#ifdef HAVE_SYS_SOCKET_H
|
||||
# include <sys/socket.h>
|
||||
#endif
|
||||
#ifdef HAVE_SYS_IOCTL_H
|
||||
# include <sys/ioctl.h>
|
||||
#endif
|
||||
#ifdef HAVE_STROPTS_H
|
||||
# include <stropts.h>
|
||||
#endif
|
||||
#include <net/if.h>
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
struct ifreq ifr;
|
||||
if(0 != ioctl(0, SIOCGIFADDR, &ifr))
|
||||
return 1;
|
||||
|
||||
;
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
#ifdef HAVE_SETSOCKOPT_SO_NONBLOCK
|
||||
/* includes start */
|
||||
#ifdef HAVE_WINDOWS_H
|
||||
# ifndef WIN32_LEAN_AND_MEAN
|
||||
# define WIN32_LEAN_AND_MEAN
|
||||
# endif
|
||||
# include <windows.h>
|
||||
# ifdef HAVE_WINSOCK2_H
|
||||
# include <winsock2.h>
|
||||
# else
|
||||
# ifdef HAVE_WINSOCK_H
|
||||
# include <winsock.h>
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
/* includes start */
|
||||
#ifdef HAVE_SYS_TYPES_H
|
||||
# include <sys/types.h>
|
||||
#endif
|
||||
#ifdef HAVE_SYS_SOCKET_H
|
||||
# include <sys/socket.h>
|
||||
#endif
|
||||
/* includes end */
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
if(0 != setsockopt(0, SOL_SOCKET, SO_NONBLOCK, 0, 0))
|
||||
return 1;
|
||||
;
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
#ifdef HAVE_GLIBC_STRERROR_R
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
int
|
||||
main () {
|
||||
char buffer[1024]; /* big enough to play with */
|
||||
char *string =
|
||||
strerror_r(EACCES, buffer, sizeof(buffer));
|
||||
/* this should've returned a string */
|
||||
if(!string || !string[0])
|
||||
return 99;
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
#ifdef HAVE_POSIX_STRERROR_R
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
int
|
||||
main () {
|
||||
char buffer[1024]; /* big enough to play with */
|
||||
int error =
|
||||
strerror_r(EACCES, buffer, sizeof(buffer));
|
||||
/* This should've returned zero, and written an error string in the
|
||||
buffer.*/
|
||||
if(!buffer[0] || error)
|
||||
return 99;
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
@ -1,289 +0,0 @@
|
||||
# - Try to find the GSS Kerberos library
|
||||
# Once done this will define
|
||||
#
|
||||
# GSS_ROOT_DIR - Set this variable to the root installation of GSS
|
||||
#
|
||||
# Read-Only variables:
|
||||
# GSS_FOUND - system has the Heimdal library
|
||||
# GSS_FLAVOUR - "MIT" or "Heimdal" if anything found.
|
||||
# GSS_INCLUDE_DIR - the Heimdal include directory
|
||||
# GSS_LIBRARIES - The libraries needed to use GSS
|
||||
# GSS_LINK_DIRECTORIES - Directories to add to linker search path
|
||||
# GSS_LINKER_FLAGS - Additional linker flags
|
||||
# GSS_COMPILER_FLAGS - Additional compiler flags
|
||||
# GSS_VERSION - This is set to version advertised by pkg-config or read from manifest.
|
||||
# In case the library is found but no version info availabe it'll be set to "unknown"
|
||||
|
||||
set(_MIT_MODNAME mit-krb5-gssapi)
|
||||
set(_HEIMDAL_MODNAME heimdal-gssapi)
|
||||
|
||||
include(CheckIncludeFile)
|
||||
include(CheckIncludeFiles)
|
||||
include(CheckTypeSize)
|
||||
|
||||
set(_GSS_ROOT_HINTS
|
||||
"${GSS_ROOT_DIR}"
|
||||
"$ENV{GSS_ROOT_DIR}"
|
||||
)
|
||||
|
||||
# try to find library using system pkg-config if user didn't specify root dir
|
||||
if(NOT GSS_ROOT_DIR AND NOT "$ENV{GSS_ROOT_DIR}")
|
||||
if(UNIX)
|
||||
find_package(PkgConfig QUIET)
|
||||
pkg_search_module(_GSS_PKG ${_MIT_MODNAME} ${_HEIMDAL_MODNAME})
|
||||
list(APPEND _GSS_ROOT_HINTS "${_GSS_PKG_PREFIX}")
|
||||
elseif(WIN32)
|
||||
list(APPEND _GSS_ROOT_HINTS "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MIT\\Kerberos;InstallDir]")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(NOT _GSS_FOUND) #not found by pkg-config. Let's take more traditional approach.
|
||||
find_file(_GSS_CONFIGURE_SCRIPT
|
||||
NAMES
|
||||
"krb5-config"
|
||||
HINTS
|
||||
${_GSS_ROOT_HINTS}
|
||||
PATH_SUFFIXES
|
||||
bin
|
||||
NO_CMAKE_PATH
|
||||
NO_CMAKE_ENVIRONMENT_PATH
|
||||
)
|
||||
|
||||
# if not found in user-supplied directories, maybe system knows better
|
||||
find_file(_GSS_CONFIGURE_SCRIPT
|
||||
NAMES
|
||||
"krb5-config"
|
||||
PATH_SUFFIXES
|
||||
bin
|
||||
)
|
||||
|
||||
if(_GSS_CONFIGURE_SCRIPT)
|
||||
execute_process(
|
||||
COMMAND ${_GSS_CONFIGURE_SCRIPT} "--cflags" "gssapi"
|
||||
OUTPUT_VARIABLE _GSS_CFLAGS
|
||||
RESULT_VARIABLE _GSS_CONFIGURE_FAILED
|
||||
)
|
||||
message(STATUS "CFLAGS: ${_GSS_CFLAGS}")
|
||||
if(NOT _GSS_CONFIGURE_FAILED) # 0 means success
|
||||
# should also work in an odd case when multiple directories are given
|
||||
string(STRIP "${_GSS_CFLAGS}" _GSS_CFLAGS)
|
||||
string(REGEX REPLACE " +-I" ";" _GSS_CFLAGS "${_GSS_CFLAGS}")
|
||||
string(REGEX REPLACE " +-([^I][^ \\t;]*)" ";-\\1"_GSS_CFLAGS "${_GSS_CFLAGS}")
|
||||
|
||||
foreach(_flag ${_GSS_CFLAGS})
|
||||
if(_flag MATCHES "^-I.*")
|
||||
string(REGEX REPLACE "^-I" "" _val "${_flag}")
|
||||
list(APPEND _GSS_INCLUDE_DIR "${_val}")
|
||||
else()
|
||||
list(APPEND _GSS_COMPILER_FLAGS "${_flag}")
|
||||
endif()
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
execute_process(
|
||||
COMMAND ${_GSS_CONFIGURE_SCRIPT} "--libs" "gssapi"
|
||||
OUTPUT_VARIABLE _GSS_LIB_FLAGS
|
||||
RESULT_VARIABLE _GSS_CONFIGURE_FAILED
|
||||
)
|
||||
message(STATUS "LDFLAGS: ${_GSS_LIB_FLAGS}")
|
||||
if(NOT _GSS_CONFIGURE_FAILED) # 0 means success
|
||||
# this script gives us libraries and link directories. Blah. We have to deal with it.
|
||||
string(STRIP "${_GSS_LIB_FLAGS}" _GSS_LIB_FLAGS)
|
||||
string(REGEX REPLACE " +-(L|l)" ";-\\1" _GSS_LIB_FLAGS "${_GSS_LIB_FLAGS}")
|
||||
string(REGEX REPLACE " +-([^Ll][^ \\t;]*)" ";-\\1"_GSS_LIB_FLAGS "${_GSS_LIB_FLAGS}")
|
||||
|
||||
foreach(_flag ${_GSS_LIB_FLAGS})
|
||||
if(_flag MATCHES "^-l.*")
|
||||
string(REGEX REPLACE "^-l" "" _val "${_flag}")
|
||||
list(APPEND _GSS_LIBRARIES "${_val}")
|
||||
elseif(_flag MATCHES "^-L.*")
|
||||
string(REGEX REPLACE "^-L" "" _val "${_flag}")
|
||||
list(APPEND _GSS_LINK_DIRECTORIES "${_val}")
|
||||
else()
|
||||
list(APPEND _GSS_LINKER_FLAGS "${_flag}")
|
||||
endif()
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
|
||||
execute_process(
|
||||
COMMAND ${_GSS_CONFIGURE_SCRIPT} "--version"
|
||||
OUTPUT_VARIABLE _GSS_VERSION
|
||||
RESULT_VARIABLE _GSS_CONFIGURE_FAILED
|
||||
)
|
||||
|
||||
# older versions may not have the "--version" parameter. In this case we just don't care.
|
||||
if(_GSS_CONFIGURE_FAILED)
|
||||
set(_GSS_VERSION 0)
|
||||
endif()
|
||||
|
||||
|
||||
execute_process(
|
||||
COMMAND ${_GSS_CONFIGURE_SCRIPT} "--vendor"
|
||||
OUTPUT_VARIABLE _GSS_VENDOR
|
||||
RESULT_VARIABLE _GSS_CONFIGURE_FAILED
|
||||
)
|
||||
|
||||
# older versions may not have the "--vendor" parameter. In this case we just don't care.
|
||||
if(_GSS_CONFIGURE_FAILED)
|
||||
set(GSS_FLAVOUR "Heimdal") # most probably, shouldn't really matter
|
||||
else()
|
||||
if(_GSS_VENDOR MATCHES ".*H|heimdal.*")
|
||||
set(GSS_FLAVOUR "Heimdal")
|
||||
else()
|
||||
set(GSS_FLAVOUR "MIT")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
else() # either there is no config script or we are on platform that doesn't provide one (Windows?)
|
||||
|
||||
find_path(_GSS_INCLUDE_DIR
|
||||
NAMES
|
||||
"gssapi/gssapi.h"
|
||||
HINTS
|
||||
${_GSS_ROOT_HINTS}
|
||||
PATH_SUFFIXES
|
||||
include
|
||||
inc
|
||||
)
|
||||
|
||||
if(_GSS_INCLUDE_DIR) #jay, we've found something
|
||||
set(CMAKE_REQUIRED_INCLUDES "${_GSS_INCLUDE_DIR}")
|
||||
check_include_files( "gssapi/gssapi_generic.h;gssapi/gssapi_krb5.h" _GSS_HAVE_MIT_HEADERS)
|
||||
|
||||
if(_GSS_HAVE_MIT_HEADERS)
|
||||
set(GSS_FLAVOUR "MIT")
|
||||
else()
|
||||
# prevent compiling the header - just check if we can include it
|
||||
set(CMAKE_REQUIRED_DEFINITIONS "-D__ROKEN_H__")
|
||||
check_include_file( "roken.h" _GSS_HAVE_ROKEN_H)
|
||||
|
||||
check_include_file( "heimdal/roken.h" _GSS_HAVE_HEIMDAL_ROKEN_H)
|
||||
if(_GSS_HAVE_ROKEN_H OR _GSS_HAVE_HEIMDAL_ROKEN_H)
|
||||
set(GSS_FLAVOUR "Heimdal")
|
||||
endif()
|
||||
set(CMAKE_REQUIRED_DEFINITIONS "")
|
||||
endif()
|
||||
else()
|
||||
# I'm not convienced if this is the right way but this is what autotools do at the moment
|
||||
find_path(_GSS_INCLUDE_DIR
|
||||
NAMES
|
||||
"gssapi.h"
|
||||
HINTS
|
||||
${_GSS_ROOT_HINTS}
|
||||
PATH_SUFFIXES
|
||||
include
|
||||
inc
|
||||
)
|
||||
|
||||
if(_GSS_INCLUDE_DIR)
|
||||
set(GSS_FLAVOUR "Heimdal")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# if we have headers, check if we can link libraries
|
||||
if(GSS_FLAVOUR)
|
||||
set(_GSS_LIBDIR_SUFFIXES "")
|
||||
set(_GSS_LIBDIR_HINTS ${_GSS_ROOT_HINTS})
|
||||
get_filename_component(_GSS_CALCULATED_POTENTIAL_ROOT "${_GSS_INCLUDE_DIR}" PATH)
|
||||
list(APPEND _GSS_LIBDIR_HINTS ${_GSS_CALCULATED_POTENTIAL_ROOT})
|
||||
|
||||
if(WIN32)
|
||||
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||
list(APPEND _GSS_LIBDIR_SUFFIXES "lib/AMD64")
|
||||
if(GSS_FLAVOUR STREQUAL "MIT")
|
||||
set(_GSS_LIBNAME "gssapi64")
|
||||
else()
|
||||
set(_GSS_LIBNAME "libgssapi")
|
||||
endif()
|
||||
else()
|
||||
list(APPEND _GSS_LIBDIR_SUFFIXES "lib/i386")
|
||||
if(GSS_FLAVOUR STREQUAL "MIT")
|
||||
set(_GSS_LIBNAME "gssapi32")
|
||||
else()
|
||||
set(_GSS_LIBNAME "libgssapi")
|
||||
endif()
|
||||
endif()
|
||||
else()
|
||||
list(APPEND _GSS_LIBDIR_SUFFIXES "lib;lib64") # those suffixes are not checked for HINTS
|
||||
if(GSS_FLAVOUR STREQUAL "MIT")
|
||||
set(_GSS_LIBNAME "gssapi_krb5")
|
||||
else()
|
||||
set(_GSS_LIBNAME "gssapi")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
find_library(_GSS_LIBRARIES
|
||||
NAMES
|
||||
${_GSS_LIBNAME}
|
||||
HINTS
|
||||
${_GSS_LIBDIR_HINTS}
|
||||
PATH_SUFFIXES
|
||||
${_GSS_LIBDIR_SUFFIXES}
|
||||
)
|
||||
|
||||
endif()
|
||||
|
||||
endif()
|
||||
else()
|
||||
if(_GSS_PKG_${_MIT_MODNAME}_VERSION)
|
||||
set(GSS_FLAVOUR "MIT")
|
||||
set(_GSS_VERSION _GSS_PKG_${_MIT_MODNAME}_VERSION)
|
||||
else()
|
||||
set(GSS_FLAVOUR "Heimdal")
|
||||
set(_GSS_VERSION _GSS_PKG_${_MIT_HEIMDAL}_VERSION)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
set(GSS_INCLUDE_DIR ${_GSS_INCLUDE_DIR})
|
||||
set(GSS_LIBRARIES ${_GSS_LIBRARIES})
|
||||
set(GSS_LINK_DIRECTORIES ${_GSS_LINK_DIRECTORIES})
|
||||
set(GSS_LINKER_FLAGS ${_GSS_LINKER_FLAGS})
|
||||
set(GSS_COMPILER_FLAGS ${_GSS_COMPILER_FLAGS})
|
||||
set(GSS_VERSION ${_GSS_VERSION})
|
||||
|
||||
if(GSS_FLAVOUR)
|
||||
|
||||
if(NOT GSS_VERSION AND GSS_FLAVOUR STREQUAL "Heimdal")
|
||||
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||
set(HEIMDAL_MANIFEST_FILE "Heimdal.Application.amd64.manifest")
|
||||
else()
|
||||
set(HEIMDAL_MANIFEST_FILE "Heimdal.Application.x86.manifest")
|
||||
endif()
|
||||
|
||||
if(EXISTS "${GSS_INCLUDE_DIR}/${HEIMDAL_MANIFEST_FILE}")
|
||||
file(STRINGS "${GSS_INCLUDE_DIR}/${HEIMDAL_MANIFEST_FILE}" heimdal_version_str
|
||||
REGEX "^.*version=\"[0-9]\\.[^\"]+\".*$")
|
||||
|
||||
string(REGEX MATCH "[0-9]\\.[^\"]+"
|
||||
GSS_VERSION "${heimdal_version_str}")
|
||||
endif()
|
||||
|
||||
if(NOT GSS_VERSION)
|
||||
set(GSS_VERSION "Heimdal Unknown")
|
||||
endif()
|
||||
elseif(NOT GSS_VERSION AND GSS_FLAVOUR STREQUAL "MIT")
|
||||
get_filename_component(_MIT_VERSION "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MIT\\Kerberos\\SDK\\CurrentVersion;VersionString]" NAME CACHE)
|
||||
if(WIN32 AND _MIT_VERSION)
|
||||
set(GSS_VERSION "${_MIT_VERSION}")
|
||||
else()
|
||||
set(GSS_VERSION "MIT Unknown")
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
|
||||
set(_GSS_REQUIRED_VARS GSS_LIBRARIES GSS_FLAVOUR)
|
||||
|
||||
find_package_handle_standard_args(GSS
|
||||
REQUIRED_VARS
|
||||
${_GSS_REQUIRED_VARS}
|
||||
VERSION_VAR
|
||||
GSS_VERSION
|
||||
FAIL_MESSAGE
|
||||
"Could NOT find GSS, try to set the path to GSS root folder in the system variable GSS_ROOT_DIR"
|
||||
)
|
||||
|
||||
mark_as_advanced(GSS_INCLUDE_DIR GSS_LIBRARIES)
|
||||
@ -1,95 +0,0 @@
|
||||
#File defines convenience macros for available feature testing
|
||||
|
||||
# This macro checks if the symbol exists in the library and if it
|
||||
# does, it prepends library to the list. It is intended to be called
|
||||
# multiple times with a sequence of possibly dependent libraries in
|
||||
# order of least-to-most-dependent. Some libraries depend on others
|
||||
# to link correctly.
|
||||
macro(CHECK_LIBRARY_EXISTS_CONCAT LIBRARY SYMBOL VARIABLE)
|
||||
check_library_exists("${LIBRARY};${CURL_LIBS}" ${SYMBOL} "${CMAKE_LIBRARY_PATH}"
|
||||
${VARIABLE})
|
||||
if(${VARIABLE})
|
||||
set(CURL_LIBS ${LIBRARY} ${CURL_LIBS})
|
||||
endif(${VARIABLE})
|
||||
endmacro(CHECK_LIBRARY_EXISTS_CONCAT)
|
||||
|
||||
# Check if header file exists and add it to the list.
|
||||
# This macro is intended to be called multiple times with a sequence of
|
||||
# possibly dependent header files. Some headers depend on others to be
|
||||
# compiled correctly.
|
||||
macro(CHECK_INCLUDE_FILE_CONCAT FILE VARIABLE)
|
||||
check_include_files("${CURL_INCLUDES};${FILE}" ${VARIABLE})
|
||||
if(${VARIABLE})
|
||||
set(CURL_INCLUDES ${CURL_INCLUDES} ${FILE})
|
||||
set(CURL_TEST_DEFINES "${CURL_TEST_DEFINES} -D${VARIABLE}")
|
||||
endif(${VARIABLE})
|
||||
endmacro(CHECK_INCLUDE_FILE_CONCAT)
|
||||
|
||||
# For other curl specific tests, use this macro.
|
||||
macro(CURL_INTERNAL_TEST CURL_TEST)
|
||||
if(NOT DEFINED "${CURL_TEST}")
|
||||
set(MACRO_CHECK_FUNCTION_DEFINITIONS
|
||||
"-D${CURL_TEST} ${CURL_TEST_DEFINES} ${CMAKE_REQUIRED_FLAGS}")
|
||||
if(CMAKE_REQUIRED_LIBRARIES)
|
||||
set(CURL_TEST_ADD_LIBRARIES
|
||||
"-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}")
|
||||
endif(CMAKE_REQUIRED_LIBRARIES)
|
||||
|
||||
message(STATUS "Performing Curl Test ${CURL_TEST}")
|
||||
try_compile(${CURL_TEST}
|
||||
${CMAKE_BINARY_DIR}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/CMake/CurlTests.c
|
||||
CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
|
||||
"${CURL_TEST_ADD_LIBRARIES}"
|
||||
OUTPUT_VARIABLE OUTPUT)
|
||||
if(${CURL_TEST})
|
||||
set(${CURL_TEST} 1 CACHE INTERNAL "Curl test ${FUNCTION}")
|
||||
message(STATUS "Performing Curl Test ${CURL_TEST} - Success")
|
||||
file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
|
||||
"Performing Curl Test ${CURL_TEST} passed with the following output:\n"
|
||||
"${OUTPUT}\n")
|
||||
else(${CURL_TEST})
|
||||
message(STATUS "Performing Curl Test ${CURL_TEST} - Failed")
|
||||
set(${CURL_TEST} "" CACHE INTERNAL "Curl test ${FUNCTION}")
|
||||
file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
|
||||
"Performing Curl Test ${CURL_TEST} failed with the following output:\n"
|
||||
"${OUTPUT}\n")
|
||||
endif(${CURL_TEST})
|
||||
endif()
|
||||
endmacro(CURL_INTERNAL_TEST)
|
||||
|
||||
macro(CURL_INTERNAL_TEST_RUN CURL_TEST)
|
||||
if(NOT DEFINED "${CURL_TEST}_COMPILE")
|
||||
set(MACRO_CHECK_FUNCTION_DEFINITIONS
|
||||
"-D${CURL_TEST} ${CMAKE_REQUIRED_FLAGS}")
|
||||
if(CMAKE_REQUIRED_LIBRARIES)
|
||||
set(CURL_TEST_ADD_LIBRARIES
|
||||
"-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}")
|
||||
endif(CMAKE_REQUIRED_LIBRARIES)
|
||||
|
||||
message(STATUS "Performing Curl Test ${CURL_TEST}")
|
||||
try_run(${CURL_TEST} ${CURL_TEST}_COMPILE
|
||||
${CMAKE_BINARY_DIR}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/CMake/CurlTests.c
|
||||
CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
|
||||
"${CURL_TEST_ADD_LIBRARIES}"
|
||||
OUTPUT_VARIABLE OUTPUT)
|
||||
if(${CURL_TEST}_COMPILE AND NOT ${CURL_TEST})
|
||||
set(${CURL_TEST} 1 CACHE INTERNAL "Curl test ${FUNCTION}")
|
||||
message(STATUS "Performing Curl Test ${CURL_TEST} - Success")
|
||||
else(${CURL_TEST}_COMPILE AND NOT ${CURL_TEST})
|
||||
message(STATUS "Performing Curl Test ${CURL_TEST} - Failed")
|
||||
set(${CURL_TEST} "" CACHE INTERNAL "Curl test ${FUNCTION}")
|
||||
file(APPEND "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log"
|
||||
"Performing Curl Test ${CURL_TEST} failed with the following output:\n"
|
||||
"${OUTPUT}")
|
||||
if(${CURL_TEST}_COMPILE)
|
||||
file(APPEND
|
||||
"${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log"
|
||||
"There was a problem running this test\n")
|
||||
endif(${CURL_TEST}_COMPILE)
|
||||
file(APPEND "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log"
|
||||
"\n\n")
|
||||
endif(${CURL_TEST}_COMPILE AND NOT ${CURL_TEST})
|
||||
endif()
|
||||
endmacro(CURL_INTERNAL_TEST_RUN)
|
||||
@ -1,229 +0,0 @@
|
||||
include(CheckCSourceCompiles)
|
||||
# The begin of the sources (macros and includes)
|
||||
set(_source_epilogue "#undef inline")
|
||||
|
||||
macro(add_header_include check header)
|
||||
if(${check})
|
||||
set(_source_epilogue "${_source_epilogue}\n#include <${header}>")
|
||||
endif(${check})
|
||||
endmacro(add_header_include)
|
||||
|
||||
set(signature_call_conv)
|
||||
if(HAVE_WINDOWS_H)
|
||||
add_header_include(HAVE_WINDOWS_H "windows.h")
|
||||
add_header_include(HAVE_WINSOCK2_H "winsock2.h")
|
||||
add_header_include(HAVE_WINSOCK_H "winsock.h")
|
||||
set(_source_epilogue
|
||||
"${_source_epilogue}\n#ifndef WIN32_LEAN_AND_MEAN\n#define WIN32_LEAN_AND_MEAN\n#endif")
|
||||
set(signature_call_conv "PASCAL")
|
||||
if(HAVE_LIBWS2_32)
|
||||
set(CMAKE_REQUIRED_LIBRARIES ws2_32)
|
||||
endif()
|
||||
else(HAVE_WINDOWS_H)
|
||||
add_header_include(HAVE_SYS_TYPES_H "sys/types.h")
|
||||
add_header_include(HAVE_SYS_SOCKET_H "sys/socket.h")
|
||||
endif(HAVE_WINDOWS_H)
|
||||
|
||||
check_c_source_compiles("${_source_epilogue}
|
||||
int main(void) {
|
||||
recv(0, 0, 0, 0);
|
||||
return 0;
|
||||
}" curl_cv_recv)
|
||||
if(curl_cv_recv)
|
||||
if(NOT DEFINED curl_cv_func_recv_args OR "${curl_cv_func_recv_args}" STREQUAL "unknown")
|
||||
foreach(recv_retv "int" "ssize_t" )
|
||||
foreach(recv_arg1 "int" "ssize_t" "SOCKET")
|
||||
foreach(recv_arg2 "void *" "char *")
|
||||
foreach(recv_arg3 "size_t" "int" "socklen_t" "unsigned int")
|
||||
foreach(recv_arg4 "int" "unsigned int")
|
||||
if(NOT curl_cv_func_recv_done)
|
||||
unset(curl_cv_func_recv_test CACHE)
|
||||
check_c_source_compiles("
|
||||
${_source_epilogue}
|
||||
extern ${recv_retv} ${signature_call_conv}
|
||||
recv(${recv_arg1}, ${recv_arg2}, ${recv_arg3}, ${recv_arg4});
|
||||
int main(void) {
|
||||
${recv_arg1} s=0;
|
||||
${recv_arg2} buf=0;
|
||||
${recv_arg3} len=0;
|
||||
${recv_arg4} flags=0;
|
||||
${recv_retv} res = recv(s, buf, len, flags);
|
||||
(void) res;
|
||||
return 0;
|
||||
}"
|
||||
curl_cv_func_recv_test)
|
||||
message(STATUS
|
||||
"Tested: ${recv_retv} recv(${recv_arg1}, ${recv_arg2}, ${recv_arg3}, ${recv_arg4})")
|
||||
if(curl_cv_func_recv_test)
|
||||
set(curl_cv_func_recv_args
|
||||
"${recv_arg1},${recv_arg2},${recv_arg3},${recv_arg4},${recv_retv}")
|
||||
set(RECV_TYPE_ARG1 "${recv_arg1}")
|
||||
set(RECV_TYPE_ARG2 "${recv_arg2}")
|
||||
set(RECV_TYPE_ARG3 "${recv_arg3}")
|
||||
set(RECV_TYPE_ARG4 "${recv_arg4}")
|
||||
set(RECV_TYPE_RETV "${recv_retv}")
|
||||
set(HAVE_RECV 1)
|
||||
set(curl_cv_func_recv_done 1)
|
||||
endif(curl_cv_func_recv_test)
|
||||
endif(NOT curl_cv_func_recv_done)
|
||||
endforeach(recv_arg4)
|
||||
endforeach(recv_arg3)
|
||||
endforeach(recv_arg2)
|
||||
endforeach(recv_arg1)
|
||||
endforeach(recv_retv)
|
||||
else()
|
||||
string(REGEX REPLACE "^([^,]*),[^,]*,[^,]*,[^,]*,[^,]*$" "\\1" RECV_TYPE_ARG1 "${curl_cv_func_recv_args}")
|
||||
string(REGEX REPLACE "^[^,]*,([^,]*),[^,]*,[^,]*,[^,]*$" "\\1" RECV_TYPE_ARG2 "${curl_cv_func_recv_args}")
|
||||
string(REGEX REPLACE "^[^,]*,[^,]*,([^,]*),[^,]*,[^,]*$" "\\1" RECV_TYPE_ARG3 "${curl_cv_func_recv_args}")
|
||||
string(REGEX REPLACE "^[^,]*,[^,]*,[^,]*,([^,]*),[^,]*$" "\\1" RECV_TYPE_ARG4 "${curl_cv_func_recv_args}")
|
||||
string(REGEX REPLACE "^[^,]*,[^,]*,[^,]*,[^,]*,([^,]*)$" "\\1" RECV_TYPE_RETV "${curl_cv_func_recv_args}")
|
||||
endif()
|
||||
|
||||
if("${curl_cv_func_recv_args}" STREQUAL "unknown")
|
||||
message(FATAL_ERROR "Cannot find proper types to use for recv args")
|
||||
endif("${curl_cv_func_recv_args}" STREQUAL "unknown")
|
||||
else(curl_cv_recv)
|
||||
message(FATAL_ERROR "Unable to link function recv")
|
||||
endif(curl_cv_recv)
|
||||
set(curl_cv_func_recv_args "${curl_cv_func_recv_args}" CACHE INTERNAL "Arguments for recv")
|
||||
set(HAVE_RECV 1)
|
||||
|
||||
check_c_source_compiles("${_source_epilogue}
|
||||
int main(void) {
|
||||
send(0, 0, 0, 0);
|
||||
return 0;
|
||||
}" curl_cv_send)
|
||||
if(curl_cv_send)
|
||||
if(NOT DEFINED curl_cv_func_send_args OR "${curl_cv_func_send_args}" STREQUAL "unknown")
|
||||
foreach(send_retv "int" "ssize_t" )
|
||||
foreach(send_arg1 "int" "ssize_t" "SOCKET")
|
||||
foreach(send_arg2 "const void *" "void *" "char *" "const char *")
|
||||
foreach(send_arg3 "size_t" "int" "socklen_t" "unsigned int")
|
||||
foreach(send_arg4 "int" "unsigned int")
|
||||
if(NOT curl_cv_func_send_done)
|
||||
unset(curl_cv_func_send_test CACHE)
|
||||
check_c_source_compiles("
|
||||
${_source_epilogue}
|
||||
extern ${send_retv} ${signature_call_conv}
|
||||
send(${send_arg1}, ${send_arg2}, ${send_arg3}, ${send_arg4});
|
||||
int main(void) {
|
||||
${send_arg1} s=0;
|
||||
${send_arg2} buf=0;
|
||||
${send_arg3} len=0;
|
||||
${send_arg4} flags=0;
|
||||
${send_retv} res = send(s, buf, len, flags);
|
||||
(void) res;
|
||||
return 0;
|
||||
}"
|
||||
curl_cv_func_send_test)
|
||||
message(STATUS
|
||||
"Tested: ${send_retv} send(${send_arg1}, ${send_arg2}, ${send_arg3}, ${send_arg4})")
|
||||
if(curl_cv_func_send_test)
|
||||
string(REGEX REPLACE "(const) .*" "\\1" send_qual_arg2 "${send_arg2}")
|
||||
string(REGEX REPLACE "const (.*)" "\\1" send_arg2 "${send_arg2}")
|
||||
set(curl_cv_func_send_args
|
||||
"${send_arg1},${send_arg2},${send_arg3},${send_arg4},${send_retv},${send_qual_arg2}")
|
||||
set(SEND_TYPE_ARG1 "${send_arg1}")
|
||||
set(SEND_TYPE_ARG2 "${send_arg2}")
|
||||
set(SEND_TYPE_ARG3 "${send_arg3}")
|
||||
set(SEND_TYPE_ARG4 "${send_arg4}")
|
||||
set(SEND_TYPE_RETV "${send_retv}")
|
||||
set(HAVE_SEND 1)
|
||||
set(curl_cv_func_send_done 1)
|
||||
endif(curl_cv_func_send_test)
|
||||
endif(NOT curl_cv_func_send_done)
|
||||
endforeach(send_arg4)
|
||||
endforeach(send_arg3)
|
||||
endforeach(send_arg2)
|
||||
endforeach(send_arg1)
|
||||
endforeach(send_retv)
|
||||
else()
|
||||
string(REGEX REPLACE "^([^,]*),[^,]*,[^,]*,[^,]*,[^,]*,[^,]*$" "\\1" SEND_TYPE_ARG1 "${curl_cv_func_send_args}")
|
||||
string(REGEX REPLACE "^[^,]*,([^,]*),[^,]*,[^,]*,[^,]*,[^,]*$" "\\1" SEND_TYPE_ARG2 "${curl_cv_func_send_args}")
|
||||
string(REGEX REPLACE "^[^,]*,[^,]*,([^,]*),[^,]*,[^,]*,[^,]*$" "\\1" SEND_TYPE_ARG3 "${curl_cv_func_send_args}")
|
||||
string(REGEX REPLACE "^[^,]*,[^,]*,[^,]*,([^,]*),[^,]*,[^,]*$" "\\1" SEND_TYPE_ARG4 "${curl_cv_func_send_args}")
|
||||
string(REGEX REPLACE "^[^,]*,[^,]*,[^,]*,[^,]*,([^,]*),[^,]*$" "\\1" SEND_TYPE_RETV "${curl_cv_func_send_args}")
|
||||
string(REGEX REPLACE "^[^,]*,[^,]*,[^,]*,[^,]*,[^,]*,([^,]*)$" "\\1" SEND_QUAL_ARG2 "${curl_cv_func_send_args}")
|
||||
endif()
|
||||
|
||||
if("${curl_cv_func_send_args}" STREQUAL "unknown")
|
||||
message(FATAL_ERROR "Cannot find proper types to use for send args")
|
||||
endif("${curl_cv_func_send_args}" STREQUAL "unknown")
|
||||
set(SEND_QUAL_ARG2 "const")
|
||||
else(curl_cv_send)
|
||||
message(FATAL_ERROR "Unable to link function send")
|
||||
endif(curl_cv_send)
|
||||
set(curl_cv_func_send_args "${curl_cv_func_send_args}" CACHE INTERNAL "Arguments for send")
|
||||
set(HAVE_SEND 1)
|
||||
|
||||
check_c_source_compiles("${_source_epilogue}
|
||||
int main(void) {
|
||||
int flag = MSG_NOSIGNAL;
|
||||
(void)flag;
|
||||
return 0;
|
||||
}" HAVE_MSG_NOSIGNAL)
|
||||
|
||||
if(NOT HAVE_WINDOWS_H)
|
||||
add_header_include(HAVE_SYS_TIME_H "sys/time.h")
|
||||
add_header_include(TIME_WITH_SYS_TIME "time.h")
|
||||
add_header_include(HAVE_TIME_H "time.h")
|
||||
endif()
|
||||
check_c_source_compiles("${_source_epilogue}
|
||||
int main(void) {
|
||||
struct timeval ts;
|
||||
ts.tv_sec = 0;
|
||||
ts.tv_usec = 0;
|
||||
(void)ts;
|
||||
return 0;
|
||||
}" HAVE_STRUCT_TIMEVAL)
|
||||
|
||||
|
||||
include(CheckCSourceRuns)
|
||||
set(CMAKE_REQUIRED_FLAGS)
|
||||
if(HAVE_SYS_POLL_H)
|
||||
set(CMAKE_REQUIRED_FLAGS "-DHAVE_SYS_POLL_H")
|
||||
endif(HAVE_SYS_POLL_H)
|
||||
check_c_source_runs("
|
||||
#ifdef HAVE_SYS_POLL_H
|
||||
# include <sys/poll.h>
|
||||
#endif
|
||||
int main(void) {
|
||||
return poll((void *)0, 0, 10 /*ms*/);
|
||||
}" HAVE_POLL_FINE)
|
||||
|
||||
set(HAVE_SIG_ATOMIC_T 1)
|
||||
set(CMAKE_REQUIRED_FLAGS)
|
||||
if(HAVE_SIGNAL_H)
|
||||
set(CMAKE_REQUIRED_FLAGS "-DHAVE_SIGNAL_H")
|
||||
set(CMAKE_EXTRA_INCLUDE_FILES "signal.h")
|
||||
endif(HAVE_SIGNAL_H)
|
||||
check_type_size("sig_atomic_t" SIZEOF_SIG_ATOMIC_T)
|
||||
if(HAVE_SIZEOF_SIG_ATOMIC_T)
|
||||
check_c_source_compiles("
|
||||
#ifdef HAVE_SIGNAL_H
|
||||
# include <signal.h>
|
||||
#endif
|
||||
int main(void) {
|
||||
static volatile sig_atomic_t dummy = 0;
|
||||
(void)dummy;
|
||||
return 0;
|
||||
}" HAVE_SIG_ATOMIC_T_NOT_VOLATILE)
|
||||
if(NOT HAVE_SIG_ATOMIC_T_NOT_VOLATILE)
|
||||
set(HAVE_SIG_ATOMIC_T_VOLATILE 1)
|
||||
endif(NOT HAVE_SIG_ATOMIC_T_NOT_VOLATILE)
|
||||
endif(HAVE_SIZEOF_SIG_ATOMIC_T)
|
||||
|
||||
if(HAVE_WINDOWS_H)
|
||||
set(CMAKE_EXTRA_INCLUDE_FILES winsock2.h)
|
||||
else()
|
||||
set(CMAKE_EXTRA_INCLUDE_FILES)
|
||||
if(HAVE_SYS_SOCKET_H)
|
||||
set(CMAKE_EXTRA_INCLUDE_FILES sys/socket.h)
|
||||
endif(HAVE_SYS_SOCKET_H)
|
||||
endif()
|
||||
|
||||
check_type_size("struct sockaddr_storage" SIZEOF_STRUCT_SOCKADDR_STORAGE)
|
||||
if(HAVE_SIZEOF_STRUCT_SOCKADDR_STORAGE)
|
||||
set(HAVE_STRUCT_SOCKADDR_STORAGE 1)
|
||||
endif(HAVE_SIZEOF_STRUCT_SOCKADDR_STORAGE)
|
||||
|
||||
@ -1,125 +0,0 @@
|
||||
if(NOT UNIX)
|
||||
if(WIN32)
|
||||
set(HAVE_LIBDL 0)
|
||||
set(HAVE_LIBUCB 0)
|
||||
set(HAVE_LIBSOCKET 0)
|
||||
set(NOT_NEED_LIBNSL 0)
|
||||
set(HAVE_LIBNSL 0)
|
||||
set(HAVE_GETHOSTNAME 1)
|
||||
set(HAVE_LIBZ 0)
|
||||
set(HAVE_LIBCRYPTO 0)
|
||||
|
||||
set(HAVE_DLOPEN 0)
|
||||
|
||||
set(HAVE_ALLOCA_H 0)
|
||||
set(HAVE_ARPA_INET_H 0)
|
||||
set(HAVE_DLFCN_H 0)
|
||||
set(HAVE_FCNTL_H 1)
|
||||
set(HAVE_INTTYPES_H 0)
|
||||
set(HAVE_IO_H 1)
|
||||
set(HAVE_MALLOC_H 1)
|
||||
set(HAVE_MEMORY_H 1)
|
||||
set(HAVE_NETDB_H 0)
|
||||
set(HAVE_NETINET_IF_ETHER_H 0)
|
||||
set(HAVE_NETINET_IN_H 0)
|
||||
set(HAVE_NET_IF_H 0)
|
||||
set(HAVE_PROCESS_H 1)
|
||||
set(HAVE_PWD_H 0)
|
||||
set(HAVE_SETJMP_H 1)
|
||||
set(HAVE_SGTTY_H 0)
|
||||
set(HAVE_SIGNAL_H 1)
|
||||
set(HAVE_SOCKIO_H 0)
|
||||
set(HAVE_STDINT_H 0)
|
||||
set(HAVE_STDLIB_H 1)
|
||||
set(HAVE_STRINGS_H 0)
|
||||
set(HAVE_STRING_H 1)
|
||||
set(HAVE_SYS_PARAM_H 0)
|
||||
set(HAVE_SYS_POLL_H 0)
|
||||
set(HAVE_SYS_SELECT_H 0)
|
||||
set(HAVE_SYS_SOCKET_H 0)
|
||||
set(HAVE_SYS_SOCKIO_H 0)
|
||||
set(HAVE_SYS_STAT_H 1)
|
||||
set(HAVE_SYS_TIME_H 0)
|
||||
set(HAVE_SYS_TYPES_H 1)
|
||||
set(HAVE_SYS_UTIME_H 1)
|
||||
set(HAVE_TERMIOS_H 0)
|
||||
set(HAVE_TERMIO_H 0)
|
||||
set(HAVE_TIME_H 1)
|
||||
set(HAVE_UNISTD_H 0)
|
||||
set(HAVE_UTIME_H 0)
|
||||
set(HAVE_X509_H 0)
|
||||
set(HAVE_ZLIB_H 0)
|
||||
|
||||
set(HAVE_SIZEOF_LONG_DOUBLE 1)
|
||||
set(SIZEOF_LONG_DOUBLE 8)
|
||||
|
||||
set(HAVE_SOCKET 1)
|
||||
set(HAVE_POLL 0)
|
||||
set(HAVE_SELECT 1)
|
||||
set(HAVE_STRDUP 1)
|
||||
set(HAVE_STRSTR 1)
|
||||
set(HAVE_STRTOK_R 0)
|
||||
set(HAVE_STRFTIME 1)
|
||||
set(HAVE_UNAME 0)
|
||||
set(HAVE_STRCASECMP 0)
|
||||
set(HAVE_STRICMP 1)
|
||||
set(HAVE_STRCMPI 1)
|
||||
set(HAVE_GETHOSTBYADDR 1)
|
||||
set(HAVE_GETTIMEOFDAY 0)
|
||||
set(HAVE_INET_ADDR 1)
|
||||
set(HAVE_INET_NTOA 1)
|
||||
set(HAVE_INET_NTOA_R 0)
|
||||
set(HAVE_TCGETATTR 0)
|
||||
set(HAVE_TCSETATTR 0)
|
||||
set(HAVE_PERROR 1)
|
||||
set(HAVE_CLOSESOCKET 1)
|
||||
set(HAVE_SETVBUF 0)
|
||||
set(HAVE_SIGSETJMP 0)
|
||||
set(HAVE_GETPASS_R 0)
|
||||
set(HAVE_STRLCAT 0)
|
||||
set(HAVE_GETPWUID 0)
|
||||
set(HAVE_GETEUID 0)
|
||||
set(HAVE_UTIME 1)
|
||||
set(HAVE_RAND_EGD 0)
|
||||
set(HAVE_RAND_SCREEN 0)
|
||||
set(HAVE_RAND_STATUS 0)
|
||||
set(HAVE_GMTIME_R 0)
|
||||
set(HAVE_LOCALTIME_R 0)
|
||||
set(HAVE_GETHOSTBYADDR_R 0)
|
||||
set(HAVE_GETHOSTBYNAME_R 0)
|
||||
set(HAVE_SIGNAL_FUNC 1)
|
||||
set(HAVE_SIGNAL_MACRO 0)
|
||||
|
||||
set(HAVE_GETHOSTBYADDR_R_5 0)
|
||||
set(HAVE_GETHOSTBYADDR_R_5_REENTRANT 0)
|
||||
set(HAVE_GETHOSTBYADDR_R_7 0)
|
||||
set(HAVE_GETHOSTBYADDR_R_7_REENTRANT 0)
|
||||
set(HAVE_GETHOSTBYADDR_R_8 0)
|
||||
set(HAVE_GETHOSTBYADDR_R_8_REENTRANT 0)
|
||||
set(HAVE_GETHOSTBYNAME_R_3 0)
|
||||
set(HAVE_GETHOSTBYNAME_R_3_REENTRANT 0)
|
||||
set(HAVE_GETHOSTBYNAME_R_5 0)
|
||||
set(HAVE_GETHOSTBYNAME_R_5_REENTRANT 0)
|
||||
set(HAVE_GETHOSTBYNAME_R_6 0)
|
||||
set(HAVE_GETHOSTBYNAME_R_6_REENTRANT 0)
|
||||
|
||||
set(TIME_WITH_SYS_TIME 0)
|
||||
set(HAVE_O_NONBLOCK 0)
|
||||
set(HAVE_IN_ADDR_T 0)
|
||||
set(HAVE_INET_NTOA_R_DECL 0)
|
||||
set(HAVE_INET_NTOA_R_DECL_REENTRANT 0)
|
||||
if(ENABLE_IPV6)
|
||||
set(HAVE_GETADDRINFO 1)
|
||||
else()
|
||||
set(HAVE_GETADDRINFO 0)
|
||||
endif()
|
||||
set(STDC_HEADERS 1)
|
||||
set(RETSIGTYPE_TEST 1)
|
||||
|
||||
set(HAVE_SIGACTION 0)
|
||||
set(HAVE_MACRO_SIGSETJMP 0)
|
||||
else(WIN32)
|
||||
message("This file should be included on Windows platform only")
|
||||
endif(WIN32)
|
||||
endif(NOT UNIX)
|
||||
|
||||
@ -1,31 +0,0 @@
|
||||
# File containing various utilities
|
||||
|
||||
# Converts a CMake list to a string containing elements separated by spaces
|
||||
function(TO_LIST_SPACES _LIST_NAME OUTPUT_VAR)
|
||||
set(NEW_LIST_SPACE)
|
||||
foreach(ITEM ${${_LIST_NAME}})
|
||||
set(NEW_LIST_SPACE "${NEW_LIST_SPACE} ${ITEM}")
|
||||
endforeach()
|
||||
string(STRIP ${NEW_LIST_SPACE} NEW_LIST_SPACE)
|
||||
set(${OUTPUT_VAR} "${NEW_LIST_SPACE}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
# Appends a lis of item to a string which is a space-separated list, if they don't already exist.
|
||||
function(LIST_SPACES_APPEND_ONCE LIST_NAME)
|
||||
string(REPLACE " " ";" _LIST ${${LIST_NAME}})
|
||||
list(APPEND _LIST ${ARGN})
|
||||
list(REMOVE_DUPLICATES _LIST)
|
||||
to_list_spaces(_LIST NEW_LIST_SPACE)
|
||||
set(${LIST_NAME} "${NEW_LIST_SPACE}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
# Convinience function that does the same as LIST(FIND ...) but with a TRUE/FALSE return value.
|
||||
# Ex: IN_STR_LIST(MY_LIST "Searched item" WAS_FOUND)
|
||||
function(IN_STR_LIST LIST_NAME ITEM_SEARCHED RETVAL)
|
||||
list(FIND ${LIST_NAME} ${ITEM_SEARCHED} FIND_POS)
|
||||
if(${FIND_POS} EQUAL -1)
|
||||
set(${RETVAL} FALSE PARENT_SCOPE)
|
||||
else()
|
||||
set(${RETVAL} TRUE PARENT_SCOPE)
|
||||
endif()
|
||||
endfunction()
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,21 +0,0 @@
|
||||
COPYRIGHT AND PERMISSION NOTICE
|
||||
|
||||
Copyright (c) 1996 - 2015, Daniel Stenberg, <daniel@haxx.se>.
|
||||
|
||||
All rights reserved.
|
||||
|
||||
Permission to use, copy, modify, and distribute this software for any purpose
|
||||
with or without fee is hereby granted, provided that the above copyright
|
||||
notice and this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN
|
||||
NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
|
||||
OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
Except as contained in this notice, the name of a copyright holder shall not
|
||||
be used in advertising or otherwise to promote the sale, use or other dealings
|
||||
in this Software without prior written authorization of the copyright holder.
|
||||
@ -1,146 +0,0 @@
|
||||
#!/bin/bash
|
||||
# This script performs all of the steps needed to build a
|
||||
# universal binary libcurl.framework for Mac OS X 10.4 or greater.
|
||||
#
|
||||
# Hendrik Visage:
|
||||
# Generalizations added since Snowleopard (10.6) do not include
|
||||
# the 10.4u SDK.
|
||||
#
|
||||
# Also note:
|
||||
# 10.5 is the *ONLY* SDK that support PPC64 :( -- 10.6 do not have ppc64 support
|
||||
#If you need to have PPC64 support then change below to 1
|
||||
PPC64_NEEDED=0
|
||||
# Apple does not support building for PPC anymore in Xcode 4 and later.
|
||||
# If you're using Xcode 3 or earlier and need PPC support, then change
|
||||
# the setting below to 1
|
||||
PPC_NEEDED=0
|
||||
|
||||
# For me the default is to develop for the platform I am on, and if you
|
||||
#desire compatibility with older versions then change USE_OLD to 1 :)
|
||||
USE_OLD=0
|
||||
|
||||
VERSION=`/usr/bin/sed -ne 's/^#define LIBCURL_VERSION "\(.*\)"/\1/p' include/curl/curlver.h`
|
||||
FRAMEWORK_VERSION=Versions/Release-$VERSION
|
||||
|
||||
#I also wanted to "copy over" the system, and thus the reason I added the
|
||||
# version to Versions/Release-7.20.1 etc.
|
||||
# now a simple rsync -vaP libcurl.framework /Library/Frameworks will install it
|
||||
# and setup the right paths to this version, leaving the system version
|
||||
# "intact", so you can "fix" it later with the links to Versions/A/...
|
||||
|
||||
DEVELOPER_PATH=`xcode-select --print-path`
|
||||
# Around Xcode 4.3, SDKs were moved from the Developer folder into the
|
||||
# MacOSX.platform folder
|
||||
if test -d "$DEVELOPER_PATH/Platforms/MacOSX.platform/Developer/SDKs"; then
|
||||
SDK_PATH="$DEVELOPER_PATH/Platforms/MacOSX.platform/Developer/SDKs"
|
||||
else
|
||||
SDK_PATH="$DEVELOPER_PATH/SDKs";
|
||||
fi
|
||||
OLD_SDK=`ls $SDK_PATH|head -1`
|
||||
NEW_SDK=`ls -r $SDK_PATH|head -1`
|
||||
|
||||
if test "0"$USE_OLD -gt 0
|
||||
then
|
||||
SDK32=$OLD_SDK
|
||||
else
|
||||
SDK32=$NEW_SDK
|
||||
fi
|
||||
|
||||
MACVER=`echo $SDK32|sed -e s/[a-zA-Z]//g -e s/.\$//`
|
||||
|
||||
SDK32_DIR=$SDK_PATH/$SDK32
|
||||
MINVER32='-mmacosx-version-min='$MACVER
|
||||
if test $PPC_NEEDED -gt 0; then
|
||||
ARCHES32='-arch i386 -arch ppc'
|
||||
else
|
||||
ARCHES32='-arch i386'
|
||||
fi
|
||||
|
||||
if test $PPC64_NEEDED -gt 0
|
||||
then
|
||||
SDK64=10.5
|
||||
ARCHES64='-arch x86_64 -arch ppc64'
|
||||
SDK64=`ls $SDK_PATH|grep 10.5|head -1`
|
||||
else
|
||||
ARCHES64='-arch x86_64'
|
||||
#We "know" that 10.4 and earlier do not support 64bit
|
||||
OLD_SDK64=`ls $SDK_PATH|egrep -v "10.[0-4]"|head -1`
|
||||
NEW_SDK64=`ls -r $SDK_PATH|egrep -v "10.[0-4]"|head -1`
|
||||
if test $USE_OLD -gt 0
|
||||
then
|
||||
SDK64=$OLD_SDK64
|
||||
else
|
||||
SDK64=$NEW_SDK64
|
||||
fi
|
||||
fi
|
||||
|
||||
SDK64_DIR=$SDK_PATH/$SDK64
|
||||
MACVER64=`echo $SDK64|sed -e s/[a-zA-Z]//g -e s/.\$//`
|
||||
|
||||
MINVER64='-mmacosx-version-min='$MACVER64
|
||||
|
||||
if test ! -z $SDK32; then
|
||||
echo "----Configuring libcurl for 32 bit universal framework..."
|
||||
make clean
|
||||
./configure --disable-dependency-tracking --disable-static --with-gssapi --with-darwinssl \
|
||||
CFLAGS="-Os -isysroot $SDK32_DIR $ARCHES32" \
|
||||
LDFLAGS="-Wl,-syslibroot,$SDK32_DIR $ARCHES32 -Wl,-headerpad_max_install_names" \
|
||||
CC=$CC
|
||||
|
||||
echo "----Building 32 bit libcurl..."
|
||||
make -j `sysctl -n hw.logicalcpu_max`
|
||||
|
||||
echo "----Creating 32 bit framework..."
|
||||
rm -r libcurl.framework
|
||||
mkdir -p libcurl.framework/${FRAMEWORK_VERSION}/Resources
|
||||
cp lib/.libs/libcurl.dylib libcurl.framework/${FRAMEWORK_VERSION}/libcurl
|
||||
install_name_tool -id @executable_path/../Frameworks/libcurl.framework/${FRAMEWORK_VERSION}/libcurl libcurl.framework/${FRAMEWORK_VERSION}/libcurl
|
||||
/usr/bin/sed -e "s/7\.12\.3/$VERSION/" lib/libcurl.plist >libcurl.framework/${FRAMEWORK_VERSION}/Resources/Info.plist
|
||||
mkdir -p libcurl.framework/${FRAMEWORK_VERSION}/Headers/curl
|
||||
cp include/curl/*.h libcurl.framework/${FRAMEWORK_VERSION}/Headers/curl
|
||||
pushd libcurl.framework
|
||||
ln -fs ${FRAMEWORK_VERSION}/libcurl libcurl
|
||||
ln -fs ${FRAMEWORK_VERSION}/Resources Resources
|
||||
ln -fs ${FRAMEWORK_VERSION}/Headers Headers
|
||||
cd Versions
|
||||
ln -fs $(basename "${FRAMEWORK_VERSION}") Current
|
||||
|
||||
echo Testing for SDK64
|
||||
if test -d $SDK64_DIR; then
|
||||
echo entering...
|
||||
popd
|
||||
make clean
|
||||
echo "----Configuring libcurl for 64 bit universal framework..."
|
||||
./configure --disable-dependency-tracking --disable-static --with-gssapi --with-darwinssl \
|
||||
CFLAGS="-Os -isysroot $SDK64_DIR $ARCHES64" \
|
||||
LDFLAGS="-Wl,-syslibroot,$SDK64_DIR $ARCHES64 -Wl,-headerpad_max_install_names" \
|
||||
CC=$CC
|
||||
|
||||
echo "----Building 64 bit libcurl..."
|
||||
make -j `sysctl -n hw.logicalcpu_max`
|
||||
|
||||
echo "----Appending 64 bit framework to 32 bit framework..."
|
||||
cp lib/.libs/libcurl.dylib libcurl.framework/${FRAMEWORK_VERSION}/libcurl64
|
||||
install_name_tool -id @executable_path/../Frameworks/libcurl.framework/${FRAMEWORK_VERSION}/libcurl libcurl.framework/${FRAMEWORK_VERSION}/libcurl64
|
||||
cp libcurl.framework/${FRAMEWORK_VERSION}/libcurl libcurl.framework/${FRAMEWORK_VERSION}/libcurl32
|
||||
pwd
|
||||
lipo libcurl.framework/${FRAMEWORK_VERSION}/libcurl32 libcurl.framework/${FRAMEWORK_VERSION}/libcurl64 -create -output libcurl.framework/${FRAMEWORK_VERSION}/libcurl
|
||||
rm libcurl.framework/${FRAMEWORK_VERSION}/libcurl32 libcurl.framework/${FRAMEWORK_VERSION}/libcurl64
|
||||
cp libcurl.framework/${FRAMEWORK_VERSION}/Headers/curl/curlbuild.h libcurl.framework/${FRAMEWORK_VERSION}/Headers/curl/curlbuild32.h
|
||||
cp include/curl/curlbuild.h libcurl.framework/${FRAMEWORK_VERSION}/Headers/curl/curlbuild64.h
|
||||
cat >libcurl.framework/${FRAMEWORK_VERSION}/Headers/curl/curlbuild.h <<EOF
|
||||
#ifdef __LP64__
|
||||
#include "curl/curlbuild64.h"
|
||||
#else
|
||||
#include "curl/curlbuild32.h"
|
||||
#endif
|
||||
EOF
|
||||
fi
|
||||
|
||||
pwd
|
||||
lipo -info libcurl.framework/${FRAMEWORK_VERSION}/libcurl
|
||||
echo "libcurl.framework is built and can now be included in other projects."
|
||||
echo "Copy libcurl.framework to your bundle's Contents/Frameworks folder, ~/Library/Frameworks or /Library/Frameworks."
|
||||
else
|
||||
echo "Building libcurl.framework requires Mac OS X 10.4 or later with the MacOSX10.4/5/6 SDK installed."
|
||||
fi
|
||||
@ -1,530 +0,0 @@
|
||||
#***************************************************************************
|
||||
# _ _ ____ _
|
||||
# Project ___| | | | _ \| |
|
||||
# / __| | | | |_) | |
|
||||
# | (__| |_| | _ <| |___
|
||||
# \___|\___/|_| \_\_____|
|
||||
#
|
||||
# Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
#
|
||||
# This software is licensed as described in the file COPYING, which
|
||||
# you should have received as part of this distribution. The terms
|
||||
# are also available at http://curl.haxx.se/docs/copyright.html.
|
||||
#
|
||||
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
# copies of the Software, and permit persons to whom the Software is
|
||||
# furnished to do so, under the terms of the COPYING file.
|
||||
#
|
||||
# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
# KIND, either express or implied.
|
||||
#
|
||||
###########################################################################
|
||||
|
||||
AUTOMAKE_OPTIONS = foreign
|
||||
|
||||
ACLOCAL_AMFLAGS = -I m4
|
||||
|
||||
CMAKE_DIST = CMakeLists.txt CMake/CMakeConfigurableFile.in \
|
||||
CMake/CurlTests.c CMake/FindGSS.cmake CMake/OtherTests.cmake \
|
||||
CMake/Platforms/WindowsCache.cmake CMake/Utilities.cmake \
|
||||
include/curl/curlbuild.h.cmake CMake/Macros.cmake
|
||||
|
||||
VC6_LIBTMPL = projects/Windows/VC6/lib/libcurl.tmpl
|
||||
VC6_LIBDSP = projects/Windows/VC6/lib/libcurl.dsp
|
||||
VC6_LIBDSP_DEPS = $(VC6_LIBTMPL) Makefile.am lib/Makefile.inc
|
||||
VC6_SRCTMPL = projects/Windows/VC6/src/curlsrc.tmpl
|
||||
VC6_SRCDSP = projects/Windows/VC6/src/curlsrc.dsp
|
||||
VC6_SRCDSP_DEPS = $(VC6_SRCTMPL) Makefile.am src/Makefile.inc
|
||||
|
||||
VC7_LIBTMPL = projects/Windows/VC7/lib/libcurl.tmpl
|
||||
VC7_LIBVCPROJ = projects/Windows/VC7/lib/libcurl.vcproj
|
||||
VC7_LIBVCPROJ_DEPS = $(VC7_LIBTMPL) Makefile.am lib/Makefile.inc
|
||||
VC7_SRCTMPL = projects/Windows/VC7/src/curlsrc.tmpl
|
||||
VC7_SRCVCPROJ = projects/Windows/VC7/src/curlsrc.vcproj
|
||||
VC7_SRCVCPROJ_DEPS = $(VC7_SRCTMPL) Makefile.am src/Makefile.inc
|
||||
|
||||
VC71_LIBTMPL = projects/Windows/VC7.1/lib/libcurl.tmpl
|
||||
VC71_LIBVCPROJ = projects/Windows/VC7.1/lib/libcurl.vcproj
|
||||
VC71_LIBVCPROJ_DEPS = $(VC71_LIBTMPL) Makefile.am lib/Makefile.inc
|
||||
VC71_SRCTMPL = projects/Windows/VC7.1/src/curlsrc.tmpl
|
||||
VC71_SRCVCPROJ = projects/Windows/VC7.1/src/curlsrc.vcproj
|
||||
VC71_SRCVCPROJ_DEPS = $(VC71_SRCTMPL) Makefile.am src/Makefile.inc
|
||||
|
||||
VC8_LIBTMPL = projects/Windows/VC8/lib/libcurl.tmpl
|
||||
VC8_LIBVCPROJ = projects/Windows/VC8/lib/libcurl.vcproj
|
||||
VC8_LIBVCPROJ_DEPS = $(VC8_LIBTMPL) Makefile.am lib/Makefile.inc
|
||||
VC8_SRCTMPL = projects/Windows/VC8/src/curlsrc.tmpl
|
||||
VC8_SRCVCPROJ = projects/Windows/VC8/src/curlsrc.vcproj
|
||||
VC8_SRCVCPROJ_DEPS = $(VC8_SRCTMPL) Makefile.am src/Makefile.inc
|
||||
|
||||
VC9_LIBTMPL = projects/Windows/VC9/lib/libcurl.tmpl
|
||||
VC9_LIBVCPROJ = projects/Windows/VC9/lib/libcurl.vcproj
|
||||
VC9_LIBVCPROJ_DEPS = $(VC9_LIBTMPL) Makefile.am lib/Makefile.inc
|
||||
VC9_SRCTMPL = projects/Windows/VC9/src/curlsrc.tmpl
|
||||
VC9_SRCVCPROJ = projects/Windows/VC9/src/curlsrc.vcproj
|
||||
VC9_SRCVCPROJ_DEPS = $(VC9_SRCTMPL) Makefile.am src/Makefile.inc
|
||||
|
||||
VC10_LIBTMPL = projects/Windows/VC10/lib/libcurl.tmpl
|
||||
VC10_LIBVCXPROJ = projects/Windows/VC10/lib/libcurl.vcxproj
|
||||
VC10_LIBVCXPROJ_DEPS = $(VC10_LIBTMPL) Makefile.am lib/Makefile.inc
|
||||
VC10_SRCTMPL = projects/Windows/VC10/src/curlsrc.tmpl
|
||||
VC10_SRCVCXPROJ = projects/Windows/VC10/src/curlsrc.vcxproj
|
||||
VC10_SRCVCXPROJ_DEPS = $(VC10_SRCTMPL) Makefile.am src/Makefile.inc
|
||||
|
||||
VC11_LIBTMPL = projects/Windows/VC11/lib/libcurl.tmpl
|
||||
VC11_LIBVCXPROJ = projects/Windows/VC11/lib/libcurl.vcxproj
|
||||
VC11_LIBVCXPROJ_DEPS = $(VC11_LIBTMPL) Makefile.am lib/Makefile.inc
|
||||
VC11_SRCTMPL = projects/Windows/VC11/src/curlsrc.tmpl
|
||||
VC11_SRCVCXPROJ = projects/Windows/VC11/src/curlsrc.vcxproj
|
||||
VC11_SRCVCXPROJ_DEPS = $(VC11_SRCTMPL) Makefile.am src/Makefile.inc
|
||||
|
||||
VC12_LIBTMPL = projects/Windows/VC12/lib/libcurl.tmpl
|
||||
VC12_LIBVCXPROJ = projects/Windows/VC12/lib/libcurl.vcxproj
|
||||
VC12_LIBVCXPROJ_DEPS = $(VC12_LIBTMPL) Makefile.am lib/Makefile.inc
|
||||
VC12_SRCTMPL = projects/Windows/VC12/src/curlsrc.tmpl
|
||||
VC12_SRCVCXPROJ = projects/Windows/VC12/src/curlsrc.vcxproj
|
||||
VC12_SRCVCXPROJ_DEPS = $(VC12_SRCTMPL) Makefile.am src/Makefile.inc
|
||||
|
||||
VC_DIST = projects/README \
|
||||
projects/build-openssl.bat \
|
||||
projects/checksrc.bat \
|
||||
projects/Windows/VC6/curl.dsw \
|
||||
projects/Windows/VC6/lib/libcurl.dsw $(VC6_LIBDSP) \
|
||||
projects/Windows/VC6/src/curlsrc.dsw $(VC6_SRCDSP) \
|
||||
projects/Windows/VC7/curl.sln \
|
||||
projects/Windows/VC7/lib/libcurl.sln $(VC7_LIBVCPROJ) \
|
||||
projects/Windows/VC7/src/curlsrc.sln $(VC7_SRCVCPROJ) \
|
||||
projects/Windows/VC7.1/curl.sln \
|
||||
projects/Windows/VC7.1/lib/libcurl.sln $(VC71_LIBVCPROJ) \
|
||||
projects/Windows/VC7.1/src/curlsrc.sln $(VC71_SRCVCPROJ) \
|
||||
projects/Windows/VC8/curl.sln \
|
||||
projects/Windows/VC8/lib/libcurl.sln $(VC8_LIBVCPROJ) \
|
||||
projects/Windows/VC8/src/curlsrc.sln $(VC8_SRCVCPROJ) \
|
||||
projects/Windows/VC9/curl.sln \
|
||||
projects/Windows/VC9/lib/libcurl.sln $(VC9_LIBVCPROJ) \
|
||||
projects/Windows/VC9/src/curlsrc.sln $(VC9_SRCVCPROJ) \
|
||||
projects/Windows/VC10/curl.sln \
|
||||
projects/Windows/VC10/lib/libcurl.sln $(VC10_LIBVCXPROJ) \
|
||||
projects/Windows/VC10/src/curlsrc.sln $(VC10_SRCVCXPROJ) \
|
||||
projects/Windows/VC11/curl.sln \
|
||||
projects/Windows/VC11/lib/libcurl.sln $(VC11_LIBVCXPROJ) \
|
||||
projects/Windows/VC11/src/curlsrc.sln $(VC11_SRCVCXPROJ) \
|
||||
projects/Windows/VC12/curl.sln \
|
||||
projects/Windows/VC12/lib/libcurl.sln $(VC12_LIBVCXPROJ) \
|
||||
projects/Windows/VC12/src/curlsrc.sln $(VC12_SRCVCXPROJ)
|
||||
|
||||
WINBUILD_DIST = winbuild/BUILD.WINDOWS.txt winbuild/gen_resp_file.bat \
|
||||
winbuild/MakefileBuild.vc winbuild/Makefile.vc \
|
||||
winbuild/Makefile.msvc.names
|
||||
|
||||
EXTRA_DIST = CHANGES COPYING maketgz Makefile.dist curl-config.in \
|
||||
RELEASE-NOTES buildconf libcurl.pc.in MacOSX-Framework \
|
||||
$(CMAKE_DIST) $(VC_DIST) $(WINBUILD_DIST) lib/libcurl.vers.in
|
||||
|
||||
CLEANFILES = $(VC6_LIBDSP) $(VC6_SRCDSP) $(VC7_LIBVCPROJ) $(VC7_SRCVCPROJ) \
|
||||
$(VC71_LIBVCPROJ) $(VC71_SRCVCPROJ) $(VC8_LIBVCPROJ) $(VC8_SRCVCPROJ) \
|
||||
$(VC9_LIBVCPROJ) $(VC9_SRCVCPROJ) $(VC10_LIBVCXPROJ) $(VC10_SRCVCXPROJ) \
|
||||
$(VC11_LIBVCXPROJ) $(VC11_SRCVCXPROJ) $(VC12_LIBVCXPROJ) $(VC12_SRCVCXPROJ)
|
||||
|
||||
bin_SCRIPTS = curl-config
|
||||
|
||||
SUBDIRS = lib src include
|
||||
DIST_SUBDIRS = $(SUBDIRS) tests packages docs
|
||||
|
||||
pkgconfigdir = $(libdir)/pkgconfig
|
||||
pkgconfig_DATA = libcurl.pc
|
||||
|
||||
# List of files required to generate VC IDE .dsp, .vcproj and .vcxproj files
|
||||
include lib/Makefile.inc
|
||||
include src/Makefile.inc
|
||||
|
||||
dist-hook:
|
||||
rm -rf $(top_builddir)/tests/log
|
||||
find $(distdir) -name "*.dist" -exec rm {} \;
|
||||
(distit=`find $(srcdir) -name "*.dist" | grep -v ./ares/`; \
|
||||
for file in $$distit; do \
|
||||
strip=`echo $$file | sed -e s/^$(srcdir)// -e s/\.dist//`; \
|
||||
cp $$file $(distdir)$$strip; \
|
||||
done)
|
||||
|
||||
html:
|
||||
cd docs; make html
|
||||
|
||||
pdf:
|
||||
cd docs; make pdf
|
||||
|
||||
check: test examples
|
||||
|
||||
if CROSSCOMPILING
|
||||
test-full: test
|
||||
test-torture: test
|
||||
|
||||
test:
|
||||
@echo "NOTICE: we can't run the tests when cross-compiling!"
|
||||
|
||||
else
|
||||
|
||||
test:
|
||||
@(cd tests; $(MAKE) all quiet-test)
|
||||
|
||||
test-full:
|
||||
@(cd tests; $(MAKE) all full-test)
|
||||
|
||||
test-torture:
|
||||
@(cd tests; $(MAKE) all torture-test)
|
||||
|
||||
test-am:
|
||||
@(cd tests; $(MAKE) all am-test)
|
||||
|
||||
endif
|
||||
|
||||
examples:
|
||||
@(cd docs/examples; $(MAKE) check)
|
||||
|
||||
# This is a hook to have 'make clean' also clean up the docs and the tests
|
||||
# dir. The extra check for the Makefiles being present is necessary because
|
||||
# 'make distcheck' will make clean first in these directories _before_ it runs
|
||||
# this hook.
|
||||
clean-local:
|
||||
@(if test -f tests/Makefile; then cd tests; $(MAKE) clean; fi)
|
||||
@(if test -f docs/Makefile; then cd docs; $(MAKE) clean; fi)
|
||||
|
||||
#
|
||||
# Build source and binary rpms. For rpm-3.0 and above, the ~/.rpmmacros
|
||||
# must contain the following line:
|
||||
# %_topdir /home/loic/local/rpm
|
||||
# and that /home/loic/local/rpm contains the directory SOURCES, BUILD etc.
|
||||
#
|
||||
# cd /home/loic/local/rpm ; mkdir -p SOURCES BUILD RPMS/i386 SPECS SRPMS
|
||||
#
|
||||
# If additional configure flags are needed to build the package, add the
|
||||
# following in ~/.rpmmacros
|
||||
# %configure CFLAGS="%{optflags}" ./configure %{_target_platform} --prefix=%{_prefix} ${AM_CONFIGFLAGS}
|
||||
# and run make rpm in the following way:
|
||||
# AM_CONFIGFLAGS='--with-uri=/home/users/loic/local/RedHat-6.2' make rpm
|
||||
#
|
||||
|
||||
rpms:
|
||||
$(MAKE) RPMDIST=curl rpm
|
||||
$(MAKE) RPMDIST=curl-ssl rpm
|
||||
|
||||
rpm:
|
||||
RPM_TOPDIR=`rpm --showrc | $(PERL) -n -e 'print if(s/.*_topdir\s+(.*)/$$1/)'` ; \
|
||||
cp $(srcdir)/packages/Linux/RPM/$(RPMDIST).spec $$RPM_TOPDIR/SPECS ; \
|
||||
cp $(PACKAGE)-$(VERSION).tar.gz $$RPM_TOPDIR/SOURCES ; \
|
||||
rpm -ba --clean --rmsource $$RPM_TOPDIR/SPECS/$(RPMDIST).spec ; \
|
||||
mv $$RPM_TOPDIR/RPMS/i386/$(RPMDIST)-*.rpm . ; \
|
||||
mv $$RPM_TOPDIR/SRPMS/$(RPMDIST)-*.src.rpm .
|
||||
|
||||
#
|
||||
# Build a Solaris pkgadd format file
|
||||
# run 'make pkgadd' once you've done './configure' and 'make' to make a Solaris pkgadd format
|
||||
# file (which ends up back in this directory).
|
||||
# The pkgadd file is in 'pkgtrans' format, so to install on Solaris, do
|
||||
# pkgadd -d ./HAXXcurl-*
|
||||
#
|
||||
|
||||
# gak - libtool requires an absoulte directory, hence the pwd below...
|
||||
pkgadd:
|
||||
umask 022 ; \
|
||||
make install DESTDIR=`/bin/pwd`/packages/Solaris/root ; \
|
||||
cat COPYING > $(srcdir)/packages/Solaris/copyright ; \
|
||||
cd $(srcdir)/packages/Solaris && $(MAKE) package
|
||||
|
||||
#
|
||||
# Build a cygwin binary tarball installation file
|
||||
# resulting .tar.bz2 file will end up at packages/Win32/cygwin
|
||||
cygwinbin:
|
||||
$(MAKE) -C packages/Win32/cygwin cygwinbin
|
||||
|
||||
# We extend the standard install with a custom hook:
|
||||
install-data-hook:
|
||||
cd include && $(MAKE) install
|
||||
cd docs && $(MAKE) install
|
||||
|
||||
# We extend the standard uninstall with a custom hook:
|
||||
uninstall-hook:
|
||||
cd include && $(MAKE) uninstall
|
||||
cd docs && $(MAKE) uninstall
|
||||
|
||||
ca-bundle: lib/mk-ca-bundle.pl
|
||||
@echo "generating a fresh ca-bundle.crt"
|
||||
@perl $< -b -l -u lib/ca-bundle.crt
|
||||
|
||||
ca-firefox: lib/firefox-db2pem.sh
|
||||
@echo "generating a fresh ca-bundle.crt"
|
||||
./lib/firefox-db2pem.sh lib/ca-bundle.crt
|
||||
|
||||
checksrc:
|
||||
cd lib && $(MAKE) checksrc
|
||||
cd src && $(MAKE) checksrc
|
||||
|
||||
.PHONY: vc-ide
|
||||
|
||||
vc-ide: $(VC6_LIBDSP_DEPS) $(VC6_SRCDSP_DEPS) $(VC7_LIBVCPROJ_DEPS) \
|
||||
$(VC7_SRCVCPROJ_DEPS) $(VC71_LIBVCPROJ_DEPS) $(VC71_SRCVCPROJ_DEPS) \
|
||||
$(VC8_LIBVCPROJ_DEPS) $(VC8_SRCVCPROJ_DEPS) $(VC9_LIBVCPROJ_DEPS) \
|
||||
$(VC9_SRCVCPROJ_DEPS) $(VC10_LIBVCXPROJ_DEPS) $(VC10_SRCVCXPROJ_DEPS) \
|
||||
$(VC11_LIBVCXPROJ_DEPS) $(VC11_SRCVCXPROJ_DEPS) $(VC12_LIBVCXPROJ_DEPS) \
|
||||
$(VC12_SRCVCXPROJ_DEPS)
|
||||
@(win32_lib_srcs='$(LIB_CFILES)'; \
|
||||
win32_lib_hdrs='$(LIB_HFILES) config-win32.h'; \
|
||||
win32_lib_rc='$(LIB_RCFILES)'; \
|
||||
win32_lib_vtls_srcs='$(LIB_VTLS_CFILES)'; \
|
||||
win32_lib_vtls_hdrs='$(LIB_VTLS_HFILES)'; \
|
||||
win32_src_srcs='$(CURL_CFILES)'; \
|
||||
win32_src_hdrs='$(CURL_HFILES)'; \
|
||||
win32_src_rc='$(CURL_RCFILES)'; \
|
||||
win32_src_x_srcs='$(CURLX_CFILES)'; \
|
||||
win32_src_x_hdrs='$(CURLX_HFILES) ../lib/config-win32.h'; \
|
||||
\
|
||||
sorted_lib_srcs=`for file in $$win32_lib_srcs; do echo $$file; done | sort`; \
|
||||
sorted_lib_hdrs=`for file in $$win32_lib_hdrs; do echo $$file; done | sort`; \
|
||||
sorted_lib_vtls_srcs=`for file in $$win32_lib_vtls_srcs; do echo $$file; done | sort`; \
|
||||
sorted_lib_vtls_hdrs=`for file in $$win32_lib_vtls_hdrs; do echo $$file; done | sort`; \
|
||||
sorted_src_srcs=`for file in $$win32_src_srcs; do echo $$file; done | sort`; \
|
||||
sorted_src_hdrs=`for file in $$win32_src_hdrs; do echo $$file; done | sort`; \
|
||||
sorted_src_x_srcs=`for file in $$win32_src_x_srcs; do echo $$file; done | sort`; \
|
||||
sorted_src_x_hdrs=`for file in $$win32_src_x_hdrs; do echo $$file; done | sort`; \
|
||||
\
|
||||
awk_code='\
|
||||
function gen_element(type, dir, file)\
|
||||
{\
|
||||
sub(/vtls\//, "", file);\
|
||||
\
|
||||
spaces=" ";\
|
||||
if(dir == "lib\\vtls")\
|
||||
tabs=" ";\
|
||||
else\
|
||||
tabs=" ";\
|
||||
\
|
||||
if(type == "dsp") {\
|
||||
printf("# Begin Source File\r\n");\
|
||||
printf("\r\n");\
|
||||
printf("SOURCE=..\\..\\..\\..\\%s\\%s\r\n", dir, file);\
|
||||
printf("# End Source File\r\n");\
|
||||
}\
|
||||
else if(type == "vcproj1") {\
|
||||
printf("%s<File\r\n", tabs);\
|
||||
printf("%s RelativePath=\"..\\..\\..\\..\\%s\\%s\">\r\n",\
|
||||
tabs, dir, file);\
|
||||
printf("%s</File>\r\n", tabs);\
|
||||
}\
|
||||
else if(type == "vcproj2") {\
|
||||
printf("%s<File\r\n", tabs);\
|
||||
printf("%s RelativePath=\"..\\..\\..\\..\\%s\\%s\"\r\n",\
|
||||
tabs, dir, file);\
|
||||
printf("%s>\r\n", tabs);\
|
||||
printf("%s</File>\r\n", tabs);\
|
||||
}\
|
||||
else if(type == "vcxproj") {\
|
||||
i = index(file, ".");\
|
||||
ext = substr(file, i == 0 ? 0 : i + 1);\
|
||||
\
|
||||
if(ext == "c")\
|
||||
printf("%s<ClCompile Include=\"..\\..\\..\\..\\%s\\%s\" />\r\n",\
|
||||
spaces, dir, file);\
|
||||
else if(ext == "h")\
|
||||
printf("%s<ClInclude Include=\"..\\..\\..\\..\\%s\\%s\" />\r\n",\
|
||||
spaces, dir, file);\
|
||||
else if(ext == "rc")\
|
||||
printf("%s<ResourceCompile Include=\"..\\..\\..\\..\\%s\\%s\" />\r\n",\
|
||||
spaces, dir, file);\
|
||||
}\
|
||||
}\
|
||||
\
|
||||
{\
|
||||
\
|
||||
if($$0 == "CURL_LIB_C_FILES") {\
|
||||
split(lib_srcs, arr);\
|
||||
for(val in arr) gen_element(proj_type, "lib", arr[val]);\
|
||||
}\
|
||||
else if($$0 == "CURL_LIB_H_FILES") {\
|
||||
split(lib_hdrs, arr);\
|
||||
for(val in arr) gen_element(proj_type, "lib", arr[val]);\
|
||||
}\
|
||||
else if($$0 == "CURL_LIB_RC_FILES") {\
|
||||
split(lib_rc, arr);\
|
||||
for(val in arr) gen_element(proj_type, "lib", arr[val]);\
|
||||
}\
|
||||
else if($$0 == "CURL_LIB_VTLS_C_FILES") {\
|
||||
split(lib_vtls_srcs, arr);\
|
||||
for(val in arr) gen_element(proj_type, "lib\\vtls", arr[val]);\
|
||||
}\
|
||||
else if($$0 == "CURL_LIB_VTLS_H_FILES") {\
|
||||
split(lib_vtls_hdrs, arr);\
|
||||
for(val in arr) gen_element(proj_type, "lib\\vtls", arr[val]);\
|
||||
}\
|
||||
else if($$0 == "CURL_SRC_C_FILES") {\
|
||||
split(src_srcs, arr);\
|
||||
for(val in arr) gen_element(proj_type, "src", arr[val]);\
|
||||
}\
|
||||
else if($$0 == "CURL_SRC_H_FILES") {\
|
||||
split(src_hdrs, arr);\
|
||||
for(val in arr) gen_element(proj_type, "src", arr[val]);\
|
||||
}\
|
||||
else if($$0 == "CURL_SRC_RC_FILES") {\
|
||||
split(src_rc, arr);\
|
||||
for(val in arr) gen_element(proj_type, "src", arr[val]);\
|
||||
}\
|
||||
else if($$0 == "CURL_SRC_X_C_FILES") {\
|
||||
split(src_x_srcs, arr);\
|
||||
for(val in arr) {\
|
||||
sub(/..\/lib\//, "", arr[val]);\
|
||||
gen_element(proj_type, "lib", arr[val]);\
|
||||
}\
|
||||
}\
|
||||
else if($$0 == "CURL_SRC_X_H_FILES") {\
|
||||
split(src_x_hdrs, arr);\
|
||||
for(val in arr) {\
|
||||
sub(/..\/lib\//, "", arr[val]);\
|
||||
gen_element(proj_type, "lib", arr[val]);\
|
||||
}\
|
||||
}\
|
||||
else\
|
||||
printf("%s\r\n", $$0);\
|
||||
}';\
|
||||
\
|
||||
echo "generating '$(VC6_LIBDSP)'"; \
|
||||
awk -v proj_type=dsp \
|
||||
-v lib_srcs="$$sorted_lib_srcs" \
|
||||
-v lib_hdrs="$$sorted_lib_hdrs" \
|
||||
-v lib_rc="$$win32_lib_rc" \
|
||||
-v lib_vtls_srcs="$$sorted_lib_vtls_srcs" \
|
||||
-v lib_vtls_hdrs="$$sorted_lib_vtls_hdrs" \
|
||||
"$$awk_code" $(srcdir)/$(VC6_LIBTMPL) > $(VC6_LIBDSP) || { exit 1; }; \
|
||||
\
|
||||
echo "generating '$(VC6_SRCDSP)'"; \
|
||||
awk -v proj_type=dsp \
|
||||
-v src_srcs="$$sorted_src_srcs" \
|
||||
-v src_hdrs="$$sorted_src_hdrs" \
|
||||
-v src_rc="$$win32_src_rc" \
|
||||
-v src_x_srcs="$$sorted_src_x_srcs" \
|
||||
-v src_x_hdrs="$$sorted_src_x_hdrs" \
|
||||
"$$awk_code" $(srcdir)/$(VC6_SRCTMPL) > $(VC6_SRCDSP) || { exit 1; }; \
|
||||
\
|
||||
echo "generating '$(VC7_LIBVCPROJ)'"; \
|
||||
awk -v proj_type=vcproj1 \
|
||||
-v lib_srcs="$$sorted_lib_srcs" \
|
||||
-v lib_hdrs="$$sorted_lib_hdrs" \
|
||||
-v lib_rc="$$win32_lib_rc" \
|
||||
-v lib_vtls_srcs="$$sorted_lib_vtls_srcs" \
|
||||
-v lib_vtls_hdrs="$$sorted_lib_vtls_hdrs" \
|
||||
"$$awk_code" $(srcdir)/$(VC7_LIBTMPL) > $(VC7_LIBVCPROJ) || { exit 1; }; \
|
||||
\
|
||||
echo "generating '$(VC7_SRCVCPROJ)'"; \
|
||||
awk -v proj_type=vcproj1 \
|
||||
-v src_srcs="$$sorted_src_srcs" \
|
||||
-v src_hdrs="$$sorted_src_hdrs" \
|
||||
-v src_rc="$$win32_src_rc" \
|
||||
-v src_x_srcs="$$sorted_src_x_srcs" \
|
||||
-v src_x_hdrs="$$sorted_src_x_hdrs" \
|
||||
"$$awk_code" $(srcdir)/$(VC7_SRCTMPL) > $(VC7_SRCVCPROJ) || { exit 1; }; \
|
||||
\
|
||||
echo "generating '$(VC71_LIBVCPROJ)'"; \
|
||||
awk -v proj_type=vcproj1 \
|
||||
-v lib_srcs="$$sorted_lib_srcs" \
|
||||
-v lib_hdrs="$$sorted_lib_hdrs" \
|
||||
-v lib_rc="$$win32_lib_rc" \
|
||||
-v lib_vtls_srcs="$$sorted_lib_vtls_srcs" \
|
||||
-v lib_vtls_hdrs="$$sorted_lib_vtls_hdrs" \
|
||||
"$$awk_code" $(srcdir)/$(VC71_LIBTMPL) > $(VC71_LIBVCPROJ) || { exit 1; }; \
|
||||
\
|
||||
echo "generating '$(VC71_SRCVCPROJ)'"; \
|
||||
awk -v proj_type=vcproj1 \
|
||||
-v src_srcs="$$sorted_src_srcs" \
|
||||
-v src_hdrs="$$sorted_src_hdrs" \
|
||||
-v src_rc="$$win32_src_rc" \
|
||||
-v src_x_srcs="$$sorted_src_x_srcs" \
|
||||
-v src_x_hdrs="$$sorted_src_x_hdrs" \
|
||||
"$$awk_code" $(srcdir)/$(VC71_SRCTMPL) > $(VC71_SRCVCPROJ) || { exit 1; }; \
|
||||
\
|
||||
echo "generating '$(VC8_LIBVCPROJ)'"; \
|
||||
awk -v proj_type=vcproj2 \
|
||||
-v lib_srcs="$$sorted_lib_srcs" \
|
||||
-v lib_hdrs="$$sorted_lib_hdrs" \
|
||||
-v lib_rc="$$win32_lib_rc" \
|
||||
-v lib_vtls_srcs="$$sorted_lib_vtls_srcs" \
|
||||
-v lib_vtls_hdrs="$$sorted_lib_vtls_hdrs" \
|
||||
"$$awk_code" $(srcdir)/$(VC8_LIBTMPL) > $(VC8_LIBVCPROJ) || { exit 1; }; \
|
||||
\
|
||||
echo "generating '$(VC8_SRCVCPROJ)'"; \
|
||||
awk -v proj_type=vcproj2 \
|
||||
-v src_srcs="$$sorted_src_srcs" \
|
||||
-v src_hdrs="$$sorted_src_hdrs" \
|
||||
-v src_rc="$$win32_src_rc" \
|
||||
-v src_x_srcs="$$sorted_src_x_srcs" \
|
||||
-v src_x_hdrs="$$sorted_src_x_hdrs" \
|
||||
"$$awk_code" $(srcdir)/$(VC8_SRCTMPL) > $(VC8_SRCVCPROJ) || { exit 1; }; \
|
||||
\
|
||||
echo "generating '$(VC9_LIBVCPROJ)'"; \
|
||||
awk -v proj_type=vcproj2 \
|
||||
-v lib_srcs="$$sorted_lib_srcs" \
|
||||
-v lib_hdrs="$$sorted_lib_hdrs" \
|
||||
-v lib_rc="$$win32_lib_rc" \
|
||||
-v lib_vtls_srcs="$$sorted_lib_vtls_srcs" \
|
||||
-v lib_vtls_hdrs="$$sorted_lib_vtls_hdrs" \
|
||||
"$$awk_code" $(srcdir)/$(VC9_LIBTMPL) > $(VC9_LIBVCPROJ) || { exit 1; }; \
|
||||
\
|
||||
echo "generating '$(VC9_SRCVCPROJ)'"; \
|
||||
awk -v proj_type=vcproj2 \
|
||||
-v src_srcs="$$sorted_src_srcs" \
|
||||
-v src_hdrs="$$sorted_src_hdrs" \
|
||||
-v src_rc="$$win32_src_rc" \
|
||||
-v src_x_srcs="$$sorted_src_x_srcs" \
|
||||
-v src_x_hdrs="$$sorted_src_x_hdrs" \
|
||||
"$$awk_code" $(srcdir)/$(VC9_SRCTMPL) > $(VC9_SRCVCPROJ) || { exit 1; }; \
|
||||
\
|
||||
echo "generating '$(VC10_LIBVCXPROJ)'"; \
|
||||
awk -v proj_type=vcxproj \
|
||||
-v lib_srcs="$$sorted_lib_srcs" \
|
||||
-v lib_hdrs="$$sorted_lib_hdrs" \
|
||||
-v lib_rc="$$win32_lib_rc" \
|
||||
-v lib_vtls_srcs="$$sorted_lib_vtls_srcs" \
|
||||
-v lib_vtls_hdrs="$$sorted_lib_vtls_hdrs" \
|
||||
"$$awk_code" $(srcdir)/$(VC10_LIBTMPL) > $(VC10_LIBVCXPROJ) || { exit 1; }; \
|
||||
\
|
||||
echo "generating '$(VC10_SRCVCXPROJ)'"; \
|
||||
awk -v proj_type=vcxproj \
|
||||
-v src_srcs="$$sorted_src_srcs" \
|
||||
-v src_hdrs="$$sorted_src_hdrs" \
|
||||
-v src_rc="$$win32_src_rc" \
|
||||
-v src_x_srcs="$$sorted_src_x_srcs" \
|
||||
-v src_x_hdrs="$$sorted_src_x_hdrs" \
|
||||
"$$awk_code" $(srcdir)/$(VC10_SRCTMPL) > $(VC10_SRCVCXPROJ) || { exit 1; }; \
|
||||
\
|
||||
echo "generating '$(VC11_LIBVCXPROJ)'"; \
|
||||
awk -v proj_type=vcxproj \
|
||||
-v lib_srcs="$$sorted_lib_srcs" \
|
||||
-v lib_hdrs="$$sorted_lib_hdrs" \
|
||||
-v lib_rc="$$win32_lib_rc" \
|
||||
-v lib_vtls_srcs="$$sorted_lib_vtls_srcs" \
|
||||
-v lib_vtls_hdrs="$$sorted_lib_vtls_hdrs" \
|
||||
"$$awk_code" $(srcdir)/$(VC11_LIBTMPL) > $(VC11_LIBVCXPROJ) || { exit 1; }; \
|
||||
\
|
||||
echo "generating '$(VC11_SRCVCXPROJ)'"; \
|
||||
awk -v proj_type=vcxproj \
|
||||
-v src_srcs="$$sorted_src_srcs" \
|
||||
-v src_hdrs="$$sorted_src_hdrs" \
|
||||
-v src_rc="$$win32_src_rc" \
|
||||
-v src_x_srcs="$$sorted_src_x_srcs" \
|
||||
-v src_x_hdrs="$$sorted_src_x_hdrs" \
|
||||
"$$awk_code" $(srcdir)/$(VC11_SRCTMPL) > $(VC11_SRCVCXPROJ) || { exit 1; }; \
|
||||
\
|
||||
echo "generating '$(VC12_LIBVCXPROJ)'"; \
|
||||
awk -v proj_type=vcxproj \
|
||||
-v lib_srcs="$$sorted_lib_srcs" \
|
||||
-v lib_hdrs="$$sorted_lib_hdrs" \
|
||||
-v lib_rc="$$win32_lib_rc" \
|
||||
-v lib_vtls_srcs="$$sorted_lib_vtls_srcs" \
|
||||
-v lib_vtls_hdrs="$$sorted_lib_vtls_hdrs" \
|
||||
"$$awk_code" $(srcdir)/$(VC12_LIBTMPL) > $(VC12_LIBVCXPROJ) || { exit 1; }; \
|
||||
\
|
||||
echo "generating '$(VC12_SRCVCXPROJ)'"; \
|
||||
awk -v proj_type=vcxproj \
|
||||
-v src_srcs="$$sorted_src_srcs" \
|
||||
-v src_hdrs="$$sorted_src_hdrs" \
|
||||
-v src_rc="$$win32_src_rc" \
|
||||
-v src_x_srcs="$$sorted_src_x_srcs" \
|
||||
-v src_x_hdrs="$$sorted_src_x_hdrs" \
|
||||
"$$awk_code" $(srcdir)/$(VC12_SRCTMPL) > $(VC12_SRCVCXPROJ) || { exit 1; };)
|
||||
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user