Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
7fdea0c
MSVC: Shut up Compiler warning in Matrix.h if asserts are disabled
DanielGibson Sep 6, 2020
88cafad
ID_MAYBE_INLINE for not-forced inlining
DanielGibson Sep 6, 2020
db0fc8b
Fix handling of paths with dots in dir names, fix #299, #301
DanielGibson Sep 6, 2020
dde6fe4
Fix lingering messages in HUD after loading savegame
DanielGibson Sep 6, 2020
c472d37
Disable broken idSIMD_SSE::UpSampleOGGTo44kHz()
DanielGibson Sep 6, 2020
72b4def
Fix "t->c->value.argSize == func->parmTotal" Assertion in Scripts, #303
DanielGibson Sep 6, 2020
4e9a6a7
Add information about dhewm3 build to savegames
DanielGibson Jan 8, 2025
2ce7644
Fix player's clipModel->axis when loading savegame, fixes #328
DanielGibson Feb 15, 2021
258413b
Several commits about memcpy() and memset() from turol in idlib squashed
turol Jan 25, 2021
b4d1053
Silence an uninitialized variable warning
turol Jan 25, 2021
67dbb96
MSVC: Treat pointer truncation warnings as errors, adjust idCVar for …
DanielGibson Jan 8, 2025
77e1b68
Make sure MAX_OSPATH has sane size
DanielGibson May 17, 2022
6dda5b0
Don't use stringDataAllocator in idStr, it's not thread-safe
DanielGibson May 17, 2022
cc10a03
Add D3_(v)snprintfC99() for C99-compatible implementations
DanielGibson Jan 10, 2022
213a256
renderer/RenderSystem.h: Changes from dhewm3
DanielGibson May 17, 2022
7eb84e0
Remove usage of C++11 nullptr
DanielGibson May 17, 2022
a55339e
From dhewm3: Fix most (according to warnings) remaining 64bit issues …
DanielGibson May 17, 2022
bd5d08d
Use idStr::Copynz() instead of strncpy()
DanielGibson May 17, 2022
96de541
Improve some messages in game code
DanielGibson Jan 8, 2025
8a5d7f2
Fix some ubsan warnings
DanielGibson Jun 22, 2021
6a79311
Fix renderlights loaded from savegames aliasing other lights
DanielGibson Nov 6, 2022
0e1beeb
Fix -Wformat-security warnings - thanks James Addison!
DanielGibson Dec 29, 2022
a52df3d
Don't use "register" keyword, it was deprecated in C++11
DanielGibson Jan 5, 2023
2ce31ae
Fix GCC -W(maybe-)uninitialized warnings that at least kinda had a point
DanielGibson Jan 5, 2023
14ff9b1
Work around false positive GCC -W(maybe-)uninitialized warnings
DanielGibson Jan 5, 2023
6fb25a9
Fix date/time handling in idParser::ExpandBuiltinDefine()
DanielGibson Jan 5, 2023
0f8f412
Fix/work around other misc. compiler warnings
DanielGibson Jan 5, 2023
422000f
Fixup: typo: 'hiehgt' -> 'height' in a few places around the codebase
jayaddison Jan 11, 2023
11fb222
Fix MSVC non-Release builds (_alloca()/assert() didn't play nice)
DanielGibson Mar 2, 2023
92a47b1
Sync sys/platform.h, incl. Workaround for MCST-LCC compiler
DanielGibson Mar 18, 2024
da88e8b
merge sys_public.h changes for gamepad support
DanielGibson Jan 8, 2025
15b15d4
Don't use GCC's __builtin_alloca_with_align(), fix #572
DanielGibson Apr 19, 2024
1a4d23b
Update CMakeLists.txt to current dhewm3-sdk state
DanielGibson Jan 8, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
196 changes: 179 additions & 17 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
cmake_minimum_required(VERSION 2.8...3.22 FATAL_ERROR)
project(dhewm3sdk)

option(BASE "Build the base (game/) game code" ON)
Expand All @@ -11,6 +11,11 @@ set(D3XP_DEFS "GAME_DLL;_D3XP;CTF" CACHE STRING "Compiler definitions for the mo

option(ONATIVE "Optimize for the host CPU" OFF)

if(NOT MSVC) # GCC/clang or compatible, hopefully
option(FORCE_COLORED_OUTPUT "Always produce ANSI-colored compiler warnings/errors (GCC/Clang only; esp. useful with ninja)." OFF)
option(ASAN "Enable GCC/Clang Adress Sanitizer (ASan)" OFF) # TODO: MSVC might also support this, somehow?
endif()

set(src_game_mod
# add additional .cpp files of your mod in game/
# (that you added to the ones already existant in the SDK/in dhewm3)
Expand Down Expand Up @@ -63,14 +68,56 @@ endif()

# target cpu
set(cpu ${CMAKE_SYSTEM_PROCESSOR})

# Originally, ${CMAKE_SYSTEM_PROCESSOR} was supposed to contain the *target* CPU, according to CMake's documentation.
# As far as I can tell this has always been broken (always returns host CPU) at least on Windows
# (see e.g. https://cmake.org/pipermail/cmake-developers/2014-September/011405.html) and wasn't reliable on
# other systems either, for example on Linux with 32bit userland but 64bit kernel it returned the kernel CPU type
# (e.g. x86_64 instead of i686). Instead of fixing this, CMake eventually updated their documentation in 3.20,
# now it's officially the same as CMAKE_HOST_SYSTEM_PROCESSOR except when cross-compiling (where it's explicitly set)
# So we gotta figure out the actual target CPU type ourselves.. (why am I sticking to this garbage buildsystem?)
if(NOT (CMAKE_SYSTEM_PROCESSOR STREQUAL CMAKE_HOST_SYSTEM_PROCESSOR))
# special case: cross-compiling, here CMAKE_SYSTEM_PROCESSOR should be correct, hopefully
# (just leave cpu at ${CMAKE_SYSTEM_PROCESSOR})
elseif(MSVC)
# because all this wasn't ugly enough, it turned out that, unlike standalone CMake, Visual Studio's
# integrated CMake doesn't set CMAKE_GENERATOR_PLATFORM, so I gave up on guessing the CPU arch here
# and moved the CPU detection to MSVC-specific code in neo/sys/platform.h
else() # not MSVC and not cross-compiling, assume GCC or clang (-compatible), seems to work for MinGW as well
execute_process(COMMAND ${CMAKE_C_COMPILER} "-dumpmachine"
RESULT_VARIABLE cc_dumpmachine_res
OUTPUT_VARIABLE cc_dumpmachine_out)
if(cc_dumpmachine_res EQUAL 0)
string(STRIP ${cc_dumpmachine_out} cc_dumpmachine_out) # get rid of trailing newline
message(STATUS "`${CMAKE_C_COMPILER} -dumpmachine` says: \"${cc_dumpmachine_out}\"")
# gcc -dumpmachine and clang -dumpmachine seem to print something like "x86_64-linux-gnu" (gcc)
# or "x64_64-pc-linux-gnu" (clang) or "i686-w64-mingw32" (32bit mingw-w64) i.e. starting with the CPU,
# then "-" and then OS or whatever - so use everything up to first "-"
string(REGEX MATCH "^[^-]+" cpu ${cc_dumpmachine_out})
message(STATUS " => CPU architecture extracted from that: \"${cpu}\"")
else()
message(WARNING "${CMAKE_C_COMPILER} -dumpmachine failed with error (code) ${cc_dumpmachine_res}")
message(WARNING "will use the (sometimes incorrect) CMAKE_SYSTEM_PROCESSOR (${cpu}) to determine D3_ARCH")
endif()
endif()

if(cpu STREQUAL "powerpc")
set(cpu "ppc")
elseif(cpu STREQUAL "aarch64")
# "arm64" is more obvious, and some operating systems (like macOS) use it instead of "aarch64"
set(cpu "arm64")
elseif(cpu MATCHES "i.86")
set(cpu "x86")
endif()

if(MSVC AND CMAKE_CL_64)
set(cpu "amd64")
elseif(cpu MATCHES "[aA][mM][dD]64" OR cpu MATCHES "[xX]64")
set(cpu "x86_64")
elseif(cpu MATCHES "[aA][rR][mM].*") # some kind of arm..
# On 32bit Raspbian gcc -dumpmachine returns sth starting with "arm-",
# while clang -dumpmachine says "arm6k-..." - try to unify that to "arm"
if(CMAKE_SIZEOF_VOID_P EQUAL 8) # sizeof(void*) == 8 => must be arm64
set(cpu "arm64")
else() # should be 32bit arm then (probably "armv7l" "armv6k" or sth like that)
set(cpu "arm")
endif()
endif()

# target os
Expand All @@ -80,6 +127,24 @@ else()
string(TOLOWER "${CMAKE_SYSTEM_NAME}" os)
endif()

add_definitions(-DD3_OSTYPE="${os}" -DD3_SIZEOFPTR=${CMAKE_SIZEOF_VOID_P})

if(MSVC)
# for MSVC D3_ARCH is set in code (in neo/sys/platform.h)
message(STATUS "Setting -DD3_SIZEOFPTR=${CMAKE_SIZEOF_VOID_P} -DD3_OSTYPE=\"${os}\" - NOT setting D3_ARCH, because we're targeting MSVC (VisualC++)")
# make sure ${cpu} isn't (cant't be) used by CMake when building with MSVC
unset(cpu)
else()
add_definitions(-DD3_ARCH="${cpu}")
message(STATUS "Setting -DD3_ARCH=\"${cpu}\" -DD3_SIZEOFPTR=${CMAKE_SIZEOF_VOID_P} -DD3_OSTYPE=\"${os}\" ")

if(cpu MATCHES ".*64.*" AND NOT CMAKE_SIZEOF_VOID_P EQUAL 8)
# tough luck if some CPU architecture has "64" in its name but uses 32bit pointers
message(SEND_ERROR "CMake thinks sizeof(void*) == 4, but the target CPU ${cpu} looks like a 64bit CPU!")
message(FATAL_ERROR "If you're building in a 32bit chroot on a 64bit host, switch to it with 'linux32 chroot' or at least call cmake with linux32 (or your OSs equivalent)!")
endif()
endif()

# build type
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "RelWithDebInfo")
Expand All @@ -89,8 +154,25 @@ endif()
include(CheckCXXCompilerFlag)
include(TestBigEndian)

set(D3_COMPILER_IS_CLANG FALSE)
set(D3_COMPILER_IS_GCC_OR_CLANG FALSE)

if(NOT MSVC)
# check if this is some kind of clang (Clang, AppleClang, whatever)
# (convert compiler ID to lowercase so we match Clang, clang, AppleClang etc, regardless of case)
string(TOLOWER ${CMAKE_CXX_COMPILER_ID} compiler_id_lower)
if(compiler_id_lower MATCHES ".*clang.*")
message(STATUS "Compiler \"${CMAKE_CXX_COMPILER_ID}\" detected as some kind of clang")
set(D3_COMPILER_IS_CLANG TRUE)
set(D3_COMPILER_IS_GCC_OR_CLANG TRUE)
elseif(CMAKE_COMPILER_IS_GNUCC)
set(D3_COMPILER_IS_GCC_OR_CLANG TRUE)
endif()
unset(compiler_id_lower)
endif() # NOT MSVC

# compiler specific flags
if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang")
if(D3_COMPILER_IS_GCC_OR_CLANG)
add_compile_options(-pipe)
add_compile_options(-Wall)

Expand All @@ -100,17 +182,35 @@ if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang")
add_compile_options(-march=pentium3)
endif()

set(CMAKE_C_FLAGS_DEBUG "-g -D_DEBUG -O1")
if(FORCE_COLORED_OUTPUT)
if(CMAKE_COMPILER_IS_GNUCC)
add_compile_options (-fdiagnostics-color=always)
elseif (D3_COMPILER_IS_CLANG)
add_compile_options (-fcolor-diagnostics)
endif ()
endif ()

set(CMAKE_C_FLAGS_DEBUG "-g -D_DEBUG -O0")
set(CMAKE_C_FLAGS_DEBUGALL "-g -ggdb -D_DEBUG")
set(CMAKE_C_FLAGS_PROFILE "-g -ggdb -D_DEBUG -O1 -fno-omit-frame-pointer")
set(CMAKE_C_FLAGS_RELEASE "-O2 -fno-unsafe-math-optimizations -fno-math-errno -fno-trapping-math -fomit-frame-pointer")
set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -g -ggdb -fno-unsafe-math-optimizations -fno-math-errno -fno-trapping-math -fno-omit-frame-pointer")
set(CMAKE_C_FLAGS_MINSIZEREL "-Os -fno-unsafe-math-optimizations -fno-math-errno -fno-trapping-math -fomit-frame-pointer")
set(CMAKE_C_FLAGS_RELEASE "-O2 -fno-math-errno -fno-trapping-math -fomit-frame-pointer")
set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -g -ggdb -fno-math-errno -fno-trapping-math -fno-omit-frame-pointer")
set(CMAKE_C_FLAGS_MINSIZEREL "-Os -fno-math-errno -fno-trapping-math -fomit-frame-pointer")

set(CMAKE_CXX_FLAGS_DEBUGALL ${CMAKE_C_FLAGS_DEBUGALL})
set(CMAKE_CXX_FLAGS_PROFILE ${CMAKE_C_FLAGS_PROFILE})

add_compile_options(-fno-strict-aliasing)
# dear idiot compilers, don't fuck up math code with useless FMA "optimizations"
# (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100839)
add_compile_options(-ffp-contract=off)

if(ASAN)
# if this doesn't work, ASan might not be available on your platform, don't set ASAN then..
add_compile_options(-fsanitize=address)
# TODO: do we need to link against libasan or sth? or is it enough if dhewm3 executable does?
# set(ldflags ${ldflags} -fsanitize=address)
endif()

if(NOT AROS)
CHECK_CXX_COMPILER_FLAG("-fvisibility=hidden" cxx_has_fvisibility)
Expand All @@ -124,7 +224,14 @@ if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang")
add_compile_options(-Wno-sign-compare)
add_compile_options(-Wno-switch)
add_compile_options(-Wno-strict-overflow)
add_compile_options(-Wno-format-security)

if(CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 8.0)
# ‘void* memset(void*, int, size_t)’ clearing an object of type ‘struct refSound_t’ with no trivial copy-assignment; use assignment or value-initialization instead
# ‘void* memcpy(void*, const void*, size_t)’ writing to an object of type ‘class idDrawVert’ with no trivial copy-assignment; use copy-assignment or copy-initialization instead
# etc - I don't care, all the cases I've checked were safe and I'm not gonna add (void*) casts in 1000 places
# (that would make merging new mods painful)
add_compile_options(-Wno-class-memaccess)
endif()

CHECK_CXX_COMPILER_FLAG("-Woverloaded-virtual" cxx_has_Woverload_virtual)
if(cxx_has_Woverload_virtual)
Expand All @@ -140,6 +247,9 @@ if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang")
if(cpu STREQUAL "x86_64")
add_compile_options(-arch x86_64 -mmacosx-version-min=10.6)
set(ldflags "${ldflags} -arch x86_64 -mmacosx-version-min=10.6")
elseif(cpu STREQUAL "arm64")
add_compile_options(-arch arm64 -mmacosx-version-min=11.0)
set(ldflags "${ldflags} -arch arm64 -mmacosx-version-min=11.0")
elseif(cpu STREQUAL "x86")
CHECK_CXX_COMPILER_FLAG("-arch i386" cxx_has_arch_i386)
if(cxx_has_arch_i386)
Expand All @@ -152,22 +262,27 @@ if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang")
elseif(cpu STREQUAL "ppc")
CHECK_CXX_COMPILER_FLAG("-arch ppc" cxx_has_arch_ppc)
if(cxx_has_arch_ppc)
add_compile_options(-arch ppc)
set(ldflags "${ldflags} -arch ppc")
add_compile_options(-arch ppc -mone-byte-bool)
set(ldflags "${ldflags} -arch ppc -mone-byte-bool")
endif()

add_compile_options(-mmacosx-version-min=10.4)
set(ldflags "${ldflags} -mmacosx-version-min=10.4")
else()
message(FATAL_ERROR "Unsupported CPU architecture ${cpu} for OSX")
message(FATAL_ERROR "Unsupported CPU architecture for OSX")
endif()
elseif(WIN32)
set(ldflags "${ldflags} -static-libgcc -static-libstdc++")
elseif(os STREQUAL "linux")
# set(sys_libs ${sys_libs} dl) FIXME: -ldl needed anyway?
endif()
elseif(MSVC)
add_definitions(/MP) # parallel build (use all cores, or as many as configured in VS)

add_compile_options(/W4)
add_compile_options(/we4840) # treat as error when passing a class to a vararg-function (probably printf-like)
# treat several kinds of truncating int<->pointer conversions as errors (for more 64bit-safety)
add_compile_options(/we4306 /we4311 /we4312 /we4302)
add_compile_options(/wd4100) # unreferenced formal parameter
add_compile_options(/wd4127) # conditional expression is constant
add_compile_options(/wd4244) # possible loss of data
Expand Down Expand Up @@ -208,7 +323,9 @@ configure_file(
"${CMAKE_BINARY_DIR}/config.h"
)

if(NOT MSVC)
message(STATUS "Building ${CMAKE_BUILD_TYPE} for ${os}-${cpu}")
endif()

if(NOT APPLE AND NOT WIN32)
message(STATUS "The install target will use the following directories:")
Expand All @@ -217,6 +334,27 @@ if(NOT APPLE AND NOT WIN32)
message(STATUS " Data directory: ${datadir}")
endif()

# I'm a bit sloppy with headers and just glob them in..
# they're only handled in CMake at all so they turn up in Visual Studio solutions..

# globs all the headers from ${PATHPREFIX}/ and adds them to ${SRCLIST}
function(add_globbed_headers SRCLIST PATHPREFIX)
file(GLOB_RECURSE tmp_hdrs RELATIVE "${CMAKE_SOURCE_DIR}" "${PATHPREFIX}/*.h")
set(${SRCLIST} ${tmp_hdrs} ${${SRCLIST}} PARENT_SCOPE)
endfunction()

if(CMAKE_MAJOR_VERSION LESS 3 OR ( CMAKE_MAJOR_VERSION EQUAL 3 AND CMAKE_MINOR_VERSION LESS 8 ))
# cmake < 3.8 doesn't support source_group(TREE ...) so replace it with a dummy
# (it's only cosmetical anyway, to make source files show up properly in Visual Studio)
function(source_group)
endfunction()
message(STATUS "Using CMake < 3.8, doesn't support source_group(TREE ...), replacing it with a dummy")
message(STATUS " (this is only relevants for IDEs, doesn't matter for just compiling dhewm3)")
#else()
# message(STATUS "Using CMake >= 3.8, supports source_group(TREE ...)")
endif()


set(src_game
game/AF.cpp
game/AFEntity.cpp
Expand Down Expand Up @@ -291,6 +429,8 @@ set(src_game
${src_game_mod}
)

add_globbed_headers(src_game "game")

set(src_d3xp
d3xp/AF.cpp
d3xp/AFEntity.cpp
Expand Down Expand Up @@ -367,6 +507,8 @@ set(src_d3xp
${src_d3xp_mod}
)

add_globbed_headers(src_d3xp "d3xp")

set(src_idlib
idlib/bv/Bounds.cpp
idlib/bv/Frustum.cpp
Expand Down Expand Up @@ -418,6 +560,18 @@ set(src_idlib
idlib/Heap.cpp
)

add_globbed_headers(src_idlib "idlib")
# just add all the remaining headers (that have no corresponding .cpp in the SDK)
# to idlib so they can be navigated there
add_globbed_headers(src_idlib "cm")
add_globbed_headers(src_idlib "framework")
add_globbed_headers(src_idlib "renderer")
add_globbed_headers(src_idlib "sound")
add_globbed_headers(src_idlib "sys")
add_globbed_headers(src_idlib "tools")
add_globbed_headers(src_idlib "ui")


include_directories(${CMAKE_BINARY_DIR})
include_directories(${CMAKE_SOURCE_DIR})

Expand All @@ -430,11 +584,13 @@ if (AROS)
set(AROS_ARCH ${CMAKE_SYSTEM_PROCESSOR})
endif()
else()
if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang" AND NOT MINGW)
if(D3_COMPILER_IS_GCC_OR_CLANG AND NOT MINGW)
set_target_properties(idlib PROPERTIES COMPILE_FLAGS "-fPIC")
endif()
endif()

source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} PREFIX neo FILES ${src_idlib})

if(BASE)
if (AROS)
add_executable(base sys/aros/dll/dllglue.c ${src_game})
Expand All @@ -444,9 +600,12 @@ if(BASE)
# so mods can create cdoom.dll instead of base.dll from the code in game/
set_target_properties(base PROPERTIES OUTPUT_NAME "${BASE_NAME}")
endif()

source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} PREFIX neo FILES ${src_game})

set_target_properties(base PROPERTIES PREFIX "")
set_target_properties(base PROPERTIES COMPILE_DEFINITIONS "${BASE_DEFS}")
set_target_properties(base PROPERTIES COMPILE_FLAGS "-I${CMAKE_SOURCE_DIR}/game")
target_include_directories(base PRIVATE "${CMAKE_SOURCE_DIR}/game")
set_target_properties(base PROPERTIES LINK_FLAGS "${ldflags}")
set_target_properties(base PROPERTIES INSTALL_NAME_DIR "@executable_path")
if (AROS)
Expand All @@ -473,9 +632,12 @@ if(D3XP)
# so mods can create whatever.dll instead of d3xp.dll from the code in d3xp/
set_target_properties(d3xp PROPERTIES OUTPUT_NAME "${D3XP_NAME}")
endif()

source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} PREFIX neo FILES ${src_d3xp})

set_target_properties(d3xp PROPERTIES PREFIX "")
set_target_properties(d3xp PROPERTIES COMPILE_DEFINITIONS "${D3XP_DEFS}")
set_target_properties(d3xp PROPERTIES COMPILE_FLAGS "-I${CMAKE_SOURCE_DIR}/d3xp")
target_include_directories(d3xp PRIVATE "${CMAKE_SOURCE_DIR}/d3xp")
set_target_properties(d3xp PROPERTIES LINK_FLAGS "${ldflags}")
set_target_properties(d3xp PROPERTIES INSTALL_NAME_DIR "@executable_path")
if (AROS)
Expand Down
5 changes: 5 additions & 0 deletions d3xp/AF.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -892,6 +892,11 @@ bool idAF::Load( idEntity *ent, const char *fileName ) {
for ( i = 0; i < physicsObj.GetNumConstraints(); i++ ) {
idAFConstraint *constraint = physicsObj.GetConstraint( i );
for ( j = 0; j < file->constraints.Num(); j++ ) {
// DG: FIXME: GCC rightfully complains that file->constraints[j]->type and constraint->GetType()
// are of different enum types, and their values are different in some cases:
// CONSTRAINT_HINGESTEERING has no DECLAF_CONSTRAINT_ equivalent,
// and thus DECLAF_CONSTRAINT_SLIDER != CONSTRAINT_SLIDER (5 != 6)
// and DECLAF_CONSTRAINT_SPRING != CONSTRAINT_SPRING (6 != 10)
if ( file->constraints[j]->name.Icmp( constraint->GetName() ) == 0 &&
file->constraints[j]->type == constraint->GetType() ) {
break;
Expand Down
Loading