mirror of
https://github.com/MariaDB/server.git
synced 2025-01-25 00:04:33 +01:00
64e308e28d
- build executables we have in 5.3 (mysql_install_db.exe, mysq_upgrade_service.exe, upgrade wizard), and MSI - add some missing headers to windows specific source files. This needs to be done since 5.5 is using WIN32_LEAN_AND_MEAN preprocessor constant thus windows.h no more includes whiole Windows - do not deliver perl scripts (mysql_install_db.pl & friends) -they do not work, are not documented, and we have native executables for this functionality. do not pack echo.exe, replace.exe into MSI, they are not needed. Do not build resolveip on Windows, it is not used. - precache results of of system checks in cmake/os/WindowsCache.cmake (like it is alreay done for majority of tests to speed up cmake run with VS) - make feedback plugin DEFAULT on Windows (so MSI works if user enables plugin), fix null pointer access in PSI_register
197 lines
7.3 KiB
CMake
197 lines
7.3 KiB
CMake
# Copyright (c) 2010, 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
|
|
|
|
# This file includes Windows specific hacks, mostly around compiler flags
|
|
|
|
INCLUDE (CheckCSourceCompiles)
|
|
INCLUDE (CheckCXXSourceCompiles)
|
|
INCLUDE (CheckStructHasMember)
|
|
INCLUDE (CheckLibraryExists)
|
|
INCLUDE (CheckFunctionExists)
|
|
INCLUDE (CheckCCompilerFlag)
|
|
INCLUDE (CheckCSourceRuns)
|
|
INCLUDE (CheckSymbolExists)
|
|
INCLUDE (CheckTypeSize)
|
|
|
|
# Optionally read user configuration, generated by configure.js.
|
|
# This is left for backward compatibility reasons only.
|
|
INCLUDE(${CMAKE_BINARY_DIR}/win/configure.data OPTIONAL)
|
|
|
|
# avoid running system checks by using pre-cached check results
|
|
# system checks are expensive on VS since every tiny program is to be compiled in
|
|
# a VC solution.
|
|
GET_FILENAME_COMPONENT(_SCRIPT_DIR ${CMAKE_CURRENT_LIST_FILE} PATH)
|
|
INCLUDE(${_SCRIPT_DIR}/WindowsCache.cmake)
|
|
|
|
|
|
# OS display name (version_compile_os etc).
|
|
# Used by the test suite to ignore bugs on some platforms,
|
|
IF(CMAKE_SIZEOF_VOID_P MATCHES 8)
|
|
SET(SYSTEM_TYPE "Win64")
|
|
ELSE()
|
|
SET(SYSTEM_TYPE "Win32")
|
|
ENDIF()
|
|
|
|
# Intel compiler is almost Visual C++
|
|
# (same compile flags etc). Set MSVC flag
|
|
IF(CMAKE_C_COMPILER MATCHES "icl")
|
|
SET(MSVC TRUE)
|
|
ENDIF()
|
|
|
|
ADD_DEFINITIONS("-D_WINDOWS -D__WIN__ -D_CRT_SECURE_NO_DEPRECATE")
|
|
ADD_DEFINITIONS("-D_WIN32_WINNT=0x0501")
|
|
# Speed up build process excluding unused header files
|
|
ADD_DEFINITIONS("-DWIN32_LEAN_AND_MEAN")
|
|
|
|
# Adjust compiler and linker flags
|
|
IF(MINGW AND CMAKE_SIZEOF_VOID_P EQUAL 4)
|
|
# mininal architecture flags, i486 enables GCC atomics
|
|
ADD_DEFINITIONS(-march=i486)
|
|
ENDIF()
|
|
|
|
IF(MSVC)
|
|
# Enable debug info also in Release build, and create PDB to be able to analyze
|
|
# crashes
|
|
FOREACH(lang C CXX)
|
|
SET(CMAKE_${lang}_FLAGS_RELEASE "${CMAKE_${lang}_FLAGS_RELEASE} /Zi")
|
|
ENDFOREACH()
|
|
FOREACH(type EXE SHARED MODULE)
|
|
SET(CMAKE_{type}_LINKER_FLAGS_RELEASE "${CMAKE_${type}_LINKER_FLAGS_RELEASE} /debug")
|
|
ENDFOREACH()
|
|
|
|
# Force static runtime libraries
|
|
FOREACH(flag
|
|
CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_RELWITHDEBINFO
|
|
CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_DEBUG_INIT
|
|
CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_RELWITHDEBINFO
|
|
CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_DEBUG_INIT)
|
|
STRING(REPLACE "/MD" "/MT" "${flag}" "${${flag}}")
|
|
ENDFOREACH()
|
|
|
|
# Remove support for exceptions
|
|
FOREACH(flag CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_INIT)
|
|
STRING(REPLACE "/EHsc" "" "${flag}" "${${flag}}")
|
|
ENDFOREACH()
|
|
|
|
# Fix CMake's predefined huge stack size
|
|
FOREACH(type EXE SHARED MODULE)
|
|
STRING(REGEX REPLACE "/STACK:([^ ]+)" "" CMAKE_${type}_LINKER_FLAGS "${CMAKE_${type}_LINKER_FLAGS}")
|
|
STRING(REGEX REPLACE "/INCREMENTAL:([^ ]+)" "/INCREMENTAL:NO" CMAKE_${type}_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_${type}_LINKER_FLAGS_RELWITHDEBINFO}")
|
|
STRING(REGEX REPLACE "/INCREMENTAL$" "/INCREMENTAL:NO" CMAKE_${type}_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_${type}_LINKER_FLAGS_RELWITHDEBINFO}")
|
|
SET(CMAKE_${type}_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_${type}_LINKER_FLAGS_RELWITHDEBINFO} /OPT:REF /release")
|
|
ENDFOREACH()
|
|
|
|
# Mark 32 bit executables large address aware so they can
|
|
# use > 2GB address space
|
|
IF(CMAKE_SIZEOF_VOID_P MATCHES 4)
|
|
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /LARGEADDRESSAWARE")
|
|
ENDIF()
|
|
|
|
# Speed up multiprocessor build
|
|
IF (MSVC_VERSION GREATER 1400)
|
|
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MP")
|
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")
|
|
ENDIF()
|
|
|
|
#TODO: update the code and remove the disabled warnings
|
|
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4800 /wd4805 /wd4996")
|
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4800 /wd4805 /wd4996 /we4099")
|
|
|
|
|
|
IF(CMAKE_SIZEOF_VOID_P MATCHES 8)
|
|
# _WIN64 is defined by the compiler itself.
|
|
# Yet, we define it here again to work around a bug with Intellisense
|
|
# described here: http://tinyurl.com/2cb428.
|
|
# Syntax highlighting is important for proper debugger functionality.
|
|
ADD_DEFINITIONS("-D_WIN64")
|
|
ENDIF()
|
|
ENDIF()
|
|
|
|
# Always link with socket library
|
|
LINK_LIBRARIES(ws2_32)
|
|
# ..also for tests
|
|
SET(CMAKE_REQUIRED_LIBRARIES ws2_32)
|
|
|
|
# System checks
|
|
SET(SIGNAL_WITH_VIO_CLOSE 1) # Something that runtime team needs
|
|
|
|
# IPv6 constants appeared in Vista SDK first. We need to define them in any case if they are
|
|
# not in headers, to handle dual mode sockets correctly.
|
|
CHECK_SYMBOL_EXISTS(IPPROTO_IPV6 "winsock2.h" HAVE_IPPROTO_IPV6)
|
|
IF(NOT HAVE_IPPROTO_IPV6)
|
|
SET(HAVE_IPPROTO_IPV6 41)
|
|
ENDIF()
|
|
CHECK_SYMBOL_EXISTS(IPV6_V6ONLY "winsock2.h;ws2ipdef.h" HAVE_IPV6_V6ONLY)
|
|
IF(NOT HAVE_IPV6_V6ONLY)
|
|
SET(IPV6_V6ONLY 27)
|
|
ENDIF()
|
|
|
|
# Some standard functions exist there under different
|
|
# names (e.g popen is _popen or strok_r is _strtok_s)
|
|
# If a replacement function exists, HAVE_FUNCTION is
|
|
# defined to 1. CMake variable <function_name> will also
|
|
# be defined to the replacement name.
|
|
# So for example, CHECK_FUNCTION_REPLACEMENT(popen _popen)
|
|
# will define HAVE_POPEN to 1 and set variable named popen
|
|
# to _popen. If the header template, one needs to have
|
|
# cmakedefine popen @popen@ which will expand to
|
|
# define popen _popen after CONFIGURE_FILE
|
|
|
|
MACRO(CHECK_FUNCTION_REPLACEMENT function replacement)
|
|
STRING(TOUPPER ${function} function_upper)
|
|
CHECK_FUNCTION_EXISTS(${function} HAVE_${function_upper})
|
|
IF(NOT HAVE_${function_upper})
|
|
CHECK_FUNCTION_EXISTS(${replacement} HAVE_${replacement})
|
|
IF(HAVE_${replacement})
|
|
SET(HAVE_${function_upper} 1 )
|
|
SET(${function} ${replacement})
|
|
ENDIF()
|
|
ENDIF()
|
|
ENDMACRO()
|
|
MACRO(CHECK_SYMBOL_REPLACEMENT symbol replacement header)
|
|
STRING(TOUPPER ${symbol} symbol_upper)
|
|
CHECK_SYMBOL_EXISTS(${symbol} ${header} HAVE_${symbol_upper})
|
|
IF(NOT HAVE_${symbol_upper})
|
|
CHECK_SYMBOL_EXISTS(${replacement} ${header} HAVE_${replacement})
|
|
IF(HAVE_${replacement})
|
|
SET(HAVE_${symbol_upper} 1)
|
|
SET(${symbol} ${replacement})
|
|
ENDIF()
|
|
ENDIF()
|
|
ENDMACRO()
|
|
|
|
CHECK_SYMBOL_REPLACEMENT(S_IROTH _S_IREAD sys/stat.h)
|
|
CHECK_SYMBOL_REPLACEMENT(S_IFIFO _S_IFIFO sys/stat.h)
|
|
CHECK_SYMBOL_REPLACEMENT(SIGQUIT SIGTERM signal.h)
|
|
CHECK_SYMBOL_REPLACEMENT(SIGPIPE SIGINT signal.h)
|
|
CHECK_SYMBOL_REPLACEMENT(isnan _isnan float.h)
|
|
CHECK_SYMBOL_REPLACEMENT(finite _finite float.h)
|
|
CHECK_FUNCTION_REPLACEMENT(popen _popen)
|
|
CHECK_FUNCTION_REPLACEMENT(pclose _pclose)
|
|
CHECK_FUNCTION_REPLACEMENT(access _access)
|
|
CHECK_FUNCTION_REPLACEMENT(strcasecmp _stricmp)
|
|
CHECK_FUNCTION_REPLACEMENT(strncasecmp _strnicmp)
|
|
CHECK_FUNCTION_REPLACEMENT(snprintf _snprintf)
|
|
CHECK_FUNCTION_REPLACEMENT(strtok_r strtok_s)
|
|
CHECK_FUNCTION_REPLACEMENT(strtoll _strtoi64)
|
|
CHECK_FUNCTION_REPLACEMENT(strtoull _strtoui64)
|
|
CHECK_FUNCTION_REPLACEMENT(vsnprintf _vsnprintf)
|
|
CHECK_TYPE_SIZE(ssize_t SIZE_OF_SSIZE_T)
|
|
IF(NOT HAVE_SIZE_OF_SSIZE_T)
|
|
SET(ssize_t SSIZE_T)
|
|
ENDIF()
|
|
|
|
SET(FN_NO_CASE_SENSE 1)
|
|
SET(USE_SYMDIR 1)
|