1#!/bin/sh 2# Update abilist files based on differences on one architecture. 3# Copyright (C) 2015-2022 Free Software Foundation, Inc. 4# This file is part of the GNU C Library. 5# 6# The GNU C Library is free software; you can redistribute it and/or 7# modify it under the terms of the GNU Lesser General Public 8# License as published by the Free Software Foundation; either 9# version 2.1 of the License, or (at your option) any later version. 10# 11# The GNU C Library is distributed in the hope that it will be useful, 12# but WITHOUT ANY WARRANTY; without even the implied warranty of 13# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14# Lesser General Public License for more details. 15# 16# You should have received a copy of the GNU Lesser General Public 17# License along with the GNU C Library; if not, see 18# <https://www.gnu.org/licenses/>. 19 20set -e 21export LC_ALL=C 22 23if [ $# -lt 2 ]; then 24 echo "usage: $0 OLD-FILE NEW-FILE FILES-TO-BE-PATCHED..." 1>&2 25 exit 2 26elif [ $# -eq 2 ]; then 27 echo "info: no files to patch" 1>&2 28 exit 0 29fi 30 31old_file="$1" 32shift 33new_file="$1" 34shift 35 36tmp_old_sorted="$(mktemp)" 37tmp_new_sorted="$(mktemp)" 38tmp_new_symbols="$(mktemp)" 39tmp_patched="$(mktemp)" 40 41cleanup () { 42 rm -f -- "$tmp_old_sorted" "$tmp_new_sorted" \ 43 "$tmp_new_symbols" "$tmp_patched" 44} 45 46trap cleanup 0 47 48sort -u -o "$tmp_old_sorted" -- "$old_file" 49sort -u -o "$tmp_new_sorted" -- "$new_file" 50 51# -1 skips symbols only in $old_file (deleted symbols). 52# -3 skips symbols in both files (unchanged symbols). 53comm -1 -3 "$tmp_old_sorted" "$tmp_new_sorted" > "$tmp_new_symbols" 54 55new_symbol_count="$(wc -l < "$tmp_new_symbols")" 56if [ "$new_symbol_count" -eq 0 ]; then 57 echo "info: no symbols added" 1>&2 58 exit 0 59fi 60 61echo "info: $new_symbol_count symbol(s) added" 1>&2 62 63for to_be_patched in "$@" ; do 64 sort -u -o "$tmp_patched" -- "$to_be_patched" "$tmp_new_symbols" 65 if ! cmp -s -- "$to_be_patched" "$tmp_patched"; then 66 echo "info: updating $to_be_patched" 1>&2 67 cp -- "$tmp_patched" "$to_be_patched" 68 fi 69done 70