diff --git a/Allwmake b/Allwmake index 6136570be0653026b149d645eb3047dfe31b4542..992d433bf3c3a4a1e314e106a78e66526a646d72 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 c29945245a2c3b680f56e06aa4efa0c019c5cb7f..fe931e34d12834fe48ecc709a541392f5dbffc6d 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 a7c0263c11ffe6a4c058de52c2fb9d7e61fa3f77..34307a355910e3297446e8fbb550b0dd33efff73 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 +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 ) +# Toolchain binaries (wmake) +"${WM_DIR:-${WM_PROJECT_DIR}/wmake}"/src/Allmake -#------------------------------------------------------------------------------ +library/Allwmake -wmake libso dummy wmake #------------------------------------------------------------------------------ diff --git a/applications/test/00-dummy/Make/options b/applications/test/00-dummy/Make/options index a717db36c39d6c62547a953f36c6b0f9f759b983..bcb411c91482dc9ededbe8842b8076504e943e45 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 a8d6d331818f0964633787d7dcd0edd4d3690fde..6e1a6c8aeea90dcfd442b9701607a2ef2277d873 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 <cstring> #include <iostream> @@ -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 36f5ad877f7de490101a8063e620a4205e976adc..0000000000000000000000000000000000000000 --- 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 0000000000000000000000000000000000000000..25a12c1865b7a9b8df1a0e409b99924834fcb829 --- /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 0000000000000000000000000000000000000000..d238e435a145f267c9777ff9753336f7e3810621 --- /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 0000000000000000000000000000000000000000..b36f036445a9bab9000ff85d9438579b6dd68889 --- /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 0000000000000000000000000000000000000000..9b72d0f821c5fe69fdc1300076ad41027dd30e1d --- /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 0000000000000000000000000000000000000000..680663a97ba864899e3e0ef36ff825ffca423262 --- /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 8ce0038ce82090739a62723c60f67f32d6aed525..8ada299b3acb40b19d6d3ef9e9a49e51e6d8a7b6 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 0000000000000000000000000000000000000000..946086a06410cec2f4388033cf1be0fbe118aa7a --- /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 0000000000000000000000000000000000000000..a367c338001529cf19bd65f34e45b80fa0b1ae84 --- /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 0000000000000000000000000000000000000000..ae0670b8a40f4ef80622ca73e00fc7875c316919 --- /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 <http://www.gnu.org/licenses/>. + +\*---------------------------------------------------------------------------*/ + +#include "dummyLib.H" +#include <iostream> + +// * * * * * * * * * * * * * * 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 1130023f406f59a150451cec959a1cdc3e7d7220..bd079632e904ba329dd396f6d04e46045c3587ee 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 7189b250a2b5547a808bb5efbf901dc432a5683d..31934eb7ccbff0a86d984a2abe822632a48acd3c 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 <http://www.gnu.org/licenses/>. 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 <string> @@ -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 0000000000000000000000000000000000000000..bb3cd16a46302a121631674f418073a7d7fb7a1f --- /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 0000000000000000000000000000000000000000..2c788d6c922509228ca896d4afdd1cb16d9e2c61 --- /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 0000000000000000000000000000000000000000..a0c5ed34300f5ae36da35a33e8df539c3bddc96f --- /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 <http://www.gnu.org/licenses/>. + +\*---------------------------------------------------------------------------*/ + +#include "dummyLib.H" +#include <iostream> +#include <mpi.h> + +// * * * * * * * * * * * * * * 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 0000000000000000000000000000000000000000..5d5cf61286f938acb2439044cf12d382fd93ab59 --- /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<<USAGE + +Usage: ${0##*/} [OPTIONS] [name1 .. [nameN]] +options: + -all Test all + -mode=MODE Pass-through option for foamEtcFile + -help Display short help and exit + +Calls various wmake 'have_*' scripts with -test to report the +detected software locations + +USAGE + exit 0 # A clean exit +} + + +# Report error and exit +die() +{ + exec 1>&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 5f9bec387fb9302f98f7d590eaa2982c2477a076..070233ddc809d8f6dda86a91121612095084c395 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) - -setenv WM_THIRD_PARTY_DIR -set foundDir='' - -_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 +# Test out-of-source directories for an "Allwmake" file (source) +# or a "platforms/" directory (runtime-only) -if ("${foundDir}" == true) then - _foamEcho "Using $WM_THIRD_PARTY_DIR" +setenv WM_THIRD_PARTY_DIR "" # Empty value (before detection) + +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 ed4df86dbfb22836bbf97c4f059464f0ffed2087..b5adaa08f8be466ce95a8205eb94559523c1e792 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) - -export WM_THIRD_PARTY_DIR -unset foundDir - -_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" ] +# Test out-of-source directories for an "Allwmake" file (source) +# or a "platforms/" directory (runtime-only) + +export WM_THIRD_PARTY_DIR="" # Empty value (before detection) + +if [ -e "$WM_PROJECT_DIR/ThirdParty" ] +then + # 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 - foundDir=true - break + if [ -f "$foundDir/Allwmake" ] || \ + [ -d "$foundDir/platforms" ] + then + WM_THIRD_PARTY_DIR="$foundDir" + break + else + _foamEcho " does not have Allwmake or platforms/" + fi fi - fi -done + done +fi -if [ -n "$foundDir" ] +if [ -z "$WM_THIRD_PARTY_DIR" ] then - _foamEcho "Using $WM_THIRD_PARTY_DIR" -else # 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 2184bc7e33a2e607de55ccf96bd7734699d60b8f..758808fd169dbcd74f44d8e38e17a8632cb5e3f3 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 -# <http://www.gnu.org/licenses/>. +# 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 572fea82567c5be42622ef7b527bbbb2c450e0e2..d7cabb880f7f99929b3650999cb8cefeb7267d50 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