Merge pull request #12 from carlocorradini/new
[KDIS.git] / CMakeLists.txt
blob8547b4cc1455475b4245d007ad9814c4d0c6cf66
1 cmake_minimum_required(VERSION 3.14 FATAL_ERROR)
4 # Project
6 project(
7   KDIS
8   VERSION 3.0.0
9   LANGUAGES CXX
10   HOMEPAGE_URL https://github.com/karljj1/kdis
11   DESCRIPTION "Open source implementation of DIS (Distributed Interactive Simulation) IEEE 1278.1"
15 # Settings
17 set(CMAKE_CXX_STANDARD 11)
18 set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
19 set(CMAKE_CXX_EXTENSIONS FALSE)
20 set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
21 set(CMAKE_EXPORT_COMPILE_COMMANDS TRUE)
24 # Options
26 # cmake-lint: disable=C0301
27 set(DIS_VERSION
28     7
29     CACHE
30       STRING
31       "DIS version. Possible values are 5 (IEEE 1278.1-1995), 6 (IEEE 1278.1A-1998), or 7 (IEEE 1278.1x-2012)"
33 # cmake-lint: disable=C0301
34 option(
35   KDIS_USE_ENUM_DESCRIPTORS
36   "Enumeration descriptors. Allow enum values to be turned into their text labels. This increase the memory footprint of the library"
37   TRUE
39 option(KDIS_BUILD_DOCS "Build documentation" FALSE)
40 option(KDIS_BUILD_EXAMPLES "Build examples" FALSE)
41 option(KDIS_BUILD_TESTS "Build tests" FALSE)
42 option(BUILD_SHARED_LIBS "Build shared library" TRUE)
45 # Checks
47 if(NOT ${DIS_VERSION} EQUAL 5
48    AND NOT ${DIS_VERSION} EQUAL 6
49    AND NOT ${DIS_VERSION} EQUAL 7
51   message(FATAL_ERROR "Invalid DIS version ${DIS_VERSION}")
52 endif()
55 # Includes
57 include(CPM)
58 include(GNUInstallDirs)
59 include(GenerateExportHeader)
60 include(CMakePackageConfigHelpers)
63 # Configuration file
65 configure_file(
66   ${CMAKE_CURRENT_SOURCE_DIR}/KConfig.hpp.in
67   ${CMAKE_CURRENT_SOURCE_DIR}/include/${PROJECT_NAME}/KConfig.hpp @ONLY
71 # Headers & Sources
73 set(KDIS_HEADERS_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include/${PROJECT_NAME})
74 set(KDIS_SOURCES_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src)
76 set(KDIS_HEADERS
77     ${KDIS_HEADERS_DIR}/KConfig.hpp ${KDIS_HEADERS_DIR}/KDataStream.hpp
78     ${KDIS_HEADERS_DIR}/KDefines.hpp ${KDIS_HEADERS_DIR}/KEncodersDecoders.hpp
79     ${KDIS_HEADERS_DIR}/KSymbolicNames.hpp
81 set(KDIS_SOURCES ${KDIS_SOURCES_DIR}/KDataStream.cpp)
83 # DataTypes
84 set(KDIS_DATATYPES_HEADERS_DIR ${KDIS_HEADERS_DIR}/DataTypes)
85 set(KDIS_DATATYPES_SOURCES_DIR ${KDIS_SOURCES_DIR}/DataTypes)
87 # DataTypes DIS 5
88 list(
89   APPEND
90   KDIS_HEADERS
91   ${KDIS_DATATYPES_HEADERS_DIR}/AirPlatformAppearance.hpp
92   ${KDIS_DATATYPES_HEADERS_DIR}/AntennaLocation.hpp
93   ${KDIS_DATATYPES_HEADERS_DIR}/ArticulatedPart.hpp
94   ${KDIS_DATATYPES_HEADERS_DIR}/AttachedPart.hpp
95   ${KDIS_DATATYPES_HEADERS_DIR}/ClockTime.hpp
96   ${KDIS_DATATYPES_HEADERS_DIR}/CryptoSystem.hpp
97   ${KDIS_DATATYPES_HEADERS_DIR}/CulturalFeatureAppearance.hpp
98   ${KDIS_DATATYPES_HEADERS_DIR}/DataTypeBase.hpp
99   ${KDIS_DATATYPES_HEADERS_DIR}/DeadReckoningParameter.hpp
100   ${KDIS_DATATYPES_HEADERS_DIR}/Descriptor.hpp
101   ${KDIS_DATATYPES_HEADERS_DIR}/EmissionSystem.hpp
102   ${KDIS_DATATYPES_HEADERS_DIR}/EmitterBeam.hpp
103   ${KDIS_DATATYPES_HEADERS_DIR}/EmitterSystem.hpp
104   ${KDIS_DATATYPES_HEADERS_DIR}/EncodingScheme.hpp
105   ${KDIS_DATATYPES_HEADERS_DIR}/EntityAppearance.hpp
106   ${KDIS_DATATYPES_HEADERS_DIR}/EntityCapabilities.hpp
107   ${KDIS_DATATYPES_HEADERS_DIR}/EntityIdentifier.hpp
108   ${KDIS_DATATYPES_HEADERS_DIR}/EntityMarking.hpp
109   ${KDIS_DATATYPES_HEADERS_DIR}/EntityType.hpp
110   ${KDIS_DATATYPES_HEADERS_DIR}/EnvironmentalsAppearance.hpp
111   ${KDIS_DATATYPES_HEADERS_DIR}/EulerAngles.hpp
112   ${KDIS_DATATYPES_HEADERS_DIR}/FactoryDecoder.hpp
113   ${KDIS_DATATYPES_HEADERS_DIR}/FixedDatum.hpp
114   ${KDIS_DATATYPES_HEADERS_DIR}/FundamentalParameterData.hpp
115   ${KDIS_DATATYPES_HEADERS_DIR}/GuidedMunitionsAppearance.hpp
116   ${KDIS_DATATYPES_HEADERS_DIR}/LandPlatformAppearance.hpp
117   ${KDIS_DATATYPES_HEADERS_DIR}/LifeFormAppearance.hpp
118   ${KDIS_DATATYPES_HEADERS_DIR}/ModulationType.hpp
119   ${KDIS_DATATYPES_HEADERS_DIR}/MunitionDescriptor.hpp
120   ${KDIS_DATATYPES_HEADERS_DIR}/NonHumanLifeFormAppearance.hpp
121   ${KDIS_DATATYPES_HEADERS_DIR}/RadioAppearance.hpp
122   ${KDIS_DATATYPES_HEADERS_DIR}/RadioEntityType.hpp
123   ${KDIS_DATATYPES_HEADERS_DIR}/SensorEmitterAppearance.hpp
124   ${KDIS_DATATYPES_HEADERS_DIR}/SimulationIdentifier.hpp
125   ${KDIS_DATATYPES_HEADERS_DIR}/SpacePlatformAppearance.hpp
126   ${KDIS_DATATYPES_HEADERS_DIR}/SubSurfacePlatformAppearance.hpp
127   ${KDIS_DATATYPES_HEADERS_DIR}/Supplies.hpp
128   ${KDIS_DATATYPES_HEADERS_DIR}/SurfacePlatformAppearance.hpp
129   ${KDIS_DATATYPES_HEADERS_DIR}/TimeStamp.hpp
130   ${KDIS_DATATYPES_HEADERS_DIR}/TrackJamTargetIdentifier.hpp
131   ${KDIS_DATATYPES_HEADERS_DIR}/VariableDatum.hpp
132   ${KDIS_DATATYPES_HEADERS_DIR}/VariableParameter.hpp
133   ${KDIS_DATATYPES_HEADERS_DIR}/Vector.hpp
134   ${KDIS_DATATYPES_HEADERS_DIR}/WorldCoordinates.hpp
135   ${KDIS_DATATYPES_HEADERS_DIR}/SupplyAppearance.hpp
136   ${KDIS_DATATYPES_HEADERS_DIR}/ExpendableAppearance.hpp
138 list(
139   APPEND
140   KDIS_SOURCES
141   ${KDIS_DATATYPES_SOURCES_DIR}/AirPlatformAppearance.cpp
142   ${KDIS_DATATYPES_SOURCES_DIR}/AntennaLocation.cpp
143   ${KDIS_DATATYPES_SOURCES_DIR}/ArticulatedPart.cpp
144   ${KDIS_DATATYPES_SOURCES_DIR}/AttachedPart.cpp
145   ${KDIS_DATATYPES_SOURCES_DIR}/ClockTime.cpp
146   ${KDIS_DATATYPES_SOURCES_DIR}/CryptoSystem.cpp
147   ${KDIS_DATATYPES_SOURCES_DIR}/CulturalFeatureAppearance.cpp
148   ${KDIS_DATATYPES_SOURCES_DIR}/DataTypeBase.cpp
149   ${KDIS_DATATYPES_SOURCES_DIR}/DeadReckoningParameter.cpp
150   ${KDIS_DATATYPES_SOURCES_DIR}/Descriptor.cpp
151   ${KDIS_DATATYPES_SOURCES_DIR}/EmissionSystem.cpp
152   ${KDIS_DATATYPES_SOURCES_DIR}/EmitterBeam.cpp
153   ${KDIS_DATATYPES_SOURCES_DIR}/EmitterSystem.cpp
154   ${KDIS_DATATYPES_SOURCES_DIR}/EncodingScheme.cpp
155   ${KDIS_DATATYPES_SOURCES_DIR}/EntityAppearance.cpp
156   ${KDIS_DATATYPES_SOURCES_DIR}/EntityCapabilities.cpp
157   ${KDIS_DATATYPES_SOURCES_DIR}/EntityIdentifier.cpp
158   ${KDIS_DATATYPES_SOURCES_DIR}/EntityMarking.cpp
159   ${KDIS_DATATYPES_SOURCES_DIR}/EntityType.cpp
160   ${KDIS_DATATYPES_SOURCES_DIR}/EnvironmentalsAppearance.cpp
161   ${KDIS_DATATYPES_SOURCES_DIR}/EulerAngles.cpp
162   ${KDIS_DATATYPES_SOURCES_DIR}/FixedDatum.cpp
163   ${KDIS_DATATYPES_SOURCES_DIR}/FundamentalParameterData.cpp
164   ${KDIS_DATATYPES_SOURCES_DIR}/GuidedMunitionsAppearance.cpp
165   ${KDIS_DATATYPES_SOURCES_DIR}/LandPlatformAppearance.cpp
166   ${KDIS_DATATYPES_SOURCES_DIR}/LifeFormAppearance.cpp
167   ${KDIS_DATATYPES_SOURCES_DIR}/ModulationType.cpp
168   ${KDIS_DATATYPES_SOURCES_DIR}/MunitionDescriptor.cpp
169   ${KDIS_DATATYPES_SOURCES_DIR}/NonHumanLifeFormAppearance.cpp
170   ${KDIS_DATATYPES_SOURCES_DIR}/RadioAppearance.cpp
171   ${KDIS_DATATYPES_SOURCES_DIR}/RadioEntityType.cpp
172   ${KDIS_DATATYPES_SOURCES_DIR}/SensorEmitterAppearance.cpp
173   ${KDIS_DATATYPES_SOURCES_DIR}/SimulationIdentifier.cpp
174   ${KDIS_DATATYPES_SOURCES_DIR}/SpacePlatformAppearance.cpp
175   ${KDIS_DATATYPES_SOURCES_DIR}/SubSurfacePlatformAppearance.cpp
176   ${KDIS_DATATYPES_SOURCES_DIR}/Supplies.cpp
177   ${KDIS_DATATYPES_SOURCES_DIR}/SurfacePlatformAppearance.cpp
178   ${KDIS_DATATYPES_SOURCES_DIR}/TimeStamp.cpp
179   ${KDIS_DATATYPES_SOURCES_DIR}/TrackJamTargetIdentifier.cpp
180   ${KDIS_DATATYPES_SOURCES_DIR}/VariableDatum.cpp
181   ${KDIS_DATATYPES_SOURCES_DIR}/VariableParameter.cpp
182   ${KDIS_DATATYPES_SOURCES_DIR}/Vector.cpp
183   ${KDIS_DATATYPES_SOURCES_DIR}/WorldCoordinates.cpp
184   ${KDIS_DATATYPES_SOURCES_DIR}/SupplyAppearance.cpp
185   ${KDIS_DATATYPES_SOURCES_DIR}/ExpendableAppearance.cpp
188 # DataTypes DIS 6
189 if(${DIS_VERSION} GREATER_EQUAL 6)
190   list(
191     APPEND
192     KDIS_HEADERS
193     ${KDIS_DATATYPES_HEADERS_DIR}/AcousticEmitterSystem.hpp
194     ${KDIS_DATATYPES_HEADERS_DIR}/AggregateIdentifier.hpp
195     ${KDIS_DATATYPES_HEADERS_DIR}/AggregateMarking.hpp
196     ${KDIS_DATATYPES_HEADERS_DIR}/AggregateType.hpp
197     ${KDIS_DATATYPES_HEADERS_DIR}/APA.hpp
198     ${KDIS_DATATYPES_HEADERS_DIR}/ArealObjectAppearance.hpp
199     ${KDIS_DATATYPES_HEADERS_DIR}/BeamData.hpp
200     ${KDIS_DATATYPES_HEADERS_DIR}/BoundingSphereRecord.hpp
201     ${KDIS_DATATYPES_HEADERS_DIR}/COMBICState.hpp
202     ${KDIS_DATATYPES_HEADERS_DIR}/CommunicationsChannelType.hpp
203     ${KDIS_DATATYPES_HEADERS_DIR}/ConeRecord1.hpp
204     ${KDIS_DATATYPES_HEADERS_DIR}/ConeRecord2.hpp
205     ${KDIS_DATATYPES_HEADERS_DIR}/EllipsoidRecord1.hpp
206     ${KDIS_DATATYPES_HEADERS_DIR}/EllipsoidRecord2.hpp
207     ${KDIS_DATATYPES_HEADERS_DIR}/EntityDestinationRecord.hpp
208     ${KDIS_DATATYPES_HEADERS_DIR}/EnvironmentRecord.hpp
209     ${KDIS_DATATYPES_HEADERS_DIR}/EnvironmentType.hpp
210     ${KDIS_DATATYPES_HEADERS_DIR}/FlareState.hpp
211     ${KDIS_DATATYPES_HEADERS_DIR}/FundamentalOperationalData.hpp
212     ${KDIS_DATATYPES_HEADERS_DIR}/FundamentalOperationalData_MarkXInterrogator.hpp
213     ${KDIS_DATATYPES_HEADERS_DIR}/FundamentalOperationalData_MarkXTransponder.hpp
214     ${KDIS_DATATYPES_HEADERS_DIR}/FundamentalOperationalData_RRB.hpp
215     ${KDIS_DATATYPES_HEADERS_DIR}/FundamentalOperationalData_Soviet.hpp
216     ${KDIS_DATATYPES_HEADERS_DIR}/GaussianPlumeRecord.hpp
217     ${KDIS_DATATYPES_HEADERS_DIR}/GaussianPuffRecord.hpp
218     ${KDIS_DATATYPES_HEADERS_DIR}/GED.hpp
219     ${KDIS_DATATYPES_HEADERS_DIR}/GED_BasicFixedWingAircraft.hpp
220     ${KDIS_DATATYPES_HEADERS_DIR}/GED_BasicGroundCombatSoldier.hpp
221     ${KDIS_DATATYPES_HEADERS_DIR}/GED_BasicGroundCombatVehicle.hpp
222     ${KDIS_DATATYPES_HEADERS_DIR}/GED_BasicRotorWingAircraft.hpp
223     ${KDIS_DATATYPES_HEADERS_DIR}/GED_EnhancedFixedWingAircraft.hpp
224     ${KDIS_DATATYPES_HEADERS_DIR}/GED_EnhancedGroundCombatSoldier.hpp
225     ${KDIS_DATATYPES_HEADERS_DIR}/GED_EnhancedGroundCombatVehicle.hpp
226     ${KDIS_DATATYPES_HEADERS_DIR}/GED_EnhancedRotaryWingAircraft.hpp
227     ${KDIS_DATATYPES_HEADERS_DIR}/GED_GroundLogisticsVehicle.hpp
228     ${KDIS_DATATYPES_HEADERS_DIR}/GridAxisIrregular.hpp
229     ${KDIS_DATATYPES_HEADERS_DIR}/GridAxisRegular.hpp
230     ${KDIS_DATATYPES_HEADERS_DIR}/GridData.hpp
231     ${KDIS_DATATYPES_HEADERS_DIR}/GridDataType0.hpp
232     ${KDIS_DATATYPES_HEADERS_DIR}/GridDataType1.hpp
233     ${KDIS_DATATYPES_HEADERS_DIR}/GridDataType2.hpp
234     ${KDIS_DATATYPES_HEADERS_DIR}/GroupAssignmentRecord.hpp
235     ${KDIS_DATATYPES_HEADERS_DIR}/GroupDestinationRecord.hpp
236     ${KDIS_DATATYPES_HEADERS_DIR}/IFF_ATC_NAVAIDS_FundamentalParameterData.hpp
237     ${KDIS_DATATYPES_HEADERS_DIR}/IFF_Layer2.hpp
238     ${KDIS_DATATYPES_HEADERS_DIR}/IntercomCommunicationParameters.hpp
239     ${KDIS_DATATYPES_HEADERS_DIR}/KFIXED.hpp
240     ${KDIS_DATATYPES_HEADERS_DIR}/LayerHeader.hpp
241     ${KDIS_DATATYPES_HEADERS_DIR}/LE_DeadReckoningParameter.hpp
242     ${KDIS_DATATYPES_HEADERS_DIR}/LE_EntityIdentifier.hpp
243     ${KDIS_DATATYPES_HEADERS_DIR}/LE_EulerAngles.hpp
244     ${KDIS_DATATYPES_HEADERS_DIR}/LE_Vector.hpp
245     ${KDIS_DATATYPES_HEADERS_DIR}/LinearObjectAppearance.hpp
246     ${KDIS_DATATYPES_HEADERS_DIR}/LinearSegmentParameter.hpp
247     ${KDIS_DATATYPES_HEADERS_DIR}/LineRecord1.hpp
248     ${KDIS_DATATYPES_HEADERS_DIR}/LineRecord2.hpp
249     ${KDIS_DATATYPES_HEADERS_DIR}/Mine.hpp
250     ${KDIS_DATATYPES_HEADERS_DIR}/MinefieldAppearance.hpp
251     ${KDIS_DATATYPES_HEADERS_DIR}/MinefieldDataFilter.hpp
252     ${KDIS_DATATYPES_HEADERS_DIR}/MineFusing.hpp
253     ${KDIS_DATATYPES_HEADERS_DIR}/MinePaintScheme.hpp
254     ${KDIS_DATATYPES_HEADERS_DIR}/NamedLocationIdentifier.hpp
255     ${KDIS_DATATYPES_HEADERS_DIR}/ObjectAppearance.hpp
256     ${KDIS_DATATYPES_HEADERS_DIR}/ObjectType.hpp
257     ${KDIS_DATATYPES_HEADERS_DIR}/OrientationError.hpp
258     ${KDIS_DATATYPES_HEADERS_DIR}/PerimeterPointCoordinate.hpp
259     ${KDIS_DATATYPES_HEADERS_DIR}/PointObjectAppearance.hpp
260     ${KDIS_DATATYPES_HEADERS_DIR}/PointRecord1.hpp
261     ${KDIS_DATATYPES_HEADERS_DIR}/PointRecord2.hpp
262     ${KDIS_DATATYPES_HEADERS_DIR}/PositionError.hpp
263     ${KDIS_DATATYPES_HEADERS_DIR}/PropulsionSystem.hpp
264     ${KDIS_DATATYPES_HEADERS_DIR}/RecordSet.hpp
265     ${KDIS_DATATYPES_HEADERS_DIR}/RectangularVolumeRecord1.hpp
266     ${KDIS_DATATYPES_HEADERS_DIR}/RectangularVolumeRecord2.hpp
267     ${KDIS_DATATYPES_HEADERS_DIR}/RectangularVolumeRecord3.hpp
268     ${KDIS_DATATYPES_HEADERS_DIR}/RelationshipRecord.hpp
269     ${KDIS_DATATYPES_HEADERS_DIR}/RelativeWorldCoordinates.hpp
270     ${KDIS_DATATYPES_HEADERS_DIR}/SecondaryOperationalData.hpp
271     ${KDIS_DATATYPES_HEADERS_DIR}/Shaft.hpp
272     ${KDIS_DATATYPES_HEADERS_DIR}/SilentAggregateSystem.hpp
273     ${KDIS_DATATYPES_HEADERS_DIR}/SilentEntitySystem.hpp
274     ${KDIS_DATATYPES_HEADERS_DIR}/SphereRecord1.hpp
275     ${KDIS_DATATYPES_HEADERS_DIR}/SphereRecord2.hpp
276     ${KDIS_DATATYPES_HEADERS_DIR}/SystemIdentifier.hpp
277     ${KDIS_DATATYPES_HEADERS_DIR}/UnderwaterAcousticEmitterBeam.hpp
278     ${KDIS_DATATYPES_HEADERS_DIR}/UnderwaterAcousticEmitterSystem.hpp
279     ${KDIS_DATATYPES_HEADERS_DIR}/UnderwaterAcousticFundamentalParameterData.hpp
280     ${KDIS_DATATYPES_HEADERS_DIR}/VectoringNozzleSystem.hpp
281     ${KDIS_DATATYPES_HEADERS_DIR}/SeparationPart.hpp
282   )
283   list(
284     APPEND
285     KDIS_SOURCES
286     ${KDIS_DATATYPES_SOURCES_DIR}/AcousticEmitterSystem.cpp
287     ${KDIS_DATATYPES_SOURCES_DIR}/AggregateIdentifier.cpp
288     ${KDIS_DATATYPES_SOURCES_DIR}/AggregateMarking.cpp
289     ${KDIS_DATATYPES_SOURCES_DIR}/AggregateType.cpp
290     ${KDIS_DATATYPES_SOURCES_DIR}/APA.cpp
291     ${KDIS_DATATYPES_SOURCES_DIR}/ArealObjectAppearance.cpp
292     ${KDIS_DATATYPES_SOURCES_DIR}/BeamData.cpp
293     ${KDIS_DATATYPES_SOURCES_DIR}/BoundingSphereRecord.cpp
294     ${KDIS_DATATYPES_SOURCES_DIR}/COMBICState.cpp
295     ${KDIS_DATATYPES_SOURCES_DIR}/CommunicationsChannelType.cpp
296     ${KDIS_DATATYPES_SOURCES_DIR}/ConeRecord1.cpp
297     ${KDIS_DATATYPES_SOURCES_DIR}/ConeRecord2.cpp
298     ${KDIS_DATATYPES_SOURCES_DIR}/EllipsoidRecord1.cpp
299     ${KDIS_DATATYPES_SOURCES_DIR}/EllipsoidRecord2.cpp
300     ${KDIS_DATATYPES_SOURCES_DIR}/EntityDestinationRecord.cpp
301     ${KDIS_DATATYPES_SOURCES_DIR}/EnvironmentRecord.cpp
302     ${KDIS_DATATYPES_SOURCES_DIR}/EnvironmentType.cpp
303     ${KDIS_DATATYPES_SOURCES_DIR}/FlareState.cpp
304     ${KDIS_DATATYPES_SOURCES_DIR}/FundamentalOperationalData.cpp
305     ${KDIS_DATATYPES_SOURCES_DIR}/FundamentalOperationalData_MarkXInterrogator.cpp
306     ${KDIS_DATATYPES_SOURCES_DIR}/FundamentalOperationalData_MarkXTransponder.cpp
307     ${KDIS_DATATYPES_SOURCES_DIR}/FundamentalOperationalData_RRB.cpp
308     ${KDIS_DATATYPES_SOURCES_DIR}/FundamentalOperationalData_Soviet.cpp
309     ${KDIS_DATATYPES_SOURCES_DIR}/GaussianPlumeRecord.cpp
310     ${KDIS_DATATYPES_SOURCES_DIR}/GaussianPuffRecord.cpp
311     ${KDIS_DATATYPES_SOURCES_DIR}/GED_BasicFixedWingAircraft.cpp
312     ${KDIS_DATATYPES_SOURCES_DIR}/GED_BasicGroundCombatSoldier.cpp
313     ${KDIS_DATATYPES_SOURCES_DIR}/GED_BasicGroundCombatVehicle.cpp
314     ${KDIS_DATATYPES_SOURCES_DIR}/GED_BasicRotorWingAircraft.cpp
315     ${KDIS_DATATYPES_SOURCES_DIR}/GED_EnhancedFixedWingAircraft.cpp
316     ${KDIS_DATATYPES_SOURCES_DIR}/GED_EnhancedGroundCombatSoldier.cpp
317     ${KDIS_DATATYPES_SOURCES_DIR}/GED_EnhancedGroundCombatVehicle.cpp
318     ${KDIS_DATATYPES_SOURCES_DIR}/GED_EnhancedRotaryWingAircraft.cpp
319     ${KDIS_DATATYPES_SOURCES_DIR}/GED_GroundLogisticsVehicle.cpp
320     ${KDIS_DATATYPES_SOURCES_DIR}/GridAxisIrregular.cpp
321     ${KDIS_DATATYPES_SOURCES_DIR}/GridAxisRegular.cpp
322     ${KDIS_DATATYPES_SOURCES_DIR}/GridData.cpp
323     ${KDIS_DATATYPES_SOURCES_DIR}/GridDataType0.cpp
324     ${KDIS_DATATYPES_SOURCES_DIR}/GridDataType1.cpp
325     ${KDIS_DATATYPES_SOURCES_DIR}/GridDataType2.cpp
326     ${KDIS_DATATYPES_SOURCES_DIR}/GroupAssignmentRecord.cpp
327     ${KDIS_DATATYPES_SOURCES_DIR}/GroupDestinationRecord.cpp
328     ${KDIS_DATATYPES_SOURCES_DIR}/IFF_ATC_NAVAIDS_FundamentalParameterData.cpp
329     ${KDIS_DATATYPES_SOURCES_DIR}/IFF_Layer2.cpp
330     ${KDIS_DATATYPES_SOURCES_DIR}/IntercomCommunicationParameters.cpp
331     ${KDIS_DATATYPES_SOURCES_DIR}/KFIXED.cpp
332     ${KDIS_DATATYPES_SOURCES_DIR}/LayerHeader.cpp
333     ${KDIS_DATATYPES_SOURCES_DIR}/LE_DeadReckoningParameter.cpp
334     ${KDIS_DATATYPES_SOURCES_DIR}/LE_EntityIdentifier.cpp
335     ${KDIS_DATATYPES_SOURCES_DIR}/LE_EulerAngles.cpp
336     ${KDIS_DATATYPES_SOURCES_DIR}/LE_Vector.cpp
337     ${KDIS_DATATYPES_SOURCES_DIR}/LinearObjectAppearance.cpp
338     ${KDIS_DATATYPES_SOURCES_DIR}/LinearSegmentParameter.cpp
339     ${KDIS_DATATYPES_SOURCES_DIR}/LineRecord1.cpp
340     ${KDIS_DATATYPES_SOURCES_DIR}/LineRecord2.cpp
341     ${KDIS_DATATYPES_SOURCES_DIR}/Mine.cpp
342     ${KDIS_DATATYPES_SOURCES_DIR}/MinefieldAppearance.cpp
343     ${KDIS_DATATYPES_SOURCES_DIR}/MinefieldDataFilter.cpp
344     ${KDIS_DATATYPES_SOURCES_DIR}/MineFusing.cpp
345     ${KDIS_DATATYPES_SOURCES_DIR}/MinePaintScheme.cpp
346     ${KDIS_DATATYPES_SOURCES_DIR}/NamedLocationIdentifier.cpp
347     ${KDIS_DATATYPES_SOURCES_DIR}/ObjectAppearance.cpp
348     ${KDIS_DATATYPES_SOURCES_DIR}/ObjectType.cpp
349     ${KDIS_DATATYPES_SOURCES_DIR}/OrientationError.cpp
350     ${KDIS_DATATYPES_SOURCES_DIR}/PerimeterPointCoordinate.cpp
351     ${KDIS_DATATYPES_SOURCES_DIR}/PointObjectAppearance.cpp
352     ${KDIS_DATATYPES_SOURCES_DIR}/PointRecord1.cpp
353     ${KDIS_DATATYPES_SOURCES_DIR}/PointRecord2.cpp
354     ${KDIS_DATATYPES_SOURCES_DIR}/PositionError.cpp
355     ${KDIS_DATATYPES_SOURCES_DIR}/PropulsionSystem.cpp
356     ${KDIS_DATATYPES_SOURCES_DIR}/RecordSet.cpp
357     ${KDIS_DATATYPES_SOURCES_DIR}/RectangularVolumeRecord1.cpp
358     ${KDIS_DATATYPES_SOURCES_DIR}/RectangularVolumeRecord2.cpp
359     ${KDIS_DATATYPES_SOURCES_DIR}/RectangularVolumeRecord3.cpp
360     ${KDIS_DATATYPES_SOURCES_DIR}/RelationshipRecord.cpp
361     ${KDIS_DATATYPES_SOURCES_DIR}/RelativeWorldCoordinates.cpp
362     ${KDIS_DATATYPES_SOURCES_DIR}/SecondaryOperationalData.cpp
363     ${KDIS_DATATYPES_SOURCES_DIR}/Shaft.cpp
364     ${KDIS_DATATYPES_SOURCES_DIR}/SilentAggregateSystem.cpp
365     ${KDIS_DATATYPES_SOURCES_DIR}/SilentEntitySystem.cpp
366     ${KDIS_DATATYPES_SOURCES_DIR}/SphereRecord1.cpp
367     ${KDIS_DATATYPES_SOURCES_DIR}/SphereRecord2.cpp
368     ${KDIS_DATATYPES_SOURCES_DIR}/SystemIdentifier.cpp
369     ${KDIS_DATATYPES_SOURCES_DIR}/UnderwaterAcousticEmitterBeam.cpp
370     ${KDIS_DATATYPES_SOURCES_DIR}/UnderwaterAcousticEmitterSystem.cpp
371     ${KDIS_DATATYPES_SOURCES_DIR}/UnderwaterAcousticFundamentalParameterData.cpp
372     ${KDIS_DATATYPES_SOURCES_DIR}/VectoringNozzleSystem.cpp
373     ${KDIS_DATATYPES_SOURCES_DIR}/SeparationPart.cpp
374   )
375 endif()
377 # DataTypes DIS 7
378 if(${DIS_VERSION} GREATER_EQUAL 7)
379   list(
380     APPEND
381     KDIS_HEADERS
382     ${KDIS_DATATYPES_HEADERS_DIR}/AttributeRecordSet.hpp
383     ${KDIS_DATATYPES_HEADERS_DIR}/BeamStatus.hpp
384     ${KDIS_DATATYPES_HEADERS_DIR}/CommunicationsNodeID.hpp
385     ${KDIS_DATATYPES_HEADERS_DIR}/DEAreaAimpoint.hpp
386     ${KDIS_DATATYPES_HEADERS_DIR}/EnhancedMode1Code.hpp
387     ${KDIS_DATATYPES_HEADERS_DIR}/ExplosionDescriptor.hpp
388     ${KDIS_DATATYPES_HEADERS_DIR}/ExpendableDescriptor.hpp
389     ${KDIS_DATATYPES_HEADERS_DIR}/IFF_Layer3.hpp
390     ${KDIS_DATATYPES_HEADERS_DIR}/IFF_Layer3Interrogator.hpp
391     ${KDIS_DATATYPES_HEADERS_DIR}/IFF_Layer3Transponder.hpp
392     ${KDIS_DATATYPES_HEADERS_DIR}/IOCommunicationsNode.hpp
393     ${KDIS_DATATYPES_HEADERS_DIR}/IOEffect.hpp
394     ${KDIS_DATATYPES_HEADERS_DIR}/JammingTechnique.hpp
395     ${KDIS_DATATYPES_HEADERS_DIR}/Mode5InterrogatorBasicData.hpp
396     ${KDIS_DATATYPES_HEADERS_DIR}/Mode5InterrogatorStatus.hpp
397     ${KDIS_DATATYPES_HEADERS_DIR}/Mode5TransponderBasicData.hpp
398     ${KDIS_DATATYPES_HEADERS_DIR}/Mode5TransponderStatus.hpp
399     ${KDIS_DATATYPES_HEADERS_DIR}/Mode5TransponderSupplementalData.hpp
400     ${KDIS_DATATYPES_HEADERS_DIR}/ModeXCodeRecord.hpp
401     ${KDIS_DATATYPES_HEADERS_DIR}/StandardVariable.hpp
402   )
403   list(
404     APPEND
405     KDIS_SOURCES
406     ${KDIS_DATATYPES_SOURCES_DIR}/AttributeRecordSet.cpp
407     ${KDIS_DATATYPES_SOURCES_DIR}/BeamStatus.cpp
408     ${KDIS_DATATYPES_SOURCES_DIR}/CommunicationsNodeID.cpp
409     ${KDIS_DATATYPES_SOURCES_DIR}/DEAreaAimpoint.cpp
410     ${KDIS_DATATYPES_SOURCES_DIR}/EnhancedMode1Code.cpp
411     ${KDIS_DATATYPES_SOURCES_DIR}/ExplosionDescriptor.cpp
412     ${KDIS_DATATYPES_SOURCES_DIR}/ExpendableDescriptor.cpp
413     ${KDIS_DATATYPES_SOURCES_DIR}/IFF_Layer3.cpp
414     ${KDIS_DATATYPES_SOURCES_DIR}/IFF_Layer3Interrogator.cpp
415     ${KDIS_DATATYPES_SOURCES_DIR}/IFF_Layer3Transponder.cpp
416     ${KDIS_DATATYPES_SOURCES_DIR}/IOCommunicationsNode.cpp
417     ${KDIS_DATATYPES_SOURCES_DIR}/IOEffect.cpp
418     ${KDIS_DATATYPES_SOURCES_DIR}/JammingTechnique.cpp
419     ${KDIS_DATATYPES_SOURCES_DIR}/Mode5InterrogatorBasicData.cpp
420     ${KDIS_DATATYPES_SOURCES_DIR}/Mode5InterrogatorStatus.cpp
421     ${KDIS_DATATYPES_SOURCES_DIR}/Mode5TransponderBasicData.cpp
422     ${KDIS_DATATYPES_SOURCES_DIR}/Mode5TransponderStatus.cpp
423     ${KDIS_DATATYPES_SOURCES_DIR}/Mode5TransponderSupplementalData.cpp
424     ${KDIS_DATATYPES_SOURCES_DIR}/ModeXCodeRecord.cpp
425     ${KDIS_DATATYPES_SOURCES_DIR}/StandardVariable.cpp
426   )
427 endif()
429 # Enums
430 set(KDIS_ENUMS_HEADERS_DIR ${KDIS_HEADERS_DIR}/DataTypes/Enums)
431 set(KDIS_ENUMS_SOURCES_DIR ${KDIS_SOURCES_DIR}/DataTypes/Enums)
433 # Enums DIS 5
434 list(
435   APPEND
436   KDIS_HEADERS
437   ${KDIS_ENUMS_HEADERS_DIR}/EnumBurstDescriptor.hpp
438   ${KDIS_ENUMS_HEADERS_DIR}/EnumDescriptor.hpp
439   ${KDIS_ENUMS_HEADERS_DIR}/EnumDesignator.hpp
440   ${KDIS_ENUMS_HEADERS_DIR}/EnumDetonationResult.hpp
441   ${KDIS_ENUMS_HEADERS_DIR}/EnumEmitter.hpp
442   ${KDIS_ENUMS_HEADERS_DIR}/EnumEntityInfoInteraction.hpp
443   ${KDIS_ENUMS_HEADERS_DIR}/EnumEntityManagement.hpp
444   ${KDIS_ENUMS_HEADERS_DIR}/EnumHeader.hpp
445   ${KDIS_ENUMS_HEADERS_DIR}/EnumIFF.hpp
446   ${KDIS_ENUMS_HEADERS_DIR}/EnumMinefield.hpp
447   ${KDIS_ENUMS_HEADERS_DIR}/EnumRadio.hpp
448   ${KDIS_ENUMS_HEADERS_DIR}/EnumSimulationManagement.hpp
449   ${KDIS_ENUMS_HEADERS_DIR}/EnumSupply.hpp
450   ${KDIS_ENUMS_HEADERS_DIR}/EnumSyntheticEnvironment.hpp
451   ${KDIS_ENUMS_HEADERS_DIR}/EnumSystemIdentifier.hpp
452   ${KDIS_ENUMS_HEADERS_DIR}/KDISEnums.hpp
454 list(
455   APPEND
456   KDIS_SOURCES
457   ${KDIS_ENUMS_SOURCES_DIR}/EnumBurstDescriptor.cpp
458   ${KDIS_ENUMS_SOURCES_DIR}/EnumDescriptor.cpp
459   ${KDIS_ENUMS_SOURCES_DIR}/EnumDesignator.cpp
460   ${KDIS_ENUMS_SOURCES_DIR}/EnumDetonationResult.cpp
461   ${KDIS_ENUMS_SOURCES_DIR}/EnumEmitter.cpp
462   ${KDIS_ENUMS_SOURCES_DIR}/EnumEntityInfoInteraction.cpp
463   ${KDIS_ENUMS_SOURCES_DIR}/EnumEntityManagement.cpp
464   ${KDIS_ENUMS_SOURCES_DIR}/EnumHeader.cpp
465   ${KDIS_ENUMS_SOURCES_DIR}/EnumIFF.cpp
466   ${KDIS_ENUMS_SOURCES_DIR}/EnumMinefield.cpp
467   ${KDIS_ENUMS_SOURCES_DIR}/EnumRadio.cpp
468   ${KDIS_ENUMS_SOURCES_DIR}/EnumSimulationManagement.cpp
469   ${KDIS_ENUMS_SOURCES_DIR}/EnumSupply.cpp
470   ${KDIS_ENUMS_SOURCES_DIR}/EnumSyntheticEnvironment.cpp
471   ${KDIS_ENUMS_SOURCES_DIR}/EnumSystemIdentifier.cpp
474 # Enums DIS 7
475 if(${DIS_VERSION} GREATER_EQUAL 7)
476   list(APPEND KDIS_HEADERS ${KDIS_ENUMS_HEADERS_DIR}/EnumInformationOperations.hpp)
477   list(APPEND KDIS_SOURCES ${KDIS_ENUMS_SOURCES_DIR}/EnumInformationOperations.cpp)
478 endif()
480 # PDU base
481 set(KDIS_PDU_BASE_HEADERS_DIR ${KDIS_HEADERS_DIR}/PDU)
482 set(KDIS_PDU_BASE_SOURCES_DIR ${KDIS_SOURCES_DIR}/PDU)
484 # PDU base DIS 5
485 list(APPEND KDIS_HEADERS ${KDIS_PDU_BASE_HEADERS_DIR}/Header.hpp
486      ${KDIS_PDU_BASE_HEADERS_DIR}/Header6.hpp ${KDIS_PDU_BASE_HEADERS_DIR}/Bundle.hpp
488 list(APPEND KDIS_SOURCES ${KDIS_PDU_BASE_SOURCES_DIR}/Header6.cpp
489      ${KDIS_PDU_BASE_SOURCES_DIR}/Bundle.cpp
492 # PDU base DIS 7
493 if(${DIS_VERSION} GREATER_EQUAL 7)
494   list(APPEND KDIS_HEADERS ${KDIS_PDU_BASE_HEADERS_DIR}/Header7.hpp)
495   list(APPEND KDIS_SOURCES ${KDIS_PDU_BASE_SOURCES_DIR}/Header7.cpp)
496 endif()
498 # PDU Distributed Emission Regeneration
499 set(KDIS_PDU_DISTRIBUTED_EMISSION_REGENERATION_HEADERS_DIR
500     ${KDIS_HEADERS_DIR}/PDU/Distributed_Emission_Regeneration
502 set(KDIS_PDU_DISTRIBUTED_EMISSION_REGENERATION_SOURCES_DIR
503     ${KDIS_SOURCES_DIR}/PDU/Distributed_Emission_Regeneration
506 # PDU Distributed Emission Regeneration DIS 5
507 list(APPEND KDIS_HEADERS
508      ${KDIS_PDU_DISTRIBUTED_EMISSION_REGENERATION_HEADERS_DIR}/Designator_PDU.hpp
509      ${KDIS_PDU_DISTRIBUTED_EMISSION_REGENERATION_HEADERS_DIR}/Electromagnetic_Emission_PDU.hpp
511 list(APPEND KDIS_SOURCES
512      ${KDIS_PDU_DISTRIBUTED_EMISSION_REGENERATION_SOURCES_DIR}/Designator_PDU.cpp
513      ${KDIS_PDU_DISTRIBUTED_EMISSION_REGENERATION_SOURCES_DIR}/Electromagnetic_Emission_PDU.cpp
516 # PDU Distributed Emission Regeneration DIS 6
517 if(${DIS_VERSION} GREATER_EQUAL 6)
518   list(APPEND KDIS_HEADERS ${KDIS_PDU_DISTRIBUTED_EMISSION_REGENERATION_HEADERS_DIR}/IFF_PDU.hpp
519        ${KDIS_PDU_DISTRIBUTED_EMISSION_REGENERATION_HEADERS_DIR}/SEES_PDU.hpp
520        ${KDIS_PDU_DISTRIBUTED_EMISSION_REGENERATION_HEADERS_DIR}/Underwater_Acoustic_PDU.hpp
521   )
522   list(APPEND KDIS_SOURCES ${KDIS_PDU_DISTRIBUTED_EMISSION_REGENERATION_SOURCES_DIR}/IFF_PDU.cpp
523        ${KDIS_PDU_DISTRIBUTED_EMISSION_REGENERATION_SOURCES_DIR}/SEES_PDU.cpp
524        ${KDIS_PDU_DISTRIBUTED_EMISSION_REGENERATION_SOURCES_DIR}/Underwater_Acoustic_PDU.cpp
525   )
526 endif()
528 # PDU Entity Info Interaction
529 set(KDIS_PDU_ENTITY_INFO_INTERACTION_HEADERS_DIR ${KDIS_HEADERS_DIR}/PDU/Entity_Info_Interaction)
530 set(KDIS_PDU_ENTITY_INFO_INTERACTION_SOURCES_DIR ${KDIS_SOURCES_DIR}/PDU/Entity_Info_Interaction)
532 # PDU Entity Info Interaction DIS 5
533 list(APPEND KDIS_HEADERS ${KDIS_PDU_ENTITY_INFO_INTERACTION_HEADERS_DIR}/Collision_PDU.hpp
534      ${KDIS_PDU_ENTITY_INFO_INTERACTION_HEADERS_DIR}/Entity_State_PDU.hpp
536 list(APPEND KDIS_SOURCES ${KDIS_PDU_ENTITY_INFO_INTERACTION_SOURCES_DIR}/Collision_PDU.cpp
537      ${KDIS_PDU_ENTITY_INFO_INTERACTION_SOURCES_DIR}/Entity_State_PDU.cpp
540 # PDU Entity Info Interaction DIS 6
541 if(${DIS_VERSION} GREATER_EQUAL 6)
542   list(APPEND KDIS_HEADERS
543        ${KDIS_PDU_ENTITY_INFO_INTERACTION_HEADERS_DIR}/Collision_Elastic_PDU.hpp
544        ${KDIS_PDU_ENTITY_INFO_INTERACTION_HEADERS_DIR}/Entity_State_Update_PDU.hpp
545   )
546   list(APPEND KDIS_SOURCES
547        ${KDIS_PDU_ENTITY_INFO_INTERACTION_SOURCES_DIR}/Collision_Elastic_PDU.cpp
548        ${KDIS_PDU_ENTITY_INFO_INTERACTION_SOURCES_DIR}/Entity_State_Update_PDU.cpp
549   )
550 endif()
552 # PDU Entity Info Interaction DIS 7
553 if(${DIS_VERSION} GREATER_EQUAL 7)
554   list(APPEND KDIS_HEADERS ${KDIS_PDU_ENTITY_INFO_INTERACTION_HEADERS_DIR}/Attribute_PDU.hpp)
555   list(APPEND KDIS_SOURCES ${KDIS_PDU_ENTITY_INFO_INTERACTION_SOURCES_DIR}/Attribute_PDU.cpp)
556 endif()
558 # PDU Entity Management
559 set(KDIS_PDU_ENTITY_MANAGEMENT_HEADERS_DIR ${KDIS_HEADERS_DIR}/PDU/Entity_Management)
560 set(KDIS_PDU_ENTITY_MANAGEMENT_SOURCES_DIR ${KDIS_SOURCES_DIR}/PDU/Entity_Management)
562 # PDU Entity Management DIS 6
563 if(${DIS_VERSION} GREATER_EQUAL 6)
564   list(
565     APPEND
566     KDIS_HEADERS
567     ${KDIS_PDU_ENTITY_MANAGEMENT_HEADERS_DIR}/Aggregate_State_PDU.hpp
568     ${KDIS_PDU_ENTITY_MANAGEMENT_HEADERS_DIR}/IsGroupOf_PDU.hpp
569     ${KDIS_PDU_ENTITY_MANAGEMENT_HEADERS_DIR}/IsPartOf_PDU.hpp
570     ${KDIS_PDU_ENTITY_MANAGEMENT_HEADERS_DIR}/Transfer_Control_Request_PDU.hpp
571   )
572   list(
573     APPEND
574     KDIS_SOURCES
575     ${KDIS_PDU_ENTITY_MANAGEMENT_SOURCES_DIR}/Aggregate_State_PDU.cpp
576     ${KDIS_PDU_ENTITY_MANAGEMENT_SOURCES_DIR}/IsGroupOf_PDU.cpp
577     ${KDIS_PDU_ENTITY_MANAGEMENT_SOURCES_DIR}/IsPartOf_PDU.cpp
578     ${KDIS_PDU_ENTITY_MANAGEMENT_SOURCES_DIR}/Transfer_Control_Request_PDU.cpp
579   )
580 endif()
582 # PDU Live Entity
583 set(KDIS_PDU_LIVE_ENTITY_HEADERS_DIR ${KDIS_HEADERS_DIR}/PDU/Live_Entity)
584 set(KDIS_PDU_LIVE_ENTITY_SOURCES_DIR ${KDIS_SOURCES_DIR}/PDU/Live_Entity)
586 # PDU Live Entity DIS 6
587 if(${DIS_VERSION} GREATER_EQUAL 6)
588   list(
589     APPEND
590     KDIS_HEADERS
591     ${KDIS_PDU_LIVE_ENTITY_HEADERS_DIR}/Appearance_PDU.hpp
592     ${KDIS_PDU_LIVE_ENTITY_HEADERS_DIR}/Articulated_Parts_PDU.hpp
593     ${KDIS_PDU_LIVE_ENTITY_HEADERS_DIR}/LE_Detonation_PDU.hpp
594     ${KDIS_PDU_LIVE_ENTITY_HEADERS_DIR}/LE_Fire_PDU.hpp
595     ${KDIS_PDU_LIVE_ENTITY_HEADERS_DIR}/LE_Header.hpp
596     ${KDIS_PDU_LIVE_ENTITY_HEADERS_DIR}/TSPI_PDU.hpp
597   )
598   list(
599     APPEND
600     KDIS_SOURCES
601     ${KDIS_PDU_LIVE_ENTITY_SOURCES_DIR}/Appearance_PDU.cpp
602     ${KDIS_PDU_LIVE_ENTITY_SOURCES_DIR}/Articulated_Parts_PDU.cpp
603     ${KDIS_PDU_LIVE_ENTITY_SOURCES_DIR}/LE_Detonation_PDU.cpp
604     ${KDIS_PDU_LIVE_ENTITY_SOURCES_DIR}/LE_Fire_PDU.cpp
605     ${KDIS_PDU_LIVE_ENTITY_SOURCES_DIR}/LE_Header.cpp
606     ${KDIS_PDU_LIVE_ENTITY_SOURCES_DIR}/TSPI_PDU.cpp
607   )
608 endif()
610 # PDU Logistics
611 set(KDIS_PDU_LOGISTICS_HEADERS_DIR ${KDIS_HEADERS_DIR}/PDU/Logistics)
612 set(KDIS_PDU_LOGISTICS_SOURCES_DIR ${KDIS_SOURCES_DIR}/PDU/Logistics)
614 # PDU Logistics DIS 5
615 list(
616   APPEND
617   KDIS_HEADERS
618   ${KDIS_PDU_LOGISTICS_HEADERS_DIR}/Logistics_Header.hpp
619   ${KDIS_PDU_LOGISTICS_HEADERS_DIR}/Repair_Complete_PDU.hpp
620   ${KDIS_PDU_LOGISTICS_HEADERS_DIR}/Repair_Response_PDU.hpp
621   ${KDIS_PDU_LOGISTICS_HEADERS_DIR}/Resupply_Cancel_PDU.hpp
622   ${KDIS_PDU_LOGISTICS_HEADERS_DIR}/Resupply_Offer_PDU.hpp
623   ${KDIS_PDU_LOGISTICS_HEADERS_DIR}/Resupply_Received_PDU.hpp
624   ${KDIS_PDU_LOGISTICS_HEADERS_DIR}/Service_Request_PDU.hpp
626 list(
627   APPEND
628   KDIS_SOURCES
629   ${KDIS_PDU_LOGISTICS_SOURCES_DIR}/Logistics_Header.cpp
630   ${KDIS_PDU_LOGISTICS_SOURCES_DIR}/Repair_Complete_PDU.cpp
631   ${KDIS_PDU_LOGISTICS_SOURCES_DIR}/Repair_Response_PDU.cpp
632   ${KDIS_PDU_LOGISTICS_SOURCES_DIR}/Resupply_Cancel_PDU.cpp
633   ${KDIS_PDU_LOGISTICS_SOURCES_DIR}/Resupply_Offer_PDU.cpp
634   ${KDIS_PDU_LOGISTICS_SOURCES_DIR}/Resupply_Received_PDU.cpp
635   ${KDIS_PDU_LOGISTICS_SOURCES_DIR}/Service_Request_PDU.cpp
638 # PDU Minefield
639 set(KDIS_PDU_MINEFIELD_HEADERS_DIR ${KDIS_HEADERS_DIR}/PDU/Minefield)
640 set(KDIS_PDU_MINEFIELD_SOURCES_DIR ${KDIS_SOURCES_DIR}/PDU/Minefield)
642 # PDU Minefield DIS 6
643 if(${DIS_VERSION} GREATER_EQUAL 6)
644   list(
645     APPEND
646     KDIS_HEADERS
647     ${KDIS_PDU_MINEFIELD_HEADERS_DIR}/Minefield_Data_PDU.hpp
648     ${KDIS_PDU_MINEFIELD_HEADERS_DIR}/Minefield_Header.hpp
649     ${KDIS_PDU_MINEFIELD_HEADERS_DIR}/Minefield_Query_PDU.hpp
650     ${KDIS_PDU_MINEFIELD_HEADERS_DIR}/Minefield_Response_NACK_PDU.hpp
651     ${KDIS_PDU_MINEFIELD_HEADERS_DIR}/Minefield_State_PDU.hpp
652   )
653   list(
654     APPEND
655     KDIS_SOURCES
656     ${KDIS_PDU_MINEFIELD_SOURCES_DIR}/Minefield_Data_PDU.cpp
657     ${KDIS_PDU_MINEFIELD_SOURCES_DIR}/Minefield_Header.cpp
658     ${KDIS_PDU_MINEFIELD_SOURCES_DIR}/Minefield_Query_PDU.cpp
659     ${KDIS_PDU_MINEFIELD_SOURCES_DIR}/Minefield_Response_NACK_PDU.cpp
660     ${KDIS_PDU_MINEFIELD_SOURCES_DIR}/Minefield_State_PDU.cpp
661   )
662 endif()
664 # PDU Radio Communications
665 set(KDIS_PDU_RADIO_COMMUNICATIONS_HEADERS_DIR ${KDIS_HEADERS_DIR}/PDU/Radio_Communications)
666 set(KDIS_PDU_RADIO_COMMUNICATIONS_SOURCES_DIR ${KDIS_SOURCES_DIR}/PDU/Radio_Communications)
668 # PDU Radio Communications DIS 5
669 list(
670   APPEND
671   KDIS_HEADERS
672   ${KDIS_PDU_RADIO_COMMUNICATIONS_HEADERS_DIR}/Radio_Communications_Header.hpp
673   ${KDIS_PDU_RADIO_COMMUNICATIONS_HEADERS_DIR}/Receiver_PDU.hpp
674   ${KDIS_PDU_RADIO_COMMUNICATIONS_HEADERS_DIR}/Signal_PDU.hpp
675   ${KDIS_PDU_RADIO_COMMUNICATIONS_HEADERS_DIR}/Transmitter_PDU.hpp
677 list(
678   APPEND
679   KDIS_SOURCES
680   ${KDIS_PDU_RADIO_COMMUNICATIONS_SOURCES_DIR}/Radio_Communications_Header.cpp
681   ${KDIS_PDU_RADIO_COMMUNICATIONS_SOURCES_DIR}/Receiver_PDU.cpp
682   ${KDIS_PDU_RADIO_COMMUNICATIONS_SOURCES_DIR}/Signal_PDU.cpp
683   ${KDIS_PDU_RADIO_COMMUNICATIONS_SOURCES_DIR}/Transmitter_PDU.cpp
686 # PDU Radio Communications DIS 6
687 if(${DIS_VERSION} GREATER_EQUAL 6)
688   list(APPEND KDIS_HEADERS ${KDIS_PDU_RADIO_COMMUNICATIONS_HEADERS_DIR}/Intercom_Control_PDU.hpp
689        ${KDIS_PDU_RADIO_COMMUNICATIONS_HEADERS_DIR}/Intercom_Signal_PDU.hpp
690   )
691   list(APPEND KDIS_SOURCES ${KDIS_PDU_RADIO_COMMUNICATIONS_SOURCES_DIR}/Intercom_Control_PDU.cpp
692        ${KDIS_PDU_RADIO_COMMUNICATIONS_SOURCES_DIR}/Intercom_Signal_PDU.cpp
693   )
694 endif()
696 # PDU Simulation Management
697 set(KDIS_PDU_SIMULATION_MANAGEMENT_HEADERS_DIR ${KDIS_HEADERS_DIR}/PDU/Simulation_Management)
698 set(KDIS_PDU_SIMULATION_MANAGEMENT_SOURCES_DIR ${KDIS_SOURCES_DIR}/PDU/Simulation_Management)
700 # PDU Simulation Management DIS 5
701 list(
702   APPEND
703   KDIS_HEADERS
704   ${KDIS_PDU_SIMULATION_MANAGEMENT_HEADERS_DIR}/Acknowledge_PDU.hpp
705   ${KDIS_PDU_SIMULATION_MANAGEMENT_HEADERS_DIR}/Action_Request_PDU.hpp
706   ${KDIS_PDU_SIMULATION_MANAGEMENT_HEADERS_DIR}/Action_Response_PDU.hpp
707   ${KDIS_PDU_SIMULATION_MANAGEMENT_HEADERS_DIR}/Comment_PDU.hpp
708   ${KDIS_PDU_SIMULATION_MANAGEMENT_HEADERS_DIR}/Create_Entity_PDU.hpp
709   ${KDIS_PDU_SIMULATION_MANAGEMENT_HEADERS_DIR}/Data_PDU.hpp
710   ${KDIS_PDU_SIMULATION_MANAGEMENT_HEADERS_DIR}/Data_Query_PDU.hpp
711   ${KDIS_PDU_SIMULATION_MANAGEMENT_HEADERS_DIR}/Event_Report_PDU.hpp
712   ${KDIS_PDU_SIMULATION_MANAGEMENT_HEADERS_DIR}/Remove_Entity_PDU.hpp
713   ${KDIS_PDU_SIMULATION_MANAGEMENT_HEADERS_DIR}/Set_Data_PDU.hpp
714   ${KDIS_PDU_SIMULATION_MANAGEMENT_HEADERS_DIR}/Simulation_Management_Header.hpp
715   ${KDIS_PDU_SIMULATION_MANAGEMENT_HEADERS_DIR}/Start_Resume_PDU.hpp
716   ${KDIS_PDU_SIMULATION_MANAGEMENT_HEADERS_DIR}/Stop_Freeze_PDU.hpp
718 list(
719   APPEND
720   KDIS_SOURCES
721   ${KDIS_PDU_SIMULATION_MANAGEMENT_SOURCES_DIR}/Acknowledge_PDU.cpp
722   ${KDIS_PDU_SIMULATION_MANAGEMENT_SOURCES_DIR}/Action_Request_PDU.cpp
723   ${KDIS_PDU_SIMULATION_MANAGEMENT_SOURCES_DIR}/Action_Response_PDU.cpp
724   ${KDIS_PDU_SIMULATION_MANAGEMENT_SOURCES_DIR}/Comment_PDU.cpp
725   ${KDIS_PDU_SIMULATION_MANAGEMENT_SOURCES_DIR}/Create_Entity_PDU.cpp
726   ${KDIS_PDU_SIMULATION_MANAGEMENT_SOURCES_DIR}/Data_PDU.cpp
727   ${KDIS_PDU_SIMULATION_MANAGEMENT_SOURCES_DIR}/Data_Query_PDU.cpp
728   ${KDIS_PDU_SIMULATION_MANAGEMENT_SOURCES_DIR}/Event_Report_PDU.cpp
729   ${KDIS_PDU_SIMULATION_MANAGEMENT_SOURCES_DIR}/Remove_Entity_PDU.cpp
730   ${KDIS_PDU_SIMULATION_MANAGEMENT_SOURCES_DIR}/Set_Data_PDU.cpp
731   ${KDIS_PDU_SIMULATION_MANAGEMENT_SOURCES_DIR}/Simulation_Management_Header.cpp
732   ${KDIS_PDU_SIMULATION_MANAGEMENT_SOURCES_DIR}/Start_Resume_PDU.cpp
733   ${KDIS_PDU_SIMULATION_MANAGEMENT_SOURCES_DIR}/Stop_Freeze_PDU.cpp
736 # PDU Simulation Management With Reliability
737 set(KDIS_PDU_SIMULATION_MANAGEMENT_WITH_RELIABILITY_HEADERS_DIR
738     ${KDIS_HEADERS_DIR}/PDU/Simulation_Management_With_Reliability
740 set(KDIS_PDU_SIMULATION_MANAGEMENT_WITH_RELIABILITY_SOURCES_DIR
741     ${KDIS_SOURCES_DIR}/PDU/Simulation_Management_With_Reliability
744 # PDU Simulation Management With Reliability DIS 6
745 if(${DIS_VERSION} GREATER_EQUAL 6)
746   list(
747     APPEND
748     KDIS_HEADERS
749     ${KDIS_PDU_SIMULATION_MANAGEMENT_WITH_RELIABILITY_HEADERS_DIR}/Acknowledge_R_PDU.hpp
750     ${KDIS_PDU_SIMULATION_MANAGEMENT_WITH_RELIABILITY_HEADERS_DIR}/Action_Request_R_PDU.hpp
751     ${KDIS_PDU_SIMULATION_MANAGEMENT_WITH_RELIABILITY_HEADERS_DIR}/Action_Response_R_PDU.hpp
752     ${KDIS_PDU_SIMULATION_MANAGEMENT_WITH_RELIABILITY_HEADERS_DIR}/Comment_R_PDU.hpp
753     ${KDIS_PDU_SIMULATION_MANAGEMENT_WITH_RELIABILITY_HEADERS_DIR}/Create_Entity_R_PDU.hpp
754     ${KDIS_PDU_SIMULATION_MANAGEMENT_WITH_RELIABILITY_HEADERS_DIR}/Data_Query_R_PDU.hpp
755     ${KDIS_PDU_SIMULATION_MANAGEMENT_WITH_RELIABILITY_HEADERS_DIR}/Data_R_PDU.hpp
756     ${KDIS_PDU_SIMULATION_MANAGEMENT_WITH_RELIABILITY_HEADERS_DIR}/Event_Report_R_PDU.hpp
757     ${KDIS_PDU_SIMULATION_MANAGEMENT_WITH_RELIABILITY_HEADERS_DIR}/Record_Query_R_PDU.hpp
758     ${KDIS_PDU_SIMULATION_MANAGEMENT_WITH_RELIABILITY_HEADERS_DIR}/Record_R_PDU.hpp
759     ${KDIS_PDU_SIMULATION_MANAGEMENT_WITH_RELIABILITY_HEADERS_DIR}/Reliability_Header.hpp
760     ${KDIS_PDU_SIMULATION_MANAGEMENT_WITH_RELIABILITY_HEADERS_DIR}/Remove_Entity_R_PDU.hpp
761     ${KDIS_PDU_SIMULATION_MANAGEMENT_WITH_RELIABILITY_HEADERS_DIR}/Set_Data_R_PDU.hpp
762     ${KDIS_PDU_SIMULATION_MANAGEMENT_WITH_RELIABILITY_HEADERS_DIR}/Set_Record_R_PDU.hpp
763     ${KDIS_PDU_SIMULATION_MANAGEMENT_WITH_RELIABILITY_HEADERS_DIR}/Start_Resume_R_PDU.hpp
764     ${KDIS_PDU_SIMULATION_MANAGEMENT_WITH_RELIABILITY_HEADERS_DIR}/Stop_Freeze_R_PDU.hpp
765   )
766   list(
767     APPEND
768     KDIS_SOURCES
769     ${KDIS_PDU_SIMULATION_MANAGEMENT_WITH_RELIABILITY_SOURCES_DIR}/Acknowledge_R_PDU.cpp
770     ${KDIS_PDU_SIMULATION_MANAGEMENT_WITH_RELIABILITY_SOURCES_DIR}/Action_Request_R_PDU.cpp
771     ${KDIS_PDU_SIMULATION_MANAGEMENT_WITH_RELIABILITY_SOURCES_DIR}/Action_Response_R_PDU.cpp
772     ${KDIS_PDU_SIMULATION_MANAGEMENT_WITH_RELIABILITY_SOURCES_DIR}/Comment_R_PDU.cpp
773     ${KDIS_PDU_SIMULATION_MANAGEMENT_WITH_RELIABILITY_SOURCES_DIR}/Create_Entity_R_PDU.cpp
774     ${KDIS_PDU_SIMULATION_MANAGEMENT_WITH_RELIABILITY_SOURCES_DIR}/Data_Query_R_PDU.cpp
775     ${KDIS_PDU_SIMULATION_MANAGEMENT_WITH_RELIABILITY_SOURCES_DIR}/Data_R_PDU.cpp
776     ${KDIS_PDU_SIMULATION_MANAGEMENT_WITH_RELIABILITY_SOURCES_DIR}/Event_Report_R_PDU.cpp
777     ${KDIS_PDU_SIMULATION_MANAGEMENT_WITH_RELIABILITY_SOURCES_DIR}/Record_Query_R_PDU.cpp
778     ${KDIS_PDU_SIMULATION_MANAGEMENT_WITH_RELIABILITY_SOURCES_DIR}/Record_R_PDU.cpp
779     ${KDIS_PDU_SIMULATION_MANAGEMENT_WITH_RELIABILITY_SOURCES_DIR}/Reliability_Header.cpp
780     ${KDIS_PDU_SIMULATION_MANAGEMENT_WITH_RELIABILITY_SOURCES_DIR}/Remove_Entity_R_PDU.cpp
781     ${KDIS_PDU_SIMULATION_MANAGEMENT_WITH_RELIABILITY_SOURCES_DIR}/Set_Data_R_PDU.cpp
782     ${KDIS_PDU_SIMULATION_MANAGEMENT_WITH_RELIABILITY_SOURCES_DIR}/Set_Record_R_PDU.cpp
783     ${KDIS_PDU_SIMULATION_MANAGEMENT_WITH_RELIABILITY_SOURCES_DIR}/Start_Resume_R_PDU.cpp
784     ${KDIS_PDU_SIMULATION_MANAGEMENT_WITH_RELIABILITY_SOURCES_DIR}/Stop_Freeze_R_PDU.cpp
785   )
786 endif()
788 # PDU Synthetic Environment
789 set(KDIS_PDU_SYNTHETIC_ENVIRONMENT_HEADERS_DIR ${KDIS_HEADERS_DIR}/PDU/Synthetic_Environment)
790 set(KDIS_PDU_SYNTHETIC_ENVIRONMENT_SOURCES_DIR ${KDIS_SOURCES_DIR}/PDU/Synthetic_Environment)
792 # PDU Synthetic Environment DIS 6
793 if(${DIS_VERSION} GREATER_EQUAL 6)
794   list(
795     APPEND
796     KDIS_HEADERS
797     ${KDIS_PDU_SYNTHETIC_ENVIRONMENT_HEADERS_DIR}/Areal_Object_State_PDU.hpp
798     ${KDIS_PDU_SYNTHETIC_ENVIRONMENT_HEADERS_DIR}/Environmental_Process_PDU.hpp
799     ${KDIS_PDU_SYNTHETIC_ENVIRONMENT_HEADERS_DIR}/Gridded_Data_PDU.hpp
800     ${KDIS_PDU_SYNTHETIC_ENVIRONMENT_HEADERS_DIR}/Linear_Object_State_PDU.hpp
801     ${KDIS_PDU_SYNTHETIC_ENVIRONMENT_HEADERS_DIR}/Object_State_Header.hpp
802     ${KDIS_PDU_SYNTHETIC_ENVIRONMENT_HEADERS_DIR}/Point_Object_State_PDU.hpp
803   )
804   list(
805     APPEND
806     KDIS_SOURCES
807     ${KDIS_PDU_SYNTHETIC_ENVIRONMENT_SOURCES_DIR}/Areal_Object_State_PDU.cpp
808     ${KDIS_PDU_SYNTHETIC_ENVIRONMENT_SOURCES_DIR}/Environmental_Process_PDU.cpp
809     ${KDIS_PDU_SYNTHETIC_ENVIRONMENT_SOURCES_DIR}/Gridded_Data_PDU.cpp
810     ${KDIS_PDU_SYNTHETIC_ENVIRONMENT_SOURCES_DIR}/Linear_Object_State_PDU.cpp
811     ${KDIS_PDU_SYNTHETIC_ENVIRONMENT_SOURCES_DIR}/Object_State_Header.cpp
812     ${KDIS_PDU_SYNTHETIC_ENVIRONMENT_SOURCES_DIR}/Point_Object_State_PDU.cpp
813   )
814 endif()
816 # PDU Warfare
817 set(KDIS_PDU_WARFARE_HEADERS_DIR ${KDIS_HEADERS_DIR}/PDU/Warfare)
818 set(KDIS_PDU_WARFARE_SOURCES_DIR ${KDIS_SOURCES_DIR}/PDU/Warfare)
820 # PDU Warfare DIS 5
821 list(APPEND KDIS_HEADERS ${KDIS_PDU_WARFARE_HEADERS_DIR}/Detonation_PDU.hpp
822      ${KDIS_PDU_WARFARE_HEADERS_DIR}/Fire_PDU.hpp
823      ${KDIS_PDU_WARFARE_HEADERS_DIR}/Warfare_Header.hpp
825 list(APPEND KDIS_SOURCES ${KDIS_PDU_WARFARE_SOURCES_DIR}/Detonation_PDU.cpp
826      ${KDIS_PDU_WARFARE_SOURCES_DIR}/Fire_PDU.cpp
827      ${KDIS_PDU_WARFARE_SOURCES_DIR}/Warfare_Header.cpp
830 # PDU Warfare DIS 7
831 if(${DIS_VERSION} GREATER_EQUAL 7)
832   list(APPEND KDIS_HEADERS ${KDIS_PDU_WARFARE_HEADERS_DIR}/Directed_Energy_Fire_PDU.hpp
833        ${KDIS_PDU_WARFARE_HEADERS_DIR}/Entity_Damage_Status_PDU.hpp
834   )
835   list(APPEND KDIS_SOURCES ${KDIS_PDU_WARFARE_SOURCES_DIR}/Directed_Energy_Fire_PDU.cpp
836        ${KDIS_PDU_WARFARE_SOURCES_DIR}/Entity_Damage_Status_PDU.cpp
837   )
838 endif()
840 # PDU Information Operations
841 set(KDIS_PDU_INFORMATION_OPERATIONS_HEADERS_DIR ${KDIS_HEADERS_DIR}/PDU/Information_Operations)
842 set(KDIS_PDU_INFORMATION_OPERATIONS_SOURCES_DIR ${KDIS_SOURCES_DIR}/PDU/Information_Operations)
844 # PDU Information Operations DIS 7
845 if(${DIS_VERSION} GREATER_EQUAL 7)
846   list(APPEND KDIS_HEADERS ${KDIS_PDU_INFORMATION_OPERATIONS_HEADERS_DIR}/IO_Header.hpp
847        ${KDIS_PDU_INFORMATION_OPERATIONS_HEADERS_DIR}/IO_Action_PDU.hpp
848        ${KDIS_PDU_INFORMATION_OPERATIONS_HEADERS_DIR}/IO_Report_PDU.hpp
849   )
850   list(APPEND KDIS_SOURCES ${KDIS_PDU_INFORMATION_OPERATIONS_SOURCES_DIR}/IO_Header.cpp
851        ${KDIS_PDU_INFORMATION_OPERATIONS_SOURCES_DIR}/IO_Action_PDU.cpp
852        ${KDIS_PDU_INFORMATION_OPERATIONS_SOURCES_DIR}/IO_Report_PDU.cpp
853   )
854 endif()
856 # Extras
857 set(KDIS_EXTRAS_HEADERS_DIR ${KDIS_HEADERS_DIR}/Extras)
858 set(KDIS_EXTRAS_SOURCES_DIR ${KDIS_SOURCES_DIR}/Extras)
860 list(
861   APPEND
862   KDIS_HEADERS
863   ${KDIS_EXTRAS_HEADERS_DIR}/DeadReckoningCalculator.hpp
864   ${KDIS_EXTRAS_HEADERS_DIR}/DIS_Logger_Playback.hpp
865   ${KDIS_EXTRAS_HEADERS_DIR}/DIS_Logger_Record.hpp
866   ${KDIS_EXTRAS_HEADERS_DIR}/KConversions.hpp
867   ${KDIS_EXTRAS_HEADERS_DIR}/KRef_Ptr.hpp
868   ${KDIS_EXTRAS_HEADERS_DIR}/KUtils.hpp
869   ${KDIS_EXTRAS_HEADERS_DIR}/Math.hpp
870   ${KDIS_EXTRAS_HEADERS_DIR}/PDU_Factory.hpp
871   ${KDIS_EXTRAS_HEADERS_DIR}/PDU_Factory_Filters.hpp
873 list(APPEND KDIS_SOURCES ${KDIS_EXTRAS_SOURCES_DIR}/DeadReckoningCalculator.cpp
874      ${KDIS_EXTRAS_SOURCES_DIR}/DIS_Logger_Playback.cpp
875      ${KDIS_EXTRAS_SOURCES_DIR}/DIS_Logger_Record.cpp ${KDIS_EXTRAS_SOURCES_DIR}/PDU_Factory.cpp
878 # Network
879 set(KDIS_NETWORK_HEADERS_DIR ${KDIS_HEADERS_DIR}/Network)
880 set(KDIS_NETWORK_SOURCES_DIR ${KDIS_SOURCES_DIR}/Network)
882 list(APPEND KDIS_HEADERS ${KDIS_NETWORK_HEADERS_DIR}/Connection.hpp
883      ${KDIS_NETWORK_HEADERS_DIR}/ConnectionAddressFilter.hpp
884      ${KDIS_NETWORK_HEADERS_DIR}/ConnectionSubscriber.hpp
886 list(APPEND KDIS_SOURCES ${KDIS_NETWORK_SOURCES_DIR}/Connection.cpp
887      ${KDIS_NETWORK_SOURCES_DIR}/ConnectionAddressFilter.cpp
891 # Library
893 add_library(${PROJECT_NAME} ${KDIS_SOURCES})
894 add_library(${PROJECT_NAME}::${PROJECT_NAME} ALIAS ${PROJECT_NAME})
895 # Export header
896 generate_export_header(
897   ${PROJECT_NAME} EXPORT_FILE_NAME ${CMAKE_CURRENT_SOURCE_DIR}/include/${PROJECT_NAME}/KExport.hpp
898   INCLUDE_GUARD_NAME ${PROJECT_NAME}_KEXPORT_HPP_
900 list(APPEND KDIS_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/include/${PROJECT_NAME}/KExport.hpp)
901 # Include directories
902 target_include_directories(
903   ${PROJECT_NAME}
904   PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
905          $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>
906          $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
908 # Compile definitions
909 target_compile_definitions(
910   ${PROJECT_NAME} PRIVATE DIS_VERSION=${DIS_VERSION}
911                           $<$<BOOL:${KDIS_USE_ENUM_DESCRIPTORS}>:KDIS_USE_ENUM_DESCRIPTORS>
913 # Properties
914 set_target_properties(${PROJECT_NAME} PROPERTIES VERSION ${PROJECT_VERSION} DEBUG_POSTFIX "d")
915 # TODO Compile options target_compile_options( ${PROJECT_NAME} PRIVATE $<$<CXX_COMPILER_ID:MSVC>:/W4
916 # /WX> $<$<NOT:$<CXX_COMPILER_ID:MSVC>>:-Wall -Wextra -Wpedantic -Werror> )
919 # Configuration
921 configure_package_config_file(
922   ${CMAKE_CURRENT_SOURCE_DIR}/cmake/${PROJECT_NAME}Config.cmake.in
923   ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake
924   INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}
926 write_basic_package_version_file(
927   ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
928   VERSION ${PROJECT_VERSION}
929   COMPATIBILITY SameMajorVersion
933 # Install
935 install(FILES ${KDIS_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME})
936 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake
937               ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
938         DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}
940 install(
941   TARGETS ${PROJECT_NAME}
942   EXPORT ${PROJECT_NAME}Targets
943   RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
944   LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
945   ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
947 install(
948   EXPORT ${PROJECT_NAME}Targets
949   NAMESPACE ${PROJECT_NAME}::
950   DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}
954 # CPack
956 set(CPACK_GENERATOR DEB RPM TXZ TGZ)
957 set(CPACK_PACKAGE_VERSION ${PROJECT_VERSION})
958 set(CPACK_PACKAGE_NAME ${PROJECT_NAME})
959 set(CPACK_PACKAGE_DESCRIPTION_SUMMARY ${PROJECT_DESCRIPTION})
960 set(CPACK_PACKAGE_FILE_NAME
961     "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}.${CMAKE_SYSTEM_PROCESSOR}"
963 set(CPACK_PACKAGE_RPM_DIR "${CMAKE_CURRENT_BINARY_DIR}/_CPack_Packages/Linux/RPM")
964 set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Karl Jones <Karljj1@yahoo.com>")
965 include(CPack)
968 # Documentation
970 if(${KDIS_BUILD_DOCS})
971   add_subdirectory(docs)
972 endif()
975 # Examples
977 if(${KDIS_BUILD_EXAMPLES})
978   add_subdirectory(examples)
979 endif()
982 # Tests
984 if(${KDIS_BUILD_TESTS})
985   add_subdirectory(tests)
986 endif()