Skip to content
Snippets Groups Projects
wmake.wmake-args 2.64 KiB
Newer Older
  • Learn to ignore specific revisions
  • #----------------------------------*-sh-*--------------------------------------
    # =========                 |
    # \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    #  \\    /   O peration     |
    #   \\  /    A nd           | www.openfoam.com
    #    \\/     M anipulation  |
    #------------------------------------------------------------------------------
    #     Copyright (C) 2020 OpenCFD Ltd.
    #------------------------------------------------------------------------------
    # License
    #     This file is part of OpenFOAM, distributed under GPL-3.0-or-later.
    #
    # File
    #     wmake/scripts/wmake.wmake-args
    #
    # Description
    #     Reduced argument parser (eg, for scripts using wmake)
    #     that handles some common parameters
    #
    # Usage
    #     # Parse the arguments by sourcing this script
    #     . ${WM_PROJECT_DIR:?}/wmake/scripts/wmake.wmake-args
    #
    # Options
    #     -s | -silent | -quiet
    #     Exports WM_QUIET=true
    #
    #     -j | -jN | -j N
    #     Compile using all or specified N cores/hyperthreads
    #
    #------------------------------------------------------------------------------
    
    # NB: nArgs to track the current processing position to avoid wraparound
    # when checking for optional parameters (eg, the -j processing)
    
    nArgs="$#"
    for arg in "$@"
    do
        shift; nArgs="$((nArgs - 1))"               # Drop argument
    
        case "$arg" in
    
        # Silent operation
        -s | -silent | -quiet)
            export WM_QUIET=true
            continue    # Handled argument
            ;;
    
        # Parallel compilation (all or specified number of cores)
        -j)
            export WM_NCOMPPROCS=0
            if [ "$nArgs" -gt 0 ]
            then
                case "$1" in
                [0-9]*)
                    if WM_NCOMPPROCS="$(expr 0 + "$1" 2>/dev/null)"
                    then
                        shift; nArgs="$((nArgs - 1))"   # Drop argument
                    fi
                    ;;
                esac
            fi
            if [ "${WM_NCOMPPROCS:=0}" -le 0 ]
            then
                WM_NCOMPPROCS=$(getconf _NPROCESSORS_ONLN 2>/dev/null) || \
                    WM_NCOMPPROCS=1
            fi
    
            echo "Compiling enabled on $WM_NCOMPPROCS cores" 1>&2
            continue    # Handled argument
            ;;
    
        # Parallel compilation (specified number of cores)
        -j[0-9]*)
            export WM_NCOMPPROCS="${arg#-j}"
            if [ "${WM_NCOMPPROCS:=0}" -le 0 ]
            then
                WM_NCOMPPROCS=$(getconf _NPROCESSORS_ONLN 2>/dev/null) || \
                    WM_NCOMPPROCS=1
            fi
    
            echo "Compiling enabled on $WM_NCOMPPROCS cores" 1>&2
            continue    # Handled argument
            ;;
        esac
    
        set -- "$@" "$arg"     # Reinsert unhandled argument
    done
    
    #------------------------------------------------------------------------------