140 строки
5.9 KiB
Bash
Исполняемый файл
140 строки
5.9 KiB
Bash
Исполняемый файл
#!/bin/sh
|
|
#
|
|
# Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
|
|
# University Research and Technology
|
|
# Corporation. All rights reserved.
|
|
# Copyright (c) 2004-2005 The University of Tennessee and The University
|
|
# of Tennessee Research Foundation. All rights
|
|
# reserved.
|
|
# Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
|
# University of Stuttgart. All rights reserved.
|
|
# Copyright (c) 2004-2005 The Regents of the University of California.
|
|
# All rights reserved.
|
|
# Copyright (c) 2009 Oak Ridge National Labs. All rights reserved.
|
|
#
|
|
# orte_show_help_replacement.sh Script to detect occurences of
|
|
# #include "orte/util/show_help.h", where actually either
|
|
# 1. #include "opal/util/output.h"
|
|
# 2. #include "orte/mca/rml/rml_types.h"
|
|
# were required.
|
|
#
|
|
# Some grep/sed mojo may be of interest to others...
|
|
#
|
|
|
|
#
|
|
# Function adds into FILE a HEADER as the first #include
|
|
#
|
|
# Checks for #if to do the right thing, but does not handle
|
|
# single-line or (even harder) multi-line comments
|
|
#
|
|
function add_header_first()
|
|
{
|
|
file=$1 # File to add header to
|
|
header=$2 # E.g. opal/util/output.h for #include "opal/util/output.h"
|
|
line=`grep -n "#include " $file | cut -f1 -d':' | head -n1`
|
|
|
|
# check if this is a header wrapped in #ifdef HAVE_LALALA_H, if so, add before #if or #ifdef
|
|
prev_line=$(($line - 1))
|
|
|
|
if [ $prev_line = -1 -o $prev_line = 0 ] ; then
|
|
prev_line=1
|
|
fi
|
|
|
|
head -n $prev_line $file | tail -n1 | grep -q "#if" \
|
|
&& sed -i -e "${prev_line}s:#if.*:#include \"$header\"\n\n\0:" $file \
|
|
|| sed -i -e "${line}s:#include.*:#include \"$header\"\n\0:" $file
|
|
}
|
|
|
|
|
|
function add_header()
|
|
{
|
|
file=$1 # File to add header to
|
|
header=$2 # E.g. opal/util/output.h for #include "opal/util/output.h"
|
|
after_header_pattern=$3 # Add after occurences of pattern, e.g. opal/util
|
|
line=`grep -n "#include \"$after_header_pattern" $file | cut -f1 -d':' | head -n1`
|
|
if [ $# -gt 3 -a "x$line" = "x" ] ; then
|
|
after_header_pattern=$4 # If above pattern is not found, try more generic, e.g. opal/
|
|
line=`grep -n "#include \"$after_header_pattern" $file | cut -f1 -d':' | head -n1`
|
|
|
|
# If we have a final even more general pattern to search for...
|
|
if [ $# -eq 5 -a "x$line" = "x" ] ; then
|
|
after_header_pattern=$5 # If above pattern is not found, try even more generic, e.g. opal/
|
|
line=`grep -n "#include \"$after_header_pattern" $file | cut -f1 -d':' | head -n1`
|
|
fi
|
|
# If still not found, go for plain '#include "'
|
|
if [ "x$line" = "x" ] ; then
|
|
echo Can neither find pattern $3 nor pattern $4 in file $file -- will include after the first include
|
|
line=`grep -n "#include \"" $file | cut -f1 -d':' | head -n1`
|
|
if [ "x$line" = "x" ] ; then
|
|
echo REAL ERROR -- NO INCLUDES AT ALL. INCLUDE MANUALLY
|
|
return
|
|
fi
|
|
# check if this is a header wrapped in #ifdef HAVE_LALALA_H, if so, add after endif
|
|
next_line=$(($line + 1))
|
|
head -n $next_line $file | tail -n1 | grep -q \#endif \
|
|
&& sed -i -e "${next_line}s:#endif.*:\0\n\n#include \"$header\":" $file \
|
|
|| sed -i -e "${line}s:#include.*:\0\n#include \"$header\":" $file
|
|
return
|
|
fi
|
|
fi
|
|
# check if this is a header wrapped in #ifdef HAVE_LALALA_H, if so, add after endif
|
|
next_line=$(($line + 1))
|
|
head -n $next_line $file | tail -n1 | grep -q \#endif \
|
|
&& sed -i -e "${next_line}s:#endif.*:\0\n\n#include \"$header\":" $file \
|
|
|| sed -i -e "${line}s:#include \"$after_header_pattern.*:\0\n#include \"$header\":" $file
|
|
}
|
|
|
|
function del_header()
|
|
{
|
|
file=$1
|
|
header=`echo $2 | sed 's/\//\\\\\//g'`
|
|
line=`grep -n "#include \"$2" $file | cut -f1 -d':' | head -n1`
|
|
|
|
if [ "x$line" = "x" ] ; then
|
|
echo Can not find pattern $header file $file -- will not delete
|
|
return
|
|
fi
|
|
|
|
# Remove the header including any characters at end of the line MULTI_LINE COMMENTS...?
|
|
sed -i -e "/#include \"$header\".*/d" $file
|
|
}
|
|
|
|
SEARCH_HEADER=show_help.h
|
|
|
|
# Search for all source files with show_help.h in it.
|
|
for i in `find . -type f '(' -name '*.[cChysSfF]' -o -iname '*.cc' -o -name '*.cpp' -o -name '*.[fF]77' -o -name '*.[fF]90' ')' | sort | xargs grep -n $SEARCH_HEADER | cut -f1 -d':' | sort | uniq` ; do
|
|
# Now we do know that we have orte/util/show_help.h
|
|
found_orte_show_help_h=1
|
|
need_orte_show_help_h=0
|
|
|
|
found_opal_util_output_h=0
|
|
need_opal_util_output_h=0
|
|
|
|
found_orte_mca_rml_rml_types_h=0
|
|
need_orte_mca_rml_rml_types_h=0
|
|
|
|
grep -q orte_show_help $i && need_orte_show_help_h=1
|
|
|
|
grep -q opal\/util\/output.h $i && found_opal_util_output_h=1
|
|
grep -q opal_output $i && need_opal_util_output_h=1
|
|
|
|
grep -q orte\/mca\/rml\/rml_types.h $i && found_orte_mca_rml_rml_types_h=1
|
|
grep -q -E '(orte_rml_tag_t|ORTE_RML_)' $i && need_orte_mca_rml_rml_types_h=1
|
|
|
|
if [ $need_opal_util_output_h -eq 1 -a $found_opal_util_output_h -eq 0 ] ; then
|
|
echo -e $i \\t Found opal_output in file, but not include opal/util/output.h
|
|
add_header $i opal/util/output.h opal/util/ opal/class/ opal/
|
|
fi
|
|
|
|
if [ $need_orte_mca_rml_rml_types_h -eq 1 -a $found_orte_mca_rml_rml_types_h -eq 0 ] ; then
|
|
echo -e $i \\t Found orte_rml_tag_t or ORTE_RML_ in file, but no include orte/mca/rml/rml_types.h
|
|
add_header $i orte/mca/rml/rml_types.h orte/mca/rml/ orte/mca/ orte/
|
|
fi
|
|
|
|
if [ $need_orte_show_help_h -eq 0 ] ; then
|
|
echo -e $i \\t Found orte_rml_tag_t or ORTE_RML_ in file, but no include orte/mca/rml/rml_types.h
|
|
del_header $i orte/util/show_help.h
|
|
fi
|
|
done
|
|
|