diff options
Diffstat (limited to 'win')
-rw-r--r-- | win/create_def_file.js | 49 | ||||
-rw-r--r-- | win/packaging/CPackWixConfig.cmake | 21 | ||||
-rw-r--r-- | win/packaging/ca/CustomAction.cpp | 51 | ||||
-rw-r--r-- | win/packaging/create_msi.cmake.in | 52 | ||||
-rw-r--r-- | win/packaging/extra.wxs.in | 14 | ||||
-rw-r--r-- | win/packaging/heidisql.cmake | 2 | ||||
-rw-r--r-- | win/packaging/heidisql.wxi.in | 8 |
7 files changed, 136 insertions, 61 deletions
diff --git a/win/create_def_file.js b/win/create_def_file.js index 461ab0270f7..1fb9f4ac5a8 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) { @@ -174,7 +206,8 @@ function IsCompilerDefinedSymbol(symbol) (symbol.indexOf("??_C@_") != -1) || (symbol.indexOf("??_R") != -1) || (symbol.indexOf("??_7") != -1) || - (symbol.indexOf("?_G") != -1) || // scalar deleting destructor + (symbol.indexOf("_xmm@7F") != -1) || // VS2012 Win64 special symbol + (symbol.indexOf("?_G") != -1) || // scalar deleting destructor (symbol.indexOf("_VInfreq_?") != -1) || // special label (exception handler?) for Intel compiler (symbol.indexOf("?_E") != -1)); // vector deleting destructor } @@ -188,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(); } diff --git a/win/packaging/CPackWixConfig.cmake b/win/packaging/CPackWixConfig.cmake index 33711125701..6683020c179 100644 --- a/win/packaging/CPackWixConfig.cmake +++ b/win/packaging/CPackWixConfig.cmake @@ -9,7 +9,7 @@ IF(ESSENTIALS) ENDIF() ELSE() SET(CPACK_COMPONENTS_USED - "Server;Client;Development;SharedLibraries;Embedded;Documentation;IniFiles;Readme;Debuginfo;Common") + "Server;Client;Development;SharedLibraries;Embedded;Documentation;IniFiles;Readme;Debuginfo;Common;connect-engine;ClientPlugins;gssapi-server;gssapi-client;aws-key-management;backup") ENDIF() SET( WIX_FEATURE_MySQLServer_EXTRA_FEATURES "DBInstance;SharedClientServerComponents") @@ -54,15 +54,20 @@ SET(CPACK_COMPONENT_GROUP_MYSQLSERVER_DESCRIPTION "Install server") SET(CPACK_COMPONENT_DEBUGBINARIES_DESCRIPTION "Debug/trace versions of executables and libraries" ) #SET(CPACK_COMPONENT_DEBUGBINARIES_WIX_LEVEL 2) - - - #Subfeature "Data Files" - SET(CPACK_COMPONENT_DATAFILES_GROUP "MySQLServer") - SET(CPACK_COMPONENT_DATAFILES_DISPLAY_NAME "Server data files") - SET(CPACK_COMPONENT_DATAFILES_DESCRIPTION "Server data files" ) - SET(CPACK_COMPONENT_DATAFILES_HIDDEN 1) + # Subfeature "Backup" + SET(CPACK_COMPONENT_BACKUP_GROUP "MySQLServer") + SET(CPACK_COMPONENT_BACKUP_DISPLAY_NAME "Backup utilities") + SET(CPACK_COMPONENT_BACKUP_DESCRIPTION "Installs backup utilities(mariabackup and mbstream)") + + #Miscellaneous (hidden) components, part of server / or client programs + FOREACH(comp connect-engine ClientPlugins gssapi-server gssapi-client aws-key-management) + STRING(TOUPPER "${comp}" comp) + SET(CPACK_COMPONENT_${comp}_GROUP "MySQLServer") + SET(CPACK_COMPONENT_${comp}_HIDDEN 1) + ENDFOREACH() + #Feature "Devel" SET(CPACK_COMPONENT_GROUP_DEVEL_DISPLAY_NAME "Development Components") SET(CPACK_COMPONENT_GROUP_DEVEL_DESCRIPTION "Installs C/C++ header files and libraries") diff --git a/win/packaging/ca/CustomAction.cpp b/win/packaging/ca/CustomAction.cpp index b33ffe7e40e..4005bd6e73b 100644 --- a/win/packaging/ca/CustomAction.cpp +++ b/win/packaging/ca/CustomAction.cpp @@ -180,7 +180,7 @@ extern "C" UINT __stdcall CheckDirectoryEmpty(MSIHANDLE hInstall, empty= true; for(;;) { - if (wcscmp(data.cFileName, L".") || wcscmp(data.cFileName, L"..")) + if (wcscmp(data.cFileName, L".") && wcscmp(data.cFileName, L"..")) { empty= false; break; @@ -767,6 +767,49 @@ extern "C" UINT __stdcall PresetDatabaseProperties(MSIHANDLE hInstall) LExit: return WcaFinalize(er); } + +static BOOL FindErrorLog(const wchar_t *dir, wchar_t * ErrorLogFile, size_t ErrorLogLen) +{ + WIN32_FIND_DATA FindFileData; + HANDLE hFind; + wchar_t name[MAX_PATH]; + wcsncpy_s(name,dir, MAX_PATH); + wcsncat_s(name,L"\\*.err", MAX_PATH); + hFind = FindFirstFileW(name,&FindFileData); + if (hFind != INVALID_HANDLE_VALUE) + { + _snwprintf(ErrorLogFile, ErrorLogLen, + L"%s\\%s",dir, FindFileData.cFileName); + FindClose(hFind); + return TRUE; + } + return FALSE; +} + +static void DumpErrorLog(const wchar_t *dir) +{ + wchar_t filepath[MAX_PATH]; + if (!FindErrorLog(dir, filepath, MAX_PATH)) + return; + FILE *f= _wfopen(filepath, L"r"); + if (!f) + return; + char buf[2048]; + WcaLog(LOGMSG_STANDARD,"=== dumping error log %S === ",filepath); + while (fgets(buf, sizeof(buf), f)) + { + /* Strip off EOL chars. */ + size_t len = strlen(buf); + if (len > 0 && buf[len-1] == '\n') + buf[--len]= 0; + if (len > 0 && buf[len-1] == '\r') + buf[--len]= 0; + WcaLog(LOGMSG_STANDARD,"%s",buf); + } + fclose(f); + WcaLog(LOGMSG_STANDARD,"=== end of error log ==="); +} + /* Remove service and data directory created by CreateDatabase operation */ extern "C" UINT __stdcall CreateDatabaseRollback(MSIHANDLE hInstall) { @@ -774,7 +817,6 @@ extern "C" UINT __stdcall CreateDatabaseRollback(MSIHANDLE hInstall) UINT er = ERROR_SUCCESS; wchar_t* service= 0; wchar_t* dir= 0; - hr = WcaInitialize(hInstall, __FUNCTION__); ExitOnFailure(hr, "Failed to initialize"); WcaLog(LOGMSG_STANDARD, "Initialized."); @@ -804,6 +846,7 @@ extern "C" UINT __stdcall CreateDatabaseRollback(MSIHANDLE hInstall) } if(dir) { + DumpErrorLog(dir); ExecRemoveDataDirectory(dir); } LExit: @@ -886,11 +929,11 @@ extern "C" UINT __stdcall CheckServiceUpgrades(MSIHANDLE hInstall) (QUERY_SERVICE_CONFIGW*)(void *)config_buffer; DWORD needed; BOOL ok= QueryServiceConfigW(service, config,sizeof(config_buffer), - &needed); + &needed) && (config->dwStartType != SERVICE_DISABLED); CloseServiceHandle(service); if (ok) { - mysqld_service_properties props; + mysqld_service_properties props; if (get_mysql_service_properties(config->lpBinaryPathName, &props)) continue; /* diff --git a/win/packaging/create_msi.cmake.in b/win/packaging/create_msi.cmake.in index 0dfac8db6fd..db6f57e023d 100644 --- a/win/packaging/create_msi.cmake.in +++ b/win/packaging/create_msi.cmake.in @@ -29,6 +29,21 @@ SET(THIRD_PARTY_DOWNLOAD_LOCATION "@THIRD_PARTY_DOWNLOAD_LOCATION@") SET(THIRD_PARTY_FEATURE_CONDITION "@THIRD_PARTY_FEATURE_CONDITION@") SET(LIBMYSQL_LOCATION "@LIBMYSQL_LOCATION@") + +MACRO(MAKE_WIX_IDENTIFIER str varname) + STRING(REPLACE "/" "." ${varname} "${str}") + STRING(REGEX REPLACE "[^a-zA-Z_0-9.]" "_" ${varname} "${${varname}}") + STRING(LENGTH "${${varname}}" len) + # Identifier should be smaller than 72 character + # We have to cut down the length to 70 chars, since we add 2 char prefix + # pretty often + IF(len GREATER 70) + MATH(EXPR diff "${len}-67") + STRING(SUBSTRING "${${varname}}" ${diff} 67 shortstr) + SET(${varname} "___${shortstr}") + ENDIF() +ENDMACRO() + SET($ENV{VS_UNICODE_OUTPUT} "") IF(LIBMYSQL_LOCATION AND CMAKE_CFG_INTDIR) # resolve libmysql full path @@ -63,13 +78,6 @@ ELSE() ENDIF() SET(ENV{VS_UNICODE_OUTPUT}) -# Workaround for CMake bug#11452 -# Switch off the monolithic install -EXECUTE_PROCESS( - COMMAND ${CMAKE_COMMAND} -DCPACK_MONOLITHIC_INSTALL=0 ${CMAKE_BINARY_DIR} - OUTPUT_QUIET -) - INCLUDE(${CMAKE_BINARY_DIR}/CPackConfig.cmake) @@ -191,6 +199,7 @@ FOREACH(f ${WIX_FEATURES}) Level='${Level}' ${DISPLAY} >" ) FOREACH(c ${${f}_COMPONENTS}) + STRING(TOUPPER "${c}" c_upper) IF (CPACK_COMPONENT_${c_upper}_DISPLAY_NAME) SET(TITLE ${CPACK_COMPONENT_${c_upper}_DISPLAY_NAME}) @@ -208,10 +217,12 @@ FOREACH(f ${WIX_FEATURES}) ELSE() SET(Level 1) ENDIF() + MAKE_WIX_IDENTIFIER("${c}" cg) + IF(CPACK_COMPONENT_${c_upper}_HIDDEN) SET(CPACK_WIX_FEATURES "${CPACK_WIX_FEATURES} - <ComponentGroupRef Id='componentgroup.${c}'/>") + <ComponentGroupRef Id='componentgroup.${cg}'/>") ELSE() SET(CPACK_WIX_FEATURES "${CPACK_WIX_FEATURES} @@ -221,7 +232,7 @@ FOREACH(f ${WIX_FEATURES}) ConfigurableDirectory='INSTALLDIR' AllowAdvertise='no' Level='${Level}'> - <ComponentGroupRef Id='componentgroup.${c}'/> + <ComponentGroupRef Id='componentgroup.${cg}'/> </Feature>") ENDIF() @@ -248,21 +259,6 @@ MACRO(GENERATE_GUID VarName) OUTPUT_STRIP_TRAILING_WHITESPACE) ENDMACRO() -MACRO(MAKE_WIX_IDENTIFIER str varname) - STRING(REPLACE "/" "." ${varname} "${str}") - STRING(REGEX REPLACE "[^a-zA-Z_0-9.]" "_" ${varname} "${${varname}}") - STRING(LENGTH "${${varname}}" len) - # Identifier should be smaller than 72 character - # We have to cut down the length to 70 chars, since we add 2 char prefix - # pretty often - IF(len GREATER 70) - MATH(EXPR diff "${len}-67") - STRING(SUBSTRING "${${varname}}" ${diff} 67 shortstr) - SET(${varname} "___${shortstr}") - ENDIF() -ENDMACRO() - - FUNCTION(TRAVERSE_FILES dir topdir file file_comp dir_root) FILE(GLOB all_files ${dir}/*) @@ -354,6 +350,7 @@ GET_FILENAME_COMPONENT(abs . ABSOLUTE) FOREACH(d ${DIRS}) GET_FILENAME_COMPONENT(d ${d} ABSOLUTE) GET_FILENAME_COMPONENT(d_name ${d} NAME) + MAKE_WIX_IDENTIFIER("${d_name}" d_name) FILE(WRITE ${abs}/${d_name}_component_group.wxs "<ComponentGroup Id='componentgroup.${d_name}'>") SET(COMP_NAME ${d_name}) @@ -438,11 +435,4 @@ ENDIF() CONFIGURE_FILE(${CPACK_PACKAGE_FILE_NAME}.msi ${CMAKE_BINARY_DIR}/${CPACK_PACKAGE_FILE_NAME}.msi COPYONLY) - -# Workaround for CMake bug#11452 -# Switch monolithic install on again -EXECUTE_PROCESS( - COMMAND ${CMAKE_COMMAND} -DCPACK_MONOLITHIC_INSTALL=1 ${CMAKE_BINARY_DIR} - OUTPUT_QUIET -) diff --git a/win/packaging/extra.wxs.in b/win/packaging/extra.wxs.in index f60c0bb2020..016f6a8a97f 100644 --- a/win/packaging/extra.wxs.in +++ b/win/packaging/extra.wxs.in @@ -461,7 +461,7 @@ <!-- Data directory with some reasonable security settings --> <Component Id="C.datadir" Guid="*" Directory="DATADIR"> <RegistryValue Root='HKLM' - Key='SOFTWARE\@MANUFACTURER@\@CPACK_WIX_PACKAGE_NAME@' + Key='SOFTWARE\Monty Program AB\@CPACK_WIX_PACKAGE_NAME@' Name='DATADIR' Value='[DATADIR]' Type='string' KeyPath='yes'/> <CreateFolder> <util:PermissionEx User="NetworkService" GenericAll="yes" /> @@ -488,7 +488,7 @@ <Component Id="C.service" Guid="*" Directory="DATADIR"> <Condition>SERVICENAME</Condition> <RegistryValue Root='HKLM' - Key='SOFTWARE\@MANUFACTURER@\@CPACK_WIX_PACKAGE_NAME@' + Key='SOFTWARE\Monty Program AB\@CPACK_WIX_PACKAGE_NAME@' Name='SERVICENAME' Value='[SERVICENAME]' Type='string' KeyPath='yes'/> <ServiceControl Id='DBInstanceServiceStop' Name='[SERVICENAME]' Stop='both' Remove='uninstall' Wait='yes'/> <ServiceControl Id='DBInstanceServiceStart' Name='[SERVICENAME]' Start='install' Wait='yes'/> @@ -497,7 +497,7 @@ <Component Id="C.myiniconfig" Guid="*" Directory="DATADIR"> <Condition>STDCONFIG</Condition> <RegistryValue Root='HKLM' - Key='SOFTWARE\@MANUFACTURER@\@CPACK_WIX_PACKAGE_NAME@' + Key='SOFTWARE\Monty Program AB\@CPACK_WIX_PACKAGE_NAME@' Name='STDCONFIG' Value='1' Type='string' KeyPath='yes'/> <IniFile Id="Ini1" Action="createLine" @@ -533,7 +533,7 @@ <Component Id="C.feedback" Guid="*" Directory="DATADIR"> <Condition>FEEDBACK</Condition> <RegistryValue Root='HKLM' - Key='SOFTWARE\@MANUFACTURER@\@CPACK_WIX_PACKAGE_NAME@' + Key='SOFTWARE\Monty Program AB\@CPACK_WIX_PACKAGE_NAME@' Name='FEEDBACK' Value='1' Type='string' KeyPath='yes'/> <IniFile Id="Ini5" Action="createLine" @@ -547,7 +547,7 @@ <Component Id="C.utf8" Guid="*" Directory="DATADIR"> <Condition>UTF8</Condition> <RegistryValue Root='HKLM' - Key='SOFTWARE\@MANUFACTURER@\@CPACK_WIX_PACKAGE_NAME@' + Key='SOFTWARE\Monty Program AB\@CPACK_WIX_PACKAGE_NAME@' Name='UTF8' Value='1' Type='string' KeyPath='yes'/> <IniFile Id="Ini6" Action="createLine" @@ -790,7 +790,7 @@ <Feature Id='StoreInstallLocation' Level='1' Absent='disallow' Display='hidden'> <Component Directory='INSTALLDIR' Guid='*' Id='C.storeinstalllocation'> - <RegistryValue Root='HKLM' Key='SOFTWARE\@MANUFACTURER@\@CPACK_WIX_PACKAGE_NAME@' + <RegistryValue Root='HKLM' Key='SOFTWARE\Monty Program AB\@CPACK_WIX_PACKAGE_NAME@' Name='INSTALLDIR' Value='[INSTALLDIR]' Type='string' KeyPath='yes'/> </Component> </Feature> @@ -799,7 +799,7 @@ <Property Id='$(var.STOREDVAR)' Secure='yes'> <RegistrySearch Id='$(var.STOREDVAR)Property' Root='HKLM' - Key='SOFTWARE\@MANUFACTURER@\@CPACK_WIX_PACKAGE_NAME@' + Key='SOFTWARE\Monty Program AB\@CPACK_WIX_PACKAGE_NAME@' Name='$(var.STOREDVAR)' Type='raw' /> </Property> <CustomAction Id='SaveCmdLineValue_$(var.STOREDVAR)' Property='CMDLINE_$(var.STOREDVAR)' diff --git a/win/packaging/heidisql.cmake b/win/packaging/heidisql.cmake index 29ecdd8eb4f..897678f2025 100644 --- a/win/packaging/heidisql.cmake +++ b/win/packaging/heidisql.cmake @@ -4,7 +4,7 @@ SET(HEIDISQL_URL "http://www.heidisql.com/downloads/releases/${HEIDISQL_ZIP}") SET(HEIDISQL_DOWNLOAD_DIR ${THIRD_PARTY_DOWNLOAD_LOCATION}/${HEIDISQL_BASE_NAME}) IF(NOT EXISTS ${HEIDISQL_DOWNLOAD_DIR}/${HEIDISQL_ZIP}) - MAKE_DIRECTORY(${HEIDISQL_DOWNLOAD_DIR}) + MAKE_DIRECTORY(${HEIDISQL_DOWNLOAD_DIR}) MESSAGE(STATUS "Downloading ${HEIDISQL_URL} to ${HEIDISQL_DOWNLOAD_DIR}/${HEIDISQL_ZIP}") FILE(DOWNLOAD ${HEIDISQL_URL} ${HEIDISQL_DOWNLOAD_DIR}/${HEIDISQL_ZIP} TIMEOUT 60) EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E chdir ${HEIDISQL_DOWNLOAD_DIR} diff --git a/win/packaging/heidisql.wxi.in b/win/packaging/heidisql.wxi.in index 1d5c4430cd2..241d2c2750d 100644 --- a/win/packaging/heidisql.wxi.in +++ b/win/packaging/heidisql.wxi.in @@ -10,16 +10,16 @@ </Property> <DirectoryRef Id="MariaDBShared"> <Directory Id="D.HeidiSQL" Name="HeidiSQL"> - <Component Id="component.HeidiSQL" Guid="96ea3879-5320-4098-8f26-2f655d2f716c" Win64="no"> + <Component Id="component.HeidiSQL" Guid="96ea3879-5320-4098-8f26-2f655d2f716c" Win64="no"> <File Id="heidisql.gpl.txt" Name="gpl.txt" Source="${HEIDISQL_DOWNLOAD_DIR}\gpl.txt" /> <File Id="heidisql.heidisql.exe" Name="heidisql.exe" Source="${HEIDISQL_DOWNLOAD_DIR}\heidisql.exe" KeyPath="yes"> <Shortcut Id="desktopHeidiSQL" Directory="DesktopFolder" Name="HeidiSQL" Advertise="yes"/> </File> - <!-- - Forced file removal for heidisql.exe might be required. + <!-- + Forced file removal for heidisql.exe might be required. HeidiSQL is self-updating, thus the version that was installed by MSI not necessarily matches - the version of the file on uninstall. MSI would not touch such file by default and leave it after + the version of the file on uninstall. MSI would not touch such file by default and leave it after uninstallation. We use RemoveFile to force delete in any case. --> <RemoveFile Id="Remove_HeidiSQL_exe" Name="heidisql.exe" On="uninstall" /> |