#!/bin/bash #------------------------------------------------------------------------------ # ========= | # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / O peration | # \\ / A nd | www.openfoam.com # \\/ M anipulation | #------------------------------------------------------------------------------ # Copyright (C) 2011-2016 OpenFOAM Foundation # Copyright (C) 2018-2020 OpenCFD Ltd. #------------------------------------------------------------------------------ # 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' containing a 'LIB =' directive # and execute 'wmakeLnInclude' for each one # #------------------------------------------------------------------------------ Script=${0##*/} usage() { while [ "$#" -ge 1 ]; do echo "$1"; shift; done cat< /dev/null 2>&1 \ && shift && nCores=$1 [ "$nCores" = 0 ] && nCores=1 ;; # Parallel compilation on specified number of cores -j[1-9]*) nCores=${1#-j} ;; -*) usage "unknown option: '$1'" ;; *) break ;; esac shift done # Default search is from CWD, with special handling of the top-level # project directory: {applications,src} directories if [ "$#" -eq 0 ] then if wmake -check-dir "$WM_PROJECT_DIR" 2>/dev/null then set -- applications src else set -- . fi fi if [ "$nCores" -gt 0 ] then echo "$Script: starting wmakeLnInclude processes on $nCores cores" else echo "$Script: running wmakeLnInclude" fi for checkDir do if [ -d $checkDir ] then echo " searching $checkDir for 'Make' directories" else echo " skipping non-dir $checkDir" continue fi find $checkDir -depth -name Make -type d -print | while read MakeDir do topDir=${MakeDir%/Make} # trim /Make from the end if [ -d "$topDir" ] then if grep -qe '^ *LIB *=' "$MakeDir/files" 2>/dev/null 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 $wmLnOpt $topDir & else wmakeLnInclude $wmLnOpt $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 sleep 2 fi exit 0 # clean exit #------------------------------------------------------------------------------