#!/bin/bash # Copyright 1999-2021 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 source tests-common.sh || exit EAPI=7 inherit flag-o-matic CFLAGS="-a -b -c=1 --param l1-cache-size=32" CXXFLAGS="-x -y -z=2" LDFLAGS="-l -m -n=3 -Wl,--remove-me" ftend() { local ret=$? local msg="Failed; flags are:" local flag for flag in $(all-flag-vars) ; do msg+=$'\n\t'"${flag}=${!flag}" done tend ${ret} "${msg}" } tbegin "is-flag" ! (is-flag 1 2 3) 2>/dev/null ftend tbegin "is-ldflag" ! (is-ldflag 1 2 3) 2>/dev/null ftend while read exp flag ; do [[ -z ${exp}${flag} ]] && continue tbegin "is-flagq ${flag}" is-flagq ${flag} [[ ${exp} -eq $? ]] ftend done <<<" 1 -L 0 -a 0 -x " while read exp flag ; do [[ -z ${exp}${flag} ]] && continue tbegin "is-ldflagq ${flag}" is-ldflagq "${flag}" [[ ${exp} -eq $? ]] ftend done <<<" 1 -a 0 -n=* 1 -n " tbegin "strip-unsupported-flags for -z=2" strip-unsupported-flags [[ ${CFLAGS} == "--param l1-cache-size=32" ]] && [[ ${CXXFLAGS} == "-z=2" ]] && [[ ${LDFLAGS} == "" ]] ftend CFLAGS="-O2 -B/foo -O1" CXXFLAGS="-O2 -B/foo -O1" LDFLAGS="-O2 -B/foo -O1" tbegin "strip-unsupported-flags for '-B/foo'" strip-unsupported-flags [[ ${CFLAGS} == "-O2 -B/foo -O1" ]] && [[ ${CXXFLAGS} == "-O2 -B/foo -O1" ]] && [[ ${LDFLAGS} == "-O2 -B/foo -O1" ]] ftend CFLAGS="-O2 -B /foo -O1" CXXFLAGS="-O2 -B /foo -O1" LDFLAGS="-O2 -B /foo -O1" tbegin "strip-unsupported-flags for '-B /foo'" strip-unsupported-flags [[ ${CFLAGS} == "-O2 -B /foo -O1" ]] && [[ ${CXXFLAGS} == "-O2 -B /foo -O1" ]] && [[ ${LDFLAGS} == "-O2 -B /foo -O1" ]] ftend for var in $(all-flag-vars) ; do eval ${var}=\"-filter -filter-glob -foo-${var%FLAGS}\" done tbegin "filter-flags basic" filter-flags -filter ( for var in $(all-flag-vars) ; do val=${!var} [[ ${val} == "-filter-glob -foo-${var%FLAGS}" ]] || exit 1 done ) ftend tbegin "filter-flags glob" filter-flags '-filter-*' ( for var in $(all-flag-vars) ; do val=${!var} [[ ${val} == "-foo-${var%FLAGS}" ]] || exit 1 done ) ftend tbegin "strip-flags basic" CXXFLAGS+=" -O999 " strip-flags [[ -z ${CFLAGS}${LDFLAGS}${CPPFLAGS} && ${CXXFLAGS} == "-O2" ]] ftend tbegin "replace-flags basic" CFLAGS="-O0 -foo" replace-flags -O0 -O1 [[ ${CFLAGS} == "-O1 -foo" ]] ftend tbegin "replace-flags glob" CXXFLAGS="-O0 -mcpu=bad -cow" replace-flags '-mcpu=*' -mcpu=good [[ ${CXXFLAGS} == "-O0 -mcpu=good -cow" ]] ftend tbegin "append-cflags basic" CFLAGS= append-cflags -O0 [[ ${CFLAGS} == " -O0" ]] ftend tbegin "append-cflags -DFOO='a b c'" CFLAGS= append-cflags '-DFOO="a b c"' [[ ${CFLAGS} == ' -DFOO="a b c"' ]] ftend tbegin "raw-ldflags" LDFLAGS='-Wl,-O1 -Wl,--as-needed -Wl,-z,now -flto' LDFLAGS=$(raw-ldflags) [[ ${LDFLAGS} == '-O1 --as-needed -z now' ]] ftend tbegin "test-flags-CC (valid flags)" out=$(test-flags-CC -O3) [[ $? -eq 0 && ${out} == "-O3" ]] ftend tbegin "test-flags-CC (valid flags, absolute path)" absolute_CC=$(type -P $(tc-getCC)) out=$(CC=${absolute_CC} test-flags-CC -O3) [[ $? -eq 0 && ${out} == "-O3" ]] ftend tbegin "test-flags-CC (invalid flags)" out=$(test-flags-CC -finvalid-flag) [[ $? -ne 0 && -z ${out} ]] ftend if type -P clang >/dev/null ; then tbegin "test-flags-CC (valid flags w/clang)" out=$(CC=clang test-flags-CC -O3) [[ $? -eq 0 && ${out} == "-O3" ]] ftend tbegin "test-flags-CC (invalid flags w/clang)" out=$(CC=clang test-flags-CC -finvalid-flag) [[ $? -ne 0 && -z ${out} ]] ftend tbegin "test-flags-CC (gcc-valid but clang-invalid flags)" out=$(CC=clang test-flags-CC -finline-limit=1200) [[ $? -ne 0 && -z ${out} ]] ftend tbegin "test-flags-CC (unused flags w/clang)" out=$(CC=clang test-flags-CC -Wl,-O1) [[ $? -eq 0 && ${out} == "-Wl,-O1" ]] ftend fi texit