1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- #!/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
|