diff --git a/Source/bindexplib.cxx b/Source/bindexplib.cxx
index 7d61ea60538dad67d27fe2bbacf300fc1d0f9baf..47c75652eee3fc25b0a3e1ef2a44008ed977e6f9 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 d6900ba88b07dec23c9ea28b04d791c2ad971e7a..7f0615f5da6ff96b1d4896245fdc5419cc41327a 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: