#!/bin/bash #------------------------------------------------------------------------------ # ========= | # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / O peration | # \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation # \\/ M anipulation | #------------------------------------------------------------------------------- # License # This file is part of OpenFOAM. # # OpenFOAM 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. # # OpenFOAM 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 # along with OpenFOAM. If not, see . # # Script # wmakeLnIncludeAll # # Usage # wmakeLnIncludeAll [dir1 .. dirN] # # Description # Find directories with a 'Make/files' that contains a 'LIB =' directive # and execute 'wmakeLnInclude -update' for each one # #------------------------------------------------------------------------------ Script=${0##*/} usage() { while [ "$#" -ge 1 ]; do echo "$1"; shift; done cat< /dev/null 2>&1 \ && shift && nCores=$1 echo "$Script: enabled on $nCores cores" ;; # Parallel compilation on specified number of cores -j*) nCores=${1#-j} echo "$Script: enabled on $nCores cores" ;; -*) usage "unknown option: '$*'" ;; *) break ;; esac shift done FAIL=0 echo "$Script: starting wmakeLnInclude processes" # Default to searching from CWD [ "$#" -gt 0 ] || set -- . for checkDir do if [ -d $checkDir ] then echo "Searching: $checkDir for 'Make' directories" echo "---------" else echo "Skipping non-dir: $checkDir" echo "----------------" continue fi find $checkDir -depth -type d -name Make -print | while read MakeDir do topDir=${MakeDir%/Make} # trim /Make from the end if [ -d "$topDir" ] then if grep -e '^ *LIB *=' "$MakeDir/files" >/dev/null 2>&1 then # If running in parallel start wmakeLnInclude on nCores # and more as the cores become free if [ "$nCores" -gt 0 ] then joblist=($(jobs -p)) while (( ${#joblist[*]} > $nCores )) do # When the job limit is reached wait for a job to finish wait -n joblist=($(jobs -p)) done wmakeLnInclude -update $topDir & else wmakeLnInclude -update $topDir fi elif [ -d "$topDir/lnInclude" ] then echo "removing spurious $topDir/lnInclude" rm -rf "$topDir/lnInclude" fi fi done done if [ "$nCores" -gt 0 ] then # Wait for all of the wmakeLnInclude jobs to finish wait # Synchronize the file system to ensure that all of the links exist # before compilation sync fi #------------------------------------------------------------------------------ # Cleanup local variables and functions #------------------------------------------------------------------------------ unset Script usage #------------------------------------------------------------------------------