Skip to content

Commit 890c52d

Browse files
committed
Add components to INSTALL, some eraly Wix support
1 parent befe464 commit 890c52d

24 files changed

+422
-77
lines changed

CMakeLists.txt

+12-8
Original file line numberDiff line numberDiff line change
@@ -261,18 +261,22 @@ CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/include/mysql_version.h.in
261261
CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/sql/sql_builtin.cc.in
262262
${CMAKE_BINARY_DIR}/sql/sql_builtin.cc)
263263

264-
# Packaging
265-
IF(WIN32)
266-
SET(CPACK_GENERATOR "ZIP")
267-
ELSE()
268-
SET(CPACK_GENERATOR "TGZ")
269-
ENDIF()
270-
INCLUDE(CPack)
271-
INSTALL(FILES COPYING EXCEPTIONS-CLIENT README DESTINATION ${INSTALL_DOCREADMEDIR})
264+
INSTALL(FILES EXCEPTIONS-CLIENT DESTINATION ${INSTALL_DOCREADMEDIR} COMPONENT
265+
Development)
266+
267+
INSTALL(FILES COPYING README DESTINATION ${INSTALL_DOCREADMEDIR})
272268
IF(UNIX)
273269
INSTALL(FILES Docs/INSTALL-BINARY DESTINATION ${INSTALL_DOCREADMEDIR})
274270
ENDIF()
275271
# MYSQL_DOCS_LOCATON is used in "make dist", points to the documentation directory
276272
SET(MYSQL_DOCS_LOCATION "" CACHE PATH "Location from where documentation is copied")
277273
MARK_AS_ADVANCED(MYSQL_DOCS_LOCATION)
278274
INSTALL(DIRECTORY Docs/ DESTINATION ${INSTALL_DOCDIR})
275+
# Packaging
276+
IF(WIN32)
277+
SET(CPACK_GENERATOR "ZIP")
278+
ELSE()
279+
SET(CPACK_GENERATOR "TGZ")
280+
ENDIF()
281+
ADD_SUBDIRECTORY(packaging/WiX)
282+
INCLUDE(CPack)

client/CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ IF(UNIX)
3333
TARGET_LINK_LIBRARIES(mysql ${READLINE_LIBRARY})
3434
ENDIF(UNIX)
3535

36-
MYSQL_ADD_EXECUTABLE(mysqltest mysqltest.cc)
36+
MYSQL_ADD_EXECUTABLE(mysqltest mysqltest.cc COMPONENT Test)
3737
SET_SOURCE_FILES_PROPERTIES(mysqltest.cc PROPERTIES COMPILE_FLAGS "-DTHREADS")
3838
TARGET_LINK_LIBRARIES(mysqltest mysqlclient regex)
3939

cmake/install_macros.cmake

+86-10
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,74 @@ MACRO (INSTALL_DEBUG_SYMBOLS targets)
4040
ENDIF()
4141
ENDMACRO()
4242

43+
# Installs manpage for given file (either script or executable)
44+
#
45+
FUNCTION(INSTALL_MANPAGE file)
46+
IF(NOT UNIX)
47+
RETURN()
48+
ENDIF()
49+
GET_FILENAME_COMPONENT(file_name "${file}" NAME)
50+
SET(GLOB_EXPR
51+
${CMAKE_SOURCE_DIR}/man/*${file}man.1*
52+
${CMAKE_SOURCE_DIR}/man/*${file}man.8*
53+
${CMAKE_BINARY_DIR}/man/*${file}man.1*
54+
${CMAKE_BINARY_DIR}/man/*${file}man.8*
55+
)
56+
IF(MYSQL_DOC_DIR)
57+
SET(GLOB_EXPR
58+
${MYSQL_DOC_DIR}/man/*${file}man.1*
59+
${MYSQL_DOC_DIR}/man/*${file}man.8*
60+
${MYSQL_DOC_DIR}/man/*${file}.1*
61+
${MYSQL_DOC_DIR}/man/*${file}.8*
62+
${GLOB_EXPR}
63+
)
64+
ENDIF()
65+
66+
FILE(GLOB_RECURSE MANPAGES ${GLOB_EXPR})
67+
IF(MANPAGES)
68+
LIST(GET MANPAGES 0 MANPAGE)
69+
STRING(REPLACE "${file}man.1" "${file}.1" MANPAGE "${MANPAGE}")
70+
STRING(REPLACE "${file}man.8" "${file}.8" MANPAGE "${MANPAGE}")
71+
IF(MANPAGE MATCHES "${file}.1")
72+
SET(SECTION man1)
73+
ELSE()
74+
SET(SECTION man8)
75+
ENDIF()
76+
INSTALL(FILES "${MANPAGE}" DESTINATION "${INSTALL_MANDIR}/${SECTION}")
77+
ENDIF()
78+
ENDFUNCTION()
79+
80+
FUNCTION(INSTALL_SCRIPT)
81+
CMAKE_PARSE_ARGUMENTS(ARG
82+
"DESTINATION;COMPONENT"
83+
""
84+
${ARGN}
85+
)
86+
87+
SET(script ${ARG_DEFAULT_ARGS})
88+
IF(NOT ARG_DESTINATION)
89+
SET(ARG_DESTINATION ${INSTALL_BINDIR})
90+
ENDIF()
91+
IF(ARG_COMPONENT)
92+
SET(COMP COMPONENT ${ARG_COMPONENT})
93+
ELSE()
94+
SET(COMP)
95+
ENDIF()
96+
97+
INSTALL(FILES
98+
${script}
99+
DESTINATION ${ARG_DESTINATION}
100+
PERMISSIONS OWNER_READ OWNER_WRITE
101+
OWNER_EXECUTE GROUP_READ GROUP_EXECUTE
102+
WORLD_READ WORLD_EXECUTE ${COMP}
103+
)
104+
INSTALL_MANPAGE(${script})
105+
ENDFUNCTION()
106+
43107
# Install symbolic link to CMake target.
44108
# the link is created in the same directory as target
45109
# and extension will be the same as for target file.
46-
MACRO(INSTALL_SYMLINK linkbasename target destination)
110+
MACRO(INSTALL_SYMLINK linkbasename target destination component)
47111
IF(UNIX)
48112
GET_TARGET_PROPERTY(location ${target} LOCATION)
49113
GET_FILENAME_COMPONENT(path ${location} PATH)
@@ -69,7 +133,12 @@ IF(UNIX)
69133
STRING(REPLACE "${CMAKE_CFG_INTDIR}"
70134
"\${CMAKE_INSTALL_CONFIG_NAME}" output ${output})
71135
ENDIF()
72-
INSTALL(FILES ${output} DESTINATION ${destination})
136+
IF(component)
137+
SET(COMP COMPONENT ${component})
138+
ELSE()
139+
SET(COMP)
140+
ENDIF()
141+
INSTALL(FILES ${output} DESTINATION ${destination} ${COMP})
73142
ENDIF()
74143
ENDMACRO()
75144

@@ -129,13 +198,11 @@ ENDMACRO()
129198

130199
# Installs targets, also installs pdbs on Windows.
131200
#
132-
# More stuff can be added later, e.g signing
133-
# or pre-link custom targets (one example is creating
134-
# version resource for windows executables)
201+
#
135202

136203
FUNCTION(MYSQL_INSTALL_TARGETS)
137204
CMAKE_PARSE_ARGUMENTS(ARG
138-
"DESTINATION"
205+
"DESTINATION;COMPONENT"
139206
""
140207
${ARGN}
141208
)
@@ -147,15 +214,24 @@ FUNCTION(MYSQL_INSTALL_TARGETS)
147214
MESSAGE(FATAL_ERROR "Need DESTINATION parameter for MYSQL_INSTALL_TARGETS")
148215
ENDIF()
149216

150-
# If signing is required, sign executables before installing
217+
151218
FOREACH(target ${TARGETS})
152-
IF(SIGNCODE AND SIGNCODE_ENABLED)
219+
# If signing is required, sign executables before installing
220+
IF(SIGNCODE AND SIGNCODE_ENABLED)
153221
SIGN_TARGET(${target})
154222
ENDIF()
223+
# For Windows, add version info to executables
155224
ADD_VERSION_INFO(${target})
225+
# Install man pages on Unix
226+
IF(UNIX)
227+
GET_TARGET_PROPERTY(target_location ${target} LOCATION)
228+
INSTALL_MANPAGE(${target_location})
229+
ENDIF()
156230
ENDFOREACH()
157-
158-
INSTALL(TARGETS ${TARGETS} DESTINATION ${ARG_DESTINATION})
231+
IF(ARG_COMPONENT)
232+
SET(COMP COMPONENT ${ARG_COMPONENT})
233+
ENDIF()
234+
INSTALL(TARGETS ${TARGETS} DESTINATION ${ARG_DESTINATION} ${COMP})
159235
SET(INSTALL_LOCATION ${ARG_DESTINATION} )
160236
INSTALL_DEBUG_SYMBOLS("${TARGETS}")
161237
SET(INSTALL_LOCATION)

cmake/libutils.cmake

+5-2
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ ENDMACRO()
214214
#)
215215
MACRO(MERGE_LIBRARIES)
216216
CMAKE_PARSE_ARGUMENTS(ARG
217-
"EXPORTS;OUTPUT_NAME"
217+
"EXPORTS;OUTPUT_NAME;COMPONENT"
218218
"STATIC;SHARED;MODULE;NOINSTALL"
219219
${ARGN}
220220
)
@@ -259,7 +259,10 @@ MACRO(MERGE_LIBRARIES)
259259
MESSAGE(FATAL_ERROR "Unknown library type")
260260
ENDIF()
261261
IF(NOT ARG_NOINSTALL)
262-
MYSQL_INSTALL_TARGETS(${TARGET} DESTINATION "${INSTALL_LIBDIR}")
262+
IF(ARG_COMPONENT)
263+
SET(COMP COMPONENT ${ARG_COMPONENT})
264+
ENDIF()
265+
MYSQL_INSTALL_TARGETS(${TARGET} DESTINATION "${INSTALL_LIBDIR}" ${COMP})
263266
ENDIF()
264267
SET_TARGET_PROPERTIES(${TARGET} PROPERTIES LINK_INTERFACE_LIBRARIES "")
265268
ENDMACRO()

cmake/mysql_add_executable.cmake

+10-3
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ INCLUDE(cmake_parse_arguments)
2929
FUNCTION (MYSQL_ADD_EXECUTABLE)
3030
# Pass-through arguments for ADD_EXECUTABLE
3131
CMAKE_PARSE_ARGUMENTS(ARG
32-
"WIN32;MACOSX_BUNDLE;EXCLUDE_FROM_ALL;DESTINATION"
32+
"WIN32;MACOSX_BUNDLE;EXCLUDE_FROM_ALL;DESTINATION;COMPONENT"
3333
""
3434
${ARGN}
3535
)
@@ -43,7 +43,14 @@ FUNCTION (MYSQL_ADD_EXECUTABLE)
4343
IF(NOT ARG_EXCLUDE_FROM_ALL)
4444
IF(NOT ARG_DESTINATION)
4545
SET(ARG_DESTINATION ${INSTALL_BINDIR})
46+
ENDIF()
47+
IF(ARG_COMPONENT)
48+
SET(COMP COMPONENT ${ARG_COMPONENT})
49+
ELSEIF(MYSQL_INSTALL_COMPONENT)
50+
SET(COMP COMPONENT ${MYSQL_INSTALL_COMPONENT})
51+
ELSE()
52+
SET(COMP COMPONENT Client)
4653
ENDIF()
47-
MYSQL_INSTALL_TARGETS(${target} DESTINATION ${ARG_DESTINATION})
54+
MYSQL_INSTALL_TARGETS(${target} DESTINATION ${ARG_DESTINATION} ${COMP})
4855
ENDIF()
49-
ENDFUNCTION()
56+
ENDFUNCTION()

cmake/package_name.cmake

+4-1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515

1616
# Produce meaningful package name for the binary package
1717
# The logic is rather involved with special cases for different OSes
18+
INCLUDE(CheckTypeSize)
19+
CHECK_TYPE_SIZE("void *" SIZEOF_VOIDP)
1820
MACRO(GET_PACKAGE_FILE_NAME Var)
1921
IF(NOT VERSION)
2022
MESSAGE(FATAL_ERROR
@@ -24,7 +26,8 @@ IF(NOT VERSION)
2426
SET(NEED_DASH_BETWEEN_PLATFORM_AND_MACHINE 1)
2527
SET(DEFAULT_PLATFORM ${CMAKE_SYSTEM_NAME})
2628
SET(DEFAULT_MACHINE ${CMAKE_SYSTEM_PROCESSOR})
27-
IF(CMAKE_SIZEOF_VOID_P EQUAL 8)
29+
MESSAGE("SIZEOF_VOIDP=${SIZEOF_VOIDP}")
30+
IF(SIZEOF_VOIDP EQUAL 8)
2831
SET(64BIT 1)
2932
ENDIF()
3033

cmake/plugin.cmake

+1-1
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ MACRO(MYSQL_ADD_PLUGIN)
168168
SET_TARGET_PROPERTIES(${target} PROPERTIES
169169
OUTPUT_NAME "${ARG_MODULE_OUTPUT_NAME}")
170170
# Install dynamic library
171-
MYSQL_INSTALL_TARGETS(${target} DESTINATION ${INSTALL_PLUGINDIR})
171+
MYSQL_INSTALL_TARGETS(${target} DESTINATION ${INSTALL_PLUGINDIR} COMPONENT Server)
172172
ENDIF()
173173
ENDMACRO()
174174

extra/CMakeLists.txt

+2
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ ${CMAKE_SOURCE_DIR}/storage/ndb/include/ndbapi
2424
${CMAKE_SOURCE_DIR}/storage/ndb/include/portlib
2525
${CMAKE_SOURCE_DIR}/storage/ndb/include/mgmapi)
2626

27+
# Default install component for the files is Server here
28+
SET(MYSQL_INSTALL_COMPONENT Server)
2729

2830
IF(NOT CMAKE_CROSSCOMPILING)
2931
ADD_EXECUTABLE(comp_err comp_err.c)

include/CMakeLists.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ SET(HEADERS
5757
${HEADERS_GEN_CONFIGURE}
5858
)
5959

60-
INSTALL(FILES ${HEADERS} DESTINATION ${INSTALL_INCLUDEDIR})
61-
INSTALL(DIRECTORY mysql/ DESTINATION ${INSTALL_INCLUDEDIR} FILES_MATCHING PATTERN "*.h")
60+
INSTALL(FILES ${HEADERS} DESTINATION ${INSTALL_INCLUDEDIR} COMPONENT Development)
61+
INSTALL(DIRECTORY mysql/ DESTINATION ${INSTALL_INCLUDEDIR} COMPONENT Development FILES_MATCHING PATTERN "*.h" )
6262

6363

libmysql/CMakeLists.txt

+4-4
Original file line numberDiff line numberDiff line change
@@ -152,13 +152,13 @@ SET(LIBS clientlib dbug strings vio mysys ${ZLIB_LIBRARY} ${SSL_LIBRARIES})
152152

153153
# Merge several convenience libraries into one big mysqlclient
154154
# and link them together into shared library.
155-
MERGE_LIBRARIES(mysqlclient STATIC ${LIBS})
155+
MERGE_LIBRARIES(mysqlclient STATIC ${LIBS} COMPONENT Development)
156156
IF(UNIX)
157-
INSTALL_SYMLINK(${CMAKE_STATIC_LIBRARY_PREFIX}mysqlclient_r mysqlclient ${INSTALL_LIBDIR})
157+
INSTALL_SYMLINK(${CMAKE_STATIC_LIBRARY_PREFIX}mysqlclient_r mysqlclient ${INSTALL_LIBDIR} COMPONENT SharedLibraries)
158158
ENDIF()
159159

160160
IF(NOT DISABLE_SHARED)
161-
MERGE_LIBRARIES(libmysql SHARED ${LIBS} EXPORTS ${CLIENT_API_FUNCTIONS})
161+
MERGE_LIBRARIES(libmysql SHARED ${LIBS} EXPORTS ${CLIENT_API_FUNCTIONS} COMPONENT SharedLibraries)
162162
IF(UNIX)
163163
# Name of shared library is mysqlclient on Unix
164164
SET_TARGET_PROPERTIES(libmysql PROPERTIES
@@ -177,6 +177,6 @@ IF(NOT DISABLE_SHARED)
177177
#(mysqlclient in this case)
178178
SET_TARGET_PROPERTIES(mysqlclient PROPERTIES CLEAN_DIRECT_OUTPUT 1)
179179
SET_TARGET_PROPERTIES(libmysql PROPERTIES CLEAN_DIRECT_OUTPUT 1)
180-
INSTALL_SYMLINK(${CMAKE_SHARED_LIBRARY_PREFIX}mysqlclient_r libmysql ${INSTALL_LIBDIR})
180+
INSTALL_SYMLINK(${CMAKE_SHARED_LIBRARY_PREFIX}mysqlclient_r libmysql ${INSTALL_LIBDIR} SharedLibraries)
181181
ENDIF()
182182
ENDIF()

libmysqld/CMakeLists.txt

+3-2
Original file line numberDiff line numberDiff line change
@@ -123,8 +123,9 @@ FOREACH(LIB ${LIBS})
123123
ENDFOREACH()
124124

125125
MERGE_LIBRARIES(mysqlserver STATIC ${EMBEDDED_LIBS}
126-
OUTPUT_NAME ${MYSQLSERVER_OUTPUT_NAME})
126+
OUTPUT_NAME ${MYSQLSERVER_OUTPUT_NAME} COMPONENT Embedded)
127127

128128
IF(MSVC AND NOT DISABLE_SHARED)
129-
MERGE_LIBRARIES(libmysqld SHARED ${LIBS} EXPORTS ${CLIENT_API_FUNCTIONS})
129+
MERGE_LIBRARIES(libmysqld SHARED ${LIBS} EXPORTS ${CLIENT_API_FUNCTIONS}
130+
COMPONENT Embedded)
130131
ENDIF()

mysql-test/CMakeLists.txt

+1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
INSTALL(
1717
DIRECTORY .
1818
DESTINATION ${INSTALL_MYSQLTESTDIR}
19+
COMPONENT Test
1920
PATTERN "var/" EXCLUDE
2021
PATTERN "lib/My/SafeProcess" EXCLUDE
2122
PATTERN "CPack" EXCLUDE

mysql-test/lib/My/SafeProcess/CMakeLists.txt

+11-8
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,18 @@
1313
# along with this program; if not, write to the Free Software
1414
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
1515

16+
SET(INSTALL_ARGS
17+
DESTINATION "${INSTALL_MYSQLTESTDIR}/lib/My/SafeProcess"
18+
COMPONENT Test
19+
)
20+
1621
IF (WIN32)
17-
ADD_EXECUTABLE(my_safe_process safe_process_win.cc)
18-
ADD_EXECUTABLE(my_safe_kill safe_kill_win.cc)
22+
MYSQL_ADD_EXECUTABLE(my_safe_process safe_process_win.cc ${INSTALL_ARGS})
23+
MYSQL_ADD_EXECUTABLE(my_safe_kill safe_kill_win.cc ${INSTALL_ARGS})
1924
ELSE()
20-
ADD_EXECUTABLE(my_safe_process safe_process.cc)
25+
MYSQL_ADD_EXECUTABLE(my_safe_process safe_process.cc ${INSTALL_ARGS})
2126
ENDIF()
2227

23-
INSTALL(TARGETS my_safe_process DESTINATION "mysql-test/lib/My/SafeProcess")
24-
IF(WIN32)
25-
INSTALL(TARGETS my_safe_kill DESTINATION "mysql-test/lib/My/SafeProcess")
26-
ENDIF()
27-
INSTALL(FILES safe_process.pl Base.pm DESTINATION "${INSTALL_MYSQLTESTDIR}/lib/My/SafeProcess")
28+
29+
INSTALL(FILES safe_process.pl Base.pm DESTINATION "${INSTALL_MYSQLTESTDIR}/lib/My/SafeProcess"
30+
COMPONENT Test)

packaging/WiX/AdminBackground.jpg

20.1 KB
Loading

packaging/WiX/AdminHeader.jpg

3.39 KB
Loading

packaging/WiX/CMakeLists.txt

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
FIND_PATH(WIX_DIR heat.exe
2+
$ENV{WIX_DIR}/bin
3+
$ENV{ProgramFiles}/wix/bin
4+
"$ENV{ProgramFiles}/Windows Installer XML v3.0/bin"
5+
"$ENV{ProgramFiles}/Windows Installer XML v3.5/bin"
6+
)
7+
8+
IF(NOT WIX_DIR)
9+
MESSAGE(FATAL_ERROR "Cannot find wix")
10+
ENDIF()
11+
12+
FIND_PROGRAM(HEAT_EXECUTABLE heat ${WIX_DIR})
13+
FIND_PROGRAM(CANDLE_EXECUTABLE candle ${WIX_DIR})
14+
FIND_PROGRAM(LIGHT_EXECUTABLE light ${WIX_DIR})
15+
16+
17+
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/create_msi.cmake.in
18+
${CMAKE_CURRENT_BINARY_DIR}/create_msi.cmake
19+
@ONLY)
20+
IF(CMAKE_GENERATOR MATCHES "Visual Studio")
21+
SET(CONFIG_PARAM "-DCMAKE_INSTALL_CONFIG_NAME=${CMAKE_CFG_INTDIR}")
22+
ENDIF()
23+
ADD_CUSTOM_TARGET(
24+
WIX_Installer
25+
COMMAND set VS_UNICODE_OUTPUT=
26+
COMMAND ${CMAKE_COMMAND} ${CONFIG_PARAM} -P ${CMAKE_CURRENT_BINARY_DIR}/create_msi.cmake
27+
)
28+

0 commit comments

Comments
 (0)