CMakeGenericSystem.cmake 6.77 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11

#=============================================================================
# Copyright 2004-2009 Kitware, Inc.
#
# Distributed under the OSI-approved BSD License (the "License");
# see accompanying file Copyright.txt for details.
#
# This software is distributed WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the License for more information.
#=============================================================================
12
# (To distribute this file outside of CMake, substitute the full
13 14
#  License text for the above reference.)

15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
set(CMAKE_SHARED_LIBRARY_C_FLAGS "")            # -pic
set(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-shared")       # -shared
set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "")         # +s, flag for exe link to use shared lib
set(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "")       # -rpath
set(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG_SEP "")   # : or empty
set(CMAKE_INCLUDE_FLAG_C "-I")       # -I
set(CMAKE_INCLUDE_FLAG_C_SEP "")     # , or empty
set(CMAKE_LIBRARY_PATH_FLAG "-L")
set(CMAKE_LIBRARY_PATH_TERMINATOR "")  # for the Digital Mars D compiler the link paths have to be terminated with a "/"
set(CMAKE_LINK_LIBRARY_FLAG "-l")

set(CMAKE_LINK_LIBRARY_SUFFIX "")
set(CMAKE_STATIC_LIBRARY_PREFIX "lib")
set(CMAKE_STATIC_LIBRARY_SUFFIX ".a")
set(CMAKE_SHARED_LIBRARY_PREFIX "lib")          # lib
set(CMAKE_SHARED_LIBRARY_SUFFIX ".so")          # .so
set(CMAKE_EXECUTABLE_SUFFIX "")          # .exe
set(CMAKE_DL_LIBS "dl")

set(CMAKE_FIND_LIBRARY_PREFIXES "lib")
set(CMAKE_FIND_LIBRARY_SUFFIXES ".so" ".a")
36

37
# basically all general purpose OSs support shared libs
38
set_property(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS TRUE)
39

40
set (CMAKE_SKIP_RPATH "NO" CACHE BOOL
41
     "If set, runtime paths are not added when using shared libraries.")
42
set (CMAKE_SKIP_INSTALL_RPATH "NO" CACHE BOOL
43
     "If set, runtime paths are not added when installing shared libraries, but are added when building.")
44

45
set(CMAKE_VERBOSE_MAKEFILE FALSE CACHE BOOL "If this value is on, makefiles will be generated without the .SILENT directive, and all commands will be echoed to the console during the make.  This is useful for debugging only. With Visual Studio IDE projects all commands are done without /nologo.")
46

47
if(CMAKE_GENERATOR MATCHES "Make")
48
  set(CMAKE_COLOR_MAKEFILE ON CACHE BOOL
49 50
    "Enable/Disable color output during build."
    )
51 52 53
  mark_as_advanced(CMAKE_COLOR_MAKEFILE)
  if(DEFINED CMAKE_RULE_MESSAGES)
    set_property(GLOBAL PROPERTY RULE_MESSAGES ${CMAKE_RULE_MESSAGES})
54
  endif()
55 56 57
  if(DEFINED CMAKE_TARGET_MESSAGES)
    set_property(GLOBAL PROPERTY TARGET_MESSAGES ${CMAKE_TARGET_MESSAGES})
  endif()
58 59
  if(CMAKE_GENERATOR MATCHES "Unix Makefiles")
    set(CMAKE_EXPORT_COMPILE_COMMANDS OFF CACHE BOOL
60 61
      "Enable/Disable output of compile commands during generation."
      )
62
    mark_as_advanced(CMAKE_EXPORT_COMPILE_COMMANDS)
63 64
  endif()
endif()
65

66 67
if(CMAKE_GENERATOR MATCHES "Ninja")
  set(CMAKE_EXPORT_COMPILE_COMMANDS OFF CACHE BOOL
68 69
    "Enable/Disable output of compile commands during generation."
    )
70
  mark_as_advanced(CMAKE_EXPORT_COMPILE_COMMANDS)
71
endif()
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86

# GetDefaultWindowsPrefixBase
#
# Compute the base directory for CMAKE_INSTALL_PREFIX based on:
#  - is this 32-bit or 64-bit Windows
#  - is this 32-bit or 64-bit CMake running
#  - what architecture targets will be built
#
function(GetDefaultWindowsPrefixBase var)

  # Try to guess what architecture targets will end up being built as,
  # even if CMAKE_SIZEOF_VOID_P is not computed yet... We need to know
  # the architecture of the targets being built to choose the right
  # default value for CMAKE_INSTALL_PREFIX.
  #
87
  if("${CMAKE_GENERATOR}" MATCHES "(Win64|IA64)")
88
    set(arch_hint "x64")
89
  elseif("${CMAKE_GENERATOR}" MATCHES "ARM")
90
    set(arch_hint "ARM")
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161
  elseif("${CMAKE_SIZEOF_VOID_P}" STREQUAL "8")
    set(arch_hint "x64")
  elseif("$ENV{LIB}" MATCHES "(amd64|ia64)")
    set(arch_hint "x64")
  endif()

  if(NOT arch_hint)
    set(arch_hint "x86")
  endif()

  # default env in a 64-bit app on Win64:
  # ProgramFiles=C:\Program Files
  # ProgramFiles(x86)=C:\Program Files (x86)
  # ProgramW6432=C:\Program Files
  #
  # default env in a 32-bit app on Win64:
  # ProgramFiles=C:\Program Files (x86)
  # ProgramFiles(x86)=C:\Program Files (x86)
  # ProgramW6432=C:\Program Files
  #
  # default env in a 32-bit app on Win32:
  # ProgramFiles=C:\Program Files
  # ProgramFiles(x86) NOT DEFINED
  # ProgramW6432 NOT DEFINED

  # By default, use the ProgramFiles env var as the base value of
  # CMAKE_INSTALL_PREFIX:
  #
  set(_PREFIX_ENV_VAR "ProgramFiles")

  if ("$ENV{ProgramW6432}" STREQUAL "")
    # running on 32-bit Windows
    # must be a 32-bit CMake, too...
    #message("guess: this is a 32-bit CMake running on 32-bit Windows")
  else()
    # running on 64-bit Windows
    if ("$ENV{ProgramW6432}" STREQUAL "$ENV{ProgramFiles}")
      # 64-bit CMake
      #message("guess: this is a 64-bit CMake running on 64-bit Windows")
      if(NOT "${arch_hint}" STREQUAL "x64")
      # building 32-bit targets
        set(_PREFIX_ENV_VAR "ProgramFiles(x86)")
      endif()
    else()
      # 32-bit CMake
      #message("guess: this is a 32-bit CMake running on 64-bit Windows")
      if("${arch_hint}" STREQUAL "x64")
      # building 64-bit targets
        set(_PREFIX_ENV_VAR "ProgramW6432")
      endif()
    endif()
  endif()

  #if("${arch_hint}" STREQUAL "x64")
  #  message("guess: you are building a 64-bit app")
  #else()
  #  message("guess: you are building a 32-bit app")
  #endif()

  if(NOT "$ENV{${_PREFIX_ENV_VAR}}" STREQUAL "")
    file(TO_CMAKE_PATH "$ENV{${_PREFIX_ENV_VAR}}" _base)
  elseif(NOT "$ENV{SystemDrive}" STREQUAL "")
    set(_base "$ENV{SystemDrive}/Program Files")
  else()
    set(_base "C:/Program Files")
  endif()

  set(${var} "${_base}" PARENT_SCOPE)
endfunction()


162 163 164 165
# Set a variable to indicate whether the value of CMAKE_INSTALL_PREFIX
# was initialized by the block below.  This is useful for user
# projects to change the default prefix while still allowing the
# command line to override it.
166 167
if(NOT DEFINED CMAKE_INSTALL_PREFIX)
  set(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT 1)
168
endif()
169

170
# Choose a default install prefix for this platform.
171 172
if(CMAKE_HOST_UNIX)
  set(CMAKE_INSTALL_PREFIX "/usr/local"
173
    CACHE PATH "Install path prefix, prepended onto install directories.")
174
else()
175
  GetDefaultWindowsPrefixBase(CMAKE_GENERIC_PROGRAM_FILES)
176
  set(CMAKE_INSTALL_PREFIX
177
    "${CMAKE_GENERIC_PROGRAM_FILES}/${PROJECT_NAME}"
178
    CACHE PATH "Install path prefix, prepended onto install directories.")
179
  set(CMAKE_GENERIC_PROGRAM_FILES)
180
endif()
181

182 183
# Set a variable which will be used as component name in install() commands
# where no COMPONENT has been given:
184
set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME "Unspecified")
185

186
mark_as_advanced(
187
  CMAKE_SKIP_RPATH
188
  CMAKE_SKIP_INSTALL_RPATH
189
  CMAKE_VERBOSE_MAKEFILE
190
)