summaryrefslogtreecommitdiff
path: root/win
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2017-04-06 09:52:25 +0300
committerMarko Mäkelä <marko.makela@mariadb.com>2017-04-06 09:52:25 +0300
commit1494147cf6f810dfd2a87c93be53e3c9da3a0958 (patch)
treef62d714617394660d75f804aa7850449733cc564 /win
parentd528fd72f281541e95cec803e9db63d620cccf5e (diff)
parent25d69ea0124941cca54dbf0c2ebb2aa20ab2d6a8 (diff)
downloadmariadb-git-1494147cf6f810dfd2a87c93be53e3c9da3a0958.tar.gz
Merge 10.1 into 10.2
Diffstat (limited to 'win')
-rw-r--r--win/create_def_file.js46
1 files changed, 41 insertions, 5 deletions
diff --git a/win/create_def_file.js b/win/create_def_file.js
index 5fb28ef0bee..25bbbb4eb3d 100644
--- a/win/create_def_file.js
+++ b/win/create_def_file.js
@@ -54,6 +54,22 @@ var is64 = args.Item(0).toLowerCase() == "x64";
var shell = new ActiveXObject("WScript.Shell");
var fso = new ActiveXObject("Scripting.FileSystemObject");
+/*
+ If .def file is used with together with lib.exe
+ the name mangling for stdcall is slightly different.
+
+ Undescore prefix for stdcall function name must be removed for
+ lib.exe but not link.exe (see ScrubSymbol())
+
+ This difference is not documented anywhere and could
+ be a bug in compiler tools.
+
+ We use a parameter /forLib, if the resulting .def file is used
+ with lib.exe .
+*/
+var forLib = false;
+
+
OutputSymbols(CollectSymbols());
@@ -62,8 +78,8 @@ function OutputSymbols(symbols)
{
var out = WScript.StdOut;
out.WriteLine("EXPORTS");
- for (var sym in symbols)
- out.WriteLine(sym);
+ for (var i= 0; i < symbols.length; i++)
+ out.WriteLine(symbols[i]);
}
function echo(message)
@@ -72,9 +88,10 @@ function echo(message)
}
// Extract global symbol names and type from objects
+// Returns string array with symbol names
function CollectSymbols()
{
- var uniqueSymbols = new Array();
+ var uniqueSymbols = new Object();
try
{
@@ -146,7 +163,19 @@ function CollectSymbols()
uniqueSymbols[symbol] = 1;
}
fso.DeleteFile(rspfilename);
- return uniqueSymbols;
+ // Sort symbols names
+ var keys=[];
+ var sorted = {};
+ for (key in uniqueSymbols)
+ {
+ if (uniqueSymbols.hasOwnProperty(key))
+ {
+ keys.push(key);
+ }
+ }
+ keys.sort();
+
+ return keys;
}
// performs necessary cleanup on the symbol name
@@ -156,6 +185,9 @@ function ScrubSymbol(symbol)
if (symbol.charAt(0) != "_")
return symbol;
+ if (forLib)
+ return symbol.substring(1, symbol.length);
+
var atSign = symbol.indexOf("@");
if (atSign != -1)
{
@@ -189,7 +221,11 @@ function CreateResponseFile(filename)
var index = 1;
for (; index < args.length; index++)
{
- addToResponseFile(args.Item(index),responseFile);
+ var param = args.Item(index);
+ if (param == "/forLib")
+ forLib = true;
+ else
+ addToResponseFile(args.Item(index),responseFile);
}
responseFile.Close();
}