Skip to content

Commit

Permalink
MDEV-32252 addendum - refactor CPackWixConfig.cmake
Browse files Browse the repository at this point in the history
Refactor CPackWixConfig.cmake so that it complains about unknown CPack
components.

This would prevent missing components,or discrepancy between MSI and ZIP
content, whenever new components are added or renamed.

Also, remove some old stuff, and use macros add_component_group() and
add_component() to reduce the verbosity.
  • Loading branch information
vaintroub committed Oct 4, 2023
1 parent 2407243 commit 5fc19e7
Show file tree
Hide file tree
Showing 4 changed files with 83 additions and 106 deletions.
3 changes: 3 additions & 0 deletions cmake/install_macros.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,9 @@ FUNCTION (INSTALL_DEBUG_SYMBOLS)
ENDFUNCTION()

FUNCTION(INSTALL_MANPAGES COMP)
IF(WIN32)
RETURN()
ENDIF()
FOREACH(f ${ARGN})
STRING(REGEX REPLACE "^.*\\.([1-8])$" "\\1" n ${f})
IF(NOT ${n})
Expand Down
181 changes: 76 additions & 105 deletions win/packaging/CPackWixConfig.cmake
Original file line number Diff line number Diff line change
@@ -1,121 +1,92 @@
cmake_policy(SET CMP0011 NEW)
cmake_policy(SET CMP0057 NEW)

IF(ESSENTIALS)
SET(CPACK_COMPONENTS_USED "Server;Client")
SET(CPACK_WIX_UI "MyWixUI_Mondo")
IF(CMAKE_SIZEOF_VOID_P MATCHES 8)
SET(CPACK_PACKAGE_FILE_NAME "mariadb-essential-${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}-winx64")
ELSE()
SET(CPACK_PACKAGE_FILE_NAME "mariadb-essential-${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}-win32")
ENDIF()
ELSE()
SET(CPACK_COMPONENTS_USED
"Server;Client;Development;SharedLibraries;Documentation;Readme;Common;connect-engine;ClientPlugins;gssapi-server;gssapi-client;aws-key-management;rocksdb-engine;Backup;VCCRT")
ENDIF()
# Add a component to component-group based install (compare to cmake_add_component)
macro(add_component compname)
if("${compname}" IN_LIST CPACK_COMPONENTS_ALL)
list(APPEND COMPONENTS_INSTALL ${compname})
string(TOUPPER ${compname} _CPACK_ADDCOMP_UNAME)
cmake_parse_arguments(CPACK_COMPONENT_${_CPACK_ADDCOMP_UNAME}
"HIDDEN"
"DISPLAY_NAME;DESCRIPTION;GROUP"
""
${ARGN}
)
string(TOUPPER ${CPACK_COMPONENT_${_CPACK_ADDCOMP_UNAME}_GROUP} _UGROUP)
if("${CPACK_COMPONENT_GROUP_${_UGROUP}_DISPLAY_NAME}" STREQUAL "")
message(FATAL_ERROR "group not found for ${compname}")
endif()
else()
message(STATUS "add_component : ignoring ${compname}, not in CPACK_COMPONENTS_ALL")
endif()
endmacro()

SET( WIX_FEATURE_MySQLServer_EXTRA_FEATURES "DBInstance;SharedClientServerComponents")
# Some components like Embedded are optional
# We will build MSI without embedded if it was not selected for build
#(need to modify CPACK_COMPONENTS_ALL for that)
SET(CPACK_ALL)
FOREACH(comp1 ${CPACK_COMPONENTS_USED})
SET(found)
FOREACH(comp2 ${CPACK_COMPONENTS_ALL})
IF(comp1 STREQUAL comp2)
SET(found 1)
BREAK()
ENDIF()
ENDFOREACH()
IF(found)
SET(CPACK_ALL ${CPACK_ALL} ${comp1})
ENDIF()
ENDFOREACH()
SET(CPACK_COMPONENTS_ALL ${CPACK_ALL})
# Add a group to component-group based install (compare to cmake_add_component_group)
macro(add_component_group grpname)
string(TOUPPER ${grpname} _CPACK_ADDGRP_UNAME)
cmake_parse_arguments(CPACK_COMPONENT_GROUP_${_CPACK_ADDGRP_UNAME}
"EXPANDED;HIDDEN"
"DISPLAY_NAME;DESCRIPTION"
""
${ARGN}
)
endmacro()

# Always install (hidden), includes Readme files
SET(CPACK_COMPONENT_GROUP_ALWAYSINSTALL_HIDDEN 1)
SET(CPACK_COMPONENT_README_GROUP "AlwaysInstall")
SET(CPACK_COMPONENT_COMMON_GROUP "AlwaysInstall")
SET(CPACK_COMPONENT_VCCRT_GROUP "AlwaysInstall")
message(STATUS "CPACK_COMPONENTS_ALL=${CPACK_COMPONENTS_ALL}")
add_component_group(AlwaysInstall HIDDEN
DISPLAY_NAME "AlwaysInstall"
DESCRIPTION "Always installed components")

# Feature MySQL Server
SET(CPACK_COMPONENT_GROUP_MYSQLSERVER_DISPLAY_NAME "MariaDB Server")
SET(CPACK_COMPONENT_GROUP_MYSQLSERVER_EXPANDED "1")
SET(CPACK_COMPONENT_GROUP_MYSQLSERVER_DESCRIPTION "Install server")
# Subfeature "Server" (hidden)
SET(CPACK_COMPONENT_SERVER_GROUP "MySQLServer")
SET(CPACK_COMPONENT_SERVER_HIDDEN 1)
# Subfeature "Client"
SET(CPACK_COMPONENT_CLIENT_GROUP "MySQLServer")
SET(CPACK_COMPONENT_CLIENT_DISPLAY_NAME "Client Programs")
SET(CPACK_COMPONENT_CLIENT_DESCRIPTION
"Various helpful (commandline) tools including the mysql command line client" )
# Subfeature "Debug binaries"
SET(CPACK_COMPONENT_DEBUGBINARIES_GROUP "MySQLServer")
SET(CPACK_COMPONENT_DEBUGBINARIES_DISPLAY_NAME "Debug binaries")
SET(CPACK_COMPONENT_DEBUGBINARIES_DESCRIPTION
"Debug/trace versions of executables and libraries" )
#SET(CPACK_COMPONENT_DEBUGBINARIES_WIX_LEVEL 2)

# 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 rocksdb-engine)
STRING(TOUPPER "${comp}" comp)
SET(CPACK_COMPONENT_${comp}_GROUP "MySQLServer")
SET(CPACK_COMPONENT_${comp}_HIDDEN 1)
ENDFOREACH()
foreach(c Readme Common VCCRT)
add_component(${c} GROUP AlwaysInstall)
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")
#Subfeature "Development"
SET(CPACK_COMPONENT_DEVELOPMENT_GROUP "Devel")
SET(CPACK_COMPONENT_DEVELOPMENT_HIDDEN 1)

#Subfeature "Shared libraries"
SET(CPACK_COMPONENT_SHAREDLIBRARIES_GROUP "Devel")
SET(CPACK_COMPONENT_SHAREDLIBRARIES_DISPLAY_NAME "Client C API library (shared)")
SET(CPACK_COMPONENT_SHAREDLIBRARIES_DESCRIPTION "Installs shared client library")
add_component_group(MySQLServer EXPANDED DISPLAY_NAME "MariaDB Server" DESCRIPTION "Install server")
add_component(Server
GROUP MySQLServer HIDDEN)
add_component(Client
GROUP MySQLServer DISPLAY_NAME "Client Programs"
DESCRIPTION "Various helpful (commandline) tools including the command line client")
add_component(Backup
GROUP MySQLServer
DISPLAY_NAME "Backup utilities"
DESCRIPTION "Installs backup utilities(mariabackup and mbstream)")

#Subfeature "Embedded"
SET(CPACK_COMPONENT_EMBEDDED_GROUP "Devel")
SET(CPACK_COMPONENT_EMBEDDED_DISPLAY_NAME "Embedded server library")
SET(CPACK_COMPONENT_EMBEDDED_DESCRIPTION "Installs embedded server library")
SET(CPACK_COMPONENT_EMBEDDED_WIX_LEVEL 2)
#Miscellaneous hidden components, part of server / or client programs
foreach(comp connect-engine connect-engine-jdbc ClientPlugins aws-key-management rocksdb-engine)
add_component(${comp} GROUP MySQLServer HIDDEN)
endforeach()

#Feature Debug Symbols
SET(CPACK_COMPONENT_GROUP_DEBUGSYMBOLS_DISPLAY_NAME "Debug Symbols")
SET(CPACK_COMPONENT_GROUP_DEBUGSYMBOLS_DESCRIPTION "Installs Debug Symbols")
SET(CPACK_COMPONENT_DEBUGSYMBOLS_WIX_LEVEL 2)
SET(CPACK_COMPONENT_DEBUGINFO_GROUP "DebugSymbols")
SET(CPACK_COMPONENT_DEBUGINFO_HIDDEN 1)

#Feature Documentation
SET(CPACK_COMPONENT_DOCUMENTATION_DISPLAY_NAME "Documentation")
SET(CPACK_COMPONENT_DOCUMENTATION_DESCRIPTION "Installs documentation")
SET(CPACK_COMPONENT_DOCUMENTATION_WIX_LEVEL 2)
add_component_group(Devel
DISPLAY_NAME "Development components"
DESCRIPTION "Installs C/C++ header files and libraries")
add_component(Development
GROUP Devel HIDDEN)
add_component(SharedLibraries
GROUP Devel
DISPLAY_NAME "Client C API library (shared)"
DESCRIPTION "Installs shared client library")

#Feature tests
SET(CPACK_COMPONENT_TEST_DISPLAY_NAME "Tests")
SET(CPACK_COMPONENT_TEST_DESCRIPTION "Installs unittests (requires Perl to run)")
SET(CPACK_COMPONENT_TEST_WIX_LEVEL 2)
include(${CMAKE_CURRENT_LIST_DIR}/ComponentsIgnore.cmake)
set(KNOWN_COMPONENTS ${COMPONENTS_IGNORE} ${COMPONENTS_INSTALL})
foreach(c ${CPACK_COMPONENTS_ALL})
if(NOT (${c} IN_LIST KNOWN_COMPONENTS))
message(FATAL_ERROR "Component ${c} is not known. Either install it using add_component() macro \
or add to COMPONENTS_IGNORE list")
endif()
endforeach()

set(CPACK_COMPONENTS_ALL ${COMPONENTS_INSTALL})

#Feature Misc (hidden, installs only if everything is installed)
SET(CPACK_COMPONENT_GROUP_MISC_HIDDEN 1)
SET(CPACK_COMPONENT_GROUP_MISC_WIX_LEVEL 100)
SET(CPACK_COMPONENT_INIFILES_GROUP "Misc")
SET(CPACK_COMPONENT_SERVER_SCRIPTS_GROUP "Misc")
# Extra things beyong CMake components
# DBInstance (running mysql_install_db.exe)
set(WIX_FEATURE_MySQLServer_EXTRA_FEATURES "DBInstance;SharedClientServerComponents")

#Add Firewall exception for mysqld.exe
SET(bin.mysqld.exe.FILE_EXTRA "
# Firewall exception for mysqld.exe
set(bin.mysqld.exe.FILE_EXTRA "
<FirewallException Id='firewallexception.mysqld.exe' Name='[ProductName]' Scope='any'
IgnoreFailure='yes' xmlns='http://schemas.microsoft.com/wix/FirewallExtension'
/>
"
)
")

3 changes: 2 additions & 1 deletion win/packaging/CPackZIPConfig.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ SET(CPACK_GENERATOR ZIP)
set(CPACK_ARCHIVE_COMPONENT_INSTALL ON)
set(CPACK_COMPONENTS_GROUPING ALL_COMPONENTS_IN_ONE)
SET(CPACK_COMPONENT_INCLUDE_TOPLEVEL_DIRECTORY ON)
FOREACH(it DebugBinaries Debuginfo IniFiles Junk Test SqlBench)
include(${CMAKE_CURRENT_LIST_DIR}/ComponentsIgnore.cmake)
FOREACH(it ${COMPONENTS_IGNORE})
list(FIND CPACK_COMPONENTS_ALL "${it}" index)
IF(index GREATER 0)
LIST(REMOVE_AT CPACK_COMPONENTS_ALL ${index})
Expand Down
2 changes: 2 additions & 0 deletions win/packaging/ComponentsIgnore.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Components ignored in both ZIP and WIX generators
set(COMPONENTS_IGNORE Debuginfo Server_Scripts SqlBench Test Embedded)

0 comments on commit 5fc19e7

Please sign in to comment.