#!/usr/bin/env bash #*************************************************************************** # _ _ ____ _ # Project ___| | | | _ \| | # / __| | | | |_) | | # | (__| |_| | _ <| |___ # \___|\___/|_| \_\_____| # # Copyright (C) Viktor Szakats # # This software is licensed as described in the file COPYING, which # you should have received as part of this distribution. The terms # are also available at https://curl.se/docs/copyright.html. # # You may opt to use, copy, modify, merge, publish, distribute and/or sell # copies of the Software, and permit persons to whom the Software is # furnished to do so, under the terms of the COPYING file. # # This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY # KIND, either express or implied. # # SPDX-License-Identifier: curl # ########################################################################### detect_in_reused_sources=1 if [ "$detect_in_reused_sources" = '1' ]; then # Make symlinks for all re-used sources grep -E '^(lib|unit)[0-9]+_SOURCES = ' libtest/Makefile.inc unit/Makefile.inc \ | sed -E 's@^([a-z]+)/[a-zA-Z.]+:(lib|unit)([0-9]+)_SOURCES = (lib|unit)([0-9]+).+@\1 \2 \3 \5@g' | \ while read -r l; do if [[ "${l}" =~ ([a-z]+)\ ([a-z]+)\ ([0-9]+)\ ([0-9]+) ]]; then trg="${BASH_REMATCH[3]}" src="${BASH_REMATCH[4]}" if [ "${trg}" != "${src}" ]; then dir="${BASH_REMATCH[1]}" pfx="${BASH_REMATCH[2]}" ln -s "${pfx}${src}.c" "${dir}/${pfx}${trg}.c" fi fi done fi # Look for symbols possibly re-used in multiple sources. # # Falsely picks ups symbols in re-used sources, but guarded for a single use. # Misses shadowed variables. # shellcheck disable=SC2046 grep -E '^ *(static|struct) +' $(find libtest unit -maxdepth 1 -name 'lib*.c' -o -name 'unit*.c' -o -name 'mk-*.pl') \ | grep -E '^(libtest|unit)/' \ | grep -E '\.(c|pl):(static|struct)( +[a-zA-Z_* ]+)? +[a-zA-Z_][a-zA-Z0-9_]+ *' | sort -u \ | grep -o -E '[a-zA-Z_][a-zA-Z0-9_]+ *[=;[({]' | tr -d '=;[({ ' \ | grep -v -E '^(NULL$|sizeof$|CURLE_)' \ | sort | uniq -c | sort -k 2 | grep -v -E '^ +1 ' \ | awk '{print " \"" $2 "\","}' echo '---' # Extract list of macros that may be re-used by multiple tests. # # Picks up false-positive when the macro is defined to the same value everywhere. # shellcheck disable=SC2046 grep -E '^ *# *define +' $(find libtest unit -maxdepth 1 -name 'lib*.c' -o -name 'unit*.c' -o -name 'mk-*.pl') \ | grep -E '^(libtest|unit)/' \ | grep -o -E '.+\.(c|pl): *# *define +[A-Z_][A-Z0-9_]+' | sort -u \ | grep -o -E '[A-Z_][A-Z0-9_]+' \ | sort | uniq -c | sort -k 2 | grep -v -E '^ +1 ' \ | awk '{print " \"" $2 "\","}' if [ "$detect_in_reused_sources" = '1' ]; then # Delete symlinks for all re-used sources find libtest unit -type l -delete fi