summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBertrand Bellenot <Bertrand.Bellenot@cern.ch>2016-12-09 11:22:23 +0000
committerBrad King <brad.king@kitware.com>2017-03-21 10:02:33 -0400
commit845c482448e5b60f4934a48eea9c8c1e466f8fea (patch)
tree84e3174d3516bd1efd4986e7c238ca636fa8b911
parent4f90e7931487195b5d540fbaa5dad1c90b26cee1 (diff)
downloadcmake-845c482448e5b60f4934a48eea9c8c1e466f8fea.tar.gz
bindexplib: Add method for parsing and integrating `.def` files
-rw-r--r--Source/bindexplib.cxx30
-rw-r--r--Source/bindexplib.h1
2 files changed, 30 insertions, 1 deletions
diff --git a/Source/bindexplib.cxx b/Source/bindexplib.cxx
index 7d61ea6053..47c75652ee 100644
--- a/Source/bindexplib.cxx
+++ b/Source/bindexplib.cxx
@@ -64,7 +64,7 @@
#include "bindexplib.h"
#include <cmsys/Encoding.hxx>
-#include <fstream>
+#include <cmsys/FStream.hxx>
#include <iostream>
#include <windows.h>
@@ -429,6 +429,34 @@ bool bindexplib::AddObjectFile(const char* filename)
return DumpFile(filename, this->Symbols, this->DataSymbols);
}
+bool bindexplib::AddDefinitionFile(const char* filename)
+{
+ cmsys::ifstream infile(filename);
+ if (!infile) {
+ fprintf(stderr, "Couldn't open definition file '%s'\n", filename);
+ return false;
+ }
+ std::string str;
+ while (std::getline(infile, str)) {
+ // skip the LIBRAY and EXPORTS lines (if any)
+ if ((str.compare(0,7,"LIBRARY") == 0) ||
+ (str.compare(0,7,"EXPORTS") == 0)) {
+ continue;
+ }
+ // remove leading tabs & spaces
+ str.erase(0, str.find_first_not_of(" \t"));
+ std::size_t found = str.find(" \t DATA");
+ if (found != std::string::npos) {
+ str.erase (found, std::string::npos);
+ this->DataSymbols.insert(str);
+ } else {
+ this->Symbols.insert(str);
+ }
+ }
+ infile.close();
+ return true;
+}
+
void bindexplib::WriteFile(FILE* file)
{
fprintf(file,"EXPORTS \n");
diff --git a/Source/bindexplib.h b/Source/bindexplib.h
index d6900ba88b..7f0615f5da 100644
--- a/Source/bindexplib.h
+++ b/Source/bindexplib.h
@@ -13,6 +13,7 @@ class bindexplib
{
public:
bindexplib() {}
+ bool AddDefinitionFile(const char* filename);
bool AddObjectFile(const char* filename);
void WriteFile(FILE* file);
private: