check_make_unix.sh

来自「ncbi源码」· Shell 代码 · 共 479 行

SH
479
字号
#! /bin/sh# $Id: check_make_unix.sh,v 1000.3 2004/06/01 16:51:28 gouriano Exp $# Author:  Vladimir Ivanov, NCBI ############################################################################## Compile a check script and copy necessary files to run tests in the # UNIX build tree.## Usage:#    check_make_unix.sh <test_list> <build_dir> <target_dir> <check_script>##    test_list       - a list of tests (it build with "make check_r")#                      (default: "<build_dir>/check.sh.list")#    build_dir       - path to UNIX build tree like".../build/..."#                      (default: will try determine path from current work#                      directory -- root of build tree ) #    top_srcdir      - path to the root src directory#                      (default: will try determine path from current work#                      directory -- root of build tree ) #    target_dir      - path where the check script and logs will be created#                      (default: current dir) #    check_script    - name of the check script (without path).#                      (default: "check.sh" / "<target_dir>/check.sh")##    If any parameter is skipped that will be used default value for it.## Note:#    Work with UNIX build tree only (any configuration).############################################################################# Parametersres_out="check.sh"res_list="$res_out.list"# Fields delimiters in the list# (this symbols used directly in the "sed" command)x_delim=" ____ "x_delim_internal="~"x_tmp="/var/tmp"x_list=$1x_build_dir=$2x_top_srcdir=$3x_target_dir=$4x_out=$5# Check for build dirif [ ! -z "$x_build_dir" ]; then   if [ ! -d "$x_build_dir" ]; then      echo "Build directory \"$x_build_dir\" don't exist."      exit 1    fi   x_build_dir=`(cd "$x_build_dir"; pwd | sed -e 's/\/$//g')`else   # Get build dir name from the current path   x_build_dir=`pwd | sed -e 's%/build.*$%%'`   if [ -d "$x_build_dir/build" ]; then      x_build_dir="$x_build_dir/build"   fifix_conf_dir=`dirname "$x_build_dir"`x_bin_dir=`(cd "$x_build_dir/../bin"; pwd | sed -e 's/\/$//g')`# Check for top_srcdirif [ ! -z "$x_top_srcdir" ]; then   if [ ! -d "$x_top_srcdir" ]; then      echo "Top source directory \"$x_top_srcdir\" don't exist."      exit 1    fi   x_root_dir=`(cd "$x_top_srcdir"; pwd | sed -e 's/\/$//g')`else   # Get top src dir name from the build directory   x_root_dir=`dirname "$x_conf_dir"`fi# Check for target dirif [ ! -z "$x_target_dir" ]; then   if [ ! -d "$x_target_dir" ]; then      echo "Target directory \"$x_target_dir\" don't exist."      exit 1    fi    x_target_dir=`(cd "$x_target_dir"; pwd | sed -e 's/\/$//g')`else   x_target_dir=`pwd`fi# Check for a imported project or intree projectres=`pwd | grep "/internal/c++/src/"`if [ ! -z "$res" ] ; then   x_import_prj="yes"   x_compile_dir="`pwd | sed -e 's%/internal/c++/src.*$%%g'`/internal/c++/src"else   x_import_prj="no"   x_compile_dir="$x_build_dir"fiif [ -z "$x_list" ]; then   x_list="$x_target_dir/$res_list"fiif [ -z "$x_out" ]; then   x_out="$x_target_dir/$res_out"fix_script_name=`echo "$x_out" | sed -e 's%^.*/%%'`# Check for a list fileif [ ! -f "$x_list" ]; then   echo "Check list file \"$x_list\" not found."   exit 1 fi# Features detectionx_features=""for f in $x_conf_dir/status/*.enabled; do   f=`echo $f | sed 's|^.*/status/\(.*\).enabled$|\1|g'`   x_features=`echo "$x_features $f"`donex_features=`echo "$x_features" | sed 's|^ *||g'`#echo ----------------------------------------------------------------------#echo "Imported project  :" $x_import_prj#echo "C++ root dir      :" $x_root_dir#echo "Configuration dir :" $x_conf_dir#echo "Build dir         :" $x_build_dir#echo "Compile dir       :" $x_compile_dir#echo "Target dir        :" $x_target_dir#echo "Check script      :" $x_out#echo ----------------------------------------------------------------------#//////////////////////////////////////////////////////////////////////////cat > $x_out <<EOF#! /bin/shres_journal="$x_out.journal"res_log="$x_out.log"res_list="$x_list"res_concat="$x_out.out"res_concat_err="$x_out.out_err"##  Printout USAGE info and exitUsage() {   cat <<EOF_usageUSAGE:  $x_script_name {run | clean | concat | concat_err} run         Run the tests. Create output file ("*.test_out") for each test,              plus journal and log files.  clean       Remove all files created during the last "run" and this script              itself. concat      Concatenate all files created during the last "run" into one big              file "\$res_log". concat_err  Like previous. But into the file "\$res_concat_err"              will be added outputs of failed tests only.ERROR:  \$1EOF_usage    exit 1}if [ \$# -ne 1 ]; then   Usage "Invalid number of arguments."fi###  What to do (cmd-line arg)method="\$1"### Actioncase "\$method" in#----------------------------------------------------------   run )      ;;#----------------------------------------------------------   clean )      x_files=\`cat \$res_journal | sed -e 's/ /%gj_s4%/g'\`      for x_file in \$x_files; do         x_file=\`echo "\$x_file" | sed -e 's/%gj_s4%/ /g'\`         rm -f \$x_file > /dev/null      done      rm -f \$res_journal \$res_log \$res_list \$res_concat \$res_concat_err > /dev/null      rm -f $x_out > /dev/null      exit 0      ;;#----------------------------------------------------------   concat )      rm -f "\$res_concat"      (       cat \$res_log      x_files=\`cat \$res_journal | sed -e 's/ /%gj_s4%/g'\`      for x_file in \$x_files; do         x_file=\`echo "\$x_file" | sed -e 's/%gj_s4%/ /g'\`         echo          echo          cat \$x_file      done      ) >> \$res_concat      exit 0      ;;#----------------------------------------------------------   concat_err )      rm -f "\$res_concat_err"      (       cat \$res_log | grep 'ERR \['      x_files=\`cat \$res_journal | sed -e 's/ /%gj_s4%/g'\`      for x_file in \$x_files; do         x_file=\`echo "\$x_file" | sed -e 's/%gj_s4%/ /g'\`         x_code=\`cat \$x_file | grep -c '@@@ EXIT CODE:'\`         test \$x_code -ne 0 || continue         x_good=\`cat \$x_file | grep -c '@@@ EXIT CODE: 0'\`         if [ \$x_good -ne 1 ]; then            echo             echo             cat \$x_file         fi      done      ) >> \$res_concat_err      exit 0      ;;#----------------------------------------------------------   * )      Usage "Invalid method name."      ;;esac# Export some global varstop_srcdir="$x_root_dir"export top_srcdirfeatures="$x_features"export features# Add current, build and scripts directories to PATHPATH=".:${x_build_dir}:${x_root_dir}/scripts:\${PATH}"export PATH# Define time-guard script to run tests from other scriptsCHECK_EXEC="${x_root_dir}/scripts/check/check_exec_test.sh"CHECK_EXEC_STDIN="\$CHECK_EXEC -stdin"export CHECK_EXECexport CHECK_EXEC_STDINEOFif [ -n "$x_conf_dir"  -a  -d "$x_conf_dir/lib" ];  then   cat >> $x_out <<EOF# Add a library path for running tests. $x_root_dir/scripts/common.shCOMMON_AddRunpath "$x_conf_dir/lib"EOFelse   echo "WARNING:  Cannot find path to the library dir."ficat >> $x_out <<EOF# Runcount_ok=0count_err=0count_absent=0rm -f "\$res_journal"rm -f "\$res_log"ulimit -c 1000000##  Run one testRunTest() {   # Parameters   x_work_dir_tail="\$1"   x_work_dir="$x_compile_dir/\$x_work_dir_tail"   x_test="\$2"   x_app="\$3"   x_run="\$4"   x_test_out="\$x_work_dir/\$x_test.\$5"   x_timeout="\$6"   # Check existence of the test's application directory   if [ -d "\$x_work_dir" ]; then      # Write header to output file       echo "\$x_test_out" >> \$res_journal      (        echo "======================================================================"        echo "\$x_run"        echo "======================================================================"        echo       ) > \$x_test_out 2>&1      # Remove old core file if it exist (for clarity of the test)      corefile="\$x_work_dir/core"      rm -f "\$corefile"  > /dev/null 2>&1      # Goto the test's directory       cd "\$x_work_dir"      x_cmd="[\$x_work_dir_tail] \$x_run"      # And run test if it exist      if [ -f "\$x_app" ]; then         # Fix empty parameters (replace "" to \"\", '' to \'\')         x_run_fix=\`echo "\$x_run" | sed -e 's/""/\\\\\\\\\\"\\\\\\\\\\"/g' -e "s/''/\\\\\\\\\\'\\\\\\\\\\'/g"\`         # Run check         CHECK_TIMEOUT="\$x_timeout"         export CHECK_TIMEOUT         check_exec="$x_root_dir/scripts/check/check_exec.sh"         \$check_exec time -p \`eval echo \$x_run_fix\` >$x_tmp/\$\$.out 2>&1         result=\$?         sed -e '/ ["][$][@]["].*\$/ {            s/^.*: //            s/ ["][$][@]["].*$//            }' $x_tmp/\$\$.out >> \$x_test_out         # Get application execution time         exec_time=\`$x_build_dir/sysdep.sh tl 3 $x_tmp/\$\$.out\`         exec_time=\`echo \$exec_time | tr '\n' '?'\`         exec_time=\`echo \$exec_time | sed -e 's/?$//' -e 's/?/, /g' -e 's/[ ] */ /g'\`         rm -f $x_tmp/\$\$.out         # Write result of the test into the his output file         echo "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" >> \$x_test_out         echo "@@@ EXIT CODE: \$result" >> \$x_test_out         if [ -f "\$corefile" ]; then            echo "@@@ CORE DUMPED" >> \$x_test_out            if [ -d "$x_bin_dir" -a -f "$x_bin_dir/\$x_test" ]; then               mv "\$corefile" "$x_bin_dir/\$x_test.core"            else               rm -f "\$corefile"            fi         fi         # And write result also on the screen and into the log         if [ \$result -eq 0 ]; then            echo "OK  --  \$x_cmd     (\$exec_time)"            echo "OK  --  \$x_cmd     (\$exec_time)" >> \$res_log            count_ok=\`expr \$count_ok + 1\`         else            echo "ERR --  \$x_cmd     (\$exec_time)"            echo "ERR [\$result] --  \$x_cmd     (\$exec_time)" >> \$res_log            count_err=\`expr \$count_err + 1\`         fi      else         echo "ABS --  \$x_cmd"         echo "ABS --  \$x_cmd" >> \$res_log         count_absent=\`expr \$count_absent + 1\`      fi  else      # Test application is absent      echo "ABS -- \$x_work_dir - \$x_test"      echo "ABS -- \$x_work_dir - \$x_test" >> \$res_log      count_absent=\`expr \$count_absent + 1\`  fi}EOF#//////////////////////////////////////////////////////////////////////////# Read list with testsx_tests=`cat "$x_list" | sed -e 's/ /%gj_s4%/g'`x_test_prev=""# For all testsfor x_row in $x_tests; do   # Get one row from list   x_row=`echo "$x_row" | sed -e 's/%gj_s4%/ /g' -e 's/^ *//' -e 's/ ____ /~/g'`   # Split it to parts   x_src_dir="$x_root_dir/src/`echo \"$x_row\" | sed -e 's/~.*$//'`"   x_test=`echo "$x_row" | sed -e 's/^[^~]*~//' -e 's/~.*$//'`   x_app=`echo "$x_row" | sed -e 's/^[^~]*~//' -e 's/^[^~]*~//' -e 's/~.*$//'`   x_cmd=`echo "$x_row" | sed -e 's/^[^~]*~//' -e 's/^[^~]*~//' -e 's/^[^~]*~//' -e 's/~.*$//'`   x_files=`echo "$x_row" | sed -e 's/^[^~]*~//' -e 's/^[^~]*~//' -e 's/^[^~]*~//' -e 's/^[^~]*~//' -e 's/~.*$//'`   x_timeout=`echo "$x_row" | sed -e 's/^[^~]*~//' -e 's/^[^~]*~//' -e 's/^[^~]*~//' -e 's/^[^~]*~//'  -e 's/^[^~]*~//' -e 's/~.*$//'`   x_requires=" `echo \"$x_row\" | sed -e 's/.*~//'` "   # Check application requirements   for x_req in $x_requires; do      test -f "$x_conf_dir/status/$x_req.enabled"  ||  continue 2   done   # Application base build directory   x_work_dir_tail="`echo \"$x_row\" | sed -e 's/~.*$//'`"   x_work_dir="$x_compile_dir/$x_work_dir_tail"   # Copy specified files to the build directory   if [ "$x_import_prj" = "no" ]; then      if [ ! -z "$x_files" ]; then         for i in $x_files ; do            x_copy="$x_src_dir/$i"            if [ -f "$x_copy"  -o  -d "$x_copy" ]; then               cp -prf "$x_copy" "$x_work_dir"            else               echo "Warning:  The copied object \"$x_copy\" should be a file or directory!"               continue 1            fi         done      fi   fi   # Generate extension for tests output file   if [ "$x_test" != "$x_test_prev" ]; then       x_cnt=1      x_test_out="test_out"   else      x_cnt=`expr $x_cnt + 1`      x_test_out="test_out$x_cnt"   fi   x_test_prev="$x_test"#//////////////////////////////////////////////////////////////////////////   # Write test commands for current test into a shell script file   cat >> $x_out <<EOF######################################################################RunTest "$x_work_dir_tail" \\        "$x_test" \\        "$x_app" \\        "$x_cmd" \\        "$x_test_out" \\        "$x_timeout"EOF#//////////////////////////////////////////////////////////////////////////done # for x_row in x_tests# Write ending code into the script cat >> $x_out <<EOF# Write result of the tests executionechoecho "Succeeded : \$count_ok"echo "Failed    : \$count_err"echo "Absent    : \$count_absent"echoif [ \$count_err -eq 0 ]; then   echo   echo "******** ALL TESTS COMPLETED SUCCESSFULLY ********"   echofiexit \$count_errEOF# Set execute mode to scriptchmod a+x "$x_out"exit 0# #  ===========================================================================#  PRODUCTION $Log: check_make_unix.sh,v $#  PRODUCTION Revision 1000.3  2004/06/01 16:51:28  gouriano#  PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.38#  PRODUCTION#  ===========================================================================# 

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?