1# #################################################################################################
2# ALibModules.cmake - CMake file for projects using ALib
4# Copyright 2013-2025 A-Worx GmbH, Germany
5# Published under 'Boost Software License' (a free software license, see LICENSE.txt)
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# #################################################################################################
14# List of available modules
15SET( ALibKnownModules "" )
16LIST( APPEND ALibKnownModules "ALOX" )
17LIST( APPEND ALibKnownModules "BITBUFFER" )
18LIST( APPEND ALibKnownModules "BOXING" )
19LIST( APPEND ALibKnownModules "CAMP" )
20LIST( APPEND ALibKnownModules "CLI" )
21LIST( APPEND ALibKnownModules "VARIABLES" )
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" )
36# convert given list to upper case
38foreach(item ${ALIB_BUILD})
39 string(TOUPPER "${item}" upperItem)
40 list(APPEND ALibBuild ${upperItem} )
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!")
53# if nothing is given, ALL is chosen
55 MESSAGE( "ALib: No module specified with list variable \"ALibBuild\". Setting default \"ALL\".")
56 list( APPEND ALibBuild "ALL" )
59# resolve "mandatory" module dependencies
60list( FIND ALibBuild "ALL" idx )
62 LIST( REMOVE_AT ALibBuild ${idx} )
63 list( APPEND ALibBuild "ALOX" )
64 list( APPEND ALibBuild "BITBUFFER" )
65 list( APPEND ALibBuild "CLI" )
66 list( APPEND ALibBuild "EXPRESSIONS" )
67 list( APPEND ALibBuild "FILES" )
69 if( NOT ALIB_SINGLE_THREADED )
70 list( APPEND ALibBuild "THREADMODEL" )
72elseif( ALIB_SINGLE_THREADED )
73 list( FIND ALibBuild "THREADMODEL" idx )
75 message( FATAL_ERROR "ALib Module THREADMODEL requested, while symbol ALIB_SINGLE_THREADED is set" )
81list( FIND ALibBuild "EXPRESSIONS" idx )
83 list( APPEND ALibBuild "CAMP" )
86list( FIND ALibBuild "CLI" idx )
88 list( APPEND ALibBuild "CAMP" )
91list( FIND ALibBuild "FILES" idx )
93 list( APPEND ALibBuild "CAMP" )
96list( FIND ALibBuild "ALOX" idx )
98 list( APPEND ALibBuild "CAMP" )
101list( FIND ALibBuild "CAMP" idx )
103 list( APPEND ALibBuild "FORMAT" )
104 list( APPEND ALibBuild "VARIABLES" )
107list( FIND ALibBuild "VARIABLES" idx )
109 list( APPEND ALibBuild "CONTAINERS" )
110 list( APPEND ALibBuild "MONOMEM" )
111 list( APPEND ALibBuild "SYSTEM" )
114list( FIND ALibBuild "FORMAT" idx )
116 list( APPEND ALibBuild "EXCEPTIONS" )
119list( FIND ALibBuild "EXCEPTIONS" idx )
121 list( APPEND ALibBuild "BOXING" )
122 list( APPEND ALibBuild "ENUMRECORDS" )
123 list( APPEND ALibBuild "RESOURCES" )
126list( FIND ALibBuild "RESOURCES" idx )
128 list( APPEND ALibBuild "CONTAINERS" )
129 list( APPEND ALibBuild "MONOMEM" )
130 list( APPEND ALibBuild "STRINGS" )
133list( FIND ALibBuild "SYSTEM" idx )
135 list( APPEND ALibBuild "BOXING" )
136 list( APPEND ALibBuild "ENUMRECORDS" )
140### non-camp modules ###
141list( FIND ALibBuild "BITBUFFER" idx )
143 list( APPEND ALibBuild "CONTAINERS" )
144 list( APPEND ALibBuild "MONOMEM" )
147list( FIND ALibBuild "THREADMODEL" idx )
149 list( APPEND ALibBuild "BOXING" )
150 list( APPEND ALibBuild "CONTAINERS" )
151 list( APPEND ALibBuild "MONOMEM" )
154list( FIND ALibBuild "ENUMRECORDS" idx )
156 list( APPEND ALibBuild "SINGLETONS" )
157 list( APPEND ALibBuild "STRINGS" )
160list( FIND ALibBuild "BOXING" idx )
162 list( APPEND ALibBuild "SINGLETONS" )
165### clean and sort module list
166LIST( REMOVE_DUPLICATES ALibBuild )
167LIST( SORT ALibBuild )
169SET( ALibMaxModules 18 )
170list( LENGTH ALibBuild length)
171SET( ALibCtdModules ${length} )
172if( ${ALibCtdModules} GREATER ${ALibMaxModules} )
173 message( "More ALib modules than the known evaluated: ${ALibBuild}: " )
174 message( FATAL_ERROR " ${ALibCtdModules} > ${ALibMaxModules}. Internal ALib error (the CMake script is inconsistent!)" )
176if( ALibCtdModules EQUAL ${ALibMaxModules} )
177 SET( ALibAllModules True )
178 SET( ALibOmittedModules "" )
180 # Create list of omitted modules
181 SET( ALibOmittedModules "" )
182 foreach(item ${ALibKnownModules})
183 LIST( FIND ALibBuild ${item} idx)
185 list(APPEND ALibOmittedModules ${item} )
188 LIST( REMOVE_DUPLICATES ALibOmittedModules )
189 LIST( SORT ALibOmittedModules )