List:Commits« Previous MessageNext Message »
From:Joerg Bruehe Date:February 11 2011 2:55pm
Subject:bzr commit into mysql-5.5-bugteam branch (joerg:3209) Bug#42969
View as plain text  
#At file:///MySQL/REPO/V55/bug42969-5.5/ based on revid:jorgen.loland@stripped

 3209 Joerg Bruehe	2011-02-11
      Fix bug#42969    Please add a MANIFEST to each build
      
      With this change, there will be new files "INFO_SRC"
      and "INFO_BIN", which describe the source and the
      binaries.
      They will be contained in all packages:
      - in "tar.gz" and derived packages, in "docs/",
      - in RPMs, in "/usr/share/doc/packages/MySQL-server".
      
      "INFO_SRC" is also part of a source tarball.
      It gives the version as exact as possible, preferably
      by calling "bzr version-info" on the source tree.
      If that is not possible, it just contains the three
      level version number.
      
      "INFO_BIN" contains some info when and where the
      binaries were built, the options given to the compiler,
      and the flags controlling the included features.
      
      The tests (test "mysql" in the main suite) are extended
      to verify the existence of both "INFO_SRC" and "INFO_BIN",
      as well as some of the expected contents.
     @ CMakeLists.txt
        For the new files describing the source and the build
        ("INFO_SRC" and "INFO_BIN"), we need a new file
        "cmake/info_macros.cmake.in" with the build rules.
        
        1) This file must be configured with the current variables.
        
        2) "INFO_SRC" can be created during the cmake phase,
           but this should be repeated with each "make" to
        protect against a developer doing only "make" after
        a "bzr pull" (or "bzr commit").
        So have it both as a cmake rule and as a custom target.
        
        3) "INFO_BIN" must be created during the make phase
           only, because it contains information from files
        which will be written at the end of the cmake phase only.
        Therefore, it must be a custom target which is included
        in all "make" targets.
        
        4) The resulting "INFO_*" files must be included in packages.
     @ cmake/info_bin.cmake
        This is the file to create "INFO_BIN",
        by calling the "CREATE_INFO_BIN()" macro.
        
        It must be a separate file, so that the macro
        definitions can be included in other cmake scripts
        without that file inclusion causing a side effect,
        the macro call.
        That call would modify the source tree which should
        be trated read-only.
     @ cmake/info_macros.cmake.in
        This new file contains the macros to create the
        "INFO_*" files during various steps of the build,
        the calls will be at other places.
        
        1) For source: If running from a BZR tree, always create
           (update) "INFO_SRC" by running "bzr version-info".
           Outside a BZR tree, try to take it from exported
           sources, and create it only if missing, in that
           case put the three level version number into it.
        
        2) "INFO_BIN" contains
           - date/time and host name of the build host,
           - information about the platform,
           - information about the C and CXX compiler
             and the options given to them (Unix only),
           - the feature flags as reported by "cmake -L".
     @ cmake/info_src.cmake
        This is the file to create "INFO_SRC",
        by calling the "CREATE_INFO_SRC()" macro.
        
        It must be a separate file, so that the macro
        definitions can be included in other cmake scripts
        without that file inclusion causing a side effect,
        the macro call.
        That call would modify the source tree which should
        be trated read-only.
     @ cmake/make_dist.cmake.in
        Create a "VERSION_src" file during "make dist".
        
        In case it already exists from a preceding "cmake" run
        or tree export (which is quite likely), a new
        "make dist" must not modify it.
     @ mysql-test/r/file_contents.result
        Result of test for bug#42969.
     @ mysql-test/t/file_contents.test
        Perl test scriptlet for bug#42969.
     @ support-files/mysql.spec.sh
        Add "INFO_SRC" and "INFO_BIN" to the RPM contents.

    added:
      cmake/info_bin.cmake
      cmake/info_macros.cmake.in
      cmake/info_src.cmake
      mysql-test/r/file_contents.result
      mysql-test/t/file_contents.test
    modified:
      CMakeLists.txt
      cmake/make_dist.cmake.in
      support-files/mysql.spec.sh
=== modified file 'CMakeLists.txt'
--- a/CMakeLists.txt	2010-12-15 10:30:09 +0000
+++ b/CMakeLists.txt	2011-02-11 14:55:25 +0000
@@ -1,4 +1,4 @@
-# Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2006, 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
@@ -317,6 +317,24 @@ CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/inclu
                ${CMAKE_BINARY_DIR}/include/mysql_version.h )
 CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/sql/sql_builtin.cc.in
     ${CMAKE_BINARY_DIR}/sql/sql_builtin.cc)
+CONFIGURE_FILE(
+    ${CMAKE_SOURCE_DIR}/cmake/info_macros.cmake.in ${CMAKE_BINARY_DIR}/info_macros.cmake @ONLY)
+
+# Handle the "INFO_*" files.
+INCLUDE(${CMAKE_BINARY_DIR}/info_macros.cmake)
+# Source: This can be done during the cmake phase, all information is
+# available, but should be repeated on each "make" just in case someone
+# does "cmake ; make ; bzr pull ; make".
+CREATE_INFO_SRC(${CMAKE_BINARY_DIR}/Docs)
+ADD_CUSTOM_TARGET(INFO_SRC ALL
+  COMMAND ${CMAKE_COMMAND} -P ${CMAKE_SOURCE_DIR}/cmake/info_src.cmake
+  WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+)
+# Build flags: This must be postponed to the make phase.
+ADD_CUSTOM_TARGET(INFO_BIN ALL
+  COMMAND ${CMAKE_COMMAND} -P ${CMAKE_SOURCE_DIR}/cmake/info_bin.cmake
+  WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+)
 
 # Packaging
 IF(WIN32)
@@ -344,6 +362,7 @@ IF(NOT INSTALL_LAYOUT MATCHES "RPM")
   OPTIONAL
   )
   INSTALL(FILES README DESTINATION ${INSTALL_DOCREADMEDIR} COMPONENT Readme)
+  INSTALL(FILES ${CMAKE_BINARY_DIR}/Docs/INFO_SRC ${CMAKE_BINARY_DIR}/Docs/INFO_BIN DESTINATION ${INSTALL_DOCDIR})
   IF(UNIX)
     INSTALL(FILES Docs/INSTALL-BINARY DESTINATION ${INSTALL_DOCREADMEDIR} COMPONENT Readme)
   ENDIF()

=== added file 'cmake/info_bin.cmake'
--- a/cmake/info_bin.cmake	1970-01-01 00:00:00 +0000
+++ b/cmake/info_bin.cmake	2011-02-11 14:55:25 +0000
@@ -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()
+

=== added file 'cmake/info_macros.cmake.in'
--- a/cmake/info_macros.cmake.in	1970-01-01 00:00:00 +0000
+++ b/cmake/info_macros.cmake.in	2011-02-11 14:55:25 +0000
@@ -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)
+

=== added file 'cmake/info_src.cmake'
--- a/cmake/info_src.cmake	1970-01-01 00:00:00 +0000
+++ b/cmake/info_src.cmake	2011-02-11 14:55:25 +0000
@@ -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)
+

=== modified file 'cmake/make_dist.cmake.in'
--- a/cmake/make_dist.cmake.in	2010-11-20 14:47:50 +0000
+++ b/cmake/make_dist.cmake.in	2011-02-11 14:55:25 +0000
@@ -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
@@ -106,6 +106,12 @@ IF(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)

=== added file 'mysql-test/r/file_contents.result'
--- a/mysql-test/r/file_contents.result	1970-01-01 00:00:00 +0000
+++ b/mysql-test/r/file_contents.result	2011-02-11 14:55:25 +0000
@@ -0,0 +1,6 @@
+
+Checking 'INFO_SRC' and 'INFO_BIN'
+INFO_SRC: Found MySQL version number / Found BZR revision id
+INFO_BIN: Found 'Compiler ... used' line / Found 'Feature flags' line
+
+End of tests

=== added file 'mysql-test/t/file_contents.test'
--- a/mysql-test/t/file_contents.test	1970-01-01 00:00:00 +0000
+++ b/mysql-test/t/file_contents.test	2011-02-11 14:55:25 +0000
@@ -0,0 +1,56 @@
+#
+# Testing files that were built to be packaged, both for existence and for contents
+#
+
+#
+# Bug #42969: Create MANIFEST files
+#
+# Use a Perl script to verify that files "docs/INFO_BIN" and "docs/INFO_SRC" do exist
+# and have the expected contents.
+
+--perl
+print "\nChecking 'INFO_SRC' and 'INFO_BIN'\n";
+$dir_docs = $ENV{'MYSQL_LIBDIR'};
+if($dir_docs =~ m|/usr/|) {
+  # RPM package
+  $dir_docs =~ s|/lib|/share/doc|;
+  if(-d "$dir_docs/packages/MySQL-server") {
+    # SuSE
+    $dir_docs = "$dir_docs/packages/MySQL-server";
+  } else {
+    # RedHat: version number in directory name
+    $dir_docs = glob "$dir_docs/MySQL-server*";
+  }
+} else {
+  # tar.gz package, Windows, or developer work (in BZR)
+  $dir_docs =~ s|/lib||;
+  if(-d "$dir_docs/docs") {
+    $dir_docs = "$dir_docs/docs"; # package
+  } else {
+    $dir_docs = "$dir_docs/Docs"; # development tree
+  }
+}
+$found_version = "No line 'MySQL source #.#.#'";
+$found_revision = "No line 'revision-id: .....'";
+open(I_SRC,"<","$dir_docs/INFO_SRC") or print "Cannot open 'INFO_SRC' in '$dir_docs'\n";
+while(defined ($line = <I_SRC>)) {
+  if ($line =~ m|^MySQL source \d\.\d\.\d+|) {$found_version = "Found MySQL version number";}
+  if ($line =~ m|^revision-id: .*@.*-2\d{13}-\w+$|) {$found_revision = "Found BZR revision id";}
+}
+close I_SRC;
+print "INFO_SRC: $found_version / $found_revision\n";
+$found_compiler = "No line about compiler information";
+$found_features = "No line 'Feature flags'";
+open(I_BIN,"<","$dir_docs/INFO_BIN") or print "Cannot open 'INFO_BIN' in '$dir_docs'\n";
+while(defined ($line = <I_BIN>)) {
+  # "generator" on Windows, "flags" on Unix:
+  if (($line =~ m| Compiler / generator used: |) ||
+      ($line =~ m| Compiler flags used |))   {$found_compiler = "Found 'Compiler ... used' line";}
+  if  ($line =~ m| Feature flags used:|)     {$found_features = "Found 'Feature flags' line";}
+}
+close I_BIN;
+print "INFO_BIN: $found_compiler / $found_features\n";
+EOF
+
+--echo
+--echo End of tests

=== modified file 'support-files/mysql.spec.sh'
--- a/support-files/mysql.spec.sh	2010-11-24 15:55:23 +0000
+++ b/support-files/mysql.spec.sh	2011-02-11 14:55:25 +0000
@@ -1,4 +1,4 @@
-# Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2000, 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
@@ -908,6 +908,8 @@ echo "====="                            
 %doc %{license_files_server}
 %endif
 %doc %{src_dir}/Docs/ChangeLog
+%doc %{src_dir}/Docs/INFO_SRC*
+%doc release/Docs/INFO_BIN*
 %doc release/support-files/my-*.cnf
 
 %doc %attr(644, root, root) %{_infodir}/mysql.info*
@@ -1085,6 +1087,10 @@ echo "====="                            
 # merging BK trees)
 ##############################################################################
 %changelog
+* Mon Jan 31 2011 Joerg Bruehe <joerg.bruehe@stripped>
+
+- Install the new "manifest" files: "INFO_SRC" and "INFO_BIN".
+
 * Tue Nov 23 2010 Jonathan Perkin <jonathan.perkin@stripped>
 
 - EXCEPTIONS-CLIENT has been deleted, remove it from here too


Attachment: [text/bzr-bundle] bzr/joerg@mysql.com-20110211145525-wfn8jsvzedo8szsy.bundle
Thread
bzr commit into mysql-5.5-bugteam branch (joerg:3209) Bug#42969Joerg Bruehe11 Feb