summaryrefslogtreecommitdiff
path: root/cpp/BuildInstallSettings.cmake
blob: dfa88022d9759a3c889ccf1bdaef759a8d401340 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
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
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
#

# Settings related to the Qpid build and install CMake/CTest/CPack procedure.
# These are used by both the C++ and WCF components.

# Parse the version from QPID_VERSION.txt.
# Use the top level qpid/ file if we're in an SVN checkout, source dir otherwise.
if(EXISTS "${PROJECT_SOURCE_DIR}/../QPID_VERSION.txt")
  file(READ "${PROJECT_SOURCE_DIR}/../QPID_VERSION.txt" QPID_VERSION)
elseif (EXISTS "${PROJECT_SOURCE_DIR}/QPID_VERSION.txt")
  file(READ "${PROJECT_SOURCE_DIR}/QPID_VERSION.txt" QPID_VERSION)
else()
  message(FATAL_ERROR "Cannot find QPID_VERSION.txt")
endif(EXISTS "${PROJECT_SOURCE_DIR}/../QPID_VERSION.txt")
string(REGEX REPLACE "^([0-9]+)\\.([0-9]+)\n" "\\1" QPID_VERSION_MAJOR "${QPID_VERSION}")
string(REGEX REPLACE "^([0-9]+)\\.([0-9]+)\n" "\\2" QPID_VERSION_MINOR "${QPID_VERSION}")
set (QPID_VERSION_FULL "${QPID_VERSION_MAJOR}.${QPID_VERSION_MINOR}")

# When doing installs, there are a number of components that the item can
# be associated with. Since there may be different sets of components desired
# for the various platforms, the component names are defined here. When
# setting the COMPONENT in an install directive, use these to ensure that
# the item is installed correctly.

if (WIN32)
  # Install types; these defines the component sets that are installed.
  # Each component (below) indicates which of these install type(s) it is
  # included in. The user can refine the components at install time.
  set (CPACK_ALL_INSTALL_TYPES Broker Development Full)

  set (QPID_COMPONENT_COMMON Common)
  set (CPACK_COMPONENT_COMMON_INSTALL_TYPES Broker Development Full)
  set (CPACK_COMPONENT_COMMON_DISPLAY_NAME "Required common runtime items")
  set (CPACK_COMPONENT_COMMON_DESCRIPTION
       "Run-time library common to all runtime components in Qpid.\nThis item is required by both broker and client components.")

  set (QPID_COMPONENT_BROKER Broker)
  set (CPACK_COMPONENT_BROKER_DEPENDS Common)
  set (CPACK_COMPONENT_BROKER_INSTALL_TYPES Broker Full)
  set (CPACK_COMPONENT_BROKER_DISPLAY_NAME "Broker")
  set (CPACK_COMPONENT_BROKER_DESCRIPTION
       "Messaging broker; controls message flow within the system.\nAt least one broker is required to run any messaging application.")

  set (QPID_COMPONENT_CLIENT Client)
  set (CPACK_COMPONENT_CLIENT_DEPENDS Common)
  set (CPACK_COMPONENT_CLIENT_INSTALL_TYPES Development Full)
  set (CPACK_COMPONENT_CLIENT_DISPLAY_NAME "Client runtime libraries")
  set (CPACK_COMPONENT_CLIENT_DESCRIPTION
       "Runtime library components required to build and execute a client application.")

  set (QPID_COMPONENT_CLIENT_INCLUDE ClientInclude)
  set (CPACK_COMPONENT_CLIENTINCLUDE_INSTALL_TYPES Development Full)
  set (CPACK_COMPONENT_CLIENTINCLUDE_DISPLAY_NAME
       "Client programming header files")
  set (CPACK_COMPONENT_CLIENTINCLUDE_DESCRIPTION
       "C++ header files required to build any Qpid messaging application.")

  set (QPID_COMPONENT_EXAMPLES Examples)
  set (CPACK_COMPONENT_EXAMPLES_INSTALL_TYPES Development Full)
  set (CPACK_COMPONENT_EXAMPLES_DISPLAY_NAME "C++ Client programming examples")
  set (CPACK_COMPONENT_EXAMPLES_DESCRIPTION
       "Example source code for using the C++ Client.")

  set (QPID_COMPONENT_QMF QMF)
  set (CPACK_COMPONENT_QMF_INSTALL_TYPES Development Full)
  set (CPACK_COMPONENT_QMF_DISPLAY_NAME
       "Qpid Management Framework (QMF)")
  set (CPACK_COMPONENT_QMF_DESCRIPTION
       "QMF Agent allows you to embed QMF management in your program.\nQMF Console allows you to build management programs using QMF.")

  set (QPID_INSTALL_BINDIR bin CACHE STRING
       "Directory to install user executables")
  set (QPID_INSTALL_CONFDIR conf CACHE STRING
       "Directory to install configuration files")
  set (QPID_INSTALL_SASLDIR conf CACHE STRING
       "Directory to install SASL configuration files")
  set (QPID_INSTALL_DATADIR conf CACHE STRING
       "Directory to install read-only arch.-independent data root")
  set (QPID_INSTALL_EXAMPLESDIR examples CACHE STRING
       "Directory to install programming examples in")
  set (QPID_INSTALL_DOCDIR docs CACHE STRING
       "Directory to install documentation")
  set (QPID_INSTALL_INCLUDEDIR include CACHE STRING
       "Directory to install programming header files")
  set (QPID_INSTALL_LIBDIR bin CACHE STRING
       "Directory to install library files")
  set (QPID_INSTALL_SBINDIR bin CACHE STRING
       "Directory to install system admin executables")
  set (QPID_INSTALL_TESTDIR bin CACHE STRING
       "Directory for test executables")
  set (QPIDC_MODULE_DIR plugins/client CACHE STRING
       "Directory to load client plug-in modules from")
  set (QPIDD_MODULE_DIR plugins/broker CACHE STRING
       "Directory to load broker plug-in modules from")

# function to get absolute path from a variable that may be relative to the
# install prefix - For Windows we can never know the absolute install prefix
# as this is decided at install time so this just returns the input path
  function(set_absolute_install_path var input)
    set (${var} ${input} PARENT_SCOPE)
  endfunction(set_absolute_install_path)

  set (INCLUDE_INSTALL_DIR ${QPID_INSTALL_INCLUDEDIR})
  set (LIB_INSTALL_DIR ${QPID_INSTALL_INCLUDEDIR})
endif (WIN32)

if (UNIX)
# function to get absolute path from a variable that may be relative to the
# install prefix
function(set_absolute_install_path var input)
  if (${input} MATCHES "^/.*")
    set (${var} ${input} PARENT_SCOPE)
  else ()
    set (${var} ${CMAKE_INSTALL_PREFIX}/${input} PARENT_SCOPE)
  endif ()
endfunction(set_absolute_install_path)

# Figure out the default library suffix
if (NOT DEFINED LIB_SUFFIX)
    get_property(LIB64 GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS)
    if (${LIB64} STREQUAL "TRUE" AND ${CMAKE_SIZEOF_VOID_P} STREQUAL "8")
        set(LIB_SUFFIX 64)
    else()
        set(LIB_SUFFIX "")
    endif()
endif()

# In rpm builds the build sets some variables:
#  CMAKE_INSTALL_PREFIX - this is a standard cmake variable
#  INCLUDE_INSTALL_DIR
#  LIB_INSTALL_DIR
#  SYSCONF_INSTALL_DIR
#  SHARE_INSTALL_DIR
# So make these cached variables and the specific variables non cached and
# derived from them.
  set (INCLUDE_INSTALL_DIR include CACHE PATH "Include file directory")
  set (LIB_INSTALL_DIR lib${LIB_SUFFIX} CACHE PATH "Library object file directory")
  set (SYSCONF_INSTALL_DIR etc CACHE PATH "System read only configuration directory")
  set (SHARE_INSTALL_DIR share CACHE PATH "Shared read only data directory")
  set (DOC_INSTALL_DIR ${SHARE_INSTALL_DIR}/doc/${CMAKE_PROJECT_NAME}-${QPID_VERSION_FULL} CACHE PATH "Shared read only data directory")
  
  set (QPID_COMPONENT_BROKER runtime)
  set (QPID_COMPONENT_CLIENT runtime)
  set (QPID_COMPONENT_COMMON runtime)
  set (CPACK_COMPONENT_RUNTIME_DISPLAY_NAME
       "Items required to run broker and/or client programs")
  set (QPID_COMPONENT_CLIENT_INCLUDE development)
  set (QPID_COMPONENT_EXAMPLES development)
  set (QPID_COMPONENT_QMF development)
  set (CPACK_COMPONENT_DEVELOPMENT_DISPLAY_NAME
       "Items required to build new C++ Qpid client programs")

  # These are always relative to $CMAKE_INSTALL_PREFIX
  set (QPID_INSTALL_BINDIR bin)
  set (QPID_INSTALL_SBINDIR sbin)
  set (QPID_INSTALL_TESTDIR libexec/qpid/tests) # Directory for test executables
  set (QPID_INSTALL_CONFDIR ${SYSCONF_INSTALL_DIR}/qpid)
  set (QPID_INSTALL_SASLDIR ${SYSCONF_INSTALL_DIR}/sasl2)
  set (QPID_INSTALL_DATADIR ${SHARE_INSTALL_DIR}/qpid)
  set (QPID_INSTALL_EXAMPLESDIR ${SHARE_INSTALL_DIR}/examples)
  set (QPID_INSTALL_DOCDIR ${DOC_INSTALL_DIR}) # Directory to install documentation
  set (QPID_INSTALL_INCLUDEDIR ${INCLUDE_INSTALL_DIR})
  set (QPID_INSTALL_LIBDIR ${LIB_INSTALL_DIR})
  set (QPID_LOCALSTATE_DIR var) # Directory to store local state data
  set (QPID_MAN_DIR man) # Directory to install manual files
  set (QPID_INSTALL_SYSTEMDDIR usr/lib/systemd/system) # Systemd service files

  set_absolute_install_path (QPIDC_MODULE_DIR ${QPID_INSTALL_LIBDIR}/qpid/client) # Directory to load client plug-in modules from
  set_absolute_install_path (QPIDD_MODULE_DIR ${QPID_INSTALL_LIBDIR}/qpid/daemon) # Directory to load broker plug-in modules from
endif (UNIX)