5###############################################
6# This script is just to test the installation
7# via bitbucket-pipelines.
8# For actual installation refer to the website
9###############################################
11###############################################
13###############################################
15REQUIRED_SPACK_VERSION="0.23.1"
16SPACK_TARBALL_URL="https://github.com/spack/spack/archive/refs/tags/v${REQUIRED_SPACK_VERSION}.tar.gz"
17REPO_URL="https://bitbucket.org/mofem/mofem-cephas.git"
18REPO_URL_UM="https://bitbucket.org/mofem/um_eshelbian_plasticity.git"
20export MOFEM_INSTALL_DIR=$HOME/mofem_install
21export SPACK_ROOT=$MOFEM_INSTALL_DIR/spack
22export MOFEM_REPO=$MOFEM_INSTALL_DIR/mofem-cephas
23export MOFEM_SRC_DIR=$MOFEM_REPO
24export MOFEM_SPACK_GIT_DIR="$MOFEM_INSTALL_DIR/mofem-spack-repo"
25export TZ=Europe/London
26export DEBIAN_FRONTEND=noninteractive
28SPACK_MAJOR_VERSION="${REQUIRED_SPACK_VERSION%%.*}"
30if [ "$SPACK_MAJOR_VERSION" -ge 1 ]; then
31 export MOFEM_SPACK_REPO_DIR="$MOFEM_SPACK_GIT_DIR/spack_repo/mofem"
33 export MOFEM_SPACK_REPO_DIR="$MOFEM_SPACK_GIT_DIR"
36###############################################
37### CLI-PARSING & FLAGS
38###############################################
46Usage: ${0##*/} [OPTIONS]
47 -c, --ci Run non-interactive CI mode
48 -y, --yes Assume yes for prompts
49 -v, --verbose Enable verbose logs
50 --dry-run Print actions but don't run them
51 -h, --help Show this help
56 if [ "${VERBOSE:-false}" = true ]; then
57 printf "[%s] %s\n" "$(date -u +%Y-%m-%dT%H:%M:%SZ)" "$*"
63 -c|--ci) CI_MODE=true; shift ;;
64 -y|--yes|--batch) ASSUME_YES=true; shift ;;
65 -v|--verbose) VERBOSE=true; shift ;;
66 --dry-run) DRY_RUN=true; shift ;;
67 -h|--help) show_help; exit 0 ;;
72if [ "$CI_MODE" = true ] || [ ! -t 0 ]; then
78###############################################
79### DEFAULT BUILD SETTINGS
80###############################################
81MOFEM_BRANCH=${MOFEM_BRANCH:-Version0.15.6}
82MOFEM_BRANCH_UM=${MOFEM_BRANCH_UM:-Version0.15.7}
83VERSION=${VERSION:-Version0.15.7}
84BUILD_TYPE=${BUILD_TYPE:-Release}
85INSTALL_TYPE=${INSTALL_TYPE:-user}
86TEST_INSTALLATION=${TEST_INSTALLATION:-yes}
87MOFEM_COMPILER_SPEC=${MOFEM_COMPILER_SPEC:-}
89###############################################
91###############################################
92if [ "$(id -u)" -eq 0 ]; then
95 if command -v sudo >/dev/null 2>&1; then
98 echo "This script requires sudo."
103###############################################
104### CREATE DIRECTORIES
105###############################################
106mkdir -p "$MOFEM_INSTALL_DIR" "$MOFEM_REPO" "$MOFEM_SPACK_GIT_DIR"
108###############################################
110###############################################
112$SUDO apt-get install -y build-essential pkg-config cmake git curl python3 gfortran libssl-dev libcurl4-openssl-dev
114##################################################
115### FUNCTION: Install Spack only if not present
116##################################################
118 echo "Checking Spack installation..."
120 if [ -x "$SPACK_ROOT/bin/spack" ]; then
121 INSTALLED_VERSION="$("$SPACK_ROOT/bin/spack" --version | awk '{print $NF}')"
122 if [ "$INSTALLED_VERSION" = "$REQUIRED_SPACK_VERSION" ]; then
123 echo "Spack $INSTALLED_VERSION already installed"
126 echo "Spack version mismatch: found $INSTALLED_VERSION, need $REQUIRED_SPACK_VERSION"
131 echo "⬇ Installing Spack $REQUIRED_SPACK_VERSION..."
132 curl -L "$SPACK_TARBALL_URL" -o /tmp/spack.tar.gz
133 tar -xzf /tmp/spack.tar.gz -C "$MOFEM_INSTALL_DIR"
134 mv "$MOFEM_INSTALL_DIR/spack-$REQUIRED_SPACK_VERSION" "$SPACK_ROOT"
137##################################################
138### FUNCTION: Ensure Spack repos & environment
139##################################################
141 if ! spack repo list | grep -q "$MOFEM_SPACK_REPO_DIR"; then
142 echo "Registering Spack repo"
143 spack repo add "$MOFEM_SPACK_REPO_DIR"
145 echo "Spack repo already registered"
150 if [ ! -d "$SPACK_ROOT/var/spack/environments/mofem" ]; then
151 echo "Creating Spack env 'mofem'"
152 spack env create mofem
154 echo "Spack env 'mofem' exists"
156 spack env activate mofem
161 if ! spack find | grep -q "$(echo $spec | cut -d@ -f1)"; then
162 echo "Adding spec: $spec"
165 echo "Spec already exists: $spec"
169###############################################
170### SETUP & CONFIGURE SPACK
171###############################################
174export PATH="$SPACK_ROOT/bin:$PATH"
176source "$SPACK_ROOT/share/spack/setup-env.sh"
180git clone --branch develop $REPO_URL $MOFEM_REPO
181git clone --branch $MOFEM_BRANCH_UM $REPO_URL_UM $MOFEM_REPO/users_modules/um_eshelbian_plasticity
185spack repo add $MOFEM_REPO
186spack repo add $MOFEM_REPO/users_modules/um_eshelbian_plasticity
188if [ -n "$MOFEM_COMPILER_SPEC" ]; then
189 echo "Refreshing Spack compiler list"
191 echo "Preferring compiler: $MOFEM_COMPILER_SPEC"
192 spack config add "packages:all:compiler:[$MOFEM_COMPILER_SPEC]"
197ensure_add "boost+python+numpy"
199if [ "$INSTALL_TYPE" = "user" ]; then
200# MOFEM_SPEC="mofem-cephas@${VERSION}~mgis install_id=0 ^petsc+X"
201 MOFEM_SPEC="mofem-mixed-fracture-module@${VERSION} ^petsc+X"
202 ensure_add "$MOFEM_SPEC"
206###############################################
208###############################################
210spack install --only=dependencies mofem-cephas
212echo "Installing MoFEM..."
213spack install -v --test=root
216spack env view enable $HOME/mofem_view
218###############################################
220###############################################
221echo "✅ MoFEM installed successfully"
222echo "➡ Activate with: spack env activate mofem"
223echo "➡ MoFEM executables view: $HOME/mofem_view"