Skip to content

Commit be8e0e3

Browse files
committed
Fix naming conflicts between libraries and targets by adding 'Lib*'
In some contexts, e.g. INTERFACE_LINK_LIBRARIES, a library name like 'tinygettext' can both refer to the 'tinygettext' target as well as the library itself, i.e. '-ltinygettext'. This can cause subtle issues. Also switch to using 'INTERFACE IMPORTED' conistently for libraries, this should automatically mark headers as SYSTEM without doing it manually.
1 parent 76702b8 commit be8e0e3

17 files changed

+109
-95
lines changed

CMakeLists.txt

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ target_compile_definitions(supertux2_lib PUBLIC -DGLM_ENABLE_EXPERIMENTAL)
205205

206206
if(WIN32)
207207
add_executable(supertux2 WIN32 src/main.cpp ${CMAKE_CURRENT_SOURCE_DIR}/data/images/engine/icons/supertux.rc)
208-
target_link_libraries(supertux2 SDL2main)
208+
target_link_libraries(supertux2 LibSDL2main)
209209
else()
210210
add_executable(supertux2 src/main.cpp)
211211
endif()
@@ -238,32 +238,32 @@ endif()
238238

239239
## Link supertux binary with squirrel and other libraries
240240
if(NOT EMSCRIPTEN)
241-
target_link_libraries(supertux2_lib PUBLIC SDL2 SDL2_image)
241+
target_link_libraries(supertux2_lib PUBLIC LibSDL2 LibSDL2_image)
242242
endif()
243243

244-
target_link_libraries(supertux2_lib PUBLIC SDL2_ttf)
245-
target_link_libraries(supertux2_lib PUBLIC squirrel::squirrel)
246-
target_link_libraries(supertux2_lib PUBLIC squirrel::sqstdlib)
247-
target_link_libraries(supertux2_lib PUBLIC tinygettext)
248-
target_link_libraries(supertux2_lib PUBLIC sexp)
249-
target_link_libraries(supertux2_lib PUBLIC savepng)
250-
target_link_libraries(supertux2_lib PUBLIC partio_zip_lib)
251-
target_link_libraries(supertux2_lib PUBLIC OpenAL)
252-
target_link_libraries(supertux2_lib PUBLIC OggVorbis)
253-
target_link_libraries(supertux2_lib PUBLIC Boost)
254-
target_link_libraries(supertux2_lib PUBLIC fmt::fmt)
255-
target_link_libraries(supertux2_lib PUBLIC physfs)
244+
target_link_libraries(supertux2_lib PUBLIC LibSDL2_ttf)
245+
target_link_libraries(supertux2_lib PUBLIC LibSquirrel)
246+
target_link_libraries(supertux2_lib PUBLIC LibSqstdlib)
247+
target_link_libraries(supertux2_lib PUBLIC LibTinygettext)
248+
target_link_libraries(supertux2_lib PUBLIC LibSexp)
249+
target_link_libraries(supertux2_lib PUBLIC LibSavePNG)
250+
target_link_libraries(supertux2_lib PUBLIC LibPartioZip)
251+
target_link_libraries(supertux2_lib PUBLIC LibOpenAL)
252+
target_link_libraries(supertux2_lib PUBLIC LibOggVorbis)
253+
target_link_libraries(supertux2_lib PUBLIC LibBoost)
254+
target_link_libraries(supertux2_lib PUBLIC LibFmt)
255+
target_link_libraries(supertux2_lib PUBLIC LibPhysfs)
256256

257257
if(HAVE_OPENGL)
258-
target_link_libraries(supertux2_lib PUBLIC OpenGL)
258+
target_link_libraries(supertux2_lib PUBLIC LibOpenGL)
259259
endif()
260260

261261
if(ENABLE_DISCORD)
262-
target_link_libraries(supertux2_lib PUBLIC discord-rpc)
262+
target_link_libraries(supertux2_lib PUBLIC LibDiscord)
263263
endif()
264264

265265
if(NOT EMSCRIPTEN)
266-
target_link_libraries(supertux2_lib PUBLIC CURL::libcurl)
266+
target_link_libraries(supertux2_lib PUBLIC LibCurl)
267267
endif()
268268

269269
## Install stuff

mk/cmake/SuperTux/ProvideBoost.cmake

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,21 +14,22 @@ endif()
1414

1515
find_package(Boost REQUIRED COMPONENTS filesystem system date_time locale)
1616

17-
add_library(Boost INTERFACE)
17+
add_library(LibBoost INTERFACE IMPORTED)
1818

1919
if(WIN32)
20-
# Boost_LIBRARIES may contain link-type keywords optimized,debug
21-
# that aren't understood by INTERFACE_LINK_DIRECTORIES
22-
target_link_libraries(Boost INTERFACE ${Boost_LIBRARIES})
20+
# Boost_LIBRARIES may contain link-type keywords "optimized,debug"
21+
# that aren't understood by INTERFACE_LINK_DIRECTORIES directly,
22+
# meanwhile older cmake on other OSs don't support
23+
# target_link_libraries(INTERFACE).
24+
target_link_libraries(LibBoost INTERFACE ${Boost_LIBRARIES})
2325
else()
24-
set_target_properties(Boost PROPERTIES
26+
set_target_properties(LibBoost PROPERTIES
2527
INTERFACE_LINK_LIBRARIES "${Boost_LIBRARIES}")
2628
endif()
2729

28-
set_target_properties(Boost PROPERTIES
30+
set_target_properties(LibBoost PROPERTIES
2931
INTERFACE_LINK_DIRECTORIES "${Boost_LIBRARY_DIRS}"
3032
INTERFACE_INCLUDE_DIRECTORIES "${Boost_INCLUDE_DIR}"
31-
INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${Boost_INCLUDE_DIR}"
3233
)
3334

3435
mark_as_advanced(

mk/cmake/SuperTux/ProvideCurl.cmake

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,12 @@ if(NOT EMSCRIPTEN)
1919
endif()
2020
endif()
2121

22-
if(NOT TARGET CURL::libcurl)
23-
add_library(CURL::libcurl UNKNOWN IMPORTED)
24-
set_target_properties(CURL::libcurl PROPERTIES
25-
IMPORTED_LOCATION "${CURL_LIBRARY}"
22+
if(TARGET CURL::libcurl)
23+
add_library(LibCurl ALIAS CURL::libcurl)
24+
else()
25+
add_library(LibCurl INTERFACE IMPORTED)
26+
set_target_properties(LibCurl PROPERTIES
27+
INTERFACE_LINK_LIBRARIES "${CURL_LIBRARY}"
2628
INTERFACE_INCLUDE_DIRECTORIES "${CURL_INCLUDE_DIRS}")
2729
endif()
2830

mk/cmake/SuperTux/ProvideDiscord.cmake

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,11 @@ else()
1212

1313
add_subdirectory(external/discord-sdk EXCLUDE_FROM_ALL)
1414

15-
# Add missing include directories to discord-rpc
16-
set_target_properties(discord-rpc PROPERTIES
17-
INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/external/discord-sdk/include"
18-
INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/external/discord-sdk/include")
15+
add_library(LibDiscord INTERFACE IMPORTED)
16+
set_target_properties(LibDiscord PROPERTIES
17+
INTERFACE_LINK_LIBRARIES "discord-rpc"
18+
# discord-rpc doesn't provide includes itself
19+
INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/external/discord-sdk/include")
1920
endif()
2021

2122
# EOF #

mk/cmake/SuperTux/ProvideFmt.cmake

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,19 @@ endif()
55

66
if(TARGET fmt::fmt)
77
message(STATUS "Found fmt")
8+
9+
add_library(LibFmt ALIAS fmt::fmt)
10+
811
else()
9-
if(USE_SYSTEM_FMT)
10-
message(STATUS "Could NOT find fmt, using external/fmt fallback")
11-
endif()
12+
message(STATUS "Could NOT find fmt, using external/fmt fallback")
1213

1314
add_subdirectory(external/fmt EXCLUDE_FROM_ALL)
1415

15-
# Mark fmt includes as SYSTEM to avoid warnings
16-
set_target_properties(fmt PROPERTIES
17-
INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "$<TARGET_PROPERTY:fmt,INTERFACE_INCLUDE_DIRECTORIES>")
16+
add_library(LibFmt INTERFACE IMPORTED)
17+
set_target_properties(LibFmt PROPERTIES
18+
INTERFACE_LINK_LIBRARIES "fmt::fmt"
19+
INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "$<TARGET_PROPERTY:fmt::fmt,INTERFACE_INCLUDE_DIRECTORIES>")
20+
1821
endif()
1922

2023
# EOF #

mk/cmake/SuperTux/ProvideGlm.cmake

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
find_package(glm QUIET)
2+
23
if(glm_FOUND)
34
if(TARGET glm::glm)
45
message(STATUS "Found glm")
6+
add_library(LibGlm ALIAS glm::glm)
57
else()
68
# fallback for old glm version in EmuELEC and Nix
79
message(STATUS "Found glm: ${GLM_INCLUDE_DIR}")
8-
add_library(glm::glm INTERFACE IMPORTED)
9-
set_target_properties(glm::glm PROPERTIES
10+
add_library(LibGlm INTERFACE IMPORTED)
11+
set_target_properties(LibGlm PROPERTIES
1012
INTERFACE_INCLUDE_DIRECTORIES "$<TARGET_PROPERTY:glm,INTERFACE_INCLUDE_DIRECTORIES>")
1113
endif()
1214
else()
@@ -19,8 +21,8 @@ else()
1921
endif()
2022

2123
message(STATUS "Found glm: ${GLM_INCLUDE_DIR}")
22-
add_library(glm::glm INTERFACE IMPORTED)
23-
set_target_properties(glm::glm PROPERTIES
24+
add_library(LibGlm INTERFACE IMPORTED)
25+
set_target_properties(LibGlm PROPERTIES
2426
INTERFACE_INCLUDE_DIRECTORIES ${GLM_INCLUDE_DIR})
2527
endif()
2628

mk/cmake/SuperTux/ProvideOggVorbis.cmake

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
find_package(OggVorbis REQUIRED)
22

3-
add_library(OggVorbis INTERFACE)
4-
set_target_properties(OggVorbis PROPERTIES
3+
add_library(LibOggVorbis INTERFACE IMPORTED)
4+
set_target_properties(LibOggVorbis PROPERTIES
55
INTERFACE_INCLUDE_DIRECTORIES "${VORBIS_INCLUDE_DIR}"
6-
INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${VORBIS_INCLUDE_DIR}"
76
INTERFACE_LINK_LIBRARIES "${OGGVORBIS_LIBRARIES}"
87
)
98

mk/cmake/SuperTux/ProvideOpenAL.cmake

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,19 @@
11
if(NOT EMSCRIPTEN)
22
if(VCPKG_BUILD)
33
find_package(OpenAL CONFIG REQUIRED)
4-
add_library(OpenAL ALIAS OpenAL::OpenAL)
4+
add_library(LibOpenAL ALIAS OpenAL::OpenAL)
55
else()
66
find_package(OpenAL REQUIRED)
77

8-
add_library(OpenAL INTERFACE)
9-
set_target_properties(OpenAL PROPERTIES
8+
add_library(LibOpenAL INTERFACE IMPORTED)
9+
set_target_properties(LibOpenAL PROPERTIES
1010
INTERFACE_LINK_LIBRARIES "${OPENAL_LIBRARY}"
1111
INTERFACE_INCLUDE_DIRECTORIES "${OPENAL_INCLUDE_DIR}"
12-
INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${OPENAL_INCLUDE_DIR}"
1312
)
1413
endif()
1514
else()
16-
add_library(OpenAL INTERFACE)
17-
set_target_properties(OpenAL PROPERTIES
15+
add_library(LibOpenAL INTERFACE IMPORTED)
16+
set_target_properties(LibOpenAL PROPERTIES
1817
INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_SOURCE_DIR}/mk/emscripten/AL"
1918
INTERFACE_LINK_LIBRARIES "-lopenal"
2019
)

mk/cmake/SuperTux/ProvideOpenGL.cmake

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ if(ENABLE_OPENGL)
2020

2121
set(OpenGL_GL_PREFERENCE "LEGACY")
2222
find_package(OpenGL)
23+
2324
if(OPENGL_FOUND)
2425
set(HAVE_OPENGL TRUE)
2526

@@ -51,8 +52,8 @@ if(ENABLE_OPENGL)
5152
if(NOT HAVE_OPENGL)
5253
message(STATUS " OpenGL not found")
5354
else()
54-
add_library(OpenGL INTERFACE)
55-
set_target_properties(OpenGL PROPERTIES
55+
add_library(LibOpenGL INTERFACE)
56+
set_target_properties(LibOpenGL PROPERTIES
5657
INTERFACE_LINK_LIBRARIES "${OPENGL_LINK_LIBRARIES}"
5758
INTERFACE_INCLUDE_DIRECTORIES "${OPENGL_INCLUDE_DIRECTORIES}"
5859
INTERFACE_COMPILE_DEFINITIONS "${OPENGL_COMPILE_DEFINITIONS}"
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
find_package(ZLIB REQUIRED)
22

3-
add_library(partio_zip_lib STATIC ${CMAKE_CURRENT_SOURCE_DIR}/external/partio_zip/zip_manager.cpp)
4-
target_link_libraries(partio_zip_lib PUBLIC ${ZLIB_LIBRARIES})
5-
target_include_directories(partio_zip_lib SYSTEM PRIVATE ${ZLIB_INCLUDE_DIRS})
6-
target_include_directories(partio_zip_lib SYSTEM PUBLIC external/partio_zip)
3+
add_library(LibPartioZip ${CMAKE_CURRENT_SOURCE_DIR}/external/partio_zip/zip_manager.cpp)
4+
target_link_libraries(LibPartioZip PUBLIC ${ZLIB_LIBRARIES})
5+
target_include_directories(LibPartioZip SYSTEM PRIVATE ${ZLIB_INCLUDE_DIRS})
6+
target_include_directories(LibPartioZip SYSTEM PUBLIC external/partio_zip)
77

88
# EOF #

0 commit comments

Comments
 (0)