ALib C++ Framework
by
Library Version: 2511 R0
Documentation generated by doxygen
Loading...
Searching...
No Matches
ALibModules.cmake
1# #################################################################################################
2# ALibModules.cmake - CMake file for projects using ALib
3#
4# Copyright 2013-2025 A-Worx GmbH, Germany
5# Published under 'Boost Software License' (a free software license, see LICENSE.txt)
6#
7# Notes:
8# This script resolves dependencies between ALib modules and lists selected plus necessary
9# modules in variable ALibBuild.
10# This CMake file is included by "ALib.cmake" automatically and is not intended for manual
11# inclusion. Its contents was separated into a separated cmake file solely for clarity.
12# #################################################################################################
13
14# List of available modules
15SET( ALibKnownModules "" )
16LIST( APPEND ALibKnownModules "ALOX" )
17LIST( APPEND ALibKnownModules "APP" )
18LIST( APPEND ALibKnownModules "BITBUFFER" )
19LIST( APPEND ALibKnownModules "BOXING" )
20LIST( APPEND ALibKnownModules "CAMP" )
21LIST( APPEND ALibKnownModules "CLI" )
22LIST( APPEND ALibKnownModules "CONTAINERS" )
23LIST( APPEND ALibKnownModules "ENUMRECORDS" )
24LIST( APPEND ALibKnownModules "EXCEPTIONS" )
25LIST( APPEND ALibKnownModules "EXPRESSIONS" )
26LIST( APPEND ALibKnownModules "FILES" )
27LIST( APPEND ALibKnownModules "FORMAT" )
28LIST( APPEND ALibKnownModules "MONOMEM" )
29LIST( APPEND ALibKnownModules "RESOURCES" )
30LIST( APPEND ALibKnownModules "SINGLETONS" )
31LIST( APPEND ALibKnownModules "STRINGS" )
32LIST( APPEND ALibKnownModules "SYSTEM" )
33LIST( APPEND ALibKnownModules "THREADMODEL" )
34LIST( APPEND ALibKnownModules "VARIABLES" )
35
36# convert given list to upper case
37SET( ALibBuild "" )
38foreach(item ${ALIB_BUILD})
39 string(TOUPPER "${item}" upperItem)
40 list(APPEND ALibBuild ${upperItem} )
41endforeach()
42
43# Check for unknown module name
44foreach (modName ${ALibBuild})
45 if( NOT modName STREQUAL "ALL" )
46 if( NOT modName IN_LIST ALibKnownModules )
47 MESSAGE( FATAL_ERROR "ALib: Unknown module name \"${modName}\" given!")
48 return()
49 endif()
50 endif()
51endforeach()
52
53# if nothing is given, ALL is chosen
54if( NOT ALibBuild )
55 MESSAGE( "ALib: No module specified with list variable \"ALibBuild\". Setting default \"ALL\".")
56 list( APPEND ALibBuild "ALL" )
57endif()
58
59# resolve "mandatory" module dependencies
60list( FIND ALibBuild "ALL" idx )
61if( NOT idx LESS 0 )
62 LIST( REMOVE_AT ALibBuild ${idx} )
63 list( APPEND ALibBuild "APP" )
64 list( APPEND ALibBuild "BITBUFFER" )
65 list( APPEND ALibBuild "EXPRESSIONS" )
66 list( APPEND ALibBuild "FILES" )
67 if( NOT ALIB_SINGLE_THREADED )
68 list( APPEND ALibBuild "THREADMODEL" )
69 endif()
70elseif( ALIB_SINGLE_THREADED )
71 list( FIND ALibBuild "THREADMODEL" idx )
72 if( NOT idx LESS 0 )
73 message( FATAL_ERROR "ALib Module THREADMODEL requested, while macro ALIB_SINGLE_THREADED is set" )
74 return()
75 endif()
76endif()
77
78#### camp modules ####
79list( FIND ALibBuild "APP" idx )
80if( NOT idx LESS 0 )
81 list( APPEND ALibBuild "ALOX" )
82 list( APPEND ALibBuild "CLI" )
83endif()
84
85list( FIND ALibBuild "EXPRESSIONS" idx )
86if( NOT idx LESS 0 )
87 list( APPEND ALibBuild "CAMP" )
88endif()
89
90list( FIND ALibBuild "CLI" idx )
91if( NOT idx LESS 0 )
92 list( APPEND ALibBuild "CAMP" )
93endif()
94
95list( FIND ALibBuild "FILES" idx )
96if( NOT idx LESS 0 )
97 list( APPEND ALibBuild "CAMP" )
98endif()
99
100list( FIND ALibBuild "ALOX" idx )
101if( NOT idx LESS 0 )
102 list( APPEND ALibBuild "CAMP" )
103endif()
104
105list( FIND ALibBuild "CAMP" idx )
106if( NOT idx LESS 0 )
107 list( APPEND ALibBuild "FORMAT" )
108 list( APPEND ALibBuild "VARIABLES" )
109endif()
110
111list( FIND ALibBuild "VARIABLES" idx )
112if( NOT idx LESS 0 )
113 list( APPEND ALibBuild "CONTAINERS" )
114 list( APPEND ALibBuild "MONOMEM" )
115 list( APPEND ALibBuild "SYSTEM" )
116endif()
117
118list( FIND ALibBuild "FORMAT" idx )
119if( NOT idx LESS 0 )
120 list( APPEND ALibBuild "EXCEPTIONS" )
121endif()
122
123list( FIND ALibBuild "EXCEPTIONS" idx )
124if( NOT idx LESS 0 )
125 list( APPEND ALibBuild "BOXING" )
126 list( APPEND ALibBuild "ENUMRECORDS" )
127 list( APPEND ALibBuild "RESOURCES" )
128endif()
129
130list( FIND ALibBuild "RESOURCES" idx )
131if( NOT idx LESS 0 )
132 list( APPEND ALibBuild "CONTAINERS" )
133 list( APPEND ALibBuild "MONOMEM" )
134 list( APPEND ALibBuild "STRINGS" )
135endif()
136
137list( FIND ALibBuild "SYSTEM" idx )
138if( NOT idx LESS 0 )
139 list( APPEND ALibBuild "BOXING" )
140 list( APPEND ALibBuild "ENUMRECORDS" )
141endif()
142
143
144### non-camp modules ###
145list( FIND ALibBuild "BITBUFFER" idx )
146if( NOT idx LESS 0 )
147 list( APPEND ALibBuild "CONTAINERS" )
148 list( APPEND ALibBuild "MONOMEM" )
149endif()
150
151list( FIND ALibBuild "THREADMODEL" idx )
152if( NOT idx LESS 0 )
153 list( APPEND ALibBuild "BOXING" )
154 list( APPEND ALibBuild "CONTAINERS" )
155 list( APPEND ALibBuild "MONOMEM" )
156endif()
157
158list( FIND ALibBuild "ENUMRECORDS" idx )
159if( NOT idx LESS 0 )
160 list( APPEND ALibBuild "SINGLETONS" )
161 list( APPEND ALibBuild "STRINGS" )
162endif()
163
164list( FIND ALibBuild "BOXING" idx )
165if( NOT idx LESS 0 )
166 list( APPEND ALibBuild "SINGLETONS" )
167endif()
168
169### clean and sort module list
170LIST( REMOVE_DUPLICATES ALibBuild )
171LIST( SORT ALibBuild )
172
173SET( ALibMaxModules 19 )
174list( LENGTH ALibBuild length)
175SET( ALibCtdModules ${length} )
176if( ${ALibCtdModules} GREATER ${ALibMaxModules} )
177 message( "More ALib modules than the known evaluated: ${ALibBuild}: " )
178 message( FATAL_ERROR " ${ALibCtdModules} > ${ALibMaxModules}. Internal ALib error (the CMake script is inconsistent!)" )
179endif()
180if( ALibCtdModules EQUAL ${ALibMaxModules} )
181 SET( ALibAllModules True )
182 SET( ALibOmittedModules "" )
183else()
184 # Create list of omitted modules
185 SET( ALibOmittedModules "" )
186 foreach(item ${ALibKnownModules})
187 LIST( FIND ALibBuild ${item} idx)
188 if( idx LESS 0 )
189 list(APPEND ALibOmittedModules ${item} )
190 endif()
191 endforeach()
192 LIST( REMOVE_DUPLICATES ALibOmittedModules )
193 LIST( SORT ALibOmittedModules )
194endif()
195