CHECK_FUNCTION_EXISTS (funopen HAVE_FUNOPEN)
TEST_BIG_ENDIAN (WORDS_BIGENDIAN)
+IF (${CMAKE_MAJOR_VERSION} GREATER 2)
INCLUDE (CMakePushCheckState)
INCLUDE (CheckCCompilerFlag)
MACRO (check_linker_flag FLAG VAR)
- cmake_push_check_state(RESET)
- set(CMAKE_REQUIRED_FLAGS "${FLAG}")
- check_c_compiler_flag("" "${VAR}")
- cmake_pop_check_state()
+ CMAKE_PUSH_CHECK_STATE (RESET)
+ SET (CMAKE_REQUIRED_FLAGS "${FLAG}")
+ CHECK_C_COMPILER_FLAG ("" "${VAR}")
+ CMAKE_POP_CHECK_STATE ()
ENDMACRO (check_linker_flag)
-check_linker_flag("-Wl,--as-needed" HAS_LINKER_AS_NEEDED)
-check_linker_flag("-Wl,--version-script=${CMAKE_SOURCE_DIR}/src/libsolv.ver" HAS_LINKER_VERSION_SCRIPT)
+check_linker_flag("-Wl,--as-needed" HAVE_LINKER_AS_NEEDED)
+check_linker_flag("-Wl,--version-script=${CMAKE_SOURCE_DIR}/src/libsolv.ver" HAVE_LINKER_VERSION_SCRIPT)
+ELSE (${CMAKE_MAJOR_VERSION} GREATER 2)
+SET (HAVE_LINKER_AS_NEEDED 1)
+SET (HAVE_LINKER_VERSION_SCRIPT 1)
+ENDIF (${CMAKE_MAJOR_VERSION} GREATER 2)
# should create config.h with #cmakedefine instead...
FOREACH (VAR HAVE_STRCHRNUL HAVE_FOPENCOOKIE HAVE_FUNOPEN WORDS_BIGENDIAN
IF (ENABLE_HAIKU)
SET (SYSTEM_LIBRARIES ${HAIKU_SYSTEM_LIBRARIES} ${SYSTEM_LIBRARIES})
ENDIF (ENABLE_HAIKU)
-IF (HAS_LINKER_AS_NEEDED)
+IF (HAVE_LINKER_AS_NEEDED)
SET (SYSTEM_LIBRARIES "-Wl,--as-needed" ${SYSTEM_LIBRARIES})
-ENDIF (HAS_LINKER_AS_NEEDED)
+ENDIF (HAVE_LINKER_AS_NEEDED)
ADD_SUBDIRECTORY (src)
ADD_SUBDIRECTORY (ext)
r = normalize_dep(pool, rd->name, bq, flags);
if (r == 0)
{
- if (rdflags == REL_AND)
+ if (rdflags == REL_AND && (flags & CPLXDEPS_DONTFIX) == 0)
return 0;
if (rdflags == REL_COND)
{
- r = normalize_dep(pool, rd->evr, bq, flags ^ CPLXDEPS_TODNF);
+ r = normalize_dep(pool, rd->evr, bq, (flags ^ CPLXDEPS_TODNF) & ~CPLXDEPS_DONTFIX);
if (r == 0 || r == 1)
return r == 0 ? 1 : 0;
invert_depblocks(pool, bq, bqcnt); /* invert block for COND */
/* get blocks of second argument */
bqcnt2 = bq->count;
/* COND is OR with NEG on evr block, so we invert the todnf flag in that case */
- r = normalize_dep(pool, rd->evr, bq, rdflags == REL_COND ? (flags ^ CPLXDEPS_TODNF) : flags);
+ r = normalize_dep(pool, rd->evr, bq, rdflags == REL_COND ? ((flags ^ CPLXDEPS_TODNF) & ~CPLXDEPS_DONTFIX) : flags);
if (r == 0)
{
if (rdflags == REL_OR)
return -1;
+ if (rdflags == REL_AND && (flags & CPLXDEPS_DONTFIX) != 0)
+ return -1;
queue_truncate(bq, bqcnt);
return rdflags == REL_COND ? 1 : 0;
}
extern int pool_normalize_complex_dep(Pool *pool, Id dep, Queue *bq, int flags);
-#define CPLXDEPS_TODNF (1 << 0)
-#define CPLXDEPS_EXPAND (1 << 1)
-#define CPLXDEPS_INVERT (1 << 2)
-#define CPLXDEPS_NAME (1 << 3)
+#define CPLXDEPS_TODNF (1 << 0)
+#define CPLXDEPS_EXPAND (1 << 1)
+#define CPLXDEPS_INVERT (1 << 2)
+#define CPLXDEPS_NAME (1 << 3)
+#define CPLXDEPS_DONTFIX (1 << 4)
#endif
{
Pool *pool = solv->pool;
Repo *installed = solv->installed;
- int i, j;
+ int i, j, flags;
Queue bq;
queue_init(&bq);
-
+ flags = dontfix ? CPLXDEPS_DONTFIX : 0;
/* CNF expansion for requires, DNF + INVERT expansion for conflicts */
- i = pool_normalize_complex_dep(pool, dep, &bq, type == SOLVER_RULE_PKG_REQUIRES ? 0 : (CPLXDEPS_TODNF | CPLXDEPS_EXPAND | CPLXDEPS_INVERT));
+ if (type == SOLVER_RULE_PKG_CONFLICTS)
+ flags |= CPLXDEPS_TODNF | CPLXDEPS_EXPAND | CPLXDEPS_INVERT;
+
+ i = pool_normalize_complex_dep(pool, dep, &bq, flags);
/* handle special cases */
if (i == 0)
{