ALib C++ Framework
by
Library Version: 2605 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-2026 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 "CONTAINERS" )
22LIST( APPEND ALibKnownModules "ENUMRECORDS" )
23LIST( APPEND ALibKnownModules "EXCEPTIONS" )
24LIST( APPEND ALibKnownModules "EXPRESSIONS" )
25LIST( APPEND ALibKnownModules "FILETREE" )
26LIST( APPEND ALibKnownModules "FORMAT" )
27LIST( APPEND ALibKnownModules "MONOMEM" )
28LIST( APPEND ALibKnownModules "RESOURCES" )
29LIST( APPEND ALibKnownModules "SINGLETONS" )
30LIST( APPEND ALibKnownModules "STRINGS" )
31LIST( APPEND ALibKnownModules "SYSTEM" )
32LIST( APPEND ALibKnownModules "THREADMODEL" )
33LIST( APPEND ALibKnownModules "VARIABLES" )
34
35# convert given list to upper case
36SET( ALibBuild "" )
37foreach(item ${ALIB_BUILD})
38 string(TOUPPER "${item}" upperItem)
39 list(APPEND ALibBuild ${upperItem} )
40endforeach()
41
42# Check for unknown module name
43foreach (modName ${ALibBuild})
44 if( NOT modName STREQUAL "ALL" )
45 if( NOT modName IN_LIST ALibKnownModules )
46 MESSAGE( FATAL_ERROR "ALib: Unknown module name \"${modName}\" given!")
47 return()
48 endif()
49 endif()
50endforeach()
51
52# if nothing is given, ALL is chosen
53if( NOT ALibBuild )
54 MESSAGE( "ALib: No module specified with list variable \"ALibBuild\". Setting default \"ALL\".")
55 list( APPEND ALibBuild "ALL" )
56endif()
57
58# resolve "mandatory" module dependencies
59list( FIND ALibBuild "ALL" idx )
60if( NOT idx LESS 0 )
61 LIST( REMOVE_AT ALibBuild ${idx} )
62 list( APPEND ALibBuild "APP" )
63 list( APPEND ALibBuild "BITBUFFER" )
64 list( APPEND ALibBuild "EXPRESSIONS" )
65 list( APPEND ALibBuild "FILETREE" )
66 if( NOT ALIB_SINGLE_THREADED )
67 list( APPEND ALibBuild "THREADMODEL" )
68 endif()
69elseif( ALIB_SINGLE_THREADED )
70 list( FIND ALibBuild "THREADMODEL" idx )
71 if( NOT idx LESS 0 )
72 message( FATAL_ERROR "ALib Module THREADMODEL requested, while macro ALIB_SINGLE_THREADED is set" )
73 return()
74 endif()
75endif()
76
77#### camp modules ####
78list( FIND ALibBuild "APP" idx )
79if( NOT idx LESS 0 )
80 list( APPEND ALibBuild "ALOX" )
81 list( APPEND ALibBuild "CAMP" )
82endif()
83
84list( FIND ALibBuild "EXPRESSIONS" idx )
85if( NOT idx LESS 0 )
86 list( APPEND ALibBuild "CAMP" )
87endif()
88
89list( FIND ALibBuild "FILETREE" idx )
90if( NOT idx LESS 0 )
91 list( APPEND ALibBuild "CAMP" )
92endif()
93
94list( FIND ALibBuild "ALOX" idx )
95if( NOT idx LESS 0 )
96 list( APPEND ALibBuild "CAMP" )
97endif()
98
99list( FIND ALibBuild "CAMP" idx )
100if( NOT idx LESS 0 )
101 list( APPEND ALibBuild "FORMAT" )
102 list( APPEND ALibBuild "VARIABLES" )
103endif()
104
105list( FIND ALibBuild "VARIABLES" idx )
106if( NOT idx LESS 0 )
107 list( APPEND ALibBuild "CONTAINERS" )
108 list( APPEND ALibBuild "MONOMEM" )
109 list( APPEND ALibBuild "SYSTEM" )
110endif()
111
112list( FIND ALibBuild "FORMAT" idx )
113if( NOT idx LESS 0 )
114 list( APPEND ALibBuild "EXCEPTIONS" )
115endif()
116
117list( FIND ALibBuild "EXCEPTIONS" idx )
118if( NOT idx LESS 0 )
119 list( APPEND ALibBuild "BOXING" )
120 list( APPEND ALibBuild "ENUMRECORDS" )
121 list( APPEND ALibBuild "RESOURCES" )
122endif()
123
124list( FIND ALibBuild "RESOURCES" idx )
125if( NOT idx LESS 0 )
126 list( APPEND ALibBuild "CONTAINERS" )
127 list( APPEND ALibBuild "MONOMEM" )
128 list( APPEND ALibBuild "STRINGS" )
129endif()
130
131list( FIND ALibBuild "SYSTEM" idx )
132if( NOT idx LESS 0 )
133 list( APPEND ALibBuild "BOXING" )
134 list( APPEND ALibBuild "ENUMRECORDS" )
135endif()
136
137
138### non-camp modules ###
139list( FIND ALibBuild "BITBUFFER" idx )
140if( NOT idx LESS 0 )
141 list( APPEND ALibBuild "CONTAINERS" )
142 list( APPEND ALibBuild "MONOMEM" )
143endif()
144
145list( FIND ALibBuild "THREADMODEL" idx )
146if( NOT idx LESS 0 )
147 list( APPEND ALibBuild "BOXING" )
148 list( APPEND ALibBuild "CONTAINERS" )
149 list( APPEND ALibBuild "MONOMEM" )
150endif()
151
152list( FIND ALibBuild "ENUMRECORDS" idx )
153if( NOT idx LESS 0 )
154 list( APPEND ALibBuild "SINGLETONS" )
155 list( APPEND ALibBuild "STRINGS" )
156endif()
157
158list( FIND ALibBuild "BOXING" idx )
159if( NOT idx LESS 0 )
160 list( APPEND ALibBuild "SINGLETONS" )
161endif()
162
163### clean and sort module list
164LIST( REMOVE_DUPLICATES ALibBuild )
165LIST( SORT ALibBuild )
166
167SET( ALibMaxModules 18 )
168list( LENGTH ALibBuild length)
169SET( ALibCtdModules ${length} )
170if( ${ALibCtdModules} GREATER ${ALibMaxModules} )
171 message( "More ALib modules than the known evaluated: ${ALibBuild}: " )
172 message( FATAL_ERROR " ${ALibCtdModules} > ${ALibMaxModules}. Internal ALib error (the CMake script is inconsistent!)" )
173endif()
174if( ALibCtdModules EQUAL ${ALibMaxModules} )
175 SET( ALibAllModules True )
176 SET( ALibOmittedModules "" )
177else()
178 # Create list of omitted modules
179 SET( ALibOmittedModules "" )
180 foreach(item ${ALibKnownModules})
181 LIST( FIND ALibBuild ${item} idx)
182 if( idx LESS 0 )
183 list(APPEND ALibOmittedModules ${item} )
184 endif()
185 endforeach()
186 LIST( REMOVE_DUPLICATES ALibOmittedModules )
187 LIST( SORT ALibOmittedModules )
188endif()
189