;;
esac
+task_enter_build_dir () {
+ mkdir -pv "${build_dir}"
+ cd "${build_dir}"
+}
+
+task_fetch_submodules () {
+ "${fetch_submodules_cmd[@]}"
+}
+
+task_configure () {
+ cmake \
+ -G'Unix Makefiles' \
+ -D'CMAKE_INSTALL_PREFIX'="${install_dir}" \
+ -D'CMAKE_BUILD_TYPE'="${build_type}" \
+ "${cmake_user_opts[@]}" \
+ "${project_source_dir}"
+}
+
+task_build_builtins () {
+ cmake \
+ --build "${build_dir}" \
+ -- \
+ -j"${job_count}" \
+ 'builtins'
+}
+
+task_build () {
+ cmake \
+ --build "${build_dir}" \
+ -- \
+ -j"${job_count}" \
+ "${install_target}"
+}
+
set -x
-"${fetch_submodules_cmd[@]}"
-
-mkdir -pv "${build_dir}"
-cd "${build_dir}"
-
-cmake \
- -G'Unix Makefiles' \
- -D'CMAKE_INSTALL_PREFIX'="${install_dir}" \
- -D'CMAKE_BUILD_TYPE'="${build_type}" \
- "${cmake_user_opts[@]}" \
- "${project_source_dir}"
-
-cmake \
- --build "${build_dir}" \
- -- \
- -j"${job_count}" \
- 'builtins'
-
-cmake \
- --build "${build_dir}" \
- -- \
- -j"${job_count}" \
- "${install_target}"
+task_enter_build_dir
+
+task_configure
+
+task_build_builtins
+
+# Sometime linking fails on macOS with this message:
+# ld: symbol(s) not found for architecture x86_64
+# and restarting the build process just work.
+task_build || task_build