Skip to content
Snippets Groups Projects
foamUpdateCaseFileHeader 4.25 KiB
Newer Older
  • Learn to ignore specific revisions
  • #!/bin/sh
    #------------------------------------------------------------------------------
    # =========                 |
    
    Henrik's avatar
    Henrik committed
    # \\      /  F ield         | foam-extend: Open Source CFD
    
    #  \\    /   O peration     | Version:     4.1
    
    Henrik's avatar
    Henrik committed
    #   \\  /    A nd           | Web:         http://www.foam-extend.org
    #    \\/     M anipulation  | For copyright notice see file Copyright
    
    #------------------------------------------------------------------------------
    # License
    
    Henrik's avatar
    Henrik committed
    #     This file is part of foam-extend.
    
    Henrik's avatar
    Henrik committed
    #     foam-extend is free software: you can redistribute it and/or modify it
    
    #     under the terms of the GNU General Public License as published by the
    
    #     Free Software Foundation, either version 3 of the License, or (at your
    
    #     option) any later version.
    #
    
    Henrik's avatar
    Henrik committed
    #     foam-extend is distributed in the hope that it will be useful, but
    
    #     WITHOUT ANY WARRANTY; without even the implied warranty of
    #     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    #     General Public License for more details.
    
    #
    #     You should have received a copy of the GNU General Public License
    
    Henrik's avatar
    Henrik committed
    #     along with foam-extend.  If not, see <http://www.gnu.org/licenses/>.
    
    #
    # Script
    #     foamUpdateCaseFileHeader
    #
    # Description
    #     Updates the header of application files.
    #     By default, writes current version in the header.
    #     Alternatively version can be specified with -v option.
    #     Also removes consecutive blank lines from file.
    #
    #------------------------------------------------------------------------------
    
    Hrvoje Jasak's avatar
    Hrvoje Jasak committed
    foamVersion=$WM_PROJECT_VERSION
    
    Hrvoje Jasak's avatar
    Hrvoje Jasak committed
    usage() {
        cat<<USAGE
    
    Usage: ${0##*/} [OPTION] <file1> ... <fileN>
    
    options:
      -v VER  specifies the version to be written in the header
      -h      help
    
      Updates the header of application files and removes consecutive blank lines.
      By default, writes current OpenFOAM version in the header.
      An alternative version can be specified with the -v option.
    
    USAGE
        exit 1
    
    Hrvoje Jasak's avatar
    Hrvoje Jasak committed
    printHeader() {
        cat<<HEADER
    
    /*--------------------------------*- C++ -*----------------------------------*\\
    | =========                 |                                                 |
    
    | \\\\      /  F ield         | foam-extend: Open Source CFD                    |
    |  \\\\    /   O peration     | Version:     ${foamVersion}  |
    
    Henrik's avatar
    Henrik committed
    |   \\\\  /    A nd           | Web:         http://www.foam-extend.org         |
    
    Henrik's avatar
    Henrik committed
    |    \\\\/     M anipulation  | For copyright notice see file Copyright         |
    
    \\*---------------------------------------------------------------------------*/
    FoamFile
    {
        version     2.0;
    
    Henrik's avatar
    Henrik committed
        format      ${FORMAT};
        class       ${CLASS};
    HEADER
    
        if [ -n "${NOTE}" ];
        then
            cat<<HEADER
        note        ${NOTE};
    HEADER
        fi
    
        if [ -n "${LOCATION}" ];
        then
            cat<<HEADER
        location    ${LOCATION};
    HEADER
        fi
    
            cat<<HEADER
        object      ${OBJECT};
    
    Hrvoje Jasak's avatar
    Hrvoje Jasak committed
    HEADER
    
    Hrvoje Jasak's avatar
    Hrvoje Jasak committed
    #
    # extract attribute '$1' from file '$2'
    #
    FoamFileAttribute() {
        sed -n -e 's/[ ;]*$//' -e "s/^ *$1 *//p" $2
    
    Hrvoje Jasak's avatar
    Hrvoje Jasak committed
    opts=$(getopt hv: $*)
    if [ $? -ne 0 ]
    then
    
        echo "Aborting due to invalid option"
    
    Hrvoje Jasak's avatar
    Hrvoje Jasak committed
        usage
    
    Hrvoje Jasak's avatar
    Hrvoje Jasak committed
    eval set -- '$opts'
    while [ "$1" != "--" ]
    do
    
    Hrvoje Jasak's avatar
    Hrvoje Jasak committed
        -v)
            foamVersion=$2
            shift
            ;;
        -h)
            usage
            ;;
    
    Hrvoje Jasak's avatar
    Hrvoje Jasak committed
    [ $# -ge 1 ] || usage
    
    # constant width for version
    
    foamVersion=$(printf %-33s $foamVersion)
    
    Hrvoje Jasak's avatar
    Hrvoje Jasak committed
    
    
    Hrvoje Jasak's avatar
    Hrvoje Jasak committed
    
    for caseFile
    do
    
    Henrik's avatar
    Henrik committed
        if [ ! -x "$caseFile" ] && (grep "^ *FoamFile" $caseFile >/dev/null 2>&1)
    
    Hrvoje Jasak's avatar
    Hrvoje Jasak committed
        then
            echo "Updating case file: $caseFile"
            sed -n '/FoamFile/,/}/p' $caseFile > FoamFile.tmp
    
            FORMAT=$(FoamFileAttribute format FoamFile.tmp)
            CLASS=$(FoamFileAttribute  class  FoamFile.tmp)
    
    Henrik's avatar
    Henrik committed
            NOTE=$(FoamFileAttribute note FoamFile.tmp)
            LOCATION=$(FoamFileAttribute location FoamFile.tmp)
    
    Hrvoje Jasak's avatar
    Hrvoje Jasak committed
            OBJECT=$(FoamFileAttribute object FoamFile.tmp)
    
    Henrik's avatar
    Henrik committed
            printHeader > FoamFile.tmp
            sed '1,/}/d' $caseFile | sed '/./,/^$/!d' | sed 's/ *$//g' >> FoamFile.tmp
            #sed '1,/}/d' $caseFile >> FoamFile.tmp
    
    Hrvoje Jasak's avatar
    Hrvoje Jasak committed
    
            # use cat to avoid removing/replace soft-links
            [ -s FoamFile.tmp ] && cat FoamFile.tmp >| $caseFile
            rm -f FoamFile.tmp 2>/dev/null
        else
            echo " Invalid case file: $caseFile" 1>&2
        fi
    done
    
    
    #------------------------------------------------------------------------------