Skip to content

Commit a644094

Browse files
committed
packaging: Simplify generation of RPM/DEB package specifications
Now packaging/ is a separate cmake project that can be configured to quickly generate package specifications.
1 parent d6b2f88 commit a644094

File tree

4 files changed

+185
-98
lines changed

4 files changed

+185
-98
lines changed

packaging/CMakeLists.txt

Lines changed: 63 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,50 @@
2626
# along with this program; if not, write to the Free Software Foundation, Inc.,
2727
# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
2828

29+
cmake_minimum_required(VERSION 3.5)
30+
31+
project(MySQL_CONCPP_Packages)
32+
33+
# Note: version.cmake can be already included if this is used as part of
34+
# the top-level project.
35+
36+
if(NOT DEFINED CONCPP_VERSION)
37+
include(${CMAKE_CURRENT_SOURCE_DIR}/../version.cmake)
38+
endif()
39+
40+
include(PackageSpecs.cmake)
41+
42+
43+
# ======================================================================
44+
# RPM/DEB package specifications
45+
# ======================================================================
46+
47+
48+
add_subdirectory(deb-in)
49+
50+
51+
if(PROJECT_NAME STREQUAL CMAKE_PROJECT_NAME)
52+
set(rpm_spec "${CMAKE_CURRENT_BINARY_DIR}/SPECS/mysql-connector-c++.spec")
53+
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/SOURCES)
54+
else()
55+
# Note: Preserve old behavior when included from the main CMakeLists.txt
56+
set(rpm_spec "${CMAKE_CURRENT_BINARY_DIR}/mysql-connector-c++.spec")
57+
endif()
58+
59+
configure_file(mysql-connector-c++.spec.in "${rpm_spec}" @ONLY)
60+
61+
62+
#
63+
# If building this project stand-alone we stop here after generating RPM/DEB
64+
# package specifications. Otherwise the rest of the project contains
65+
# specifications for building packages using CPack (works with TGZ generator).
66+
#
67+
68+
if(PROJECT_NAME STREQUAL CMAKE_PROJECT_NAME)
69+
return()
70+
endif()
71+
72+
2973
# ======================================================================
3074
# Install manifest
3175
# ======================================================================
@@ -37,16 +81,20 @@
3781

3882
if(DEFINED INSTALL_MANIFEST)
3983

40-
add_custom_target(generate_manifest
41-
ALL
42-
COMMAND ${CMAKE_COMMAND}
43-
-D MANIFEST_FILE=${INSTALL_MANIFEST}
44-
-D BUILD_DIR=${PROJECT_BINARY_DIR}
45-
-D CONFIG=$<CONFIG>
46-
-P "${CMAKE_CURRENT_SOURCE_DIR}/install_manifest.cmake"
47-
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
48-
COMMENT "Generating install manifest"
49-
)
84+
if(NOT MySQL_CONCPP_BINARY_DIR)
85+
abort("Top-level binary dir unknown...")
86+
endif()
87+
88+
add_custom_target(generate_manifest
89+
ALL
90+
COMMAND ${CMAKE_COMMAND}
91+
-D MANIFEST_FILE=${INSTALL_MANIFEST}
92+
-D BUILD_DIR=${MySQL_CONCPP_BINARY_DIR}
93+
-D CONFIG=$<CONFIG>
94+
-P "${CMAKE_CURRENT_SOURCE_DIR}/install_manifest.cmake"
95+
WORKING_DIRECTORY ${MySQL_CONCPP_BINARY_DIR}
96+
COMMENT "Generating install manifest"
97+
)
5098

5199
endif()
52100

@@ -81,26 +129,22 @@ foreach(file ${info_files})
81129

82130
endforeach()
83131

84-
set(CPACK_RESOURCE_FILE_README "${CMAKE_BINARY_DIR}/README${info_ext}")
85-
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_BINARY_DIR}/${LIC_FILE}${info_ext}")
86-
#set(CPACK_RESOURCE_FILE_INSTALL "...") # FIXME
87-
88132

89133
# ======================================================================
90-
# Package specifications
134+
# Package definitions
91135
# ======================================================================
92136

93137
if(APPLE AND NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang")
94138
message(FATAL_ERROR "To create packages for OSX, build with clang compiler.")
95139
endif()
96140

97141

98-
include(PackageSpecs.cmake) # Note: must be included before CPack
142+
include(CPack)
99143

100-
CONFIGURE_FILE(mysql-connector-c++.spec.in ${CMAKE_CURRENT_BINARY_DIR}/mysql-connector-c++.spec @ONLY)
101-
ADD_SUBDIRECTORY(deb-in)
144+
set(CPACK_RESOURCE_FILE_README "${CMAKE_BINARY_DIR}/README${info_ext}")
145+
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_BINARY_DIR}/${LIC_FILE}${info_ext}")
146+
#set(CPACK_RESOURCE_FILE_INSTALL "...") # FIXME
102147

103-
include(CPack)
104148

105149
# Define install component groups.
106150

packaging/deb-in/CMakeLists.txt

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,11 @@ IF(DEB_CODENAME STREQUAL "sid")
7777
ENDIF()
7878

7979
#Follow MYSQLCLIENT_STATIC_LINKING option on packaging
80-
SET (DEB_CMAKE_EXTRAS "${DEB_CMAKE_EXTRAS} -DMYSQLCLIENT_STATIC_LINKING=${MYSQLCLIENT_STATIC_LINKING}")
80+
if(DEFINED MYSQLCLIENT_STATIC_LINKING)
81+
set(DEB_CMAKE_EXTRAS
82+
"${DEB_CMAKE_EXTRAS} -DMYSQLCLIENT_STATIC_LINKING=${MYSQLCLIENT_STATIC_LINKING}"
83+
)
84+
endif()
8185

8286
# Timestamp for use in debian/changelog
8387
IF (NOT DEFINED DEB_CHANGELOG_TIMESTAMP)
@@ -108,7 +112,8 @@ ENDIF()
108112

109113
# All files are configured and copied to the debian/ directory, which is used
110114
# by debuild to make the packages
111-
SET (DEB_ROOT ${CMAKE_SOURCE_DIR}/packaging/deb-in)
115+
116+
SET (DEB_ROOT ${CMAKE_CURRENT_SOURCE_DIR})
112117
FILE(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/debian)
113118

114119
foreach(CF changelog control rules compat copyright)

packaging/deb-in/rules.in

Lines changed: 34 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -30,64 +30,60 @@ export DH_VERBOSE=1
3030
export CFLAGS=
3131
export CXXFLAGS=
3232

33-
override_dh_auto_configure:
34-
@echo "RULES.$@"
33+
export LIB_DIR = /usr/lib/$(DEB_HOST_MULTIARCH)
3534

36-
mkdir release && cd release && \
37-
cmake .. \
35+
export CMAKE_OPTS= \
3836
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
39-
-DCMAKE_INSTALL_PREFIX=/usr \
40-
-DINSTALL_LIB_DIR=lib/$(DEB_HOST_MULTIARCH) \
37+
-DINSTALL_LIB_DIR=.$(LIB_DIR) \
38+
-DINSTALL_INCLUDE_DIR=./usr/include \
39+
-DINSTALL_DOC_DIR=./usr \
4140
-DWITH_JDBC=ON \
41+
-DMYSQLCLIENT_STATIC_LINKING=ON \
4242
-DWITH_SSL=system \
4343
@DEB_CMAKE_EXTRAS@
4444

45-
mkdir static && cd static && \
46-
cmake .. \
47-
-DBUILD_STATIC=ON \
48-
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
49-
-DCMAKE_INSTALL_PREFIX=/usr \
50-
-DINSTALL_LIB_DIR_STATIC=lib/$(DEB_HOST_MULTIARCH) \
51-
-DWITH_JDBC=ON \
52-
-DWITH_SSL=system \
53-
@DEB_CMAKE_EXTRAS@
45+
override_dh_auto_configure:
46+
@echo "RULES.$@"
47+
@echo "cmake options: $(CMAKE_OPTS)"
48+
49+
rm -rf release && mkdir -p release
50+
cmake -Brelease -S. $(CMAKE_OPTS)
51+
52+
rm -rf static && mkdir -p static
53+
cmake -Bstatic -S. $(CMAKE_OPTS) -DBUILD_STATIC=ON
54+
55+
# touch $@
5456

55-
touch $@
5657

5758
override_dh_auto_build:
5859
@echo "RULES.$@"
59-
@DEB_RULES_DEBUG_MAKE@
60-
cd release && \
61-
$(MAKE) -j8 VERBOSE=1
62-
cd static && \
63-
$(MAKE) -j8 VERBOSE=1
64-
touch $@
60+
cmake --build release --verbose
61+
cmake --build static --verbose
62+
# touch $@
63+
6564

65+
# Note: Disable testing
6666
override_dh_auto_test:
67-
@echo "RULES.$@"
68-
export CTEST_OUTPUT_ON_FAILURE=1
69-
cd release && \
70-
make test || true
71-
touch $@
7267

7368
@DEB_RULES_STRIP@
7469

7570
override_dh_auto_install:
76-
7771
@echo "RULES.$@"
72+
7873
# complete install first
79-
cd release && \
80-
$(MAKE) install DESTDIR=../debian/tmp
81-
cd static && \
82-
$(MAKE) install DESTDIR=../debian/tmp
74+
cmake --install static --prefix ./debian/tmp
75+
cmake --install release --prefix ./debian/tmp
76+
8377
install README.txt debian/tmp/usr/README.txt
8478
install LICENSE.txt debian/tmp/usr/LICENSE.txt
85-
install -d -m 0755 debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/cmake
86-
install -d -m 0755 debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/cmake/mysql-concpp
87-
install debian/tmp/usr/mysql-concpp-config.cmake debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/cmake/mysql-concpp/mysql-concpp-config.cmake
88-
install debian/tmp/usr/mysql-concpp-config-version.cmake debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/cmake/mysql-concpp/mysql-concpp-config-version.cmake
89-
rm debian/tmp/usr/mysql-concpp-config.cmake
90-
rm debian/tmp/usr/mysql-concpp-config-version.cmake
79+
80+
install -d -m 0755 debian/tmp/.$(LIB_DIR)/cmake
81+
install -d -m 0755 debian/tmp/.$(LIB_DIR)/cmake/mysql-concpp
82+
install debian/tmp/mysql-concpp-config.cmake debian/tmp/.$(LIB_DIR)/cmake/mysql-concpp/mysql-concpp-config.cmake
83+
install debian/tmp/mysql-concpp-config-version.cmake debian/tmp/.$(LIB_DIR)/cmake/mysql-concpp/mysql-concpp-config-version.cmake
84+
rm debian/tmp/mysql-concpp-config.cmake
85+
rm debian/tmp/mysql-concpp-config-version.cmake
86+
9187
touch $@
9288

9389
override_dh_installinit:

0 commit comments

Comments
 (0)