mirror of
https://github.com/MariaDB/server.git
synced 2026-05-10 09:04:29 +02:00
Bug#24732 Executables do not include Vista manifests
- Added script to generate application specific manifest. - Added new CMake MACRO to add customer build events which will first generate a manifest and then embeds that manifest into an executable. BitKeeper/etc/ignore: Bug#24732 Executables do not include Vista manifests - Revise ignore rules to disallow auto-generated cmake files but to allow custom macros defined in a .cmake file. CMakeLists.txt: Bug#24732 Executables do not include Vista manifests - Added logic for EMBED_MANIFESTS configuration option. client/CMakeLists.txt: Bug#24732 Executables do not include Vista manifests - Embed manifest with custom CMake MACRO for client executables. extra/CMakeLists.txt: Bug#24732 Executables do not include Vista manifests - Embed manifest with custom CMake MACRO for my_print_default executable. libmysql/CMakeLists.txt: Bug#24732 Executables do not include Vista manifests - Embed manifest with custom CMake MACRO for myTest executable. myisam/CMakeLists.txt: Bug#24732 Executables do not include Vista manifests - Embed manifest with custom CMake MACRO for myisam executables. server-tools/instance-manager/CMakeLists.txt: Bug#24732 Executables do not include Vista manifests - Embed manifest with custom CMake MACRO for mysqlmanager executable. sql/CMakeLists.txt: Bug#24732 Executables do not include Vista manifests - Embed manifest with custom CMake MACRO for mysqld executable. win/README: Bug#24732 Executables do not include Vista manifests - Added new configuration option documentation. win/configure.js: Bug#24732 Executables do not include Vista manifests - Added new EMBED_MANIFESTS configuration option. win/create_manifest.js: Bug#24732 Executables do not include Vista manifests - Manifest generator. This script generates a basic manifest. win/mysql_manifest.cmake: Bug#24732 Executables do not include Vista manifests - Define new CMake MACRO for adding Windows manifests to executables.
This commit is contained in:
parent
b44eee2a67
commit
1ce0d7c63b
12 changed files with 181 additions and 1 deletions
|
|
@ -50,6 +50,8 @@ The options right now are
|
|||
MYSQL_TCP_PORT=<port> Server port, default 3306
|
||||
DISABLE_GRANT_OPTIONS Disables the use of --init-file and --skip-grant-tables
|
||||
options of mysqld.exe
|
||||
EMBED_MANIFESTS Embed custom manifests into final exes, otherwise VS
|
||||
default will be used.
|
||||
|
||||
|
||||
So the command line could look like:
|
||||
|
|
|
|||
|
|
@ -47,6 +47,7 @@ try
|
|||
case "WITH_PARTITION_STORAGE_ENGINE":
|
||||
case "__NT__":
|
||||
case "DISABLE_GRANT_OPTIONS":
|
||||
case "EMBED_MANIFESTS":
|
||||
configfile.WriteLine("SET (" + args.Item(i) + " TRUE)");
|
||||
break;
|
||||
case "MYSQL_SERVER_SUFFIX":
|
||||
|
|
|
|||
85
win/create_manifest.js
Executable file
85
win/create_manifest.js
Executable file
|
|
@ -0,0 +1,85 @@
|
|||
/*
|
||||
manifest.js - Writes a custom XML manifest for each executable/library
|
||||
6 command line options must be supplied:
|
||||
name - Name of the executable/library into which the mainfest will be
|
||||
embedded.
|
||||
version - Version of the executable
|
||||
arch - Architecture intended.
|
||||
type - Application type.
|
||||
exe_level - Application execution level.
|
||||
[asInvoker|highestAvailable|requireAdministrator]
|
||||
outfile - Final destination where mainfest will be written.
|
||||
|
||||
Example:
|
||||
cscript manifest.js name=mysql version=5.0.32 arch=X86 type=win32
|
||||
exe_level=asInvoker outfile=out.xml
|
||||
*/
|
||||
|
||||
try
|
||||
{
|
||||
var args = WScript.Arguments
|
||||
for (i=0; i < args.Count(); i++)
|
||||
{
|
||||
var parts = args.Item(i).split('=');
|
||||
switch (parts[0])
|
||||
{
|
||||
case "name":
|
||||
var app_name= parts[1];
|
||||
break;
|
||||
case "version":
|
||||
var app_version= parts[1];
|
||||
break;
|
||||
case "arch":
|
||||
var app_arch= parts[1];
|
||||
break;
|
||||
case "type":
|
||||
var app_type= parts[1];
|
||||
break;
|
||||
case "exe_level":
|
||||
var app_exe_level= parts[1];
|
||||
break;
|
||||
case "outfile":
|
||||
var manifest_file= parts[1];
|
||||
break;
|
||||
default:
|
||||
WScript.echo("Invalid argument supplied.");
|
||||
}
|
||||
}
|
||||
if (i != 6)
|
||||
throw new Error(1, "Incorrect number of arguments.");
|
||||
|
||||
var manifest_xml= "<?xml version=\'1.0\' encoding=\'UTF-8\' standalone=\'yes\'?>\r\n";
|
||||
manifest_xml+= "<assembly xmlns=\'urn:schemas-microsoft-com:asm.v1\'";
|
||||
manifest_xml+= " manifestVersion=\'1.0\'>\r\n";
|
||||
// Application Information
|
||||
manifest_xml+= "\t<assemblyIdentity name=\'" + app_name + "\'";
|
||||
manifest_xml+= " version=\'" + app_version + "\'";
|
||||
manifest_xml+= " processorArchitecture=\'" + app_arch + "\'";
|
||||
// TOADD - Add publicKeyToken attribute once we have Authenticode key.
|
||||
manifest_xml+= " type=\'" + app_type + "\' />\r\n";
|
||||
// Identify the application security requirements.
|
||||
manifest_xml+= "\t<trustInfo xmlns=\'urn:schemas-microsoft-com:asm.v2\'>\r\n";
|
||||
manifest_xml+= "\t\t<security>\r\n\t\t\t<requestedPrivileges>\r\n\t\t\t\t";
|
||||
manifest_xml+= "<requestedExecutionLevel level=\'" + app_exe_level + "\'";
|
||||
manifest_xml+= " uiAccess=\'false\'/>\r\n";
|
||||
manifest_xml+= "\t\t\t</requestedPrivileges>\r\n\t\t</security>\r\n";
|
||||
manifest_xml+= "\t</trustInfo>\r\n</assembly>\r\n";
|
||||
|
||||
// Write the valid XML to it's final destination.
|
||||
var outfileXML = WScript.CreateObject("Msxml2.DOMDocument.3.0");
|
||||
outfileXML.async = false;
|
||||
if (!outfileXML.loadXML(manifest_xml))
|
||||
{
|
||||
WScript.Echo(manifest_xml);
|
||||
throw new Error(2, "Invalid XML");
|
||||
}
|
||||
outfileXML.save(manifest_file);
|
||||
|
||||
WScript.Echo("Success, created custom manifest!");
|
||||
WScript.Quit(0);
|
||||
}
|
||||
catch (e)
|
||||
{
|
||||
WScript.Echo("Error: " + e.description);
|
||||
WScript.Quit(1);
|
||||
}
|
||||
20
win/mysql_manifest.cmake
Executable file
20
win/mysql_manifest.cmake
Executable file
|
|
@ -0,0 +1,20 @@
|
|||
|
||||
# - MYSQL_EMBED_MANIFEST(target_name required_privs)
|
||||
# Create a manifest for target_name. Set the execution level to require_privs
|
||||
#
|
||||
# NOTE. PROCESSOR_ARCH must be defined before this MACRO is called.
|
||||
|
||||
MACRO(MYSQL_EMBED_MANIFEST _target_name _required_privs)
|
||||
ADD_CUSTOM_COMMAND(
|
||||
TARGET ${_target_name}
|
||||
PRE_LINK
|
||||
COMMAND cscript.exe
|
||||
ARGS "${PROJECT_SOURCE_DIR}/win/create_manifest.js" name=$(ProjectName) version=${VERSION} arch=${PROCESSOR_ARCH} type=$(PlatformName) exe_level=${_required_privs} outfile=$(IntDir)\\$(TargetFileName).intermediate.manifest
|
||||
COMMENT "Generates the contents of the manifest contents.")
|
||||
ADD_CUSTOM_COMMAND(
|
||||
TARGET ${_target_name}
|
||||
POST_BUILD
|
||||
COMMAND mt.exe
|
||||
ARGS -nologo -manifest $(IntDir)\\$(TargetFileName).intermediate.manifest -outputresource:$(TargetPath)
|
||||
COMMENT "Embeds the manifest contents.")
|
||||
ENDMACRO(MYSQL_EMBED_MANIFEST)
|
||||
Loading…
Add table
Add a link
Reference in a new issue