1# Copyright (c) 2009, 2015, Oracle and/or its affiliates.
2#
3# This program is free software; you can redistribute it and/or modify
4# it under the terms of the GNU General Public License as published by
5# the Free Software Foundation; version 2 of the License.
6#
7# This program is distributed in the hope that it will be useful,
8# but WITHOUT ANY WARRANTY; without even the implied warranty of
9# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10# GNU General Public License for more details.
11#
12# You should have received a copy of the GNU General Public License
13# along with this program; if not, write to the Free Software
14# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1335  USA
15
16# Make source distribution
17# If bzr is present, run bzr export.
18# Otherwise, just run cpack with source configuration.
19
20SET(CMAKE_SOURCE_DIR "@CMAKE_SOURCE_DIR@")
21SET(CMAKE_BINARY_DIR "@CMAKE_BINARY_DIR@")
22SET(CPACK_SOURCE_PACKAGE_FILE_NAME "@CPACK_SOURCE_PACKAGE_FILE_NAME@")
23SET(CMAKE_CPACK_COMMAND  "@CMAKE_CPACK_COMMAND@")
24SET(CMAKE_COMMAND  "@CMAKE_COMMAND@")
25SET(GIT_EXECUTABLE "@GIT_EXECUTABLE@")
26SET(GTAR_EXECUTABLE "@GTAR_EXECUTABLE@")
27SET(TAR_EXECUTABLE "@TAR_EXECUTABLE@")
28SET(CMAKE_GENERATOR "@CMAKE_GENERATOR@")
29SET(CMAKE_MAKE_PROGRAM "@CMAKE_MAKE_PROGRAM@")
30SET(CMAKE_SYSTEM_NAME "@CMAKE_SYSTEM_NAME@")
31
32SET(VERSION "@VERSION@")
33
34SET(MYSQL_DOCS_LOCATION "@MYSQL_DOCS_LOCATION@")
35
36
37SET(PACKAGE_DIR  ${CMAKE_BINARY_DIR}/${CPACK_SOURCE_PACKAGE_FILE_NAME})
38
39FILE(REMOVE_RECURSE ${PACKAGE_DIR})
40FILE(REMOVE ${PACKAGE_DIR}.tar.gz )
41
42IF(GIT_EXECUTABLE)
43  MESSAGE(STATUS "Running git checkout-index")
44  EXECUTE_PROCESS(
45    COMMAND "${GIT_EXECUTABLE}" checkout-index --all --prefix=${PACKAGE_DIR}/
46    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
47    RESULT_VARIABLE RESULT
48  )
49  IF(NOT RESULT EQUAL 0)
50    SET(GIT_EXECUTABLE)
51  ENDIF()
52  EXECUTE_PROCESS(
53    COMMAND "${GIT_EXECUTABLE}" submodule foreach "${GIT_EXECUTABLE} checkout-index --all --prefix=${PACKAGE_DIR}/$path/"
54    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
55    RESULT_VARIABLE RESULT
56  )
57  IF(NOT RESULT EQUAL 0)
58    SET(GIT_EXECUTABLE)
59  ENDIF()
60  EXECUTE_PROCESS(
61    COMMAND "${GIT_EXECUTABLE}" submodule foreach "${GIT_EXECUTABLE} checkout-index --all --prefix=${PACKAGE_DIR}/wsrep-lib/$path/"
62    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/wsrep-lib
63    RESULT_VARIABLE RESULT
64  )
65  IF(NOT RESULT EQUAL 0)
66    SET(GIT_EXECUTABLE)
67  ENDIF()
68  EXECUTE_PROCESS(
69    COMMAND "${GIT_EXECUTABLE}" submodule foreach "${GIT_EXECUTABLE} checkout-index --all --prefix=${PACKAGE_DIR}/storage/columnstore/columnstore/$path/"
70    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/storage/columnstore/columnstore
71    RESULT_VARIABLE RESULT
72  )
73  IF(NOT RESULT EQUAL 0)
74    SET(GIT_EXECUTABLE)
75  ENDIF()
76ENDIF()
77
78CONFIGURE_FILE(${CMAKE_BINARY_DIR}/include/source_revision.h
79       ${PACKAGE_DIR}/include/source_revision.h COPYONLY)
80
81CONFIGURE_FILE(${CMAKE_BINARY_DIR}/storage/rocksdb/rdb_source_revision.h
82       ${PACKAGE_DIR}/storage/rocksdb/rdb_source_revision.h COPYONLY)
83
84IF(NOT GIT_EXECUTABLE)
85  MESSAGE(STATUS "git not found or source dir is not a repo, use CPack")
86
87  IF(CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR)
88    # In-source build is the worst option, we have to cleanup source tree.
89
90    # Save bison output first.
91    CONFIGURE_FILE(${CMAKE_BINARY_DIR}/sql/sql_yacc.cc
92       ${CMAKE_BINARY_DIR}/sql_yacc.cc COPYONLY)
93    CONFIGURE_FILE(${CMAKE_BINARY_DIR}/sql/sql_yacc.hh
94       ${CMAKE_BINARY_DIR}/sql_yacc.hh COPYONLY)
95
96    IF(CMAKE_GENERATOR MATCHES "Makefiles")
97    # make clean
98    EXECUTE_PROCESS(
99      COMMAND ${CMAKE_MAKE_PROGRAM} clean
100      WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
101    )
102    ENDIF()
103
104    # Restore bison output
105    CONFIGURE_FILE(${CMAKE_BINARY_DIR}/sql_yacc.cc
106       ${CMAKE_BINARY_DIR}/sql/sql_yacc.cc COPYONLY)
107    CONFIGURE_FILE(${CMAKE_BINARY_DIR}/sql_yacc.hh
108       ${CMAKE_BINARY_DIR}/sql/sql_yacc.h COPYONLY)
109    FILE(REMOVE ${CMAKE_BINARY_DIR}/sql_yacc.cc)
110    FILE(REMOVE ${CMAKE_BINARY_DIR}/sql_yacc.hh)
111  ENDIF()
112
113  EXECUTE_PROCESS(
114    COMMAND ${CMAKE_CPACK_COMMAND} -G TGZ --config ./CPackSourceConfig.cmake
115    ${CMAKE_BINARY_DIR}/CPackSourceConfig.cmake
116
117    WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
118  )
119  EXECUTE_PROCESS(
120  COMMAND ${CMAKE_COMMAND} -E tar xzf
121    ${CPACK_SOURCE_PACKAGE_FILE_NAME}.tar.gz
122    ${PACK_SOURCE_PACKAGE_FILE_NAME}
123    WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
124  )
125ENDIF()
126
127# Copy bison output
128CONFIGURE_FILE(${CMAKE_BINARY_DIR}/sql/yy_mariadb.hh
129   ${PACKAGE_DIR}/sql/yy_mariadb.hh COPYONLY)
130CONFIGURE_FILE(${CMAKE_BINARY_DIR}/sql/yy_mariadb.cc
131   ${PACKAGE_DIR}/sql/yy_mariadb.cc COPYONLY)
132# Copy bison output
133CONFIGURE_FILE(${CMAKE_BINARY_DIR}/sql/yy_oracle.hh
134   ${PACKAGE_DIR}/sql/yy_oracle.hh COPYONLY)
135CONFIGURE_FILE(${CMAKE_BINARY_DIR}/sql/yy_oracle.cc
136   ${PACKAGE_DIR}/sql/yy_oracle.cc COPYONLY)
137
138# Add documentation, if user has specified where to find them
139IF(MYSQL_DOCS_LOCATION)
140  MESSAGE("Copying documentation files from " ${MYSQL_DOCS_LOCATION})
141  EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E copy_directory "${MYSQL_DOCS_LOCATION}" "${PACKAGE_DIR}")
142ENDIF()
143
144# Ensure there is an "INFO_SRC" file.
145INCLUDE(${CMAKE_BINARY_DIR}/info_macros.cmake)
146IF(NOT EXISTS ${PACKAGE_DIR}/Docs/INFO_SRC)
147  CREATE_INFO_SRC(${PACKAGE_DIR}/Docs)
148ENDIF()
149
150# In case we used CPack, it could have copied some
151# extra files that are not usable on different machines.
152FILE(REMOVE ${PACKAGE_DIR}/CMakeCache.txt)
153
154# When packing source, prefer gnu tar  to "cmake -P tar"
155# cmake does not preserve timestamps.gnuwin32 tar is broken, cygwin is ok
156
157IF(CMAKE_SYSTEM_NAME MATCHES "Windows")
158  IF (EXISTS C:/cygwin/bin/tar.exe)
159    SET(TAR_EXECUTABLE C:/cygwin/bin/tar.exe)
160  ENDIF()
161ENDIF()
162
163IF(GTAR_EXECUTABLE)
164  SET(GNUTAR ${GTAR_EXECUTABLE})
165ELSEIF(TAR_EXECUTABLE)
166  EXECUTE_PROCESS(
167    COMMAND "${TAR_EXECUTABLE}" --version
168    RESULT_VARIABLE RESULT OUTPUT_VARIABLE OUT ERROR_VARIABLE ERR
169  )
170  IF(RESULT EQUAL 0 AND OUT MATCHES "GNU")
171    SET(GNUTAR ${TAR_EXECUTABLE})
172  ENDIF()
173ENDIF()
174
175SET($ENV{GZIP} "--best")
176
177IF(GNUTAR)
178  SET(PACK_COMMAND
179  ${GNUTAR} cfz
180  ${CPACK_SOURCE_PACKAGE_FILE_NAME}.tar.gz
181  ${CPACK_SOURCE_PACKAGE_FILE_NAME}
182  )
183ELSE()
184  SET(PACK_COMMAND ${CMAKE_COMMAND} -E tar cfz
185  ${CPACK_SOURCE_PACKAGE_FILE_NAME}.tar.gz
186  ${CPACK_SOURCE_PACKAGE_FILE_NAME}
187)
188ENDIF()
189
190MESSAGE(STATUS "Creating source package")
191
192EXECUTE_PROCESS(
193  COMMAND ${PACK_COMMAND}
194)
195MESSAGE(STATUS "Source package ${PACKAGE_DIR}.tar.gz created")
196