jjb: babeltrace: add shellcheck to lint jobs
[lttng-ci.git] / scripts / binutils-gdb / build.sh
index c8fbc705344e825e47cd68c16fa6908e91e7ce0e..e96422081d81eccc5dadad6de6fe1f3cdbc0150e 100755 (executable)
@@ -38,6 +38,8 @@ from xml.etree.ElementTree import ElementTree, Element, SubElement
 line_re = re.compile(
     r"^(PASS|XPASS|FAIL|XFAIL|KFAIL|DUPLICATE|UNTESTED|UNSUPPORTED|UNRESOLVED): (.*?\.exp): (.*)"
 )
+running_re = re.compile(r"^Running .*/(gdb\.[^/]+/.*\.exp)")
+error_re = re.compile(r"^ERROR: (.*)")
 
 pass_count = 0
 fail_count = 0
@@ -65,7 +67,29 @@ testsuite = SubElement(
 )
 SubElement(testsuite, "properties")
 
+cur_test = None
+
 for line in sys.stdin:
+    m = running_re.match(line)
+    if m:
+        cur_test = m.group(1)
+        continue
+
+    m = error_re.match(line)
+    if m:
+        test = cur_test if cur_test else "<unknown test>"
+        msg = m.group(1)
+        print("ERROR: {} - {}".format(test, msg), file=sys.stderr)
+        error_count += 1
+
+        testcase_name = test
+        testcase = SubElement(
+            testsuite,
+            "testcase",
+            {"name": testcase_name, "classname": "classname", "time": "0"},
+        )
+        SubElement(testcase, "error", {"type": "ERROR"})
+
     m = line_re.match(line)
     if not m:
         continue
@@ -96,7 +120,7 @@ for line in sys.stdin:
     else:
         assert False
 
-testsuite.attrib["tests"] = str(pass_count + fail_count + skip_count)
+testsuite.attrib["tests"] = str(pass_count + fail_count + skip_count + error_count)
 testsuite.attrib["failures"] = str(fail_count)
 testsuite.attrib["skipped"] = str(skip_count)
 testsuite.attrib["errors"] = str(error_count)
@@ -126,28 +150,69 @@ SRCDIR="$WORKSPACE/src/binutils-gdb"
 TMPDIR="$WORKSPACE/tmp"
 PREFIX="/build"
 
+function use_ccache()
+{
+    case "$platform" in
+    macos-*)
+        return 1
+        ;;
+    *)
+        return 0
+        ;;
+    esac
+}
+
 # Create tmp directory
 rm -rf "$TMPDIR"
 mkdir -p "$TMPDIR"
 
 export TMPDIR
-export CFLAGS="-O2 -fsanitize=address"
-export CXXFLAGS="-O2 -fsanitize=address -D_GLIBCXX_DEBUG=1"
+export CFLAGS="-O2 -g -fsanitize=address"
+export CXXFLAGS="-O2 -g -fsanitize=address -D_GLIBCXX_DEBUG=1"
 export LDFLAGS="-fsanitize=address"
+export CC="cc"
+export CXX="c++"
+
+if use_ccache; then
+       CC="ccache $CC"
+       CXX="ccache $CXX"
+fi
+
+# To make GDB find libcc1.so
+export LD_LIBRARY_PATH="/usr/lib/gcc/x86_64-linux-gnu/11:${LD_LIBRARY_PATH:-}"
 
 # Set platform variables
+export TAR=tar
+export MAKE=make
+
 case "$platform" in
+macos-*)
+    export NPROC="getconf _NPROCESSORS_ONLN"
+    export PATH="/opt/local/bin:/opt/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"
+    export CPPFLAGS="-I/opt/local/include"
+    export LDFLAGS="-L/opt/local/lib"
+    export PYTHON="python3.9"
+    export PYTHON_CONFIG="python3.9-config"
+    ;;
 *)
-    export MAKE=make
-    export TAR=tar
     export NPROC=nproc
     ;;
 esac
 
 # Print build env details
+print_header "Build environment details"
+print_hardware || true
 print_os || true
 print_tooling || true
 
+if use_ccache; then
+       ccache -c
+fi
+
+# This job has been seen generating cores in /tmp, filling and and causing
+# problems.  Remove any leftover core from a previous job.
+rm /tmp/core.* || true
+
 # Enter the source directory
 cd "$SRCDIR"
 
@@ -180,6 +245,12 @@ case "$conf" in
     ;;
 esac
 
+case "$platform" in
+macos-*)
+    CONF_OPTS+=("--disable-werror")
+    ;;
+esac
+
 # Build type
 # oot     : out-of-tree build
 # dist    : build via make dist
@@ -203,10 +274,17 @@ esac
 # We are now inside a configured build directory
 
 # BUILD!
-$MAKE -j "$($NPROC)" V=1 MAKEINFO=/bin/true
+$MAKE -j "$($NPROC)" V=1 MAKEINFO=true
 
 # Install in the workspace
-$MAKE install DESTDIR="$WORKSPACE"
+$MAKE install DESTDIR="$WORKSPACE" MAKEINFO=true
+
+case "$platform" in
+macos-*)
+    # Stop there, don't run tests on macOS.
+    exit 0
+    ;;
+esac
 
 case "$target_board" in
 unix | native-gdbserver | native-extended-gdbserver)
@@ -221,7 +299,10 @@ esac
 
 # Run tests, don't fail now, we know that "make check" is going to fail,
 # since some tests don't pass.
-$MAKE -C gdb --keep-going check -j "$($NPROC)" RUNTESTFLAGS="$RUNTESTFLAGS" FORCE_PARALLEL="1" || true
+$MAKE -C gdb/testsuite site.exp
+# shellcheck disable=SC2016
+echo 'set gdb_test_timeout [expr 5 * $timeout]' >> gdb/testsuite/site.exp
+$MAKE -C gdb --keep-going check RUNTESTFLAGS="$RUNTESTFLAGS" || true
 
 # Copy the dejagnu test results for archiving before cleaning the build dir
 mkdir "${WORKSPACE}/results"
@@ -866,12 +947,12 @@ known_failures_file="known-failures-${target_board}"
 known_failures_re_file="known-failures-re-${target_board}"
 grep --invert-match --fixed-strings --file="$known_failures_file" "${WORKSPACE}/results/gdb.sum" | \
     grep --invert-match --extended-regexp --file="$known_failures_re_file" > "${WORKSPACE}/results/gdb.filtered.sum"
-grep --extended-regexp --regexp="^(FAIL|XPASS|UNRESOLVED|DUPLICATE):" "${WORKSPACE}/results/gdb.filtered.sum" > "${WORKSPACE}/results/gdb.fail.sum" || true
+grep --extended-regexp --regexp="^(FAIL|XPASS|UNRESOLVED|DUPLICATE|ERROR):" "${WORKSPACE}/results/gdb.filtered.sum" > "${WORKSPACE}/results/gdb.fail.sum" || true
 
 # For informational purposes: check if some known failure lines did not appear
 # in the gdb.sum.
 echo "Known failures that don't appear in gdb.sum:"
-while read line; do
+while read -r line; do
     if ! grep --silent --fixed-strings "$line" "${WORKSPACE}/results/gdb.sum"; then
         echo "$line"
     fi
This page took 0.024966 seconds and 4 git commands to generate.