Files
ThirdParty-common/etc/tools/ThirdPartyFunctions
mark e2534597e0 COMP: Ensure makeParaView works for current and upcoming paraview (issue #10)
- minor patching is still required for 5.1.2 (July 2016 release).

- no patching is currently needed for 5.2.0-RC4.
  We have supplied the necessary patches upstream.

    - https://gitlab.kitware.com/paraview/paraview/merge_requests/1022
    - https://gitlab.kitware.com/paraview/paraview/merge_requests/1024
2016-11-11 18:56:30 +01:00

331 lines
7.9 KiB
Bash

#---------------------------------*- sh -*-------------------------------------
# ========= |
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
# \\ / O peration |
# \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
# \\/ M anipulation | Copyright (C) 2016 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/>.
#
# File
# etc/tools/ThirdPartyFunctions
#
# Description
# Functions for managing the third-party packages
#
# Define the standard buildBASE and installBASE for the platform
# Define WM_NCOMPPROCS always.
#------------------------------------------------------------------------------
# Define the normal build and prefix directories
buildBASE=$WM_THIRD_PARTY_DIR/build/$WM_ARCH$WM_COMPILER
installBASE=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER
#
# Mostly building without wmake
# - disable wmakeScheduler variables
# - use max number of cores for building
#
unset WM_HOSTS WM_SCHEDULER
if [ -r /proc/cpuinfo ]
then
WM_NCOMPPROCS=$(egrep "^processor" /proc/cpuinfo | wc -l)
else
WM_NCOMPPROCS=1
fi
export WM_NCOMPPROCS
# echo "Building on $WM_NCOMPPROCS cores"
#
# If WM_CONTINUE_ON_ERROR not set activate the shell option "stop on error"
#
if [ -z "${WM_CONTINUE_ON_ERROR}" ]
then
set -e
fi
# Report error and exit
die()
{
exec 1>&2
echo
echo "Error: see '${0##*/} -help' for usage"
while [ "$#" -ge 1 ]; do echo " $1"; shift; done
echo
exit 1
}
# Test if it matches "*-none"
_foamIsNone()
{
test "${1##*-}" = none
}
# Test if it matches "*-system"
_foamIsSystem()
{
test "${1##*-}" = system
}
#
# try to locate cmake according to the CMAKE_PATH
# or just use what is found in the path
#
unset CMAKE_PATH # clear when first loaded
findCMake()
{
local candidate
local foundExe
if [ -n "$CMAKE_PATH" ]
then
# check as directory
if [ -d "$CMAKE_PATH" ]
then
for candidate in \
$CMAKE_PATH/cmake \
$CMAKE_PATH/bin/cmake \
;
do
if [ -f "$candidate" -a -x "$candidate" ]
then
foundExe=$candidate
break
fi
done
fi
# check as file, include ThirdParty installation in the search
if [ -z "$foundExe" ]
then
for candidate in \
$CMAKE_PATH \
$installBASE/$CMAKE_PATH/bin/cmake \
$installBASE/cmake-$CMAKE_PATH/bin/cmake \
;
do
if [ -f "$candidate" -a -x "$candidate" ]
then
foundExe=$candidate
break
fi
done
fi
if [ -n "$foundExe" ]
then
# Use absolute path
if [ "${foundExe#/}" = "$foundExe" ]
then
foundExe="$(cd ${foundExe%/cmake} 2>/dev/null && pwd)/cmake"
fi
echo "$foundExe"
return 0
else
cat << NOT_FOUND 1>&2
'cmake' not found under specified CMAKE_PATH
CMAKE_PATH=$CMAKE_PATH
reverting to using command from path
NOT_FOUND
fi
fi
# Default is cmake from the path
echo cmake
}
#
# try to locate qmake according to the QMAKE_PATH
# or just use what is found in the path
#
unset QMAKE_PATH # clear when first loaded
findQtMake()
{
local candidate
local foundExe
if [ -n "$QMAKE_PATH" ]
then
# check as directory
if [ -d "$QMAKE_PATH" ]
then
for candidate in \
$QMAKE_PATH/qmake \
$QMAKE_PATH/bin/qmake \
;
do
if [ -f "$candidate" -a -x "$candidate" ]
then
foundExe=$candidate
break
fi
done
fi
# check as file, include ThirdParty installation in the search
if [ -z "$foundExe" ]
then
for candidate in \
$QMAKE_PATH \
$installBASE/$QMAKE_PATH/bin/qmake \
$installBASE/qt-$QMAKE_PATH/bin/qmake \
;
do
if [ -f "$candidate" -a -x "$candidate" ]
then
foundExe=$candidate
break
fi
done
fi
if [ -n "$foundExe" ]
then
# Use absolute path
if [ "${foundExe#/}" = "$foundExe" ]
then
foundExe="$(cd ${foundExe%/qmake} 2>/dev/null && pwd)/qmake"
fi
echo "$foundExe"
return 0
else
cat << NOT_FOUND 1>&2
'qmake' not found under specified QMAKE_PATH
QMAKE_PATH=$QMAKE_PATH
reverting to using command from path
NOT_FOUND
fi
fi
# Default is qmake from the path
echo qmake
}
#
# Download file $1 from url $2 into download/ directory
#
downloadFile()
{
[ "$#" -eq 2 ] || {
echo "downloadFile called with incorrect number of arguments $@"
return 1
}
local file="$1"
local url="$2"
if [ ! -e download/$file ]
then
mkdir -p download
echo "downloading $tarFile from $url"
( cd download && wget --no-check-certificate $url -O $file )
fi
}
#
# Copy Make/{files,options} from etc/wmakeFiles/PACKAGE
#
# $1 = PACKAGE
# $2 = TARGET DIRECTORY (optional)
cpMakeFiles()
{
set +x
[ "$#" -eq 1 -o "$#" -eq 2 ] || {
echo "cpMakeFiles called with incorrect number of arguments $@"
return 1
}
local pkg=$1
local dst="${2:-.}"
echo "cpMakeFiles" $pkg $dst
wmakeFiles=$WM_THIRD_PARTY_DIR/etc/wmakeFiles/$pkg
for i in $(cd $wmakeFiles && find . -type f)
do
d=${i%/*} # dirname
b=${i##*/} # basename
mkdir -p $dst/$d/Make 2>/dev/null
# NOTE the behaviour of '-nt' can cause problems
#
# - bash, ksh, /usr/bin/test
# True, if file1 exists and file2 does not
#
# - dash, zsh (and maybe others)
# False, if file1 or file2 does not exist
#
if [ ! -e $dst/$d/Make/$b -o $wmakeFiles/$i -nt $dst/$d/Make/$b ]
then
cp $wmakeFiles/$i $dst/$d/Make/$b
fi
done
set -x
}
#
# Apply source-code patch if possible.
# Patches are taken from etc/patches/PACKAGE
#
# $1 = PACKAGE
# $2 = TARGET DIRECTORY (optional)
applyPatch()
{
[ "$#" -eq 1 -o "$#" -eq 2 ] || {
echo "applyPatch called with incorrect number of arguments ($#): $@"
return 1
}
local pkg="$1"
local dst="${2:-.}"
local patch="$WM_THIRD_PARTY_DIR/etc/patches/$pkg"
local sentinel="PATCHED_DURING_OPENFOAM_BUILD"
if [ -r "$patch" ]
then
(
cd $dst || exit 1
if [ -f "$sentinel" ]
then
echo "patch for $pkg was already applied"
else
echo "apply patch for $pkg"
touch "$sentinel"
patch -p1 < $patch 2>&1 | tee $sentinel
fi
)
else
echo "no patch found for $pkg"
fi
}
#------------------------------------------------------------------------------