#!/bin/sh
# Run from OPENFOAM src/ directory only
cd "${0%/*}" || exit
wmake -check-dir "$WM_PROJECT_DIR/src" 2>/dev/null || {
    echo "Error (${0##*/}) : not located in \$WM_PROJECT_DIR/src"
    echo "    Check your OpenFOAM environment and installation"
    exit 1
}
if [ -f "$WM_PROJECT_DIR"/wmake/scripts/AllwmakeParseArguments ]
then  . "$WM_PROJECT_DIR"/wmake/scripts/AllwmakeParseArguments || \
    echo "Argument parse error"
else
    echo "Error (${0##*/}) : WM_PROJECT_DIR appears to be incorrect"
    echo "    Check your OpenFOAM environment and installation"
    exit 1
fi

echo ========================================
echo Compile OpenFOAM libraries
echo ========================================

#------------------------------------------------------------------------------
# Base libraries

wmakeLnInclude -u OpenFOAM
wmakeLnInclude -u OSspecific/"${WM_OSTYPE:-POSIX}"

# Update version info (as required)
OpenFOAM/Alltouch -check 2>/dev/null

OSspecific/"${WM_OSTYPE:-POSIX}"/Allwmake $targetType $*

case "$WM_COMPILER" in
(Mingw*)
    # Pstream/OpenFOAM cyclic dependency
    # 1st pass: link as Pstream as single .o object
    WM_MPLIB=dummy Pstream/Allwmake libo
    FOAM_LINK_DUMMY_PSTREAM=libo wmake $targetType OpenFOAM

    # 2nd pass: link Pstream.{dll,so} against libOpenFOAM.{dll,so}
    Pstream/Allwmake $targetType $*

    # Force relink libOpenFOAM.{dll,so} against libPstream.{dll,so}
    OpenFOAM/Alltouch 2>/dev/null
    ;;
(*)
    Pstream/Allwmake $targetType $*
    ;;
esac

wmake $targetType OpenFOAM

# Frequently needed, even for minimal programs
wmake $targetType fileFormats
wmake $targetType surfMesh
wmake $targetType meshTools

# ========================================
# Done OpenFOAM base libraries
# ========================================

#------------------------------------------------------------------------------

wmake $targetType finiteArea
wmake $targetType finiteVolume
wmake $targetType fused/finiteVolume

wmake $targetType mesh/blockMesh
wmake $targetType mesh/extrudeModel  # Requires: blockMesh
wmake $targetType dynamicMesh  # Requires: extrudeModel
wmake $targetType genericPatchFields

wmake $targetType parallel/decompose/decompositionMethods

# Make dummy decomposition methods (dummyThirdParty)
parallel/decompose/AllwmakeLnInclude
dummyThirdParty/Allwmake $targetType $*

wmakeLnInclude -u fvOptions

wmake $targetType lagrangian/basic
wmake $targetType lagrangian/distributionModels

renumber/Allwmake $targetType $*
parallel/Allwmake $targetType $*

wmake $targetType dynamicFvMesh
wmake $targetType topoChangerFvMesh

wmake $targetType sampling
transportModels/Allwmake $targetType $*
randomProcesses/Allwmake $targetType $*

wmake $targetType ODE


thermophysicalModels/Allwmake $targetType $*
TurbulenceModels/Allwmake $targetType $*
wmake $targetType combustionModels

wmakeLnInclude -u regionFaModels
wmakeLnInclude -u faOptions

wmakeLnInclude -u overset
wmake $targetType overset

wmake $targetType fvOptions

wmake $targetType fvMotionSolver

# snappyHexMesh uses overset voxelMesh
mesh/Allwmake $targetType $*
fvAgglomerationMethods/Allwmake $targetType $*
wmake $targetType waveModels

wmake $targetType engine

conversion/Allwmake $targetType $*

phaseSystemModels/Allwmake $targetType $*
functionObjects/Allwmake $targetType $*

wmake $targetType thermoTools

regionModels/Allwmake $targetType $*

wmake $targetType faOptions
wmake $targetType regionFaModels

lagrangian/Allwmake $targetType $*
wmake $targetType functionObjects/lagrangian


wmake $targetType lumpedPointMotion
wmake $targetType sixDoFRigidBodyMotion
wmake $targetType sixDoFRigidBodyState
wmake $targetType rigidBodyDynamics
wmake $targetType rigidBodyMeshMotion
wmake $targetType atmosphericModels
wmake $targetType optimisation/adjointOptimisation/adjoint


# interfaceTracking libs
dynamicFaMesh/Allwmake $targetType $*


#------------------------------------------------------------------------------

echo ========================================
echo Done OpenFOAM libraries
echo ========================================

#------------------------------------------------------------------------------
