Skip to content

Commit 20971bc

Browse files
committed
Revert "CMake cleanup (danmar#7658)"
The idea is to re-build this pull request and separate different topics. This reverts commit 554b98a.
1 parent e491f90 commit 20971bc

File tree

15 files changed

+184
-97
lines changed

15 files changed

+184
-97
lines changed

CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,6 @@ if(USE_BUNDLED_TINYXML2)
109109
add_subdirectory(externals/tinyxml2)
110110
endif()
111111
add_subdirectory(externals/simplecpp)
112-
add_subdirectory(externals/picojson)
113112
add_subdirectory(lib) # CppCheck Library
114113
add_subdirectory(frontend)
115114
add_subdirectory(cli) # Client application

cli/CMakeLists.txt

Lines changed: 48 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,68 @@
1+
if (BUILD_CLI)
12

2-
file(GLOB hdrs "*.h")
3-
file(GLOB srcs "*.cpp")
4-
file(GLOB mainfile "main.cpp")
5-
list(REMOVE_ITEM srcs ${mainfile})
3+
file(GLOB hdrs "*.h")
4+
file(GLOB srcs "*.cpp")
5+
file(GLOB mainfile "main.cpp")
6+
list(REMOVE_ITEM srcs ${mainfile})
67

7-
add_library(cli ${hdrs} ${srcs})
8-
target_include_directories(cli PUBLIC .)
9-
target_link_libraries(cli PRIVATE cppcheck-core frontend tinyxml2 simplecpp picojson)
10-
if (NOT CMAKE_DISABLE_PRECOMPILE_HEADERS)
11-
target_precompile_headers(cli PRIVATE precompiled.h)
12-
endif()
8+
add_library(cli_objs OBJECT ${hdrs} ${srcs})
9+
target_include_directories(cli_objs PRIVATE ${PROJECT_SOURCE_DIR}/lib/ ${PROJECT_SOURCE_DIR}/frontend/)
10+
if(USE_BUNDLED_TINYXML2)
11+
target_externals_include_directories(cli_objs PRIVATE ${PROJECT_SOURCE_DIR}/externals/tinyxml2/)
12+
else()
13+
target_include_directories(cli_objs SYSTEM PRIVATE ${tinyxml2_INCLUDE_DIRS})
14+
endif()
15+
target_externals_include_directories(cli_objs PRIVATE ${PROJECT_SOURCE_DIR}/externals/picojson/)
16+
target_externals_include_directories(cli_objs PRIVATE ${PROJECT_SOURCE_DIR}/externals/simplecpp/)
17+
if (NOT CMAKE_DISABLE_PRECOMPILE_HEADERS)
18+
target_precompile_headers(cli_objs PRIVATE precompiled.h)
19+
endif()
20+
if (BUILD_CORE_DLL)
21+
target_compile_definitions(cli_objs PRIVATE CPPCHECKLIB_IMPORT TINYXML2_IMPORT)
22+
endif()
1323

14-
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 13)
15-
# false positive warning in Clang 13 - caused by FD_ZERO macro
16-
set_source_files_properties(processexecutor.cpp PROPERTIES COMPILE_FLAGS -Wno-reserved-identifier)
17-
endif()
24+
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 13)
25+
# false positive warning in Clang 13 - caused by FD_ZERO macro
26+
set_source_files_properties(processexecutor.cpp PROPERTIES COMPILE_FLAGS -Wno-reserved-identifier)
27+
endif()
1828

19-
if (BUILD_CLI)
20-
list(APPEND cppcheck_SOURCES ${hdrs} ${mainfile})
29+
list(APPEND cppcheck_SOURCES ${hdrs} ${mainfile} $<TARGET_OBJECTS:cli_objs> $<TARGET_OBJECTS:frontend_objs>)
30+
if (NOT BUILD_CORE_DLL)
31+
list(APPEND cppcheck_SOURCES $<TARGET_OBJECTS:cppcheck-core>)
32+
list(APPEND cppcheck_SOURCES $<TARGET_OBJECTS:simplecpp_objs>)
33+
if(USE_BUNDLED_TINYXML2)
34+
list(APPEND cppcheck_SOURCES $<TARGET_OBJECTS:tinyxml2_objs>)
35+
endif()
36+
endif()
2137
if (WIN32)
2238
list(APPEND cppcheck_SOURCES version.rc)
2339
endif()
2440

2541
add_executable(cppcheck ${cppcheck_SOURCES})
26-
target_link_libraries(cppcheck cppcheck-core cli tinyxml2 simplecpp)
42+
target_include_directories(cppcheck PRIVATE ${PROJECT_SOURCE_DIR}/lib/)
43+
if(USE_BUNDLED_TINYXML2)
44+
target_externals_include_directories(cppcheck PRIVATE ${PROJECT_SOURCE_DIR}/externals/tinyxml2/)
45+
else()
46+
target_include_directories(cppcheck SYSTEM PRIVATE ${tinyxml2_INCLUDE_DIRS})
47+
endif()
48+
target_externals_include_directories(cppcheck PRIVATE ${PROJECT_SOURCE_DIR}/externals/simplecpp/)
49+
if (HAVE_RULES)
50+
target_link_libraries(cppcheck ${PCRE_LIBRARY})
51+
endif()
2752
if (WIN32 AND NOT BORLAND)
2853
if(NOT MINGW)
2954
target_link_libraries(cppcheck Shlwapi.lib)
3055
else()
3156
target_link_libraries(cppcheck shlwapi)
3257
endif()
3358
endif()
59+
if(tinyxml2_FOUND AND NOT USE_BUNDLED_TINYXML2)
60+
target_link_libraries(cppcheck ${tinyxml2_LIBRARIES})
61+
endif()
3462
target_link_libraries(cppcheck ${CMAKE_THREAD_LIBS_INIT})
63+
if (BUILD_CORE_DLL)
64+
target_link_libraries(cppcheck cppcheck-core)
65+
endif()
3566

3667
add_dependencies(cppcheck copy_cfg)
3768
add_dependencies(cppcheck copy_addons)

cmake/compileroptions.cmake

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -24,28 +24,6 @@ function(target_externals_include_directories TARGET)
2424
endif()
2525
endfunction()
2626

27-
function(target_dll_compile_definitions TARGET)
28-
set(options)
29-
set(oneValueArgs IMPORT EXPORT)
30-
set(multiValueArgs)
31-
32-
cmake_parse_arguments(PARSE "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
33-
if(PARSE_UNPARSED_ARGUMENTS)
34-
message(
35-
FATAL_ERROR "Unknown keywords given to target_dll_compile_definitions(): \"${PARSE_UNPARSED_ARGUMENTS}\"")
36-
endif()
37-
38-
39-
if (BUILD_SHARED_LIBS AND MSVC)
40-
if(PARSE_EXPORT)
41-
target_compile_definitions(${TARGET} PRIVATE ${PARSE_EXPORT})
42-
endif()
43-
if(PARSE_IMPORT)
44-
target_compile_definitions(${TARGET} INTERFACE ${PARSE_IMPORT})
45-
endif()
46-
endif()
47-
endfunction()
48-
4927
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
5028
add_compile_options(-Weverything)
5129
endif()

cmake/findDependencies.cmake

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,10 +61,10 @@ else()
6161
endif()
6262

6363
if(NOT USE_BUNDLED_TINYXML2)
64-
add_library(tinyxml2 INTERFACE)
6564
find_package(tinyxml2 QUIET)
6665
if(TARGET tinyxml2::tinyxml2)
67-
target_link_libraries(tinyxml2 INTERFACE tinyxml2::tinyxml2)
66+
set(tinyxml2_LIBRARIES "tinyxml2::tinyxml2")
67+
set(tinyxml2_INCLUDE_DIRS $<TARGET_PROPERTY:tinyxml2::tinyxml2,INTERFACE_INCLUDE_DIRECTORIES>)
6868
else()
6969
find_library(tinyxml2_LIBRARIES tinyxml2)
7070
find_path(tinyxml2_INCLUDE_DIRS tinyxml2.h)
@@ -73,8 +73,6 @@ if(NOT USE_BUNDLED_TINYXML2)
7373
else()
7474
set(tinyxml2_FOUND 1)
7575
endif()
76-
target_link_libraries(tinyxml2 INTERFACE ${tinyxml2_LIBRARIES})
77-
target_include_directories(tinyxml2 INTERFACE ${tinyxml2_INCLUDE_DIRS})
7876
endif()
7977
endif()
8078

externals/picojson/CMakeLists.txt

Lines changed: 0 additions & 4 deletions
This file was deleted.

externals/simplecpp/CMakeLists.txt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
file(GLOB hdrs "*.h")
22
file(GLOB srcs "*.cpp")
33

4-
add_library(simplecpp ${srcs} ${hdrs})
5-
target_dll_compile_definitions(simplecpp EXPORT SIMPLECPP_EXPORT IMPORT SIMPLECPP_IMPORT)
4+
add_library(simplecpp_objs OBJECT ${srcs} ${hdrs})
5+
if (BUILD_CORE_DLL)
6+
target_compile_definitions(simplecpp_objs PRIVATE SIMPLECPP_EXPORT)
7+
endif()
68

79
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
8-
target_compile_options_safe(simplecpp -Wno-zero-as-null-pointer-constant)
10+
target_compile_options_safe(simplecpp_objs -Wno-zero-as-null-pointer-constant)
911
endif()
10-
11-
target_externals_include_directories(simplecpp PUBLIC .)

externals/tinyxml2/CMakeLists.txt

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
11
file(GLOB hdrs "*.h")
22
file(GLOB srcs "*.cpp")
33

4-
add_library(tinyxml2 ${srcs} ${hdrs})
5-
target_dll_compile_definitions(tinyxml2 EXPORT TINYXML2_EXPORT IMPORT TINYXML2_IMPORT)
4+
add_library(tinyxml2_objs OBJECT ${srcs} ${hdrs})
5+
if (BUILD_CORE_DLL)
6+
target_compile_definitions(tinyxml2_objs PRIVATE TINYXML2_EXPORT)
7+
endif()
68

79
# TODO: needs to be fixed upstream
810
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
9-
target_compile_options(tinyxml2 PRIVATE -Wno-suggest-attribute=format)
10-
target_compile_options(tinyxml2 PRIVATE -Wno-useless-cast)
11+
target_compile_options(tinyxml2_objs PRIVATE -Wno-suggest-attribute=format)
12+
target_compile_options(tinyxml2_objs PRIVATE -Wno-useless-cast)
1113
endif()
1214
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
13-
target_compile_options_safe(tinyxml2 -Wno-implicit-fallthrough)
14-
target_compile_options_safe(tinyxml2 -Wno-suggest-destructor-override)
15-
target_compile_options_safe(tinyxml2 -Wno-zero-as-null-pointer-constant)
16-
target_compile_options_safe(tinyxml2 -Wno-format-nonliteral)
17-
target_compile_options_safe(tinyxml2 -Wno-inconsistent-missing-destructor-override)
15+
target_compile_options_safe(tinyxml2_objs -Wno-implicit-fallthrough)
16+
target_compile_options_safe(tinyxml2_objs -Wno-suggest-destructor-override)
17+
target_compile_options_safe(tinyxml2_objs -Wno-zero-as-null-pointer-constant)
18+
target_compile_options_safe(tinyxml2_objs -Wno-format-nonliteral)
19+
target_compile_options_safe(tinyxml2_objs -Wno-inconsistent-missing-destructor-override)
1820
endif()
1921
if(CYGWIN)
2022
target_compile_definitions(-D_LARGEFILE_SOURCE) # required for fseeko() and ftello()
2123
endif()
2224

23-
target_externals_include_directories(tinyxml2 PUBLIC .)
24-

frontend/CMakeLists.txt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
file(GLOB hdrs "*.h")
22
file(GLOB srcs "*.cpp")
33

4-
add_library(frontend ${hdrs} ${srcs})
5-
target_include_directories(frontend PUBLIC .)
6-
target_link_libraries(frontend PRIVATE cppcheck-core)
4+
add_library(frontend_objs OBJECT ${hdrs} ${srcs})
5+
target_include_directories(frontend_objs PRIVATE ${PROJECT_SOURCE_DIR}/lib)

gui/CMakeLists.txt

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,26 +20,44 @@ CheckOptions:
2020
list(APPEND cppcheck-gui-deps ${hdrs} ${uis_hdrs} ${resources} ${qms})
2121
add_custom_target(gui-build-deps SOURCES ${cppcheck-gui-deps})
2222

23-
list(APPEND cppcheck-gui_SOURCES ${srcs})
23+
list(APPEND cppcheck-gui_SOURCES ${srcs} $<TARGET_OBJECTS:frontend_objs>)
24+
if (NOT BUILD_CORE_DLL)
25+
list(APPEND cppcheck-gui_SOURCES $<TARGET_OBJECTS:cppcheck-core> $<TARGET_OBJECTS:simplecpp_objs>)
26+
if(USE_BUNDLED_TINYXML2)
27+
list(APPEND cppcheck-gui_SOURCES $<TARGET_OBJECTS:tinyxml2_objs>)
28+
endif()
29+
endif()
2430
if (WIN32)
2531
list(APPEND cppcheck-gui_SOURCES cppcheck-gui.rc)
2632
endif()
2733

2834
add_executable(cppcheck-gui ${cppcheck-gui-deps} ${cppcheck-gui_SOURCES})
29-
target_link_libraries(cppcheck-gui cppcheck-core simplecpp tinyxml2 picojson frontend)
30-
3135
set_target_properties(cppcheck-gui PROPERTIES AUTOMOC ON)
3236
set_target_properties(cppcheck-gui PROPERTIES WIN32_EXECUTABLE ON)
37+
target_include_directories(cppcheck-gui PRIVATE ${PROJECT_SOURCE_DIR}/lib/ ${PROJECT_SOURCE_DIR}/frontend/)
38+
if(USE_BUNDLED_TINYXML2)
39+
target_externals_include_directories(cppcheck-gui PRIVATE ${PROJECT_SOURCE_DIR}/externals/tinyxml2/)
40+
else()
41+
target_include_directories(cppcheck-gui SYSTEM PRIVATE ${tinyxml2_INCLUDE_DIRS})
42+
endif()
43+
target_include_directories(cppcheck-gui PRIVATE ${PROJECT_SOURCE_DIR}/externals/picojson/)
3344
if (NOT CMAKE_DISABLE_PRECOMPILE_HEADERS)
3445
target_precompile_headers(cppcheck-gui PRIVATE precompiled.h)
3546
endif()
3647
if (HAVE_RULES)
3748
target_link_libraries(cppcheck-gui ${PCRE_LIBRARY})
3849
endif()
50+
if(tinyxml2_FOUND AND NOT USE_BUNDLED_TINYXML2)
51+
target_link_libraries(cppcheck-gui ${tinyxml2_LIBRARIES})
52+
endif()
3953
target_link_libraries(cppcheck-gui ${QT_CORE_LIB} ${QT_GUI_LIB} ${QT_WIDGETS_LIB} ${QT_PRINTSUPPORT_LIB} ${QT_HELP_LIB} ${QT_NETWORK_LIB})
4054
if(WITH_QCHART)
4155
target_link_libraries(cppcheck-gui ${QT_CHARTS_LIB})
4256
endif()
57+
if (BUILD_CORE_DLL)
58+
target_compile_definitions(cppcheck-gui PRIVATE CPPCHECKLIB_IMPORT TINYXML2_IMPORT)
59+
target_link_libraries(cppcheck-gui cppcheck-core)
60+
endif()
4361
if(MSVC)
4462
# compilation will fail as e.g. QList::realloc would be replaced by MSVC's macro definition
4563
target_compile_definitions(cppcheck-gui PRIVATE $<$<CONFIG:Debug>:DISABLE_CRTDBG_MAP_ALLOC>)

gui/test/filelist/CMakeLists.txt

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,15 @@ add_executable(test-filelist
55
${test-filelist_SRC}
66
testfilelist.cpp
77
${CMAKE_SOURCE_DIR}/gui/filelist.cpp
8+
${CMAKE_SOURCE_DIR}/lib/pathmatch.cpp
9+
${CMAKE_SOURCE_DIR}/lib/path.cpp
10+
${CMAKE_SOURCE_DIR}/lib/utils.cpp
11+
$<TARGET_OBJECTS:simplecpp_objs>
812
)
9-
target_include_directories(test-filelist PRIVATE ${CMAKE_SOURCE_DIR}/gui)
13+
target_include_directories(test-filelist PRIVATE ${CMAKE_SOURCE_DIR}/gui ${CMAKE_SOURCE_DIR}/lib)
14+
target_externals_include_directories(test-filelist PRIVATE ${CMAKE_SOURCE_DIR}/externals/simplecpp)
1015
target_compile_definitions(test-filelist PRIVATE SRCDIR="${CMAKE_CURRENT_SOURCE_DIR}")
11-
target_link_libraries(test-filelist ${QT_CORE_LIB} ${QT_TEST_LIB} cppcheck-core simplecpp)
16+
target_link_libraries(test-filelist ${QT_CORE_LIB} ${QT_TEST_LIB})
1217

1318
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
1419
if(QT_VERSION VERSION_GREATER_EQUAL "6.9.0")
@@ -21,4 +26,4 @@ if (REGISTER_GUI_TESTS)
2126
add_test(NAME test-filelist COMMAND $<TARGET_FILE:test-filelist>)
2227
endif()
2328

24-
add_dependencies(gui-tests test-filelist)
29+
add_dependencies(gui-tests test-filelist)

0 commit comments

Comments
 (0)