[libcxx] r292297 - Allow sym_diff.py to report non-zero for non-breaking ABI changes

Eric Fiselier via cfe-commits cfe-commits at lists.llvm.org
Tue Jan 17 16:05:01 PST 2017


Author: ericwf
Date: Tue Jan 17 18:05:01 2017
New Revision: 292297

URL: http://llvm.org/viewvc/llvm-project?rev=292297&view=rev
Log:
Allow sym_diff.py to report non-zero for non-breaking ABI changes

Modified:
    libcxx/trunk/lib/abi/CMakeLists.txt
    libcxx/trunk/utils/sym_check/sym_check/diff.py
    libcxx/trunk/utils/sym_check/sym_diff.py

Modified: libcxx/trunk/lib/abi/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/lib/abi/CMakeLists.txt?rev=292297&r1=292296&r2=292297&view=diff
==============================================================================
--- libcxx/trunk/lib/abi/CMakeLists.txt (original)
+++ libcxx/trunk/lib/abi/CMakeLists.txt Tue Jan 17 18:05:01 2017
@@ -22,7 +22,8 @@ if (LIBCXX_HAS_ABILIST_CONFIGURATION)
     set(ABILIST_FILE "${CMAKE_CURRENT_LIST_DIR}/${TARGET_TRIPLE}.abilist")
     set(SYMDIFF_EXE "${LIBCXX_SOURCE_DIR}/utils/sym_check/sym_diff.py")
     add_custom_target(check-cxx-abilist
-            ${SYMDIFF_EXE} --only-stdlib-symbols ${ABILIST_FILE} $<TARGET_SONAME_FILE:cxx_shared>
+            ${SYMDIFF_EXE} --only-stdlib-symbols --strict ${ABILIST_FILE}
+            $<TARGET_SONAME_FILE:cxx_shared>
             DEPENDS cxx_shared
             COMMENT "Testing ABI compatibility...")
 endif()

Modified: libcxx/trunk/utils/sym_check/sym_check/diff.py
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/utils/sym_check/sym_check/diff.py?rev=292297&r1=292296&r2=292297&view=diff
==============================================================================
--- libcxx/trunk/utils/sym_check/sym_check/diff.py (original)
+++ libcxx/trunk/utils/sym_check/sym_check/diff.py Tue Jan 17 18:05:01 2017
@@ -98,4 +98,6 @@ def report_diff(added_syms, removed_syms
             report += 'ABI BREAKAGE: SYMBOLS ADDED OR REMOVED!'
     else:
         report += 'Symbols match.'
-    return report, int(abi_break)
+    is_different = abi_break or bool(len(added_syms)) \
+                   or bool(len(changed_syms))
+    return report, abi_break, is_different

Modified: libcxx/trunk/utils/sym_check/sym_diff.py
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/utils/sym_check/sym_diff.py?rev=292297&r1=292296&r2=292297&view=diff
==============================================================================
--- libcxx/trunk/utils/sym_check/sym_diff.py (original)
+++ libcxx/trunk/utils/sym_check/sym_diff.py Tue Jan 17 18:05:01 2017
@@ -30,6 +30,10 @@ def main():
     parser.add_argument('--only-stdlib-symbols', dest='only_stdlib',
                         help="Filter all symbols not related to the stdlib",
                         action='store_true', default=False)
+    parser.add_argument('--strict', dest='strict',
+                        help="Exit with a non-zero status if any symbols "
+                             "differ",
+                        action='store_true', default=False)
     parser.add_argument(
         '-o', '--output', dest='output',
         help='The output file. stdout is used if not given',
@@ -54,16 +58,16 @@ def main():
     added, removed, changed = diff.diff(old_syms_list, new_syms_list)
     if args.removed_only:
         added = {}
-    report, is_break = diff.report_diff(added, removed, changed,
-                                        names_only=args.names_only,
-                                        demangle=args.demangle)
+    report, is_break, is_different = diff.report_diff(
+        added, removed, changed, names_only=args.names_only,
+        demangle=args.demangle)
     if args.output is None:
         print(report)
     else:
         with open(args.output, 'w') as f:
             f.write(report + '\n')
-    sys.exit(is_break)
-
+    exit_code = 1 if is_break or (args.strict and is_different) else 0
+    sys.exit(exit_code)
 
 if __name__ == '__main__':
     main()




More information about the cfe-commits mailing list