diff --git a/Allwmake b/Allwmake index 6136570be0..992d433bf3 100755 --- a/Allwmake +++ b/Allwmake @@ -18,7 +18,7 @@ fi #------------------------------------------------------------------------------ # Preamble. Report tools or at least the mpirun location if [ -f "$WM_PROJECT_DIR"/wmake/scripts/list_tools ] -then . "$WM_PROJECT_DIR"/wmake/scripts/list_tools +then sh "$WM_PROJECT_DIR"/wmake/scripts/list_tools || true else echo "mpirun=$(command -v mpirun || true)" fi diff --git a/applications/test/00-dummy/Allwclean b/applications/test/00-dummy/Allwclean index c29945245a..fe931e34d1 100755 --- a/applications/test/00-dummy/Allwclean +++ b/applications/test/00-dummy/Allwclean @@ -1,7 +1,9 @@ #!/bin/sh -cd "${0%/*}" || exit # Run from this directory +cd "${0%/*}" || exit # Run from this directory +#------------------------------------------------------------------------------ + +library/Allwclean -wclean libso dummy wclean #------------------------------------------------------------------------------ diff --git a/applications/test/00-dummy/Allwmake b/applications/test/00-dummy/Allwmake index a7c0263c11..34307a3559 100755 --- a/applications/test/00-dummy/Allwmake +++ b/applications/test/00-dummy/Allwmake @@ -1,13 +1,12 @@ #!/bin/sh -cd "${0%/*}" || exit # Run from this directory - -# Can never be too certain ... -# Compile tools for wmake -( cd "${WM_DIR:-${WM_PROJECT_DIR}/wmake}/src" && ./Allmake ) - +cd "${0%/*}" || exit # Run from this directory #------------------------------------------------------------------------------ -wmake libso dummy +# Toolchain binaries (wmake) +"${WM_DIR:-${WM_PROJECT_DIR}/wmake}"/src/Allmake + +library/Allwmake + wmake #------------------------------------------------------------------------------ diff --git a/applications/test/00-dummy/Make/options b/applications/test/00-dummy/Make/options index a717db36c3..bcb411c914 100644 --- a/applications/test/00-dummy/Make/options +++ b/applications/test/00-dummy/Make/options @@ -1,6 +1,10 @@ -/* Without the normal project defaults */ +/* Disable normal project defaults */ PROJECT_INC = PROJECT_LIBS = -EXE_INC = -Idummy -EXE_LIBS = -lOpenFOAM-dummy +EXE_INC = \ + -I./library + +EXE_LIBS = \ + -lTestDummy-OpenFOAM \ + -L$(FOAM_LIBBIN)/dummy -lTestDummyMpi diff --git a/applications/test/00-dummy/Test-dummyLib.C b/applications/test/00-dummy/Test-dummyLib.C index a8d6d33181..6e1a6c8aee 100644 --- a/applications/test/00-dummy/Test-dummyLib.C +++ b/applications/test/00-dummy/Test-dummyLib.C @@ -32,6 +32,7 @@ Description \*---------------------------------------------------------------------------*/ #include "dummyLib.H" + #include #include @@ -42,7 +43,7 @@ constexpr const char* const norm = "\\fR"; // nroff constexpr const char* const website = "www.openfoam.com"; using std::cout; -using wmake = Foam::Detail::dummyLib; +using dummyLib = Foam::Detail::dummyLib; // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -71,6 +72,16 @@ static void printMan(const char* exeName) cout << ".SH OPTIONS" << nl + << ".TP" << nl + << "-parallel" << nl + << "Run parallel and provide simple report" << nl; + + if (!Foam::Detail::dummyLib::hasMPI()) + { + cout << "[warning: no mpi]" << nl; + } + + cout << ".TP" << nl << "-help-man" << nl << "Display manpage" << nl; @@ -78,28 +89,28 @@ static void printMan(const char* exeName) cout << ".SH INFORMATION" << nl << ".nf" << nl - << "label = " << wmake::label_size << nl - << "scalar = " << wmake::scalar_size; + << "label = " << dummyLib::label_size << nl + << "scalar = " << dummyLib::scalar_size; if ( - wmake::solveScalar_size - && wmake::solveScalar_size != wmake::scalar_size + dummyLib::solveScalar_size + && dummyLib::solveScalar_size != dummyLib::scalar_size ) { cout - << " [solve=" << wmake::solveScalar_size << "]"; + << " [solve=" << dummyLib::solveScalar_size << "]"; } cout - << " (" << wmake::precision << ')' << nl - << "arch = " << wmake::arch << nl - << "compiler = " << wmake::compiler << nl; + << " (" << dummyLib::precision << ')' << nl + << "arch = " << dummyLib::arch << nl + << "compiler = " << dummyLib::compiler << nl; cout << nl - << "archComp = " << wmake::archComp << nl - << "archCompBase = " << wmake::archCompBase << nl - << "archCompFull = " << wmake::archCompFull << nl; + << "archComp = " << dummyLib::archComp << nl + << "archCompBase = " << dummyLib::archCompBase << nl + << "archCompFull = " << dummyLib::archCompFull << nl; cout << ".fi" << nl; @@ -110,43 +121,61 @@ static void printMan(const char* exeName) } -int main(int argc, char *argv[]) +static void printInfo() { - // Process -help-man - if (argc > 1 && strcmp(argv[1], "-help-man") == 0) - { - printMan("Test-dummyLib"); - return 0; - } - cout << nl << "OPENFOAM = " << OPENFOAM << nl - << "label = " << wmake::label_size << nl - << "scalar = " << wmake::scalar_size - << " (" << wmake::precision << ')' << nl; + << "label = " << dummyLib::label_size << nl + << "scalar = " << dummyLib::scalar_size + << " (" << dummyLib::precision << ')' << nl; if ( - wmake::solveScalar_size - && wmake::solveScalar_size != wmake::scalar_size + dummyLib::solveScalar_size + && dummyLib::solveScalar_size != dummyLib::scalar_size ) { cout - << "solve = " << wmake::solveScalar_size << nl; + << "solve = " << dummyLib::solveScalar_size << nl; } cout - << "arch = " << wmake::arch << nl - << "compiler = " << wmake::compiler << nl; + << "arch = " << dummyLib::arch << nl + << "compiler = " << dummyLib::compiler << nl; cout << nl - << "archComp = " << wmake::archComp << nl - << "archCompBase = " << wmake::archCompBase << nl - << "archCompFull = " << wmake::archCompFull << nl; + << "archComp = " << dummyLib::archComp << nl + << "archCompBase = " << dummyLib::archCompBase << nl + << "archCompFull = " << dummyLib::archCompFull << nl; cout<< nl; +} + + +int main(int argc, char *argv[]) +{ + bool master = true; + + if (argc > 1) + { + if (strcmp(argv[1], "-help-man") == 0) + { + printMan("Test-dummyLib"); + return 0; + } + + if (strcmp(argv[1], "-parallel") == 0) + { + master = dummyLib::printMPI(); + } + } + + if (master) + { + printInfo(); + } return 0; } diff --git a/applications/test/00-dummy/dummy/Make/files b/applications/test/00-dummy/dummy/Make/files deleted file mode 100644 index 36f5ad877f..0000000000 --- a/applications/test/00-dummy/dummy/Make/files +++ /dev/null @@ -1,4 +0,0 @@ -/* Install into FOAM_LIBBIN to support 'fake' builds (to test packaging) */ -dummyLib.C - -LIB = $(FOAM_LIBBIN)/libOpenFOAM-dummy diff --git a/applications/test/00-dummy/library/Allwclean b/applications/test/00-dummy/library/Allwclean new file mode 100755 index 0000000000..25a12c1865 --- /dev/null +++ b/applications/test/00-dummy/library/Allwclean @@ -0,0 +1,11 @@ +#!/bin/sh +cd "${0%/*}" || exit # Run from this directory +#------------------------------------------------------------------------------ + +wclean dummy + +./Allwclean-mpi + +wclean + +#------------------------------------------------------------------------------ diff --git a/applications/test/00-dummy/library/Allwclean-mpi b/applications/test/00-dummy/library/Allwclean-mpi new file mode 100755 index 0000000000..d238e435a1 --- /dev/null +++ b/applications/test/00-dummy/library/Allwclean-mpi @@ -0,0 +1,9 @@ +#!/bin/sh +cd "${0%/*}" || exit # Run from this directory +. ${WM_PROJECT_DIR:?}/wmake/scripts/wmakeFunctions # Require wmake functions + +#------------------------------------------------------------------------------ + +wcleanLibMpi mpi + +#------------------------------------------------------------------------------ diff --git a/applications/test/00-dummy/library/Allwmake b/applications/test/00-dummy/library/Allwmake new file mode 100755 index 0000000000..b36f036445 --- /dev/null +++ b/applications/test/00-dummy/library/Allwmake @@ -0,0 +1,11 @@ +#!/bin/sh +cd "${0%/*}" || exit # Run from this directory +#------------------------------------------------------------------------------ + +wmake libso dummy + +./Allwmake-mpi + +wmake libso + +#------------------------------------------------------------------------------ diff --git a/applications/test/00-dummy/library/Allwmake-mpi b/applications/test/00-dummy/library/Allwmake-mpi new file mode 100755 index 0000000000..9b72d0f821 --- /dev/null +++ b/applications/test/00-dummy/library/Allwmake-mpi @@ -0,0 +1,12 @@ +#!/bin/sh +cd "${0%/*}" || exit # Run from this directory +. ${WM_PROJECT_DIR:?}/wmake/scripts/AllwmakeParseArguments -no-recursion "$@" +. ${WM_PROJECT_DIR:?}/wmake/scripts/wmakeFunctions # Require wmake functions + +#------------------------------------------------------------------------------ +# Environment +# - FOAM_MPI_LIBBIN (optional: defaults to FOAM_LIBBIN/FOAM_MPI) + +wmakeLibMpi mpi + +#------------------------------------------------------------------------------ diff --git a/applications/test/00-dummy/library/Make/files b/applications/test/00-dummy/library/Make/files new file mode 100644 index 0000000000..680663a97b --- /dev/null +++ b/applications/test/00-dummy/library/Make/files @@ -0,0 +1,4 @@ +/* Install into central FOAM_LIBBIN for 'fake' builds (test packaging) */ +dummyLib.C + +LIB = $(FOAM_LIBBIN)/libTestDummy-OpenFOAM diff --git a/applications/test/00-dummy/dummy/Make/options b/applications/test/00-dummy/library/Make/options similarity index 93% rename from applications/test/00-dummy/dummy/Make/options rename to applications/test/00-dummy/library/Make/options index 8ce0038ce8..8ada299b3a 100644 --- a/applications/test/00-dummy/dummy/Make/options +++ b/applications/test/00-dummy/library/Make/options @@ -8,4 +8,4 @@ EXE_INC = \ -DWM_COMPILE_OPTION=\"$(WM_COMPILE_OPTION)\" \ -DWM_OPTIONS=\"$(WM_OPTIONS)\" -/* LIB_LIBS = */ +LIB_LIBS = diff --git a/applications/test/00-dummy/library/dummy/Make/files b/applications/test/00-dummy/library/dummy/Make/files new file mode 100644 index 0000000000..946086a064 --- /dev/null +++ b/applications/test/00-dummy/library/dummy/Make/files @@ -0,0 +1,4 @@ +/* Install into central FOAM_LIBBIN/dummy for 'fake' builds (test packaging) */ +dummyMpiLib.C + +LIB = $(FOAM_LIBBIN)/dummy/libTestDummyMpi diff --git a/applications/test/00-dummy/library/dummy/Make/options b/applications/test/00-dummy/library/dummy/Make/options new file mode 100644 index 0000000000..a367c33800 --- /dev/null +++ b/applications/test/00-dummy/library/dummy/Make/options @@ -0,0 +1,8 @@ +/* Disable normal project defaults */ +PROJECT_INC = +PROJECT_LIBS = + +EXE_INC = \ + -I../ + +/* LIB_LIBS = */ diff --git a/applications/test/00-dummy/library/dummy/dummyMpiLib.C b/applications/test/00-dummy/library/dummy/dummyMpiLib.C new file mode 100644 index 0000000000..ae0670b8a4 --- /dev/null +++ b/applications/test/00-dummy/library/dummy/dummyMpiLib.C @@ -0,0 +1,46 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / 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. + + 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 . + +\*---------------------------------------------------------------------------*/ + +#include "dummyLib.H" +#include + +// * * * * * * * * * * * * * * Global Functions * * * * * * * * * * * * * * // + +bool Foam::Detail::dummyLib::hasMPI() +{ + return false; +} + + +bool Foam::Detail::dummyLib::printMPI() +{ + std::cout << "Compiled without mpi\n"; + return true; +} + + +// ************************************************************************* // diff --git a/applications/test/00-dummy/dummy/dummyLib.C b/applications/test/00-dummy/library/dummyLib.C similarity index 98% rename from applications/test/00-dummy/dummy/dummyLib.C rename to applications/test/00-dummy/library/dummyLib.C index 1130023f40..bd079632e9 100644 --- a/applications/test/00-dummy/dummy/dummyLib.C +++ b/applications/test/00-dummy/library/dummyLib.C @@ -5,7 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2018-2019 OpenCFD Ltd. + Copyright (C) 2018-2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. diff --git a/applications/test/00-dummy/dummy/dummyLib.H b/applications/test/00-dummy/library/dummyLib.H similarity index 86% rename from applications/test/00-dummy/dummy/dummyLib.H rename to applications/test/00-dummy/library/dummyLib.H index 7189b250a2..31934eb7cc 100644 --- a/applications/test/00-dummy/dummy/dummyLib.H +++ b/applications/test/00-dummy/library/dummyLib.H @@ -24,20 +24,22 @@ License along with OpenFOAM. If not, see . Class - Foam::Detail::dummyLib + Foam::Detail::dummy Description - This class serves little useful purpose, but can be used to compile - into a dummy library and link against for a minimal application - that uses the wmake framework + No useful purpose other than to use the wmake framework to generate + a dummy library for testing/packaging purposes + +Note + Pure C++ without any OpenFOAM classes or libraries. SourceFiles dummyLib.C \*---------------------------------------------------------------------------*/ -#ifndef dummyLib_H -#define dummyLib_H +#ifndef testing_dummyLib_H +#define testing_dummyLib_H #include @@ -80,6 +82,12 @@ struct dummyLib //- DIY Compile-time value of WM_OPTIONS static const std::string archCompFull; + + //- Compiled/linked with mpi? + static bool hasMPI(); + + //- Print ranks (trivial mpi test). Return true for master only. + static bool printMPI(); }; diff --git a/applications/test/00-dummy/library/mpi/Make/files b/applications/test/00-dummy/library/mpi/Make/files new file mode 100644 index 0000000000..bb3cd16a46 --- /dev/null +++ b/applications/test/00-dummy/library/mpi/Make/files @@ -0,0 +1,4 @@ +/* Install into central FOAM_MPI_LIBBIN for 'fake' builds (test packaging) */ +dummyMpiLib.C + +LIB = $(FOAM_MPI_LIBBIN)/libTestDummyMpi diff --git a/applications/test/00-dummy/library/mpi/Make/options b/applications/test/00-dummy/library/mpi/Make/options new file mode 100644 index 0000000000..2c788d6c92 --- /dev/null +++ b/applications/test/00-dummy/library/mpi/Make/options @@ -0,0 +1,17 @@ +/* Disable normal project defaults */ +PROJECT_INC = +PROJECT_LIBS = + +sinclude $(GENERAL_RULES)/mplib$(WM_MPLIB) +sinclude $(DEFAULT_RULES)/mplib$(WM_MPLIB) + +/* Default is PROJECT LIB/mpi target */ +ifeq (,$(FOAM_MPI_LIBBIN)) + FOAM_MPI_LIBBIN := $(FOAM_LIBBIN)/$(FOAM_MPI) +endif + +EXE_INC = \ + -I.. \ + $(PFLAGS) $(PINC) $(c++LESSWARN) -DFOAM_MPI=\"$(FOAM_MPI)\" + +LIB_LIBS = $(PLIBS) diff --git a/applications/test/00-dummy/library/mpi/dummyMpiLib.C b/applications/test/00-dummy/library/mpi/dummyMpiLib.C new file mode 100644 index 0000000000..a0c5ed3430 --- /dev/null +++ b/applications/test/00-dummy/library/mpi/dummyMpiLib.C @@ -0,0 +1,76 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / 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. + + 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 . + +\*---------------------------------------------------------------------------*/ + +#include "dummyLib.H" +#include +#include + +// * * * * * * * * * * * * * * Global Functions * * * * * * * * * * * * * * // + +bool Foam::Detail::dummyLib::hasMPI() +{ + return true; +} + + +bool Foam::Detail::dummyLib::printMPI() +{ + int rank = 0, nprocs = 0; + + MPI_Init(nullptr, nullptr); + + MPI_Comm_size(MPI_COMM_WORLD, &nprocs); + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + + // Hello world + std::cout + << + ( + std::string("mpi rank ") + + std::to_string(rank) + '/' + std::to_string(nprocs) + + '\n' + ); + + MPI_Finalize(); + + #ifdef FOAM_MPI + if (rank == 0) + { + std::cout + << + ( + std::string("FOAM_MPI=") + std::string(FOAM_MPI) + + '\n' + ); + } + #endif + + return rank == 0; +} + + +// ************************************************************************* // diff --git a/bin/tools/query-detect b/bin/tools/query-detect new file mode 100755 index 0000000000..5d5cf61286 --- /dev/null +++ b/bin/tools/query-detect @@ -0,0 +1,169 @@ +#!/bin/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. +# +# Script +# query-detect +# +# Description +# Calls various wmake 'have_*' scripts with -test to report the +# detected software locations +# +# Environment +# Needs the OpenFOAM environment +# +#------------------------------------------------------------------------------ +printHelp() { + cat<&2 + echo + echo "Error encountered:" + while [ "$#" -ge 1 ]; do echo " $1"; shift; done + echo + echo "See '${0##*/} -help' for usage" + echo + exit 1 +} + + +#------------------------------------------------------------------------------- +# Parse options +unset optAall optMode + +while [ "$#" -gt 0 ] +do + case "$1" in + (-h | -help*) + printHelp + ;; + (-all | all) + optAll=true + ;; + (-mode=[ugo]*) + optMode="${1#*=}" + ;; + (--) + shift + break # Stop here + ;; + (-*) + echo "Ignore unknown option: $1" 1>&2 + ;; + (*) + break + ;; + esac + shift +done + + +#------------------------------------------------------------------------------ +projectDir="$WM_PROJECT_DIR" +scriptsDir="$projectDir/wmake/scripts" + +[ -d "$projectDir" ] || { + echo "OpenFOAM environment appears to be missing" 1>&2 + echo " $projectDir" 1>&2 + exit 2 +} +[ -d "$scriptsDir" ] || { + echo "No scripts directory: $scriptsDir" 1>&2 + exit 2 +} + +if [ "$#" = 0 ] && [ -z "$optAll" ] +then + echo "Nothing specified" 1>&2 + exit 0 +fi + +if [ -n "$optMode" ] +then + export FOAM_CONFIG_MODE="$optMode" +fi + + +#------------------------------------------------------------------------------ + +# Examine the "wmake/scripts/have_..." scripts for query_...() functions, +# assume they also have a -query option + +if [ -n "$optAll" ] +then + set -- $( + for script in "$scriptsDir"/have_* + do + if [ -f "$script" ] + then + script="${script##*/}" + + case "$script" in + (*.bak | *.orig) + ;; + + (*) + echo "${script#have_}" + ;; + esac + fi + done + ) +fi + + +## echo "Test: $@" 1>&2 + +echo "#----------------" +# Assume they each have a -test option +for name +do + script="$scriptsDir/have_${name}" + case "$name" in + (*.bak | *.orig) + continue + ;; + esac + + echo + if [ -f "$script" ] + then + echo "# Detection for '$name'" + bash "$script" -test + else + echo "# No detection support for '$name'" + fi +done + +echo +echo "#----------------" + +exit 0 # A clean exit + +#------------------------------------------------------------------------------ diff --git a/etc/config.csh/setup b/etc/config.csh/setup index 5f9bec387f..070233ddc8 100644 --- a/etc/config.csh/setup +++ b/etc/config.csh/setup @@ -39,40 +39,43 @@ source "$WM_PROJECT_DIR/etc/config.csh/functions" # [WM_THIRD_PARTY_DIR] - Location of third-party software components # \- This may be installed in a directory parallel to the OpenFOAM project # directory, with the same version name or using the API value. -# It may also not be required at all, in which case a dummy "ThirdParty" -# directory inside of the OpenFOAM project directory. +# It may also not be required at all, in which case use a dummy +# "ThirdParty" inside of the OpenFOAM project directory. # -# Note: only accept if the directory exists and contains either -# a "Allwmake" file (source) or a "platforms" directory (runtime-only) +# Test out-of-source directories for an "Allwmake" file (source) +# or a "platforms/" directory (runtime-only) -setenv WM_THIRD_PARTY_DIR -set foundDir='' +setenv WM_THIRD_PARTY_DIR "" # Empty value (before detection) -_foamEcho "Locating ThirdParty directory" - -foreach foamDir (\ - "$WM_PROJECT_DIR/ThirdParty" \ - "$prefixDir/ThirdParty-$WM_PROJECT_VERSION" \ - "$prefixDir/ThirdParty-v$FOAM_API" \ - "$prefixDir/ThirdParty-$FOAM_API" \ - "$prefixDir/ThirdParty-common" \ -) - _foamEcho "... $foamDir" - if ( -d "$foamDir" ) then - if ( -f "$foamDir/Allwmake" || -d "$foamDir/platforms" ) then - setenv WM_THIRD_PARTY_DIR "$foamDir" - set foundDir=true - break - endif - endif -end - -if ("${foundDir}" == true) then - _foamEcho "Using $WM_THIRD_PARTY_DIR" +if ( -e "$WM_PROJECT_DIR/ThirdParty" ) then + # Directory or file (masks use of ThirdParty entirely) + setenv WM_THIRD_PARTY_DIR "$WM_PROJECT_DIR/ThirdParty" else + _foamEcho "Locating ThirdParty directory" + foreach foundDir (\ + "$prefixDir/ThirdParty-$WM_PROJECT_VERSION" \ + "$prefixDir/ThirdParty-v$FOAM_API" \ + "$prefixDir/ThirdParty-$FOAM_API" \ + "$prefixDir/ThirdParty-common" \ + ) + _foamEcho "... $foundDir" + if ( -d "$foundDir" ) then + if ( -f "$foundDir/Allwmake" || -d "$foundDir/platforms" ) then + setenv WM_THIRD_PARTY_DIR "$foundDir" + break + else + _foamEcho " does not have Allwmake or platforms/" + endif + endif + end +endif + +if ("${WM_THIRD_PARTY_DIR}" == "") then # Dummy fallback value setenv WM_THIRD_PARTY_DIR "$WM_PROJECT_DIR/ThirdParty" - _foamEcho "Dummy $WM_THIRD_PARTY_DIR" + _foamEcho "Dummy ThirdParty $WM_THIRD_PARTY_DIR" +else + _foamEcho "ThirdParty $WM_THIRD_PARTY_DIR" endif # Done with ThirdParty discovery @@ -206,6 +209,6 @@ unalias _foamAddLib unalias _foamAddLibAuto # Variables (done as final statement for a clean exit code) -unset cleaned foamOldDirs foundDir foamDir prefixDir +unset cleaned foamOldDirs foundDir prefixDir #------------------------------------------------------------------------------ diff --git a/etc/config.sh/setup b/etc/config.sh/setup index ed4df86dbf..b5adaa08f8 100644 --- a/etc/config.sh/setup +++ b/etc/config.sh/setup @@ -40,44 +40,49 @@ unset WM_SHELL_FUNCTIONS # [WM_THIRD_PARTY_DIR] - Location of third-party software components # \- This may be installed in a directory parallel to the OpenFOAM project # directory, with the same version name or using the API value. -# It may also not be required at all, in which case a dummy "ThirdParty" -# directory inside of the OpenFOAM project directory. +# It may also not be required at all, in which case use a dummy +# "ThirdParty" inside of the OpenFOAM project directory. # -# Note: only accept if the directory exists and contains either -# a "Allwmake" file (source) or a "platforms" directory (runtime-only) +# Test out-of-source directories for an "Allwmake" file (source) +# or a "platforms/" directory (runtime-only) -export WM_THIRD_PARTY_DIR -unset foundDir +export WM_THIRD_PARTY_DIR="" # Empty value (before detection) -_foamEcho "Locating ThirdParty directory" - -for WM_THIRD_PARTY_DIR in \ - "$WM_PROJECT_DIR/ThirdParty" \ - "$prefixDir/ThirdParty-$WM_PROJECT_VERSION" \ - "$prefixDir/ThirdParty-v$FOAM_API" \ - "$prefixDir/ThirdParty-$FOAM_API" \ - "$prefixDir/ThirdParty-common" \ - ; -do - _foamEcho "... $WM_THIRD_PARTY_DIR" - if [ -d "$WM_THIRD_PARTY_DIR" ] - then - if [ -f "$WM_THIRD_PARTY_DIR/Allwmake" ] || \ - [ -d "$WM_THIRD_PARTY_DIR/platforms" ] - then - foundDir=true - break - fi - fi -done - -if [ -n "$foundDir" ] +if [ -e "$WM_PROJECT_DIR/ThirdParty" ] then - _foamEcho "Using $WM_THIRD_PARTY_DIR" + # Directory or file (masks use of ThirdParty entirely) + WM_THIRD_PARTY_DIR="$WM_PROJECT_DIR/ThirdParty" else + _foamEcho "Locating ThirdParty directory" + for foundDir in \ + "$prefixDir/ThirdParty-$WM_PROJECT_VERSION" \ + "$prefixDir/ThirdParty-v$FOAM_API" \ + "$prefixDir/ThirdParty-$FOAM_API" \ + "$prefixDir/ThirdParty-common" \ + ; + do + _foamEcho "... $foundDir" + if [ -d "$foundDir" ] + then + if [ -f "$foundDir/Allwmake" ] || \ + [ -d "$foundDir/platforms" ] + then + WM_THIRD_PARTY_DIR="$foundDir" + break + else + _foamEcho " does not have Allwmake or platforms/" + fi + fi + done +fi + +if [ -z "$WM_THIRD_PARTY_DIR" ] +then # Dummy fallback value WM_THIRD_PARTY_DIR="$WM_PROJECT_DIR/ThirdParty" - _foamEcho "Dummy $WM_THIRD_PARTY_DIR" + _foamEcho "Dummy ThirdParty $WM_THIRD_PARTY_DIR" +else + _foamEcho "ThirdParty $WM_THIRD_PARTY_DIR" fi # Done with ThirdParty discovery diff --git a/wmake/scripts/list_tools b/wmake/scripts/list_tools index 2184bc7e33..758808fd16 100644 --- a/wmake/scripts/list_tools +++ b/wmake/scripts/list_tools @@ -8,8 +8,7 @@ # Copyright (C) 2019 OpenCFD Ltd. #------------------------------------------------------------------------------ # License -# This file is part of OpenFOAM, licensed under GNU General Public License -# . +# This file is part of OpenFOAM, distributed under GPL-3.0-or-later. # # Script # list_tools diff --git a/wmake/wmake b/wmake/wmake index 572fea8256..d7cabb880f 100755 --- a/wmake/wmake +++ b/wmake/wmake @@ -195,7 +195,7 @@ allCores() #------------------------------------------------------------------------------ # Default to compiling the local target only -unset optAll optUpdate optDebug optQuiet optShow optPwd +unset optAll optUpdate optCxx optDebug optQuiet optShow optPwd # Consistency with inherited values if [ "$WM_QUIET" = true ] @@ -231,7 +231,7 @@ do export WM_QUIET=true ;; -debug) - optDebug="-DFULLDEBUG -g -O0" + optDebug=true ;; -module-prefix=*) @@ -489,13 +489,29 @@ unset exitCode # Recurse the source tree to compile "all" targets #------------------------------------------------------------------------------ +if [ -n "$optDebug" ] +then + # Convey -debug via FOAM_EXTRA_CXXFLAGS + optDebug="-DFULLDEBUG -g" + oldFlags="$FOAM_EXTRA_CXXFLAGS" + + case "$oldFlags" in + (*-DFULLDEBUG*) + # Already there + ;; + (*) + export FOAM_EXTRA_CXXFLAGS="$oldFlags${oldFlags:+ }$optDebug" + ;; + esac +fi + if [ "$optAll" = all ] then if [ -e Allwmake.override ] then if [ -x Allwmake.override ] then - ./Allwmake.override -fromWmake ${optDebug:+-debug} $targetType + ./Allwmake.override -fromWmake $targetType exitCode="$?" else # Allow empty or non-executable file (eg, touch Allwmake.override) @@ -503,7 +519,7 @@ then fi elif [ -e Allwmake ] then - ./Allwmake -fromWmake ${optDebug:+-debug} $targetType + ./Allwmake -fromWmake $targetType exitCode="$?" fi @@ -531,7 +547,6 @@ then # Compile all applications in sub-directories $make ${WM_CONTINUE_ON_ERROR:+-k} \ -f $WM_DIR/makefiles/apps \ - ${optDebug:+c++DBUG="$optDebug"} \ TARGET="$targetType" FOAM_APPS="$FOAM_APPS" exitCode=$? fi @@ -558,7 +573,7 @@ then "$WM_SCHEDULER" -clean \ && wmake -all objects \ && "$WM_SCHEDULER" - ) && wmake -all ${optDebug:+-debug} + ) && wmake -all exit $? fi @@ -678,7 +693,6 @@ fi #------------------------------------------------------------------------------ exec $make -f $WM_DIR/makefiles/general \ - ${optDebug:+c++DBUG="$optDebug"} \ MAKE_DIR=$MakeDir OBJECTS_DIR=$objectsDir $targetType exit 0 # clean exit