mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
3b2ea70671
make sure that if builder configured with a non-standard (!= 3306) default TCP port that value actually gets used throughout. win/configure.js: Bug #15327: configure: --with-tcp-port option being partially ignored If MYSQL_TCP_PORT defaulted in configure (factory default 3306 at the time of this writing), set MYSQL_TCP_PORT to factory default, then clear factory default after. That way, we lose no information, and we can distinguish between "defaulted" and the pathological case "builder specifically configured a port that coincides with factory default." This can in theory happen if builder configures and builds several servers from a script (--with-tcp-port=3306, --with-tcp-port=3316, --with-tcp-port=3326). Not all that probable, but much preferable to having more "magic" happen in the server when we can solve this without any guesswork.
185 lines
6.5 KiB
JavaScript
185 lines
6.5 KiB
JavaScript
// Configure.js
|
|
//
|
|
// Copyright (C) 2006 MySQL AB
|
|
//
|
|
// This program is free software; you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation; version 2 of the License.
|
|
//
|
|
// This program is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with this program; if not, write to the Free Software
|
|
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
|
|
ForReading = 1;
|
|
ForWriting = 2;
|
|
ForAppending = 8;
|
|
|
|
try
|
|
{
|
|
var fso = new ActiveXObject("Scripting.FileSystemObject");
|
|
|
|
var args = WScript.Arguments
|
|
|
|
// read in the Unix configure.in file
|
|
var configureInTS = fso.OpenTextFile("configure.in", ForReading);
|
|
var configureIn = configureInTS.ReadAll();
|
|
configureInTS.Close();
|
|
var default_comment = "Source distribution";
|
|
var default_port = GetValue(configureIn, "MYSQL_TCP_PORT_DEFAULT");
|
|
var actual_port = 0;
|
|
|
|
var configfile = fso.CreateTextFile("win\\configure.data", true);
|
|
for (i=0; i < args.Count(); i++)
|
|
{
|
|
var parts = args.Item(i).split('=');
|
|
switch (parts[0])
|
|
{
|
|
case "WITH_ARCHIVE_STORAGE_ENGINE":
|
|
case "WITH_BLACKHOLE_STORAGE_ENGINE":
|
|
case "WITH_EXAMPLE_STORAGE_ENGINE":
|
|
case "WITH_FEDERATED_STORAGE_ENGINE":
|
|
case "WITH_INNOBASE_STORAGE_ENGINE":
|
|
case "WITH_PARTITION_STORAGE_ENGINE":
|
|
case "__NT__":
|
|
case "CYBOZU":
|
|
case "EMBED_MANIFESTS":
|
|
case "WITH_EMBEDDED_SERVER":
|
|
configfile.WriteLine("SET (" + args.Item(i) + " TRUE)");
|
|
break;
|
|
case "MYSQL_SERVER_SUFFIX":
|
|
case "MYSQLD_EXE_SUFFIX":
|
|
configfile.WriteLine("SET (" + parts[0] + " \""
|
|
+ parts[1] + "\")");
|
|
break;
|
|
case "COMPILATION_COMMENT":
|
|
default_comment = parts[1];
|
|
break;
|
|
case "MYSQL_TCP_PORT":
|
|
actual_port = parts[1];
|
|
break;
|
|
}
|
|
}
|
|
if (actual_port == 0)
|
|
{
|
|
// if we actually defaulted (as opposed to the pathological case of
|
|
// --with-tcp-port=<MYSQL_TCP_PORT_DEFAULT> which might in theory
|
|
// happen if whole batch of servers was built from a script), set
|
|
// the default to zero to indicate that; we don't lose information
|
|
// that way, because 0 obviously indicates that we can get the
|
|
// default value from MYSQL_TCP_PORT. this seems really evil, but
|
|
// testing for MYSQL_TCP_PORT==MYSQL_TCP_PORT_DEFAULT would make a
|
|
// a port of MYSQL_TCP_PORT_DEFAULT magic even if the builder did not
|
|
// intend it to mean "use the default, in fact, look up a good default
|
|
// from /etc/services if you can", but really, really meant 3306 when
|
|
// they passed in 3306. When they pass in a specific value, let them
|
|
// have it; don't second guess user and think we know better, this will
|
|
// just make people cross. this makes the the logic work like this
|
|
// (which is complicated enough):
|
|
//
|
|
// - if a port was set during build, use that as a default.
|
|
//
|
|
// - otherwise, try to look up a port in /etc/services; if that fails,
|
|
// use MYSQL_TCP_PORT_DEFAULT (at the time of this writing 3306)
|
|
//
|
|
// - allow the MYSQL_TCP_PORT environment variable to override that.
|
|
//
|
|
// - allow command-line parameters to override all of the above.
|
|
//
|
|
// the top-most MYSQL_TCP_PORT_DEFAULT is read from win/configure.js,
|
|
// so don't mess with that.
|
|
actual_port = default_port;
|
|
default_port = 0;
|
|
}
|
|
|
|
configfile.WriteLine("SET (COMPILATION_COMMENT \"" +
|
|
default_comment + "\")");
|
|
|
|
configfile.WriteLine("SET (PROTOCOL_VERSION \"" +
|
|
GetValue(configureIn, "PROTOCOL_VERSION") + "\")");
|
|
configfile.WriteLine("SET (DOT_FRM_VERSION \"" +
|
|
GetValue(configureIn, "DOT_FRM_VERSION") + "\")");
|
|
configfile.WriteLine("SET (MYSQL_TCP_PORT_DEFAULT \"" + default_port + "\")");
|
|
configfile.WriteLine("SET (MYSQL_TCP_PORT \"" + actual_port + "\")");
|
|
configfile.WriteLine("SET (MYSQL_UNIX_ADDR \"" +
|
|
GetValue(configureIn, "MYSQL_UNIX_ADDR_DEFAULT") + "\")");
|
|
var version = GetVersion(configureIn);
|
|
configfile.WriteLine("SET (VERSION \"" + version + "\")");
|
|
configfile.WriteLine("SET (MYSQL_BASE_VERSION \"" +
|
|
GetBaseVersion(version) + "\")");
|
|
configfile.WriteLine("SET (MYSQL_VERSION_ID \"" +
|
|
GetVersionId(version) + "\")");
|
|
|
|
configfile.Close();
|
|
|
|
fso = null;
|
|
|
|
WScript.Echo("done!");
|
|
}
|
|
catch (e)
|
|
{
|
|
WScript.Echo("Error: " + e.description);
|
|
}
|
|
|
|
function GetValue(str, key)
|
|
{
|
|
var pos = str.indexOf(key+'=');
|
|
if (pos == -1) return null;
|
|
pos += key.length + 1;
|
|
var end = str.indexOf("\n", pos);
|
|
if (str.charAt(pos) == "\"")
|
|
pos++;
|
|
if (str.charAt(end-1) == "\"")
|
|
end--;
|
|
return str.substring(pos, end);
|
|
}
|
|
|
|
function GetVersion(str)
|
|
{
|
|
var key = "AM_INIT_AUTOMAKE(mysql, ";
|
|
var pos = str.indexOf(key); //5.0.6-beta)
|
|
if (pos == -1) return null;
|
|
pos += key.length;
|
|
var end = str.indexOf(")", pos);
|
|
if (end == -1) return null;
|
|
return str.substring(pos, end);
|
|
}
|
|
|
|
function GetBaseVersion(version)
|
|
{
|
|
var dot = version.indexOf(".");
|
|
if (dot == -1) return null;
|
|
dot = version.indexOf(".", dot+1);
|
|
if (dot == -1) dot = version.length;
|
|
return version.substring(0, dot);
|
|
}
|
|
|
|
function GetVersionId(version)
|
|
{
|
|
var dot = version.indexOf(".");
|
|
if (dot == -1) return null;
|
|
var major = parseInt(version.substring(0, dot), 10);
|
|
|
|
dot++;
|
|
var nextdot = version.indexOf(".", dot);
|
|
if (nextdot == -1) return null;
|
|
var minor = parseInt(version.substring(dot, nextdot), 10);
|
|
dot = nextdot+1;
|
|
|
|
var stop = version.indexOf("-", dot);
|
|
if (stop == -1) stop = version.length;
|
|
var build = parseInt(version.substring(dot, stop), 10);
|
|
|
|
var id = major;
|
|
if (minor < 10)
|
|
id += '0';
|
|
id += minor;
|
|
if (build < 10)
|
|
id += '0';
|
|
id += build;
|
|
return id;
|
|
}
|