Skip to content

Commit d6fee6b

Browse files
authored
Fix builds using the system expat library (#1458)
1 parent c510211 commit d6fee6b

5 files changed

Lines changed: 46 additions & 47 deletions

File tree

.github/workflows/cpp-python-build.yml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -309,6 +309,7 @@ jobs:
309309
fail-fast: false
310310
matrix:
311311
shared_libs: [ON, OFF]
312+
expat: [ON, OFF]
312313
steps:
313314
- name: Checkout JSBSim
314315
uses: actions/checkout@v6
@@ -327,6 +328,9 @@ jobs:
327328
python-version: '3.10'
328329
- name: Install Python packages
329330
run: pip install -r python/requirements.txt
331+
- name: Install Expat
332+
if: matrix.expat == 'ON'
333+
run: vcpkg install expat
330334
- name: Checkout CxxTest
331335
uses: actions/checkout@v6
332336
with:
@@ -353,7 +357,7 @@ jobs:
353357
run: |
354358
New-Item -Path .\build -ItemType Directory -Force
355359
cd build
356-
cmake -DCMAKE_INCLUDE_PATH="$(get-location)\..\cxxtest" -DCMAKE_PREFIX_PATH="$(get-location)\..\backward-cpp" -DBUILD_SHARED_LIBS=${{matrix.shared_libs}} -DFPECTL_DISPLAY_STACK_TRACE=ON -DSTACK_DETAILS_AUTO_DETECT=FALSE ..
360+
cmake -DCMAKE_INCLUDE_PATH="$(get-location)\..\cxxtest" -DCMAKE_PREFIX_PATH="$(get-location)\..\backward-cpp" -DBUILD_SHARED_LIBS=${{matrix.shared_libs}} -DSYSTEM_EXPAT=${{matrix.expat}} -DFPECTL_DISPLAY_STACK_TRACE=ON -DSTACK_DETAILS_AUTO_DETECT=FALSE -DCMAKE_TOOLCHAIN_FILE=C:\vcpkg\scripts\buildsystems\vcpkg.cmake ..
357361
- name: Build JSBSim
358362
working-directory: build
359363
run: cmake --build . --config RelWithDebInfo --parallel $Env:NUMBER_OF_PROCESSORS

CMakeLists.txt

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,6 @@ set(LIBRARY_VERSION ${PROJECT_VERSION})
1616
set(LIBRARY_SOVERSION ${PROJECT_VERSION_MAJOR})
1717

1818
option(SYSTEM_EXPAT "Set to ON to build JSBSim using the system libExpat" OFF)
19-
if (SYSTEM_EXPAT)
20-
find_package(EXPAT)
21-
endif()
2219

2320
function(get_tail INPUT_STRING OUTPUT_STRING SEPARATOR)
2421
string(REPLACE ${SEPARATOR} " " TEMP_LIST ${INPUT_STRING})
@@ -134,7 +131,7 @@ endif(CXXTEST_FOUND)
134131
# Packaging #
135132
################################################################################
136133

137-
if (PKG_CONFIG_FOUND)
134+
if (PkgConfig_FOUND)
138135
if (NOT BUILD_SHARED_LIBS)
139136
get_target_property(libJSBSim_LINK_LIBRARIES libJSBSim LINK_LIBRARIES)
140137
foreach(_LIB ${libJSBSim_LINK_LIBRARIES})

src/CMakeLists.txt

Lines changed: 20 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -33,39 +33,31 @@ set(HEADERS FGFDMExec.h
3333
set(SOURCES FGFDMExec.cpp
3434
FGJSBBase.cpp)
3535

36-
add_library(libJSBSim ${SOURCES}
37-
$<TARGET_OBJECTS:Init>
38-
$<TARGET_OBJECTS:Atmosphere>
39-
$<TARGET_OBJECTS:FlightControl>
40-
$<TARGET_OBJECTS:Propulsion>
41-
$<TARGET_OBJECTS:Models>
42-
$<TARGET_OBJECTS:Math>
43-
$<TARGET_OBJECTS:InputOutput>
44-
$<TARGET_OBJECTS:Properties>
45-
$<TARGET_OBJECTS:Xml>
46-
$<TARGET_OBJECTS:Magvar>
47-
$<TARGET_OBJECTS:Misc>
48-
$<TARGET_OBJECTS:IOStreams>
49-
$<TARGET_OBJECTS:GeographicLib>
50-
)
36+
set(OBJECT_LIBS Atmosphere
37+
FlightControl
38+
GeographicLib
39+
Init
40+
InputOutput
41+
IOStreams
42+
Magvar
43+
Math
44+
Misc
45+
Models
46+
Properties
47+
Propulsion
48+
Xml)
49+
50+
add_library(libJSBSim ${SOURCES})
51+
target_link_libraries(libJSBSim PRIVATE ${OBJECT_LIBS})
5152

5253
target_compile_definitions(libJSBSim PUBLIC
5354
JSBSIM_VERSION="${PROJECT_VERSION}${VERSION_MESSAGE}")
5455
target_include_directories(libJSBSim PUBLIC
5556
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)
5657

57-
if(EXPAT_FOUND)
58-
target_include_directories(libJSBSim PRIVATE ${EXPAT_INCLUDE_DIRS})
59-
if (PKG_CONFIG_FOUND)
60-
target_link_libraries(libJSBSim ${PC_EXPAT_LIBRARIES})
61-
else()
62-
target_link_libraries(libJSBSim ${EXPAT_LIBRARIES})
63-
endif()
64-
endif(EXPAT_FOUND)
65-
6658
if(WIN32)
6759
target_compile_definitions(libJSBSim PUBLIC _USE_MATH_DEFINES)
68-
target_link_libraries(libJSBSim wsock32 ws2_32)
60+
target_link_libraries(libJSBSim PUBLIC wsock32 ws2_32)
6961

7062
if(BUILD_SHARED_LIBS)
7163
set(JSBSIM_LIBRARY_TYPE JSBSIM_EXPORT)
@@ -78,14 +70,11 @@ if(WIN32)
7870
target_compile_definitions(libJSBSim PUBLIC JSBSIM_STATIC_LINK)
7971
endif(BUILD_SHARED_LIBS)
8072

81-
get_target_property(libJSBSim_SOURCE_FILES libJSBSim SOURCES)
82-
foreach(OBJECT ${libJSBSim_SOURCE_FILES})
83-
if (${OBJECT} MATCHES "TARGET_OBJECTS:([^ >]+)")
84-
target_compile_definitions(${CMAKE_MATCH_1} PRIVATE ${JSBSIM_LIBRARY_TYPE})
85-
endif()
73+
foreach(OBJECT ${OBJECT_LIBS})
74+
target_compile_definitions(${OBJECT} PRIVATE ${JSBSIM_LIBRARY_TYPE})
8675
endforeach(OBJECT)
8776
elseif(UNIX)
88-
target_link_libraries(libJSBSim m)
77+
target_link_libraries(libJSBSim PUBLIC m)
8978
endif(WIN32)
9079

9180
set_target_properties(libJSBSim PROPERTIES

src/simgear/xml/CMakeLists.txt

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
set(SOURCES easyxml.cxx)
22
set(HEADERS easyxml.hxx)
33

4-
if(NOT EXPAT_FOUND)
4+
if(NOT SYSTEM_EXPAT)
55
list(APPEND SOURCES xmlparse.c
66
xmltok.c
77
xmlrole.c)
@@ -25,12 +25,20 @@ if(NOT EXPAT_FOUND)
2525
siphash.h)
2626
set_property(SOURCE xmltok_impl.c PROPERTY HEADER_FILE_ONLY)
2727
set_property(SOURCE xmltok_ns.c PROPERTY HEADER_FILE_ONLY)
28-
endif(NOT EXPAT_FOUND)
28+
endif(NOT SYSTEM_EXPAT)
2929

3030
add_library(Xml OBJECT ${SOURCES})
31-
target_include_directories(Xml PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
3231

33-
if(WIN32 AND NOT EXPAT_FOUND)
32+
if(SYSTEM_EXPAT)
33+
target_compile_definitions(Xml PRIVATE SYSTEM_EXPAT)
34+
if (PkgConfig_FOUND)
35+
pkg_check_modules(PC_EXPAT IMPORTED_TARGET expat)
36+
target_link_libraries(Xml PkgConfig::PC_EXPAT)
37+
else()
38+
find_package(EXPAT)
39+
target_link_libraries(Xml EXPAT::EXPAT)
40+
endif()
41+
elseif(WIN32)
3442
target_compile_definitions(Xml PRIVATE XML_STATIC)
3543
endif()
3644

src/simgear/xml/easyxml.cxx

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,19 @@
1414
INCLUDES
1515
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
1616

17-
#include "../compiler.h"
18-
1917
#include <string.h>
20-
21-
#include "easyxml.hxx"
22-
#include "expat.h"
23-
2418
#include <fstream>
2519
#include <iostream>
2620
#include <sstream>
2721

28-
#include "FGJSBBase.h"
22+
#ifdef SYSTEM_EXPAT
23+
#include <expat.h>
24+
#else
25+
#include "expat.h"
26+
#endif
27+
28+
#include "../compiler.h"
29+
#include "easyxml.hxx"
2930
#include "input_output/FGLog.h"
3031

3132
using std::istream;

0 commit comments

Comments
 (0)