mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
- When compiling additional modules or user code, we need more control
for the installation locations beyond the usual FOAM_USER_LIBBIN,
FOAM_SITE_LIBBIN, FOAM_LIBBIN, and wish to have these values be
modifiable without editing files.
- provide wmake rules for handling standard defaults:
* GENERAL_RULES/module-path-user
* GENERAL_RULES/module-path-group
* GENERAL_RULES/module-path-project
which are incorporated as follows:
Make/options:
include $(GENERAL_RULES)/module-path-user
Make/files:
LIB = $(FOAM_MODULE_LIBBIN)/libMyLibrary
By default these would compile into FOAM_USER_{APPBIN,LIBBIN} but
could be adjusted at compilation time. For example,
```
wmake -module-prefix=/path/my-install-location
```
Or
```
./Allwmake -module-prefix=/path/my-install-location
./Allwmake -prefix=/path/my-install-location
```
Or
```
FOAM_MODULE_PREFIX=/path/my-install-location ./Allwmake
```
ENH: add -no-recursion option for AllwmakeParseArguments
- more descriptive naming than the -fromWmake option (still supported)
- remove wmake/scripts/wmake.{cmake,wmake}-args since the -prefix
handling and -no-recursion is now directly handled by AllwmakeParseArguments
685 lines
20 KiB
Bash
Executable File
685 lines
20 KiB
Bash
Executable File
#!/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) 2017-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/>.
|
|
#
|
|
# Script
|
|
# wmake
|
|
#
|
|
# Description
|
|
# General, wrapped make system for multi-platform development.
|
|
#
|
|
# Intermediate object and dependency files retain the tree structure
|
|
# of the original source files, with its location depending on the
|
|
# build context.
|
|
#
|
|
# 1. Building within the OpenFOAM project:
|
|
# The tree is located under $WM_PROJECT_DIR/build/$WM_OPTIONS/
|
|
#
|
|
# 2. Building applications or libraries outside the OpenFOAM project:
|
|
# The tree is located under its local Make/$WM_OPTIONS/
|
|
#
|
|
# The `wdep` script can be used to locate the dependency file
|
|
# corresponding to a given source file.
|
|
#
|
|
# When `wmake -all` is used, the following rules are applied:
|
|
# 1. If `Allwmake.override` exists, use it.
|
|
# 2. (OR) If `Allwmake` exists, use it.
|
|
# 3. (OR) descend into each sub-directory and repeat.
|
|
#
|
|
# Environment
|
|
# FOAM_EXTRA_CFLAGS FOAM_EXTRA_CXXFLAGS FOAM_EXTRA_LDFLAGS
|
|
# FOAM_MODULE_PREFIX
|
|
#
|
|
# See also
|
|
# wmakeLnInclude, wmakeLnIncludeAll, wmakeCollect, wdep, wrmdep, wrmo,
|
|
# wclean, wcleanLnIncludeAll
|
|
#
|
|
#------------------------------------------------------------------------------
|
|
Script="${0##*/}" # Need 'Script' for wmakeFunctions messages
|
|
scriptsDir="${0%/*}"/scripts # wmake/scripts directory
|
|
. "$scriptsDir"/wmakeFunctions # Source wmake functions
|
|
|
|
printHelp() {
|
|
cat<<HELP_HEAD
|
|
|
|
Usage: $Script [OPTION] [dir]
|
|
$Script [OPTION] target [dir [MakeDir]]
|
|
$Script -subcommand ...
|
|
|
|
options:
|
|
-s | -silent Silent mode (do not echo commands)
|
|
-a | -all wmake all sub-directories, running Allwmake if present
|
|
-q | -queue wmakeCollect sub-directories, running Allwmake if present
|
|
-k | -keep-going Keep going even when errors occur (-non-stop)
|
|
-j | -jN | -j N Compile using all or specified N cores/hyperthreads
|
|
-update Update lnInclude, dep files, remove deprecated files/dirs
|
|
HELP_HEAD
|
|
|
|
if [ -n "$1" ]
|
|
then
|
|
cat<<HELP_FULL
|
|
-debug Define c++DBUG='-DFULLDEBUG -g -O0' as override
|
|
-module-prefix=PATH Specify FOAM_MODULE_PREFIX as absolute/relative path
|
|
-module-prefix=TYPE Specify FOAM_MODULE_PREFIX as predefined type
|
|
(u,user | g,group | o,openfoam)
|
|
-no-scheduler Disable scheduled parallel compilation
|
|
-show-api Print api value (from Make rules)
|
|
-show-ext-so Print shared library extension (with '.' separator)
|
|
-show-c Print C compiler value
|
|
-show-cflags Print C compiler flags
|
|
-show-cxx Print C++ compiler value
|
|
-show-cxxflags Print C++ compiler flags
|
|
-show-cflags-arch The C compiler arch flag (eg, -m64 etc)
|
|
-show-cxxflags-arch The C++ compiler arch flag (eg, -m64 etc)
|
|
-show-compile-c Same as '-show-c -show-cflags'
|
|
-show-compile-cxx Same as '-show-cxx -show-cxxflags'
|
|
-show-path-c Print path to C compiler
|
|
-show-path-cxx Print path to C++ compiler
|
|
HELP_FULL
|
|
fi
|
|
|
|
cat<<TAIL_OPTIONS
|
|
-pwd Print root directory containing a Make/ directory
|
|
-version | --version Print version (same as -show-api)
|
|
-help Display short help and exit
|
|
-help-full Display full help and exit
|
|
|
|
subcommands (wmake subcommand -help for more information):
|
|
TAIL_OPTIONS
|
|
|
|
if [ -n "$1" ]
|
|
then
|
|
cat<<HELP_SUBCOMMANDS
|
|
-build-info Query/manage status of {api,branch,build} information
|
|
-check-dir Check directory equality
|
|
HELP_SUBCOMMANDS
|
|
else
|
|
cat<<HELP_SUBCOMMANDS
|
|
-build-info -check-dir
|
|
HELP_SUBCOMMANDS
|
|
fi
|
|
|
|
cat<<HELP_TAIL_COMMON
|
|
|
|
General, wrapped make system for multi-platform development.
|
|
HELP_TAIL_COMMON
|
|
|
|
if [ -n "$1" ]
|
|
then
|
|
cat<<HELP_TAIL_FULL
|
|
|
|
Makefile targets: platforms/linux64GccDPInt32Opt/.../fvMesh.o (for example)
|
|
Special targets:
|
|
all | queue Same as -all | -queue options
|
|
exe Compile statically linked executable
|
|
lib Compile statically linked archive lib (.a)
|
|
libo Compile statically linked lib (.o)
|
|
libso Compile dynamically linked lib (.so)
|
|
dep Create lnInclude and dependencies only
|
|
updatedep Create dependencies only (in case of broken dependencies)
|
|
objects Compile but not link
|
|
|
|
Environment
|
|
FOAM_EXTRA_CFLAGS FOAM_EXTRA_CXXFLAGS FOAM_EXTRA_LDFLAGS
|
|
FOAM_MODULE_PREFIX
|
|
|
|
HELP_TAIL_FULL
|
|
else
|
|
cat<<HELP_TAIL_BRIEF
|
|
|
|
Some special targets (see -help-full for details):
|
|
all | queue Same as -all | -queue options
|
|
exe Executables
|
|
lib libo libso Libraries
|
|
|
|
HELP_TAIL_BRIEF
|
|
fi
|
|
exit 0 # 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
|
|
}
|
|
|
|
# Default make is the "make" in the path
|
|
make="make"
|
|
|
|
|
|
#------------------------------------------------------------------------------
|
|
|
|
# Set nCores to the number of cores on the machine
|
|
allCores()
|
|
{
|
|
nCores=$(getconf _NPROCESSORS_ONLN 2>/dev/null) || nCores=1
|
|
echo "${nCores:-1}"
|
|
}
|
|
|
|
|
|
#------------------------------------------------------------------------------
|
|
# Parse arguments and options
|
|
#------------------------------------------------------------------------------
|
|
|
|
# Default to compiling the local target only
|
|
unset optAll optUpdate optDebug optQuiet optShow optPwd
|
|
|
|
# Consistency with inherited values
|
|
if [ "$WM_QUIET" = true ]
|
|
then optQuiet=true
|
|
fi
|
|
|
|
while [ "$#" -gt 0 ]
|
|
do
|
|
case "$1" in
|
|
-help-f*) # Full help
|
|
printHelp -full
|
|
;;
|
|
-h | -help*) # Short help
|
|
printHelp
|
|
;;
|
|
|
|
# Forward to scripts/wmake-build-info
|
|
-build-info) shift
|
|
exec "$scriptsDir/wmake-build-info" "$@"
|
|
exit $?
|
|
;;
|
|
|
|
# Forward to scripts/wmake-check-dir
|
|
# Out of order options: (-quiet)
|
|
-check-dir) shift
|
|
exec "$scriptsDir/wmake-check-dir" \
|
|
${optQuiet:+-silent} "$@"
|
|
exit $?
|
|
;;
|
|
|
|
-s | -silent | -quiet)
|
|
optQuiet=true
|
|
export WM_QUIET=true
|
|
;;
|
|
-debug)
|
|
optDebug="-DFULLDEBUG -g -O0"
|
|
;;
|
|
|
|
-module-prefix=*)
|
|
optPrefix="${1#*=}"
|
|
case "$optPrefix" in
|
|
# Prefix: user
|
|
(u | user)
|
|
export FOAM_MODULE_PREFIX="${FOAM_USER_LIBBIN%/*}"
|
|
;;
|
|
|
|
# Prefix: group
|
|
(g | group)
|
|
export FOAM_MODULE_PREFIX="${FOAM_SITE_LIBBIN%/*}"
|
|
;;
|
|
|
|
# Prefix: openfoam (other)
|
|
(o | openfoam)
|
|
export FOAM_MODULE_PREFIX="${FOAM_LIBBIN%/*}"
|
|
;;
|
|
|
|
# Prefix: custom (absolute or relative)
|
|
(*)
|
|
export FOAM_MODULE_PREFIX="$optPrefix"
|
|
: "${FOAM_MODULE_PREFIX:=/usr/local}" # Default (autoconf)
|
|
|
|
# Require absolute path
|
|
[ "${FOAM_MODULE_PREFIX#/}" != "${FOAM_MODULE_PREFIX}" ] || \
|
|
FOAM_MODULE_PREFIX="${PWD}/${FOAM_MODULE_PREFIX}"
|
|
;;
|
|
esac
|
|
|
|
unset FOAM_MODULE_APPBIN FOAM_MODULE_LIBBIN
|
|
echo "Module prefix = $FOAM_MODULE_PREFIX" 1>&2
|
|
;;
|
|
|
|
-show-api | -show-ext-so | \
|
|
-show-compile-c | -show-c | -show-cflags | -show-cflags-arch | \
|
|
-show-compile-cxx | -show-cxx | -show-cxxflags | -show-cxxflags-arch )
|
|
$make -f $WM_DIR/makefiles/info "${1#-show-}"
|
|
optShow=true
|
|
;;
|
|
-show-path-c | -show-path-cxx )
|
|
command -v $($make -f $WM_DIR/makefiles/info "${1#-show-path-}")
|
|
optShow=true
|
|
;;
|
|
-a | -all | all)
|
|
optAll=all
|
|
;;
|
|
-q | -queue | queue)
|
|
optAll=queue
|
|
;;
|
|
# Parallel compilation on all cores (or specified number of cores)
|
|
-j)
|
|
export WM_NCOMPPROCS=0
|
|
case "$2" in
|
|
[0-9]*)
|
|
if WM_NCOMPPROCS="$(expr 0 + "$2" 2>/dev/null)"
|
|
then
|
|
shift
|
|
fi
|
|
;;
|
|
esac
|
|
[ "${WM_NCOMPPROCS:=0}" -gt 0 ] || WM_NCOMPPROCS=$(allCores)
|
|
echo "Compiling enabled on $WM_NCOMPPROCS cores" 1>&2
|
|
;;
|
|
# Parallel compilation on specified number of cores
|
|
-j[1-9]*)
|
|
export WM_NCOMPPROCS="${1#-j}"
|
|
echo "Compiling enabled on $WM_NCOMPPROCS cores" 1>&2
|
|
;;
|
|
# Keep going, ignoring errors
|
|
-k | -keep-going | -non-stop)
|
|
export WM_CONTINUE_ON_ERROR=true
|
|
;;
|
|
# Disable scheduled parallel compilation
|
|
-no-scheduler)
|
|
unset WM_SCHEDULER
|
|
;;
|
|
# Print root directory containing a Make/ directory and exit
|
|
-pwd)
|
|
optPwd=true
|
|
;;
|
|
# Meant to be used following a pull, this will:
|
|
# - remove dep files that depend on deleted files;
|
|
# - remove stale dep files;
|
|
# - update lnInclude directories;
|
|
# - remove empty directories, along with deprecated object directories
|
|
# and respective binaries.
|
|
-update)
|
|
optUpdate=true
|
|
: "${optAll:=all}" # implies 'all', unless previously set
|
|
;;
|
|
-version | --version)
|
|
$make -f $WM_DIR/makefiles/info api
|
|
optShow=true
|
|
break;
|
|
;;
|
|
--)
|
|
shift
|
|
break
|
|
;;
|
|
-*)
|
|
die "unknown option: '$1'"
|
|
;;
|
|
*)
|
|
break
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
if [ "$optShow" = true ]
|
|
then
|
|
exit 0
|
|
fi
|
|
|
|
|
|
#------------------------------------------------------------------------------
|
|
# Check environment variables
|
|
#------------------------------------------------------------------------------
|
|
|
|
checkEnv
|
|
|
|
# Require WM_PROJECT for anything except a standalone exe.
|
|
# The WM_PROJECT_DIR was already tested in checkEnv.
|
|
if [ -z "$WM_PROJECT" ] && [ "$1" != exe ]
|
|
then
|
|
exec 1>&2
|
|
echo "$Script error:"
|
|
echo " environment variable \$WM_PROJECT not set"
|
|
echo " while building project library"
|
|
exit 1
|
|
fi
|
|
|
|
|
|
#------------------------------------------------------------------------------
|
|
# Setup parallel compilation
|
|
#------------------------------------------------------------------------------
|
|
|
|
if [ -n "$WM_NCOMPPROCS" ]
|
|
then
|
|
parOpt="-j $WM_NCOMPPROCS"
|
|
|
|
if [ "$WM_NCOMPPROCS" -gt 1 ] && [ -z "$MAKEFLAGS" ]
|
|
then
|
|
make="$make --no-print-directory $parOpt"
|
|
fi
|
|
fi
|
|
|
|
|
|
#------------------------------------------------------------------------------
|
|
# Check arguments and change to the directory in which to run wmake.
|
|
# The variables 'targetType' and 'MakeDir' are considered global
|
|
#------------------------------------------------------------------------------
|
|
|
|
unset targetType
|
|
MakeDir=Make
|
|
|
|
unset dir
|
|
|
|
if [ -n "$optPwd" ]
|
|
then
|
|
if [ $# -ge 1 ]
|
|
then
|
|
if [ -d "$1" ]
|
|
then
|
|
dir="${1%/}"
|
|
elif [ -f "$1" ]
|
|
then
|
|
dir="${1%/*}"
|
|
: "${dir:=.}"
|
|
[ "$dir" != "$1" ] || dir="."
|
|
else
|
|
echo "$Script error: not a file or directory" 1>&2
|
|
exit 1
|
|
fi
|
|
|
|
cd "$dir" 2>/dev/null || {
|
|
echo "$Script error: could not change to directory '$dir'" 1>&2
|
|
exit 1
|
|
}
|
|
fi
|
|
|
|
# Locate target with Make/ directory
|
|
if dir="$(findTarget .)"
|
|
then
|
|
(cd "$dir" && pwd -L)
|
|
exit 0
|
|
else
|
|
exit 2
|
|
fi
|
|
|
|
else
|
|
|
|
if [ $# -ge 1 ]
|
|
then
|
|
if [ -d "$1" ]
|
|
then
|
|
dir="${1%/}"
|
|
elif [ -f "$1" ]
|
|
then
|
|
dir="${1%/*}"
|
|
: "${dir:=.}"
|
|
if [ "$dir" = "$1" ]
|
|
then
|
|
dir="."
|
|
fi
|
|
else
|
|
targetType="$1"
|
|
fi
|
|
|
|
# Specified directory name:
|
|
[ $# -ge 2 ] && dir="${2%/}"
|
|
|
|
# Specified alternative name for the Make sub-directory:
|
|
[ $# -ge 3 ] && MakeDir="${3%/}"
|
|
|
|
if [ -n "$dir" ]
|
|
then
|
|
cd "$dir" 2>/dev/null || {
|
|
echo "$Script error: could not change to directory '$dir'" 1>&2
|
|
exit 1
|
|
}
|
|
elif [ -f "$MakeDir/files" ]
|
|
then
|
|
dir="(${PWD##*/})" # Implicit directory information
|
|
fi
|
|
|
|
# Print command
|
|
echo "$Script $targetType${targetType:+ }$dir"
|
|
unset dir
|
|
fi
|
|
fi
|
|
|
|
unset dir
|
|
|
|
|
|
#------------------------------------------------------------------------------
|
|
# Recurse the source tree to update all
|
|
#------------------------------------------------------------------------------
|
|
|
|
if [ "$optUpdate" = true ]
|
|
then
|
|
wrmdep -update
|
|
wrmdep -old
|
|
wmakeLnIncludeAll -update $parOpt
|
|
wclean empty
|
|
export WM_UPDATE_DEPENDENCIES=yes
|
|
fi
|
|
|
|
|
|
unset exitCode
|
|
|
|
#------------------------------------------------------------------------------
|
|
# Recurse the source tree to compile "all" targets
|
|
#------------------------------------------------------------------------------
|
|
|
|
if [ "$optAll" = all ]
|
|
then
|
|
if [ -e Allwmake.override ]
|
|
then
|
|
if [ -x Allwmake.override ]
|
|
then
|
|
./Allwmake.override -fromWmake ${optDebug:+-debug} $targetType
|
|
exitCode="$?"
|
|
else
|
|
# Allow empty or non-executable file (eg, touch Allwmake.override)
|
|
exitCode=0
|
|
fi
|
|
elif [ -e Allwmake ]
|
|
then
|
|
./Allwmake -fromWmake ${optDebug:+-debug} $targetType
|
|
exitCode="$?"
|
|
fi
|
|
|
|
if [ -n "$exitCode" ]
|
|
then
|
|
exit "$exitCode"
|
|
fi
|
|
|
|
exitCode=0 # For fall-through
|
|
|
|
|
|
# Find all the sub-directories containing a 'Make' directory
|
|
# (xargs is just used to flatten the list)
|
|
FOAM_APPS=$(
|
|
for d in *
|
|
do
|
|
case "$d" in
|
|
(Make) ;; # Do not make within Make/ dir
|
|
(*) [ -d "$d" ] && echo "$d" ;;
|
|
esac
|
|
done | xargs)
|
|
|
|
if [ -n "$FOAM_APPS" ]
|
|
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
|
|
|
|
# Exit on error, or if current directory does not have a 'Make' directory
|
|
if [ ! -d "$MakeDir" ] || [ "$exitCode" -ne 0 ]
|
|
then
|
|
exit "$exitCode"
|
|
fi
|
|
fi
|
|
|
|
|
|
#------------------------------------------------------------------------------
|
|
# Recurse source tree to compile "all" targets using wmakeCollect
|
|
#------------------------------------------------------------------------------
|
|
if [ "$optAll" = queue ]
|
|
then
|
|
[ "$optUpdate" = true ] || wmakeLnIncludeAll $parOpt
|
|
|
|
(
|
|
export WM_COLLECT_DIR="$WM_PROJECT_DIR/build/${WM_OPTIONS}/${PWD////_}"
|
|
export WM_SCHEDULER="$WM_DIR/wmakeCollect"
|
|
trap '$WM_SCHEDULER -kill' TERM INT
|
|
"$WM_SCHEDULER" -clean \
|
|
&& wmake -all objects \
|
|
&& "$WM_SCHEDULER"
|
|
) && wmake -all ${optDebug:+-debug}
|
|
exit $?
|
|
fi
|
|
|
|
|
|
#------------------------------------------------------------------------------
|
|
# Search up the directory tree for the Make sub-directory,
|
|
# check the existence of the 'files' file and build there if present
|
|
#------------------------------------------------------------------------------
|
|
|
|
cdSource
|
|
|
|
|
|
#------------------------------------------------------------------------------
|
|
# Transform options
|
|
#------------------------------------------------------------------------------
|
|
|
|
# Transform no option to "libso" if that looks appropriate or remove it
|
|
# so that the call to make builds the application
|
|
if [ -z "$targetType" ]
|
|
then
|
|
if grep -qe '^ *LIB *=' "$MakeDir/files" 2>/dev/null
|
|
then
|
|
targetType=libso
|
|
fi
|
|
elif grep -qe '^ *EXE *=' "$MakeDir/files" 2>/dev/null
|
|
then
|
|
# Application. Remove any nonsense targetType
|
|
case "$targetType" in
|
|
lib*)
|
|
unset targetType
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
|
|
#------------------------------------------------------------------------------
|
|
# Spawn a sub-shell and unset MAKEFLAGS in that sub-shell to avoid
|
|
# files and options being built in parallel
|
|
#------------------------------------------------------------------------------
|
|
|
|
# Mini-version of findObjectDir
|
|
unset objectsDir
|
|
|
|
# Handle project/{applications,src} as out-of-source build
|
|
relativeDir="${PWD#${WM_PROJECT_DIR}/}"
|
|
if [ "$relativeDir" != "$PWD" ]
|
|
then
|
|
[ -w "$WM_PROJECT_DIR" ] && \
|
|
objectsDir="${WM_PROJECT_DIR}/build/${WM_OPTIONS}/${relativeDir}"
|
|
fi
|
|
|
|
# Default (local) build directory
|
|
if [ -z "$objectsDir" ]
|
|
then
|
|
objectsDir="$MakeDir/$WM_OPTIONS"
|
|
fi
|
|
|
|
|
|
(
|
|
unset MAKEFLAGS
|
|
mkdir -p "$objectsDir"
|
|
|
|
# Pre-build the $WM_OPTIONS/options file
|
|
# which is included when building the $WM_OPTIONS/files file
|
|
$make -s -f $WM_DIR/makefiles/files \
|
|
MAKE_DIR="$MakeDir" OBJECTS_DIR="$objectsDir" "$objectsDir"/options
|
|
|
|
$make -s -f $WM_DIR/makefiles/files \
|
|
MAKE_DIR=$MakeDir OBJECTS_DIR=$objectsDir
|
|
)
|
|
|
|
|
|
#------------------------------------------------------------------------------
|
|
# Check the $objectsDir/sourceFiles file was created successfully
|
|
#------------------------------------------------------------------------------
|
|
|
|
[ -r $objectsDir/sourceFiles ] || {
|
|
echo "$Script error: file '$objectsDir/sourceFiles'" \
|
|
"could not be created in $PWD" 1>&2
|
|
exit 1
|
|
}
|
|
|
|
|
|
#------------------------------------------------------------------------------
|
|
# Make the dependency files
|
|
#------------------------------------------------------------------------------
|
|
|
|
# For libraries create lnInclude, but only if 'LIB' is declared in 'Make/files'
|
|
case "$targetType" in
|
|
(lib | libo | libso | dep)
|
|
if grep -qe '^ *LIB *=' "$MakeDir/files" 2>/dev/null
|
|
then
|
|
$make -s -f $WM_DIR/makefiles/general \
|
|
MAKE_DIR=$MakeDir OBJECTS_DIR=$objectsDir lnInclude
|
|
fi
|
|
;;
|
|
esac
|
|
|
|
|
|
#------------------------------------------------------------------------------
|
|
# When WM_UPDATE_DEPENDENCIES is set, use forced dependency files update
|
|
#------------------------------------------------------------------------------
|
|
|
|
if [ -n "$WM_UPDATE_DEPENDENCIES" ]
|
|
then
|
|
|
|
$make -f $WM_DIR/makefiles/general \
|
|
MAKE_DIR=$MakeDir OBJECTS_DIR=$objectsDir updatedep
|
|
exitCode="$?"
|
|
|
|
[ "$exitCode" -eq 0 ] || exit "$exitCode"
|
|
fi
|
|
|
|
|
|
#------------------------------------------------------------------------------
|
|
# Make the dependency files or object files and link
|
|
#------------------------------------------------------------------------------
|
|
|
|
exec $make -f $WM_DIR/makefiles/general \
|
|
${optDebug:+c++DBUG="$optDebug"} \
|
|
MAKE_DIR=$MakeDir OBJECTS_DIR=$objectsDir $targetType
|
|
|
|
exit 0 # clean exit
|
|
|
|
#------------------------------------------------------------------------------
|