summaryrefslogtreecommitdiff
path: root/cmake
diff options
context:
space:
mode:
Diffstat (limited to 'cmake')
-rw-r--r--cmake/info_bin.cmake30
-rw-r--r--cmake/info_macros.cmake.in132
-rw-r--r--cmake/info_src.cmake31
-rw-r--r--cmake/make_dist.cmake.in14
4 files changed, 206 insertions, 1 deletions
diff --git a/cmake/info_bin.cmake b/cmake/info_bin.cmake
new file mode 100644
index 00000000000..9cec3de0e0f
--- /dev/null
+++ b/cmake/info_bin.cmake
@@ -0,0 +1,30 @@
+# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; version 2 of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+
+# The sole purpose of this cmake control file is to create the "INFO_BIN" file.
+
+# By having a separate cmake file for this, it is ensured this happens
+# only in the build (Unix: "make") phase, not when cmake runs.
+# This, in turn, avoids creating stuff in the source directory -
+# it should get into the binary directory only.
+
+
+# Get the macros which the "INFO_*" files.
+INCLUDE(${CMAKE_BINARY_DIR}/info_macros.cmake)
+
+# Here is where the action is.
+CREATE_INFO_BIN()
+
diff --git a/cmake/info_macros.cmake.in b/cmake/info_macros.cmake.in
new file mode 100644
index 00000000000..9e08cffb2bf
--- /dev/null
+++ b/cmake/info_macros.cmake.in
@@ -0,0 +1,132 @@
+# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; version 2 of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+
+# Handle/create the "INFO_*" files describing a MySQL (server) binary.
+# This is part of the fix for bug#42969.
+
+
+# Several of cmake's variables need to be translated from '@' notation
+# to '${}', this is done by the "configure" call in top level "CMakeLists.txt".
+# If further variables are used in this file, add them to this list.
+
+SET(VERSION "@VERSION@")
+SET(CMAKE_SOURCE_DIR "@CMAKE_SOURCE_DIR@")
+SET(CMAKE_BINARY_DIR "@CMAKE_BINARY_DIR@")
+SET(CMAKE_GENERATOR "@CMAKE_GENERATOR@")
+SET(CMAKE_SIZEOF_VOID_P "@CMAKE_SIZEOF_VOID_P@")
+SET(BZR_EXECUTABLE "@BZR_EXECUTABLE@")
+SET(CMAKE_CROSSCOMPILING "@CMAKE_CROSSCOMPILING@")
+SET(CMAKE_HOST_SYSTEM "@CMAKE_HOST_SYSTEM@")
+SET(CMAKE_HOST_SYSTEM_PROCESSOR "@CMAKE_HOST_SYSTEM_PROCESSOR@")
+SET(CMAKE_SYSTEM "@CMAKE_SYSTEM@")
+SET(CMAKE_SYSTEM_PROCESSOR "@CMAKE_SYSTEM_PROCESSOR@")
+
+
+# Create an "INFO_SRC" file with information about the source (only).
+# We use "bzr version-info", if possible, and the "VERSION" contents.
+#
+# Outside development (BZR tree), the "INFO_SRC" file will not be modified
+# provided it exists (from "make dist" or a source tarball creation).
+
+MACRO(CREATE_INFO_SRC target_dir)
+ SET(INFO_SRC "${target_dir}/INFO_SRC")
+
+ IF(EXISTS ${CMAKE_SOURCE_DIR}/.bzr)
+ # Sources are in a BZR repository: Always update.
+ EXECUTE_PROCESS(
+ COMMAND ${BZR_EXECUTABLE} version-info ${CMAKE_SOURCE_DIR}
+ OUTPUT_VARIABLE VERSION_INFO
+ RESULT_VARIABLE RESULT
+ )
+ FILE(WRITE ${INFO_SRC} "${VERSION_INFO}\n")
+ # to debug, add: FILE(APPEND ${INFO_SRC} "\nResult ${RESULT}\n")
+ # For better readability ...
+ FILE(APPEND ${INFO_SRC} "\nMySQL source ${VERSION}\n")
+ ELSEIF(EXISTS ${INFO_SRC})
+ # Outside a BZR tree, there is no need to change an existing "INFO_SRC",
+ # it cannot be improved.
+ ELSEIF(EXISTS ${CMAKE_SOURCE_DIR}/Docs/INFO_SRC)
+ # If we are building from a source distribution, it also contains "INFO_SRC".
+ # Similar, the export used for a release build already has the file.
+ FILE(READ ${CMAKE_SOURCE_DIR}/Docs/INFO_SRC SOURCE_INFO)
+ FILE(WRITE ${INFO_SRC} "${SOURCE_INFO}\n")
+ ELSEIF(EXISTS ${CMAKE_SOURCE_DIR}/INFO_SRC)
+ # This is not the proper location, but who knows ...
+ FILE(READ ${CMAKE_SOURCE_DIR}/INFO_SRC SOURCE_INFO)
+ FILE(WRITE ${INFO_SRC} "${SOURCE_INFO}\n")
+ ELSE()
+ # This is a fall-back.
+ FILE(WRITE ${INFO_SRC} "\nMySQL source ${VERSION}\n")
+ ENDIF()
+ENDMACRO(CREATE_INFO_SRC)
+
+
+# This is for the "real" build, must be run again with each cmake run
+# to make sure we report the current flags (not those of some previous run).
+
+MACRO(CREATE_INFO_BIN)
+ SET(INFO_BIN "Docs/INFO_BIN")
+
+ FILE(WRITE ${INFO_BIN} "===== Information about the build process: =====\n")
+ IF (WIN32)
+ EXECUTE_PROCESS(COMMAND cmd /c date /T OUTPUT_VARIABLE TMP_DATE)
+ ELSEIF(UNIX)
+ EXECUTE_PROCESS(COMMAND date "+%Y-%m-%d %H:%M:%S" OUTPUT_VARIABLE TMP_DATE OUTPUT_STRIP_TRAILING_WHITESPACE)
+ ELSE()
+ SET(TMP_DATE "(no date command known for this platform)")
+ ENDIF()
+ SITE_NAME(HOSTNAME)
+ FILE(APPEND ${INFO_BIN} "Build was run at ${TMP_DATE} on host '${HOSTNAME}'\n\n")
+
+ # According to the cmake docs, these variables should always be set.
+ # However, they are empty in my tests, using cmake 2.6.4 on Linux, various Unix, and Windows.
+ # Still, include this code, so we will profit if a build environment does provide that info.
+ IF(CMAKE_HOST_SYSTEM)
+ FILE(APPEND ${INFO_BIN} "Build was done on ${CMAKE_HOST_SYSTEM} using ${CMAKE_HOST_SYSTEM_PROCESSOR}\n")
+ ENDIF()
+ IF(CMAKE_CROSSCOMPILING)
+ FILE(APPEND ${INFO_BIN} "Build was done for ${CMAKE_SYSTEM} using ${CMAKE_SYSTEM_PROCESSOR}\n")
+ ENDIF()
+
+ # ${CMAKE_VERSION} doesn't work in 2.6.0, use the separate components.
+ FILE(APPEND ${INFO_BIN} "Build was done using cmake ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION} \n\n")
+
+ IF (WIN32)
+ FILE(APPEND ${INFO_BIN} "===== Compiler / generator used: =====\n")
+ FILE(APPEND ${INFO_BIN} ${CMAKE_GENERATOR} "\n\n")
+ ELSEIF(UNIX)
+ FILE(APPEND ${INFO_BIN} "===== Compiler flags used (from the 'sql/' subdirectory): =====\n")
+ IF(EXISTS sql/CMakeFiles/sql.dir/flags.make)
+ EXECUTE_PROCESS(COMMAND egrep "^# compile|^C_|^CXX_" sql/CMakeFiles/sql.dir/flags.make OUTPUT_VARIABLE COMPILE_FLAGS)
+ FILE(APPEND ${INFO_BIN} ${COMPILE_FLAGS} "\n")
+ ELSE()
+ FILE(APPEND ${INFO_BIN} "File 'sql/CMakeFiles/sql.dir/flags.make' is not yet found.\n\n")
+ ENDIF()
+ ENDIF()
+ FILE(APPEND ${INFO_BIN} "Pointer size: ${CMAKE_SIZEOF_VOID_P}\n\n")
+
+ FILE(APPEND ${INFO_BIN} "===== Feature flags used: =====\n")
+ IF(EXISTS ${CMAKE_BINARY_DIR}/CMakeCache.txt)
+ # Attention: "-N" prevents cmake from entering a recursion, and it must be a separate flag from "-L".
+ EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -N -L ${CMAKE_BINARY_DIR} OUTPUT_VARIABLE FEATURE_FLAGS)
+ FILE(APPEND ${INFO_BIN} ${FEATURE_FLAGS} "\n")
+ ELSE()
+ FILE(APPEND ${INFO_BIN} "File 'CMakeCache.txt' is not yet found.\n\n")
+ ENDIF()
+
+ FILE(APPEND ${INFO_BIN} "===== EOF =====\n")
+ENDMACRO(CREATE_INFO_BIN)
+
diff --git a/cmake/info_src.cmake b/cmake/info_src.cmake
new file mode 100644
index 00000000000..97776b70901
--- /dev/null
+++ b/cmake/info_src.cmake
@@ -0,0 +1,31 @@
+# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; version 2 of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+
+# The sole purpose of this cmake control file is to create the "INFO_SRC" file.
+
+# As long as and "bzr pull" (or "bzr commit") is followed by a "cmake",
+# the call in top level "CMakeLists.txt" is sufficient.
+# This file is to provide a separate target for the "make" phase,
+# to ensure the BZR revision-id is correct even after a sequence
+# cmake ; make ; bzr pull ; make
+
+
+# Get the macros which handle the "INFO_*" files.
+INCLUDE(${CMAKE_BINARY_DIR}/info_macros.cmake)
+
+# Here is where the action is.
+CREATE_INFO_SRC(${CMAKE_BINARY_DIR}/Docs)
+
diff --git a/cmake/make_dist.cmake.in b/cmake/make_dist.cmake.in
index 95412370c28..ef1677db1c0 100644
--- a/cmake/make_dist.cmake.in
+++ b/cmake/make_dist.cmake.in
@@ -1,4 +1,4 @@
-# Copyright (C) 2009 Sun Microsystems, Inc
+# Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -29,6 +29,8 @@ SET(CMAKE_GENERATOR "@CMAKE_GENERATOR@")
SET(CMAKE_MAKE_PROGRAM "@CMAKE_MAKE_PROGRAM@")
SET(CMAKE_SYSTEM_NAME "@CMAKE_SYSTEM_NAME@")
+SET(VERSION "@VERSION@")
+
SET(MYSQL_DOCS_LOCATION "@MYSQL_DOCS_LOCATION@")
@@ -100,12 +102,22 @@ CONFIGURE_FILE(${CMAKE_BINARY_DIR}/sql/sql_yacc.h
CONFIGURE_FILE(${CMAKE_BINARY_DIR}/sql/sql_yacc.cc
${PACKAGE_DIR}/sql/sql_yacc.cc COPYONLY)
+# Copy spec files
+CONFIGURE_FILE(${CMAKE_BINARY_DIR}/support-files/mysql.${VERSION}.spec
+ ${PACKAGE_DIR}/support-files/mysql.${VERSION}.spec COPYONLY)
+
# Add documentation, if user has specified where to find them
IF(MYSQL_DOCS_LOCATION)
MESSAGE("Copying documentation files from " ${MYSQL_DOCS_LOCATION})
EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E copy_directory "${MYSQL_DOCS_LOCATION}" "${PACKAGE_DIR}")
ENDIF()
+# Ensure there is an "INFO_SRC" file.
+INCLUDE(${CMAKE_BINARY_DIR}/info_macros.cmake)
+IF(NOT EXISTS ${PACKAGE_DIR}/Docs/INFO_SRC)
+ CREATE_INFO_SRC(${PACKAGE_DIR}/Docs)
+ENDIF()
+
# In case we used CPack, it could have copied some
# extra files that are not usable on different machines.
FILE(REMOVE ${PACKAGE_DIR}/CMakeCache.txt)