1
# - Manage build environment such as environment variables and compile flags.
2
# This module predefine various environment variables, cmake policies, and
5
# The setting can be viewed and modified by ccmake.
7
# List of frequently used variable and compile flags:
8
# + CMAKE_INSTALL_PREFIX: Compile flag whose value is ${CMAKE_INSTALL_PREFIX}.
9
# + BIN_DIR: Directory for executable.
10
# Default: ${CMAKE_INSTALL_PREFIX}/bin
11
# + DATA_DIR: Directory for architecture independent data files.
12
# Default: ${CMAKE_INSTALL_PREFIX}/share
13
# + DOC_DIR: Directory for documentation
14
# Default: ${DATA_DIR}/doc
15
# + SYSCONF_DIR: System wide configuration files.
17
# + LIB_DIR: System wide library path.
18
# Default: ${CMAKE_INSTALL_PREFIX}/lib for 32 bit,
19
# ${CMAKE_INSTALL_PREFIX}/lib64 for 64 bit.
20
# + LIBEXEC_DIR: Executables that are not meant to be executed by user directly.
21
# Default: ${CMAKE_INSTALL_PREFIX}/libexec
22
# + PROJECT_NAME: Project name
24
# Defines following macros:
25
# SET_COMPILE_ENV(var default_value [ENV_NAME env_name]
26
# [DISPLAY type docstring])
27
# - Add compiler environment with a variable and its value.
28
# If the variable is not defined in cmake, the value is obtained from
30
# 1. Environment variable with the same name (or specified via ENV_NAME)
31
# 2. Parameter default_value
33
# + var: Variable to be set
34
# + default_value: Default value of the var
35
# + env_name: (Optional)The name of environment variable.
36
# Only need if different from var.
37
# + type: is used by the CMake GUI to choose a widget with
38
# which the user sets a value. Valid values are:
39
# PATH = Directory chooser dialog.
40
# STRING = Arbitrary string.
41
# BOOL = Boolean ON/OFF checkbox.
42
# INTERNAL = No GUI entry (used for persistent variables).
43
# + docstring: Label to show ing CMAKE GUI.
45
# SET_USUAL_COMPILE_ENVS()
46
# - Set the most often used variable and compile flags.
47
# It defines compile flags according to the values of corresponding variables,
48
# usually under the same or similar name.
49
# If a corresponding variable is not defined yet, then a default value is assigned
50
# to that variable, then define the flag.
52
# Defines following flags according to the variable with same name.
53
# + CMAKE_INSTALL_PREFIX: Compile flag whose value is ${CMAKE_INSTALL_PREFIX}.
54
# + BIN_DIR: Directory for executable.
55
# Default: ${CMAKE_INSTALL_PREFIX}/bin
56
# + DATA_DIR: Directory for architecture independent data files.
57
# Default: ${CMAKE_INSTALL_PREFIX}/share
58
# + DOC_DIR: Directory for documentation
59
# Default: ${DATA_DIR}/doc
60
# + SYSCONF_DIR: System wide configuration files.
62
# + LIB_DIR: System wide library path.
63
# Default: ${CMAKE_INSTALL_PREFIX}/lib for 32 bit,
64
# ${CMAKE_INSTALL_PREFIX}/lib64 for 64 bit.
65
# + LIBEXEC_DIR: Executables that are not meant to be executed by user directly.
66
# Default: ${CMAKE_INSTALL_PREFIX}/libexec
67
# + PROJECT_NAME: Project name
68
# + PRJ_VER: Project version
69
# + PRJ_DATA_DIR: Data directory for the project.
70
# Default: ${DATA_DIR}/${PROJECT_NAME}
71
# + PRJ_DOC_DIR: DocuFILEPATH = File chooser dialog.
72
# Default: ${DOC_DIR}/${PROJECT_NAME}-${PRJ_VER}
74
IF(NOT DEFINED _MANAGE_ENVIRONMENT_CMAKE_)
75
SET(_MANAGE_ENVIRONMENT_CMAKE_ "DEFINED")
76
SET(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON)
77
CMAKE_POLICY(VERSION 2.6)
79
MACRO(SET_COMPILE_ENV var default_value)
82
SET(_docstring "${var}")
85
IF(_arg STREQUAL "ENV_NAME")
86
ELSEIF(_arg STREQUAL "DISPLAY")
88
ELSE(_arg STREQUAL "ENV_NAME")
89
IF(_stage STREQUAL "ENV_NAME")
91
ELSEIF(_stage STREQUAL "TYPE")
94
ELSEIF(_stage STREQUAL "DOCSTRING")
95
SET(_docstring "${_arg}")
96
ENDIF(_stage STREQUAL "ENV_NAME")
97
ENDIF(_arg STREQUAL "ENV_NAME")
98
ENDFOREACH(_arg ${ARGN})
102
SET(${var} "${${var}}" CACHE ${_type} "${_docstring}")
103
ELSEIF(NOT "$ENV{${_env}}" STREQUAL "")
104
SET(${var} "$ENV{${_env}}" CACHE ${_type} "${_docstring}")
107
SET(${var} "${default_value}" CACHE ${_type} "${_docstring}")
108
ENDIF(DEFINED ${var})
110
# Enforce CMP0005 to new, yet pop after ADD_DEFINITION
112
CMAKE_POLICY(SET CMP0005 NEW)
113
# ADD_DEFINITIONS(-D${_env}='"${${var}}"')
114
ADD_DEFINITIONS(-D${_env}=${${var}})
116
ENDMACRO(SET_COMPILE_ENV var default_value)
118
MACRO(MANAGE_CMAKE_POLICY policyName defaultValue)
119
IF(POLICY ${policyName})
120
CMAKE_POLICY(GET "${policyName}" _cmake_policy_value)
121
IF(_cmake_policy_value STREQUAL "")
122
# Policy not defined yet
123
CMAKE_POLICY(SET "${policyName}" "${defaultValue}")
124
ENDIF(_cmake_policy_value STREQUAL "")
125
ENDIF(POLICY ${policyName})
126
ENDMACRO(MANAGE_CMAKE_POLICY policyName defaultValue)
128
####################################################################
129
# Recommended policy setting
131
# CMP0005: Preprocessor definition values are now escaped automatically.
132
# OLD:Preprocessor definition values are not escaped.
133
MANAGE_CMAKE_POLICY(CMP0005 NEW)
135
# CMP0009: FILE GLOB_RECURSE calls should not follow symlinks by default.
136
# OLD: FILE GLOB_RECURSE calls follow symlinks
137
MANAGE_CMAKE_POLICY(CMP0009 NEW)
139
# CMP0017: Prefer files from the CMake module directory when including from there.
140
# OLD: Prefer files from CMAKE_MODULE_PATH regardless
141
MANAGE_CMAKE_POLICY(CMP0017 OLD)
143
####################################################################
146
SET_COMPILE_ENV(CMAKE_INSTALL_PREFIX "/usr"
147
DISPLAY PATH "Install dir prefix")
148
SET_COMPILE_ENV(BIN_DIR "${CMAKE_INSTALL_PREFIX}/bin"
149
DISPLAY PATH "Binary dir")
150
SET_COMPILE_ENV(DATA_DIR "${CMAKE_INSTALL_PREFIX}/share"
151
DISPLAY PATH "Data dir")
152
SET_COMPILE_ENV(DOC_DIR "${DATA_DIR}/doc"
153
DISPLAY PATH "Documentation dir")
154
SET_COMPILE_ENV(SYSCONF_DIR "/etc"
155
DISPLAY PATH "System configuration dir")
156
SET_COMPILE_ENV(LIBEXEC_DIR "${CMAKE_INSTALL_PREFIX}/libexec"
157
DISPLAY PATH "LIBEXEC dir")
159
IF(CMAKE_SYSTEM_PROCESSOR MATCHES "64")
160
SET_COMPILE_ENV(IS_64 "64" DISPLAY STRING "IS_64")
161
ENDIF(CMAKE_SYSTEM_PROCESSOR MATCHES "64")
163
IF(NOT DEFINED LIB_DIR)
164
SET_COMPILE_ENV(LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib${IS_64}")
165
ENDIF(NOT DEFINED LIB_DIR)
167
IF(DEFINED PROJECT_NAME)
168
SET_COMPILE_ENV(PROJECT_NAME "${PROJECT_NAME}")
169
SET_COMPILE_ENV(PRJ_DATA_DIR "${DATA_DIR}/${PROJECT_NAME}")
172
SET_COMPILE_ENV(PRJ_VER "${PRJ_VER}")
173
ENDIF(DEFINED PRJ_VER)
174
ENDIF(DEFINED PROJECT_NAME)
176
# Directory to store cmake-fedora specific temporary files.
177
IF(NOT CMAKE_FEDORA_TMP_DIR)
178
SET(CMAKE_FEDORA_TMP_DIR "${CMAKE_BINARY_DIR}/NO_PACK")
179
ENDIF(NOT CMAKE_FEDORA_TMP_DIR)
181
ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_FEDORA_TMP_DIR}
182
COMMAND cmake -E make_directory ${CMAKE_FEDORA_TMP_DIR}
183
COMMENT "Create CMAKE_FEDORA_TMP_DIR"
185
ENDIF(NOT DEFINED _MANAGE_ENVIRONMENT_CMAKE_)