Commit ce2aabb7 authored by Jonathan Perkin's avatar Jonathan Perkin

Changes to build using CMake according to existing release packages:

 - Update/fix file layouts for each package type, add new types for
   native package formats including deb, rpm and svr4.

 - Build all plugins, including debug versions

 - Update compiler flags to match current release

 - Add missing @VAR@ expansions

 - Install correct mysqclient library symlinks

 - Fix icc/ia64 builds

 - Fix install of libmysqld-debug

 - Don't include mysql_embedded

 - Remove unpackaged manual pages to avoid missing files warnings

 - Don't install mtr's test suite
parent 240176bf
...@@ -189,8 +189,11 @@ ELSE() ...@@ -189,8 +189,11 @@ ELSE()
ENDIF() ENDIF()
SET(DEFAULT_BASEDIR "${DEFAULT_MYSQL_HOME}") SET(DEFAULT_BASEDIR "${DEFAULT_MYSQL_HOME}")
SET(MYSQL_DATADIR "${DEFAULT_MYSQL_HOME}/${INSTALL_MYSQLDATADIR}" CACHE PATH IF(INSTALL_MYSQLDATADIR MATCHES "^/.*")
"default MySQL data directory") SET(MYSQL_DATADIR ${INSTALL_MYSQLDATADIR} CACHE PATH "default MySQL data directory")
ELSE()
SET(MYSQL_DATADIR "${DEFAULT_MYSQL_HOME}/${INSTALL_MYSQLDATADIR}" CACHE PATH "default MySQL data directory")
ENDIF()
SET(DEFAULT_CHARSET_HOME "${DEFAULT_MYSQL_HOME}") SET(DEFAULT_CHARSET_HOME "${DEFAULT_MYSQL_HOME}")
SET(PLUGINDIR "${DEFAULT_MYSQL_HOME}/${INSTALL_PLUGINDIR}") SET(PLUGINDIR "${DEFAULT_MYSQL_HOME}/${INSTALL_PLUGINDIR}")
IF(SYSCONFDIR) IF(SYSCONFDIR)
...@@ -274,20 +277,28 @@ ELSE() ...@@ -274,20 +277,28 @@ ELSE()
SET(CPACK_GENERATOR "TGZ") SET(CPACK_GENERATOR "TGZ")
ENDIF() ENDIF()
INCLUDE(CPack) INCLUDE(CPack)
INSTALL(FILES COPYING EXCEPTIONS-CLIENT LICENSE.mysql DESTINATION ${INSTALL_DOCREADMEDIR} OPTIONAL)
INSTALL(FILES README DESTINATION ${INSTALL_DOCREADMEDIR})
IF(UNIX) IF(UNIX)
INSTALL(FILES Docs/INSTALL-BINARY DESTINATION INSTALL(FILES Docs/mysql.info DESTINATION ${INSTALL_INFODIR} OPTIONAL)
${INSTALL_DOCREADMEDIR})
ENDIF() ENDIF()
# MYSQL_DOCS_LOCATON is used in "make dist", points to the documentation directory #
SET(MYSQL_DOCS_LOCATION "" CACHE PATH "Location from where documentation is copied") # RPM installs documentation directly from the source tree
MARK_AS_ADVANCED(MYSQL_DOCS_LOCATION) #
INSTALL(DIRECTORY Docs/ DESTINATION ${INSTALL_DOCDIR} IF(NOT INSTALL_LAYOUT MATCHES "RPM")
INSTALL(FILES COPYING EXCEPTIONS-CLIENT LICENSE.mysql DESTINATION ${INSTALL_DOCREADMEDIR} OPTIONAL)
INSTALL(FILES README DESTINATION ${INSTALL_DOCREADMEDIR})
IF(UNIX)
INSTALL(FILES Docs/INSTALL-BINARY DESTINATION ${INSTALL_DOCREADMEDIR})
ENDIF()
# MYSQL_DOCS_LOCATON is used in "make dist", points to the documentation directory
SET(MYSQL_DOCS_LOCATION "" CACHE PATH "Location from where documentation is copied")
MARK_AS_ADVANCED(MYSQL_DOCS_LOCATION)
INSTALL(DIRECTORY Docs/ DESTINATION ${INSTALL_DOCDIR}
PATTERN "INSTALL-BINARY" EXCLUDE PATTERN "INSTALL-BINARY" EXCLUDE
PATTERN "Makefile.*" EXCLUDE PATTERN "Makefile.*" EXCLUDE
PATTERN "myisam.txt" EXCLUDE
PATTERN "glibc*" EXCLUDE PATTERN "glibc*" EXCLUDE
PATTERN "sp-imp-spec.txt" EXCLUDE
PATTERN "linuxthreads.txt" EXCLUDE PATTERN "linuxthreads.txt" EXCLUDE
) PATTERN "myisam.txt" EXCLUDE
PATTERN "mysql.info" EXCLUDE
PATTERN "sp-imp-spec.txt" EXCLUDE
)
ENDIF()
...@@ -80,9 +80,6 @@ IF(FEATURE_SET) ...@@ -80,9 +80,6 @@ IF(FEATURE_SET)
ENDFOREACH() ENDFOREACH()
ENDIF() ENDIF()
SET(WITHOUT_AUDIT_NULL ON CACHE BOOL "")
SET(WITHOUT_DAEMON_EXAMPLE ON CACHE BOOL "")
OPTION(ENABLE_LOCAL_INFILE "" ON) OPTION(ENABLE_LOCAL_INFILE "" ON)
SET(WITH_SSL bundled CACHE STRING "") SET(WITH_SSL bundled CACHE STRING "")
SET(WITH_ZLIB bundled CACHE STRING "") SET(WITH_ZLIB bundled CACHE STRING "")
...@@ -122,8 +119,12 @@ IF(UNIX) ...@@ -122,8 +119,12 @@ IF(UNIX)
IF(CMAKE_SYSTEM_NAME MATCHES "HP-UX") IF(CMAKE_SYSTEM_NAME MATCHES "HP-UX")
IF(CMAKE_C_COMPILER_ID MATCHES "HP") IF(CMAKE_C_COMPILER_ID MATCHES "HP")
IF(CMAKE_SYSTEM_PROCESSOR MATCHES "ia64") IF(CMAKE_SYSTEM_PROCESSOR MATCHES "ia64")
SET(CMAKE_C_FLAGS_RELWITHDEBINFO "-g +O2 +DD64 +DSitanium2 -mt -AC99") SET(CMAKE_C_FLAGS
SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-g +O2 +DD64 +DSitanium2 -mt -Aa") "${CMAKE_C_FLAGS} +DD64 +DSitanium2 -mt -AC99")
SET(CMAKE_CXX_FLAGS
"${CMAKE_CXX_FLAGS} +DD64 +DSitanium2 -mt -Aa")
SET(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS} +O2")
SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS} +O2")
ENDIF() ENDIF()
ENDIF() ENDIF()
SET(WITH_SSL) SET(WITH_SSL)
...@@ -132,15 +133,16 @@ IF(UNIX) ...@@ -132,15 +133,16 @@ IF(UNIX)
# Linux flags # Linux flags
IF(CMAKE_SYSTEM_NAME MATCHES "Linux") IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
IF(CMAKE_C_COMPILER_ID MATCHES "Intel") IF(CMAKE_C_COMPILER_ID MATCHES "Intel")
SET(CMAKE_C_FLAGS_RELWITHDEBINFO "-static-intel -g -O3 -unroll2 -ip -mp -restrict") SET(CMAKE_C_FLAGS_RELWITHDEBINFO "-static-intel -static-libgcc -g -O3 -unroll2 -ip -mp -restrict -no-ftz -no-prefetch")
SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-static-intel -g -O3 -unroll2 -ip -mp -restrict") SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-static-intel -static-libgcc -g -O3 -unroll2 -ip -mp -restrict -no-ftz -no-prefetch")
SET(WITH_SSL no)
ENDIF() ENDIF()
ENDIF() ENDIF()
# OSX flags # OSX flags
IF(APPLE) IF(APPLE)
SET(CMAKE_C_FLAGS_RELWITHDEBINFO "-Os ${CMAKE_C_FLAGS_RELWITHDEBINFO}") SET(CMAKE_C_FLAGS_RELWITHDEBINFO "-g -Os -fno-common")
SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-Os ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}") SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-g -Os -felide-constructors -fno-common")
ENDIF() ENDIF()
# Solaris flags # Solaris flags
......
...@@ -14,52 +14,68 @@ ...@@ -14,52 +14,68 @@
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
# The purpose of this file is to set the default installation layout. # The purpose of this file is to set the default installation layout.
# Currently, there are 2 different installation layouts ,
# one is used in tar.gz packages (Windows zip is about the same), another one
# in RPMs.
# There are currently 2 layouts defines, named STANDALONE (tar.gz layout)
# and UNIX (rpm layout). To force a directory layout when invoking cmake use
# -DINSTALL_LAYOUT=[STANDALONE|UNIX].
# This wil use a predefined layout. There is a possibility to further fine-tune
# installation directories. Several variables are can be overwritten
# #
# - INSTALL_BINDIR (directory with client executables and Unix shell scripts) # The current choices of installation layout are:
#
# STANDALONE
# Build with prefix=/usr/local/mysql, create tarball with install prefix="."
# and relative links. Windows zip uses the same tarball layout but without
# the build prefix.
#
# RPM
# Build as per default RPM layout, with prefix=/usr
#
# DEB
# Build as per STANDALONE, prefix=/opt/mysql-$major.$minor
#
# SVR4
# Solaris package layout suitable for pkg* tools, prefix=/opt/mysql/mysql
#
# To force a directory layout, use -DINSTALL_LAYOUT=<layout>.
#
# The default is STANDALONE.
#
# There is the possibility to further fine-tune installation directories.
# Several variables can be overwritten:
#
# - INSTALL_BINDIR (directory with client executables and scripts)
# - INSTALL_SBINDIR (directory with mysqld) # - INSTALL_SBINDIR (directory with mysqld)
# - INSTALL_SCRIPTDIR (several scripts, rarely used)
#
# - INSTALL_LIBDIR (directory with client end embedded libraries) # - INSTALL_LIBDIR (directory with client end embedded libraries)
# - INSTALL_PLUGINDIR (directory for plugins) # - INSTALL_PLUGINDIR (directory for plugins)
#
# - INSTALL_INCLUDEDIR (directory for MySQL headers) # - INSTALL_INCLUDEDIR (directory for MySQL headers)
#
# - INSTALL_DOCDIR (documentation) # - INSTALL_DOCDIR (documentation)
# - INSTALL_DOCREADMEDIR (readme and similar)
# - INSTALL_MANDIR (man pages) # - INSTALL_MANDIR (man pages)
# - INSTALL_SCRIPTDIR (several scripts, rarely used) # - INSTALL_INFODIR (info pages)
# - INSTALL_MYSQLSHAREDIR (MySQL character sets and localized error messages) #
# - INSTALL_SHAREDIR (location of aclocal/mysql.m4) # - INSTALL_SHAREDIR (location of aclocal/mysql.m4)
# - INSTALL_SQLBENCHDIR (sql-bench) # - INSTALL_MYSQLSHAREDIR (MySQL character sets and localized error messages)
# - INSTALL_MYSQLTESTDIR (mysql-test) # - INSTALL_MYSQLTESTDIR (mysql-test)
# - INSTALL_DOCREADMEDIR (readme and similar) # - INSTALL_SQLBENCHDIR (sql-bench)
# - INSTALL_SUPPORTFILESDIR (used only in standalone installer) # - INSTALL_SUPPORTFILESDIR (various extra support files)
#
# - INSTALL_MYSQLDATADIR (data directory)
# Default installation layout on Unix is UNIX (kent wants it so)
IF(NOT INSTALL_LAYOUT) IF(NOT INSTALL_LAYOUT)
IF(WIN32)
SET(DEFAULT_INSTALL_LAYOUT "STANDALONE") SET(DEFAULT_INSTALL_LAYOUT "STANDALONE")
ELSE()
SET(DEFAULT_INSTALL_LAYOUT "UNIX")
ENDIF()
ENDIF() ENDIF()
SET(INSTALL_LAYOUT "${DEFAULT_INSTALL_LAYOUT}" SET(INSTALL_LAYOUT "${DEFAULT_INSTALL_LAYOUT}"
CACHE STRING "Installation directory layout. Options are: STANDALONE (as in zip or tar.gz installer) or UNIX") CACHE STRING "Installation directory layout. Options are: STANDALONE (as in zip or tar.gz installer) or UNIX")
IF(NOT INSTALL_LAYOUT MATCHES "STANDALONE")
IF(NOT INSTALL_LAYOUT MATCHES "UNIX")
SET(INSTALL_LAYOUT "${DEFAULT_INSTALL_LAYOUT}")
ENDIF()
ENDIF()
IF(UNIX) IF(UNIX)
IF(INSTALL_LAYOUT MATCHES "UNIX") IF(INSTALL_LAYOUT MATCHES "RPM")
SET(default_prefix "/usr") SET(default_prefix "/usr")
ELSEIF(INSTALL_LAYOUT MATCHES "DEB")
SET(default_prefix "/opt/${MYSQL_BASE_VERSION}")
# This is required to avoid "cpack -GDEB" default of prefix=/usr
SET(CPACK_SET_DESTDIR ON)
ELSEIF(INSTALL_LAYOUT MATCHES "SVR4")
SET(default_prefix "/opt/mysql/mysql")
ELSE() ELSE()
SET(default_prefix "/usr/local/mysql") SET(default_prefix "/usr/local/mysql")
ENDIF() ENDIF()
...@@ -72,41 +88,110 @@ IF(UNIX) ...@@ -72,41 +88,110 @@ IF(UNIX)
MARK_AS_ADVANCED(SYSCONFDIR) MARK_AS_ADVANCED(SYSCONFDIR)
ENDIF() ENDIF()
#
# STANDALONE layout
#
SET(INSTALL_BINDIR_STANDALONE "bin")
SET(INSTALL_SBINDIR_STANDALONE "bin")
SET(INSTALL_SCRIPTDIR_STANDALONE "scripts")
#
SET(INSTALL_LIBDIR_STANDALONE "lib")
SET(INSTALL_PLUGINDIR_STANDALONE "lib/plugin")
#
SET(INSTALL_INCLUDEDIR_STANDALONE "include")
#
SET(INSTALL_DOCDIR_STANDALONE "docs")
SET(INSTALL_DOCREADMEDIR_STANDALONE ".")
SET(INSTALL_MANDIR_STANDALONE "man")
SET(INSTALL_INFODIR_STANDALONE "docs")
#
SET(INSTALL_SHAREDIR_STANDALONE "share")
SET(INSTALL_MYSQLSHAREDIR_STANDALONE "share")
SET(INSTALL_MYSQLTESTDIR_STANDALONE "mysql-test")
SET(INSTALL_SQLBENCHDIR_STANDALONE ".")
SET(INSTALL_SUPPORTFILESDIR_STANDALONE "support-files")
#
SET(INSTALL_MYSQLDATADIR_STANDALONE "data")
#
# RPM layout
#
SET(INSTALL_BINDIR_RPM "bin")
SET(INSTALL_SBINDIR_RPM "sbin")
SET(INSTALL_SCRIPTDIR_RPM "bin")
#
IF(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64")
SET(INSTALL_LIBDIR_RPM "lib64")
SET(INSTALL_PLUGINDIR_RPM "lib64/mysql/plugin")
ELSE()
SET(INSTALL_LIBDIR_RPM "lib")
SET(INSTALL_PLUGINDIR_RPM "lib/mysql/plugin")
ENDIF()
#
SET(INSTALL_INCLUDEDIR_RPM "include/mysql")
#
#SET(INSTALL_DOCDIR_RPM unset - installed directly by RPM)
#SET(INSTALL_DOCREADMEDIR_RPM unset - installed directly by RPM)
SET(INSTALL_INFODIR_RPM "share/info")
SET(INSTALL_MANDIR_RPM "share/man")
#
SET(INSTALL_SHAREDIR_RPM "share")
SET(INSTALL_MYSQLSHAREDIR_RPM "share/mysql")
SET(INSTALL_MYSQLTESTDIR_RPM "share/mysql-test")
SET(INSTALL_SQLBENCHDIR_RPM "")
SET(INSTALL_SUPPORTFILESDIR_RPM "share/mysql")
#
SET(INSTALL_MYSQLDATADIR_RPM "/var/lib/mysql")
# STANDALONE layout #
SET(INSTALL_BINDIR_STANDALONE "bin") # DEB layout
SET(INSTALL_SBINDIR_STANDALONE "bin") #
SET(INSTALL_LIBDIR_STANDALONE "lib") SET(INSTALL_BINDIR_DEB "bin")
SET(INSTALL_INCLUDEDIR_STANDALONE "include") SET(INSTALL_SBINDIR_DEB "bin")
SET(INSTALL_PLUGINDIR_STANDALONE "lib/plugin") SET(INSTALL_SCRIPTDIR_DEB "scripts")
SET(INSTALL_DOCDIR_STANDALONE "docs") #
SET(INSTALL_MANDIR_STANDALONE "man") SET(INSTALL_LIBDIR_DEB "lib")
SET(INSTALL_MYSQLSHAREDIR_STANDALONE "share") SET(INSTALL_PLUGINDIR_DEB "lib/plugin")
SET(INSTALL_SHAREDIR_STANDALONE "share") #
SET(INSTALL_SCRIPTDIR_STANDALONE "scripts") SET(INSTALL_INCLUDEDIR_DEB "include")
SET(INSTALL_MYSQLTESTDIR_STANDALONE "mysql-test") #
SET(INSTALL_SQLBENCHROOTDIR_STANDALONE ".") SET(INSTALL_DOCDIR_DEB "docs")
SET(INSTALL_DOCREADMEDIR_STANDALONE ".") SET(INSTALL_DOCREADMEDIR_DEB ".")
SET(INSTALL_SUPPORTFILESDIR_STANDALONE "support-files") SET(INSTALL_MANDIR_DEB "man")
SET(INSTALL_MYSQLDATADIR_STANDALONE "data") SET(INSTALL_INFODIR_DEB "docs")
#
SET(INSTALL_SHAREDIR_DEB "share")
SET(INSTALL_MYSQLSHAREDIR_DEB "share")
SET(INSTALL_MYSQLTESTDIR_DEB "mysql-test")
SET(INSTALL_SQLBENCHDIR_DEB ".")
SET(INSTALL_SUPPORTFILESDIR_DEB "support-files")
#
SET(INSTALL_MYSQLDATADIR_DEB "data")
# UNIX layout #
SET(INSTALL_BINDIR_UNIX "bin") # SVR4 layout
SET(INSTALL_SBINDIR_UNIX "sbin") #
SET(INSTALL_LIBDIR_UNIX "lib/mysql") SET(INSTALL_BINDIR_SVR4 "bin")
SET(INSTALL_PLUGINDIR_UNIX "lib/mysql/plugin") SET(INSTALL_SBINDIR_SVR4 "bin")
SET(INSTALL_DOCDIR_UNIX "share/mysql/doc/MySQL-server-${MYSQL_NO_DASH_VERSION}") SET(INSTALL_SCRIPTDIR_SVR4 "scripts")
SET(INSTALL_MANDIR_UNIX "share/mysql/man") #
SET(INSTALL_INCLUDEDIR_UNIX "include/mysql") SET(INSTALL_LIBDIR_SVR4 "lib")
SET(INSTALL_MYSQLSHAREDIR_UNIX "share/mysql") SET(INSTALL_PLUGINDIR_SVR4 "lib/plugin")
SET(INSTALL_SHAREDIR_UNIX "share") #
SET(INSTALL_SCRIPTDIR_UNIX "bin") SET(INSTALL_INCLUDEDIR_SVR4 "include")
SET(INSTALL_MYSQLTESTDIR_UNIX "mysql-test") #
SET(INSTALL_SQLBENCHROOTDIR_UNIX "") SET(INSTALL_DOCDIR_SVR4 "docs")
SET(INSTALL_DOCREADMEDIR_UNIX "share/mysql/doc/MySQL-server-${MYSQL_NO_DASH_VERSION}") SET(INSTALL_DOCREADMEDIR_SVR4 ".")
SET(INSTALL_SUPPORTFILESDIR_UNIX "") SET(INSTALL_MANDIR_SVR4 "man")
SET(INSTALL_MYSQLDATADIR_UNIX "var") SET(INSTALL_INFODIR_SVR4 "docs")
#
SET(INSTALL_SHAREDIR_SVR4 "share")
SET(INSTALL_MYSQLSHAREDIR_SVR4 "share")
SET(INSTALL_MYSQLTESTDIR_SVR4 "mysql-test")
SET(INSTALL_SQLBENCHDIR_SVR4 ".")
SET(INSTALL_SUPPORTFILESDIR_SVR4 "support-files")
#
SET(INSTALL_MYSQLDATADIR_SVR4 "/var/lib/mysql")
# Clear cached variables if install layout was changed # Clear cached variables if install layout was changed
...@@ -117,11 +202,11 @@ IF(OLD_INSTALL_LAYOUT) ...@@ -117,11 +202,11 @@ IF(OLD_INSTALL_LAYOUT)
ENDIF() ENDIF()
SET(OLD_INSTALL_LAYOUT ${INSTALL_LAYOUT} CACHE INTERNAL "") SET(OLD_INSTALL_LAYOUT ${INSTALL_LAYOUT} CACHE INTERNAL "")
# Set INSTALL_FOODIR variables for chosen layout # Set INSTALL_FOODIR variables for chosen layout (for example, INSTALL_BINDIR
# (for example, INSTALL_BINDIR will be defined as # will be defined as ${INSTALL_BINDIR_STANDALONE} by default if STANDALONE
# ${INSTALL_BINDIR_STANDALONE} by default if STANDALONE layout is chosen) # layout is chosen)
FOREACH(var BIN SBIN LIB MYSQLSHARE SHARE PLUGIN INCLUDE SCRIPT DOC MAN FOREACH(var BIN SBIN LIB MYSQLSHARE SHARE PLUGIN INCLUDE SCRIPT DOC MAN
MYSQLTEST SQLBENCHROOT DOCREADME SUPPORTFILES MYSQLDATA) INFO MYSQLTEST SQLBENCH DOCREADME SUPPORTFILES MYSQLDATA)
SET(INSTALL_${var}DIR ${INSTALL_${var}DIR_${INSTALL_LAYOUT}} SET(INSTALL_${var}DIR ${INSTALL_${var}DIR_${INSTALL_LAYOUT}}
CACHE STRING "${var} installation directory" ${FORCE}) CACHE STRING "${var} installation directory" ${FORCE})
MARK_AS_ADVANCED(INSTALL_${var}DIR) MARK_AS_ADVANCED(INSTALL_${var}DIR)
......
...@@ -189,9 +189,40 @@ FUNCTION(INSTALL_DEBUG_TARGET target) ...@@ -189,9 +189,40 @@ FUNCTION(INSTALL_DEBUG_TARGET target)
STRING(REPLACE "${CMAKE_CFG_INTDIR}" "Debug" debug_target_location "${target_location}" ) STRING(REPLACE "${CMAKE_CFG_INTDIR}" "Debug" debug_target_location "${target_location}" )
ENDIF() ENDIF()
# Define permissions
# For executable files
SET(PERMISSIONS_EXECUTABLE
PERMISSIONS
OWNER_READ OWNER_WRITE OWNER_EXECUTE
GROUP_READ GROUP_EXECUTE
WORLD_READ WORLD_EXECUTE)
# Permissions for shared library (honors CMAKE_INSTALL_NO_EXE which is
# typically set on Debian)
IF(CMAKE_INSTALL_SO_NO_EXE)
SET(PERMISSIONS_SHARED_LIBRARY
PERMISSIONS
OWNER_READ OWNER_WRITE
GROUP_READ
WORLD_READ)
ELSE()
SET(PERMISSIONS_SHARED_LIBRARY ${PERMISSIONS_EXECUTABLE})
ENDIF()
# Shared modules get the same permissions as shared libraries
SET(PERMISSIONS_MODULE_LIBRARY ${PERMISSIONS_SHARED_LIBRARY})
# Define permissions for static library
SET(PERMISSIONS_STATIC_LIBRARY
PERMISSIONS
OWNER_READ OWNER_WRITE
GROUP_READ
WORLD_READ)
INSTALL(FILES ${debug_target_location} INSTALL(FILES ${debug_target_location}
DESTINATION ${ARG_DESTINATION} DESTINATION ${ARG_DESTINATION}
${RENAME_PARAM} ${RENAME_PARAM}
${PERMISSIONS_${target_type}}
CONFIGURATIONS Release RelWithDebInfo CONFIGURATIONS Release RelWithDebInfo
OPTIONAL) OPTIONAL)
......
...@@ -55,6 +55,7 @@ MACRO(GET_MYSQL_VERSION) ...@@ -55,6 +55,7 @@ MACRO(GET_MYSQL_VERSION)
ENDIF() ENDIF()
SET(VERSION ${VERSION_STRING}) SET(VERSION ${VERSION_STRING})
STRING(REPLACE "-" "_" MYSQL_U_SCORE_VERSION "${VERSION_STRING}")
# Remove trailing (non-numeric) part of the version string # Remove trailing (non-numeric) part of the version string
STRING(REGEX REPLACE "[^\\.0-9].*" "" VERSION_STRING ${VERSION_STRING}) STRING(REGEX REPLACE "[^\\.0-9].*" "" VERSION_STRING ${VERSION_STRING})
...@@ -106,6 +107,7 @@ ENDIF() ...@@ -106,6 +107,7 @@ ENDIF()
IF(NOT CPACK_SOURCE_PACKAGE_FILE_NAME) IF(NOT CPACK_SOURCE_PACKAGE_FILE_NAME)
SET(CPACK_SOURCE_PACKAGE_FILE_NAME "mysql-${VERSION}") SET(CPACK_SOURCE_PACKAGE_FILE_NAME "mysql-${VERSION}")
ENDIF() ENDIF()
SET(CPACK_PACKAGE_CONTACT "MySQL Build Team <build@mysql.com>")
SET(CPACK_PACKAGE_VENDOR "Sun Microsystems, Inc") SET(CPACK_PACKAGE_VENDOR "Sun Microsystems, Inc")
SET(CPACK_SOURCE_GENERATOR "TGZ") SET(CPACK_SOURCE_GENERATOR "TGZ")
INCLUDE(cpack_source_ignore_files) INCLUDE(cpack_source_ignore_files)
...@@ -114,6 +116,16 @@ INCLUDE(cpack_source_ignore_files) ...@@ -114,6 +116,16 @@ INCLUDE(cpack_source_ignore_files)
SET(PRODUCTNAME "MySQL Server") SET(PRODUCTNAME "MySQL Server")
SET(COMPANYNAME ${CPACK_PACKAGE_VENDOR}) SET(COMPANYNAME ${CPACK_PACKAGE_VENDOR})
# Windows 'date' command has unpredictable output, so cannot rely on it to
# set MYSQL_COPYRIGHT_YEAR - if someone finds a portable way to do so then
# it might be useful
#IF (WIN32)
# EXECUTE_PROCESS(COMMAND "date" "/T" OUTPUT_VARIABLE TMP_DATE)
# STRING(REGEX REPLACE "(..)/(..)/..(..).*" "\\3\\2\\1" MYSQL_COPYRIGHT_YEAR ${TMP_DATE})
IF(UNIX)
EXECUTE_PROCESS(COMMAND "date" "+%Y" OUTPUT_VARIABLE MYSQL_COPYRIGHT_YEAR OUTPUT_STRIP_TRAILING_WHITESPACE)
ENDIF()
# Add version information to the exe and dll files # Add version information to the exe and dll files
# Refer to http://msdn.microsoft.com/en-us/library/aa381058(VS.85).aspx # Refer to http://msdn.microsoft.com/en-us/library/aa381058(VS.85).aspx
# for more info. # for more info.
......
...@@ -174,6 +174,7 @@ MACRO(MYSQL_ADD_PLUGIN) ...@@ -174,6 +174,7 @@ MACRO(MYSQL_ADD_PLUGIN)
OUTPUT_NAME "${ARG_MODULE_OUTPUT_NAME}") OUTPUT_NAME "${ARG_MODULE_OUTPUT_NAME}")
# Install dynamic library # Install dynamic library
MYSQL_INSTALL_TARGETS(${target} DESTINATION ${INSTALL_PLUGINDIR}) MYSQL_INSTALL_TARGETS(${target} DESTINATION ${INSTALL_PLUGINDIR})
INSTALL_DEBUG_TARGET(${target} DESTINATION ${INSTALL_PLUGINDIR}/debug)
ENDIF() ENDIF()
ENDMACRO() ENDMACRO()
......
...@@ -38,6 +38,7 @@ ...@@ -38,6 +38,7 @@
#cmakedefine HAVE_FPU_CONTROL_H 1 #cmakedefine HAVE_FPU_CONTROL_H 1
#cmakedefine HAVE_GRP_H 1 #cmakedefine HAVE_GRP_H 1
#cmakedefine HAVE_EXPLICIT_TEMPLATE_INSTANTIATION 1 #cmakedefine HAVE_EXPLICIT_TEMPLATE_INSTANTIATION 1
#cmakedefine HAVE_IA64INTRIN_H 1
#cmakedefine HAVE_IEEEFP_H 1 #cmakedefine HAVE_IEEEFP_H 1
#cmakedefine HAVE_INTTYPES_H 1 #cmakedefine HAVE_INTTYPES_H 1
#cmakedefine HAVE_LIMITS_H 1 #cmakedefine HAVE_LIMITS_H 1
......
...@@ -171,15 +171,24 @@ IF(UNIX) ...@@ -171,15 +171,24 @@ IF(UNIX)
SET(${OUTNAME} ${LIBNAME}${EXTENSION}${DOT_VERSION}) SET(${OUTNAME} ${LIBNAME}${EXTENSION}${DOT_VERSION})
ENDIF() ENDIF()
ENDMACRO() ENDMACRO()
INSTALL_SYMLINK(${CMAKE_STATIC_LIBRARY_PREFIX}mysqlclient_r.a mysqlclient ${INSTALL_LIBDIR})
ENDIF() ENDIF()
IF(NOT DISABLE_SHARED) IF(NOT DISABLE_SHARED)
MERGE_LIBRARIES(libmysql SHARED ${LIBS} EXPORTS ${CLIENT_API_FUNCTIONS}) MERGE_LIBRARIES(libmysql SHARED ${LIBS} EXPORTS ${CLIENT_API_FUNCTIONS})
IF(UNIX) IF(UNIX)
# libtool compatability
IF(CMAKE_SYSTEM_NAME MATCHES "FreeBSD" OR APPLE)
SET(OS_SHARED_LIB_VERSION "${SHARED_LIB_MAJOR_VERSION}")
ELSEIF(CMAKE_SYSTEM_NAME MATCHES "HP-UX")
SET(OS_SHARED_LIB_VERSION "${SHARED_LIB_MAJOR_VERSION}.0")
ELSE()
SET(OS_SHARED_LIB_VERSION "${SHARED_LIB_MAJOR_VERSION}.0.0")
ENDIF()
# Name of shared library is mysqlclient on Unix # Name of shared library is mysqlclient on Unix
SET_TARGET_PROPERTIES(libmysql PROPERTIES SET_TARGET_PROPERTIES(libmysql PROPERTIES
OUTPUT_NAME mysqlclient OUTPUT_NAME mysqlclient
VERSION "${SHARED_LIB_MAJOR_VERSION}.0.0" VERSION "${OS_SHARED_LIB_VERSION}"
SOVERSION "${SHARED_LIB_MAJOR_VERSION}") SOVERSION "${SHARED_LIB_MAJOR_VERSION}")
IF(LINK_FLAG_NO_UNDEFINED) IF(LINK_FLAG_NO_UNDEFINED)
GET_TARGET_PROPERTY(libmysql_link_flags libmysql LINK_FLAGS) GET_TARGET_PROPERTY(libmysql_link_flags libmysql LINK_FLAGS)
...@@ -194,9 +203,16 @@ IF(NOT DISABLE_SHARED) ...@@ -194,9 +203,16 @@ IF(NOT DISABLE_SHARED)
SET_TARGET_PROPERTIES(mysqlclient PROPERTIES CLEAN_DIRECT_OUTPUT 1) SET_TARGET_PROPERTIES(mysqlclient PROPERTIES CLEAN_DIRECT_OUTPUT 1)
SET_TARGET_PROPERTIES(libmysql PROPERTIES CLEAN_DIRECT_OUTPUT 1) SET_TARGET_PROPERTIES(libmysql PROPERTIES CLEAN_DIRECT_OUTPUT 1)
# Install 3 links to libmysqlclient.so (client_r) # Install links to libmysqlclient.so (client_r)
FOREACH(ver "" "${SHARED_LIB_MAJOR_VERSION}" GET_VERSIONED_LIBNAME(
"${SHARED_LIB_MAJOR_VERSION}.0.0") "${CMAKE_SHARED_LIBRARY_PREFIX}mysqlclient_r"
"${CMAKE_SHARED_LIBRARY_SUFFIX}"
""
linkname)
INSTALL_SYMLINK(${linkname} libmysql ${INSTALL_LIBDIR})
SET(OS_SHARED_LIB_SYMLINKS "${SHARED_LIB_MAJOR_VERSION}" "${OS_SHARED_LIB_VERSION}")
LIST(REMOVE_DUPLICATES OS_SHARED_LIB_SYMLINKS)
FOREACH(ver ${OS_SHARED_LIB_SYMLINKS})
GET_VERSIONED_LIBNAME( GET_VERSIONED_LIBNAME(
"${CMAKE_SHARED_LIBRARY_PREFIX}mysqlclient_r" "${CMAKE_SHARED_LIBRARY_PREFIX}mysqlclient_r"
"${CMAKE_SHARED_LIBRARY_SUFFIX}" "${CMAKE_SHARED_LIBRARY_SUFFIX}"
......
...@@ -133,7 +133,7 @@ ENDIF() ...@@ -133,7 +133,7 @@ ENDIF()
IF(UNIX) IF(UNIX)
INSTALL_DEBUG_TARGET(mysqlserver DESTINATION ${INSTALL_LIBDIR} RENAME INSTALL_DEBUG_TARGET(mysqlserver DESTINATION ${INSTALL_LIBDIR} RENAME
${CMAKE_STATIC_LIBRARY_PREFIX}/mysqld-debug) ${CMAKE_STATIC_LIBRARY_PREFIX}mysqld-debug)
ENDIF() ENDIF()
IF(MSVC AND NOT DISABLE_SHARED) IF(MSVC AND NOT DISABLE_SHARED)
......
...@@ -23,7 +23,9 @@ INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include ...@@ -23,7 +23,9 @@ INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include
ADD_DEFINITIONS(-DEMBEDDED_LIBRARY -UMYSQL_CLIENT) ADD_DEFINITIONS(-DEMBEDDED_LIBRARY -UMYSQL_CLIENT)
MYSQL_ADD_EXECUTABLE(mysql_embedded ../../client/completion_hash.cc # We never use "mysql_embedded", is more of a linktest, so we don't
# use MYSQL_ADD_EXECUTABLE as that would install it and package it
ADD_EXECUTABLE(mysql_embedded ../../client/completion_hash.cc
../../client/mysql.cc ../../client/readline.cc) ../../client/mysql.cc ../../client/readline.cc)
TARGET_LINK_LIBRARIES(mysql_embedded mysqlserver) TARGET_LINK_LIBRARIES(mysql_embedded mysqlserver)
IF(UNIX) IF(UNIX)
......
...@@ -15,8 +15,12 @@ ...@@ -15,8 +15,12 @@
# Copy man pages # Copy man pages
FILE(GLOB MAN1_FILES *.1) FILE(GLOB MAN1_FILES *.1)
FILE(GLOB MAN1_EXCLUDE make_win_bin_dist.1)
FILE(GLOB MAN8_FILES *.8) FILE(GLOB MAN8_FILES *.8)
IF(MAN1_FILES) IF(MAN1_FILES)
IF(MAN1_EXCLUDE)
LIST(REMOVE_ITEM MAN1_FILES ${MAN1_EXCLUDE})
ENDIF()
INSTALL(FILES ${MAN1_FILES} DESTINATION ${INSTALL_MANDIR}/man1) INSTALL(FILES ${MAN1_FILES} DESTINATION ${INSTALL_MANDIR}/man1)
ENDIF() ENDIF()
IF(MAN8_FILES) IF(MAN8_FILES)
......
...@@ -18,6 +18,7 @@ INSTALL( ...@@ -18,6 +18,7 @@ INSTALL(
DESTINATION ${INSTALL_MYSQLTESTDIR} DESTINATION ${INSTALL_MYSQLTESTDIR}
PATTERN "var/" EXCLUDE PATTERN "var/" EXCLUDE
PATTERN "lib/My/SafeProcess" EXCLUDE PATTERN "lib/My/SafeProcess" EXCLUDE
PATTERN "lib/t*" EXCLUDE
PATTERN "CPack" EXCLUDE PATTERN "CPack" EXCLUDE
PATTERN "CMake*" EXCLUDE PATTERN "CMake*" EXCLUDE
PATTERN "mtr.out*" EXCLUDE PATTERN "mtr.out*" EXCLUDE
......
...@@ -13,4 +13,5 @@ ...@@ -13,4 +13,5 @@
# along with this program; if not, write to the Free Software # along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
MYSQL_ADD_PLUGIN(audit_null audit_null.c) MYSQL_ADD_PLUGIN(audit_null audit_null.c
MODULE_ONLY MODULE_OUTPUT_NAME "adt_null")
...@@ -13,4 +13,5 @@ ...@@ -13,4 +13,5 @@
# along with this program; if not, write to the Free Software # along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
MYSQL_ADD_PLUGIN(daemon_example daemon_example.cc MODULE_ONLY) MYSQL_ADD_PLUGIN(daemon_example daemon_example.cc
MODULE_ONLY MODULE_OUTPUT_NAME "libdaemon_example")
...@@ -13,5 +13,5 @@ ...@@ -13,5 +13,5 @@
# along with this program; if not, write to the Free Software # along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
MYSQL_ADD_PLUGIN(ftexample plugin_example.c
MYSQL_ADD_PLUGIN(ftexample plugin_example.c MODULE_ONLY MODULE_OUTPUT_NAME mypluglib) MODULE_ONLY MODULE_OUTPUT_NAME "mypluglib")
...@@ -93,6 +93,10 @@ IF(CMAKE_GENERATOR MATCHES "Makefiles") ...@@ -93,6 +93,10 @@ IF(CMAKE_GENERATOR MATCHES "Makefiles")
# No multiconfig build - use CMAKE_C_FLAGS # No multiconfig build - use CMAKE_C_FLAGS
SET(CFLAGS "@CMAKE_C_FLAGS@") SET(CFLAGS "@CMAKE_C_FLAGS@")
SET(CXXFLAGS "@CMAKE_CXX_FLAGS@") SET(CXXFLAGS "@CMAKE_CXX_FLAGS@")
FOREACH(ARCH ${CMAKE_OSX_ARCHITECTURES})
SET(CFLAGS "${CFLAGS} -arch ${ARCH}")
SET(CXXFLAGS "${CXXFLAGS} -arch ${ARCH}")
ENDFOREACH()
ELSE() ELSE()
# Multiconfig build - use CMAKE_C_FLAGS_RELWITHDEBINFO # Multiconfig build - use CMAKE_C_FLAGS_RELWITHDEBINFO
SET(CFLAGS "@CMAKE_C_FLAGS_RELWITHDEBINFO@") SET(CFLAGS "@CMAKE_C_FLAGS_RELWITHDEBINFO@")
...@@ -134,10 +138,9 @@ ELSE() ...@@ -134,10 +138,9 @@ ELSE()
SET(CHECK_PID "kill -s SIGCONT $PID > /dev/null 2> /dev/null") SET(CHECK_PID "kill -s SIGCONT $PID > /dev/null 2> /dev/null")
ENDIF() ENDIF()
ENDIF(UNIX) SET(HOSTNAME "hostname")
ENDIF(UNIX)
# Really ugly, one script, "mysql_install_db", needs prefix set to ".", # Really ugly, one script, "mysql_install_db", needs prefix set to ".",
# i.e. makes access relative the current directory. This matches # i.e. makes access relative the current directory. This matches
...@@ -298,14 +301,13 @@ ELSE() ...@@ -298,14 +301,13 @@ ELSE()
mysql_secure_installation mysql_secure_installation
mysql_zap mysql_zap
mysqlaccess mysqlaccess
mysqlaccess.conf
mysqlbug mysqlbug
mysql_convert_table_format mysql_convert_table_format
mysql_find_rows mysql_find_rows
mysqlhotcopy mysqlhotcopy
mysqldumpslow mysqldumpslow
mysqld_multi mysqld_multi
mysqlaccess
mysqlaccess.conf
mysqld_safe mysqld_safe
) )
FOREACH(file ${BIN_SCRIPTS}) FOREACH(file ${BIN_SCRIPTS})
......
...@@ -306,7 +306,7 @@ set_malloc_lib() { ...@@ -306,7 +306,7 @@ set_malloc_lib() {
malloc_lib= malloc_lib=
# This list is kept intentionally simple. Simply set --malloc-lib # This list is kept intentionally simple. Simply set --malloc-lib
# to a full path if another location is desired. # to a full path if another location is desired.
for libdir in /usr/lib "$pkglibdir"; do for libdir in /usr/lib "$pkglibdir" "$pkglibdir/mysql"; do
for flavor in _minimal '' _and_profiler _debug; do for flavor in _minimal '' _and_profiler _debug; do
tmp="$libdir/libtcmalloc$flavor.so" tmp="$libdir/libtcmalloc$flavor.so"
#log_notice "DEBUG: Checking for malloc lib '$tmp'" #log_notice "DEBUG: Checking for malloc lib '$tmp'"
......
...@@ -18,23 +18,22 @@ FILE(GLOB all_files ...@@ -18,23 +18,22 @@ FILE(GLOB all_files
${CMAKE_SOURCE_DIR}/sql-bench/* ${CMAKE_SOURCE_DIR}/sql-bench/*
${CMAKE_SOURCE_DIR}/sql-bench/Data/ATIS/* ${CMAKE_SOURCE_DIR}/sql-bench/Data/ATIS/*
${CMAKE_SOURCE_DIR}/sql-bench/Data/Wisconsin/* ${CMAKE_SOURCE_DIR}/sql-bench/Data/Wisconsin/*
${CMAKE_SOURCE_DIR}/sql-bench/Comments/*
${CMAKE_SOURCE_DIR}/sql-bench/limits/* ${CMAKE_SOURCE_DIR}/sql-bench/limits/*
) )
IF(NOT INSTALL_SQLBENCHROOTDIR) IF(NOT INSTALL_SQLBENCHDIR)
RETURN() RETURN()
ENDIF() ENDIF()
IF(INSTALL_SQLBENCHROOTDIR STREQUAL ".") IF(INSTALL_SQLBENCHDIR STREQUAL ".")
SET(prefix) SET(prefix)
ELSE() ELSE()
SET(prefix ${INSTALL_SQLBENCHROOTDIR}/) SET(prefix ${INSTALL_SQLBENCHDIR}/)
ENDIF() ENDIF()
GET_FILENAME_COMPONENT(basedir ${CMAKE_SOURCE_DIR} ABSOLUTE) GET_FILENAME_COMPONENT(basedir ${CMAKE_SOURCE_DIR} ABSOLUTE)
FOREACH(file ${all_files}) FOREACH(file ${all_files})
IF(NOT IS_DIRECTORY ${file} AND NOT ${file} MATCHES "Make" ) IF(NOT IS_DIRECTORY ${file} AND NOT ${file} MATCHES "Make|as3ap|/example$" )
FILE(RELATIVE_PATH relpath ${basedir} ${file}) FILE(RELATIVE_PATH relpath ${basedir} ${file})
SET(target_relpath ${relpath}) SET(target_relpath ${relpath})
GET_FILENAME_COMPONENT(ext ${file} EXT) GET_FILENAME_COMPONENT(ext ${file} EXT)
......
...@@ -280,7 +280,8 @@ IF(WIN32 AND MYSQLD_EXECUTABLE) ...@@ -280,7 +280,8 @@ IF(WIN32 AND MYSQLD_EXECUTABLE)
ALL ALL
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/data/mysql/user.frm DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/data/mysql/user.frm
) )
INSTALL(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/data/mysql DESTINATION data) INSTALL(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/data DESTINATION .
PATTERN "bootstrap.sql" EXCLUDE)
ELSE() ELSE()
# Not windows or cross compiling, just install an empty directory # Not windows or cross compiling, just install an empty directory
INSTALL(FILES ${DUMMY_FILE} DESTINATION data/mysql) INSTALL(FILES ${DUMMY_FILE} DESTINATION data/mysql)
......
...@@ -29,16 +29,15 @@ ELSE() ...@@ -29,16 +29,15 @@ ELSE()
SET(CXXFLAGS ${CMAKE_CXX_FLAGS}) SET(CXXFLAGS ${CMAKE_CXX_FLAGS})
SET(MYSQLD_USER "mysql") SET(MYSQLD_USER "mysql")
SET(ini_file_extension "cnf") SET(ini_file_extension "cnf")
SET(HOSTNAME "hostname")
ENDIF() ENDIF()
IF(UNIX) # XXX: shouldn't we just have variables for all this stuff and centralise
IF(INSTALL_LAYOUT MATCHES "STANDALONE") # XXX: their configuration in install_layout.cmake?
SET(inst_location ${INSTALL_SUPPORTFILESDIR}) IF(WIN32)
ELSE()
SET(inst_location ${INSTALL_DOCREADMEDIR}) SET(inst_location ${INSTALL_DOCREADMEDIR})
ENDIF()
ELSE() ELSE()
SET(inst_location ${INSTALL_DOCREADMEDIR}) SET(inst_location ${INSTALL_SUPPORTFILESDIR})
ENDIF() ENDIF()
FOREACH(inifile my-huge my-innodb-heavy-4G my-large my-medium my-small) FOREACH(inifile my-huge my-innodb-heavy-4G my-large my-medium my-small)
...@@ -48,15 +47,14 @@ FOREACH(inifile my-huge my-innodb-heavy-4G my-large my-medium my-small) ...@@ -48,15 +47,14 @@ FOREACH(inifile my-huge my-innodb-heavy-4G my-large my-medium my-small)
ENDFOREACH() ENDFOREACH()
IF(UNIX) IF(UNIX)
# XXX: again, used elsewhere (scripts/), should be standardised in
# XXX: install_layout.cmake
IF(INSTALL_LAYOUT MATCHES "STANDALONE") IF(INSTALL_LAYOUT MATCHES "STANDALONE")
SET(prefix ".") SET(prefix ".")
SET(inst_location ${INSTALL_SUPPORTFILESDIR})
ELSE() ELSE()
SET(prefix ${CMAKE_INSTALL_PREFIX}) SET(prefix ${CMAKE_INSTALL_PREFIX})
SET(inst_location ${INSTALL_MYSQLSHAREDIR})
ENDIF() ENDIF()
FOREACH(script mysqld_multi.server mysql-log-rotate binary-configure FOREACH(script mysqld_multi.server mysql-log-rotate binary-configure
config.medium.ini config.small.ini config.huge.ini ndb-config-2-node.ini) config.medium.ini config.small.ini config.huge.ini ndb-config-2-node.ini)
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/${script}.sh CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/${script}.sh
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment