]> git.ipfire.org Git - thirdparty/libsolv.git/commitdiff
Fix linker checks
authorMichael Schroeder <mls@suse.de>
Wed, 20 May 2015 13:05:05 +0000 (15:05 +0200)
committerMichael Schroeder <mls@suse.de>
Wed, 20 May 2015 13:05:05 +0000 (15:05 +0200)
CMakeLists.txt
src/cplxdeps.c
src/cplxdeps.h
src/rules.c

index 7b43fd3d1efedc8241a1f90171b119848065a976..53721d32573469d87ce022a566a72fbd1cbde6e4 100644 (file)
@@ -206,16 +206,21 @@ CHECK_FUNCTION_EXISTS (fopencookie HAVE_FOPENCOOKIE)
 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
@@ -318,9 +323,9 @@ ENDIF (ENABLE_RPMDB)
 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)
index 8dac0d4bdf59f99e975f2a67df91ade7e30b8fbf..1be68688a6c6d8ef962910ccc43b45207d0877f2 100644 (file)
@@ -158,11 +158,11 @@ normalize_dep(Pool *pool, Id dep, Queue *bq, int flags)
          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 */
@@ -180,11 +180,13 @@ normalize_dep(Pool *pool, Id dep, Queue *bq, int flags)
          /* 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;
            }
index 38b668a71a250f3823cb4c409e8628b52c421e0e..b5533054a0138f5eb3bfd2c901a502f82d34ff34 100644 (file)
@@ -28,10 +28,11 @@ pool_is_complex_dep(Pool *pool, Id dep)
 
 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
 
index 1b2562729dc3a74b384975bc851dee9fa5407bcc..0888fb0d7ce2c24b1e1e1fa56dcbd2851765103f 100644 (file)
@@ -498,13 +498,16 @@ add_complex_deprules(Solver *solv, Id p, Id dep, int type, int dontfix, Queue *w
 {
   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)
     {