185 lines
4.5 KiB
Bash
Executable File
185 lines
4.5 KiB
Bash
Executable File
#!/bin/sh
|
|
#------------------------------------------------------------------------------
|
|
# ========= |
|
|
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
|
# \\ / O peration |
|
|
# \\ / A nd | www.openfoam.com
|
|
# \\/ M anipulation |
|
|
#------------------------------------------------------------------------------
|
|
# Copyright (C) 2020-2023 OpenCFD Ltd.
|
|
#------------------------------------------------------------------------------
|
|
# License
|
|
# This file is part of OpenFOAM, distributed under GPL-3.0-or-later.
|
|
#
|
|
# Script
|
|
# query-versions
|
|
#
|
|
# Description
|
|
# Query (ThirdParty) versions based on their etc/config.sh values
|
|
# Executes their respective -query.
|
|
#
|
|
# TODO
|
|
# cmake, vtk, paraview
|
|
#
|
|
#------------------------------------------------------------------------------
|
|
# Hard-coded value (eg, with autoconfig)
|
|
projectDir="@PROJECT_DIR@"
|
|
|
|
if [ -z "$projectDir" ] || [ "${projectDir#@}" != "$projectDir" ]
|
|
then
|
|
# Auto-detect from location
|
|
toolsDir="${0%/*}" # The bin/tools dir
|
|
projectDir="${toolsDir%/bin/tools}" # Project dir
|
|
|
|
case "$projectDir" in
|
|
(/bin | /usr/bin | /usr/local/bin)
|
|
# This shouldn't happen.
|
|
# If copied to a system dir, should also be using hard-coded values!
|
|
echo "Warning: suspicious looking project dir: $projectDir" 1>&2
|
|
;;
|
|
|
|
("$toolsDir")
|
|
# Eg, called as ./openfoam etc - need to try harder
|
|
projectDir="$(\cd $(dirname $0)/../.. && \pwd -L)" || unset projectDir
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
#------------------------------------------------------------------------------
|
|
usage() {
|
|
exec 1>&2
|
|
while [ "$#" -ge 1 ]; do echo "$1"; shift; done
|
|
cat<<USAGE
|
|
|
|
Usage: ${0##*/} [OPTION]
|
|
|
|
options:
|
|
-compiler Print clang,gcc compiler versions only
|
|
-clang Print clang compiler versions only
|
|
-gcc Print gcc compiler versions only
|
|
-h, -help Print the usage
|
|
|
|
Query (ThirdParty) versions based on their etc/config.sh values.
|
|
Uses OpenFOAM wmake/scripts/have_* scripts.
|
|
|
|
USAGE
|
|
exit 1
|
|
}
|
|
|
|
#------------------------------------------------------------------------------
|
|
|
|
# Parse options
|
|
unset optCompiler
|
|
while [ "$#" -gt 0 ]
|
|
do
|
|
case "$1" in
|
|
# Print help
|
|
(-h | -help*)
|
|
usage
|
|
;;
|
|
|
|
(-clang | -gcc)
|
|
optCompiler="${1#-}"
|
|
;;
|
|
|
|
(-comp*)
|
|
optCompiler=true
|
|
;;
|
|
|
|
(*)
|
|
echo "Ignore unknown option/argument: $@" 1>&2
|
|
break
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
#------------------------------------------------------------------------------
|
|
configDir="$projectDir/etc/config.sh"
|
|
scriptsDir="$projectDir/wmake/scripts"
|
|
|
|
[ -d "$configDir" ] || {
|
|
echo "No such directory: $configDir" 1>&2
|
|
exit 2
|
|
}
|
|
[ -d "$scriptsDir" ] || {
|
|
echo "No such directory: $scriptsDir" 1>&2
|
|
exit 2
|
|
}
|
|
|
|
# Allow operation without an active OpenFOAM environment
|
|
export WM_PROJECT_DIR="$projectDir"
|
|
|
|
#------------------------------------------------------------------------------
|
|
|
|
# Gcc/Clang versions in etc/config.sh/compiler
|
|
#
|
|
# parse this type of content
|
|
# ----
|
|
# default_clang_version=llvm-[digits].[digits].[digits]
|
|
# default_gcc_version=gcc-[digits].[digits].[digits]
|
|
#
|
|
# Gcc121*) gcc_version=gcc-[digits].[digits].[digits] ;;
|
|
# ----
|
|
|
|
queryCompiler()
|
|
{
|
|
compiler="$1"
|
|
|
|
if [ -z "$compiler" ]
|
|
then
|
|
compiler='clang\|gcc'
|
|
fi
|
|
|
|
settings="$configDir/compiler"
|
|
if ! [ -f "$settings" ]
|
|
then
|
|
echo "No such file: $settings" 1>&2
|
|
return 1
|
|
fi
|
|
|
|
sed -n \
|
|
-e 's/^[ ]*\('"$compiler"'\)\([0-9][0-9]*\)[^=]*=\([^ ;]*\).*$/\1\2 \3/ip' \
|
|
"$settings"
|
|
|
|
sed -n \
|
|
-e 's/^[ ]*\(default_\)\('"$compiler"'\)_version=\([^ ;]*\).*$/\1\2 \3/ip' \
|
|
"$settings"
|
|
}
|
|
|
|
|
|
#------------------------------------------------------------------------------
|
|
|
|
# Examine the "wmake/scripts/have_..." scripts for query_...() functions,
|
|
# assume they also have a -query option
|
|
|
|
queryVersions()
|
|
{
|
|
for script in grep -l -e '^query_' "$scriptsDir"/have_*
|
|
do
|
|
if [ -f "$script" ]
|
|
then
|
|
bash "$script" -query
|
|
fi
|
|
done
|
|
}
|
|
|
|
|
|
#------------------------------------------------------------------------------
|
|
|
|
# main
|
|
|
|
case "$optCompiler" in
|
|
(true)
|
|
queryCompiler
|
|
;;
|
|
(clang | gcc)
|
|
queryCompiler "$optCompiler"
|
|
;;
|
|
(*)
|
|
queryVersions
|
|
;;
|
|
esac
|
|
|
|
#------------------------------------------------------------------------------
|