3 # This script is meant to be kept small and simple
4 # If you think about adding features, it's probably a bad idea
6 set -e # exit if a command fails
7 set -o pipefail # Will return the exit status of make if it fails
9 project_source_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"
11 build_dir="${project_source_dir}/build${SUBDIR:+/${SUBDIR}}"
12 install_dir="${project_source_dir}/install${SUBDIR:+/${SUBDIR}}"
14 install_target='install/strip'
18 # Stripping is known to make non-PIE Linux netradiant binary unusable.
19 # Maybe that's related to the way we patch rpath?
21 # Building NetRadiant as non-PIE is required because of
22 # a mistake in the mimetype-library that prevents users
23 # to run the application from file managers on Linux.
25 # See: https://gitlab.freedesktop.org/xdg/shared-mime-info/-/issues/11
27 # After installation it's possible to strip manually all binaries except
30 install_target='install'
32 # Stripping is known to make FreeBSD binaries unusable.
33 # Maybe that's related to the way we patch rpath?
35 install_target='install'
42 if command -v 'nproc' >/dev/null
48 egrep "^processor" /proc/cpuinfo | wc -l
54 sysctl -n hw.logicalcpu \
57 'MSYS_NT-'*|'CYGWIN_NT-'*|'MINGW'*'_NT-'*)
58 if command -v 'wmic' >/dev/null
60 wmic cpu get NumberOfLogicalProcessors/Format:List \
61 | grep -m1 '=' | cut -f2 -d'='
63 echo "${NUMBER_OF_PROCESSORS:-${_job_count}}"
73 job_count="$(_nproc)" 2>/dev/null
74 job_count="${job_count:-${_job_count}}"
76 declare -a cmake_user_opts
85 install_target='install'
90 cmake_user_opts[${#cmake_user_opts[@]}]="${1}"
96 declare -a fetch_submodules_cmd
97 for submodule_file in 'libs/crunch/inc/crn_decomp.h'
99 if ! [ -f "${project_source_dir}/${submodule_file}" ]
101 fetch_submodules_cmd=(git -C "${project_source_dir}" submodule update --init --recursive)
105 case "$(uname -s)" in
107 cmake_user_opts[${#cmake_user_opts[@]}]='-DBUILTIN_GTKGLEXT=ON -DBUILTIN_GTKTHEME_MOJAVE=ON'
111 task_enter_build_dir () {
113 mkdir -pv "${build_dir}"
117 task_fetch_submodules () {
119 "${fetch_submodules_cmd[@]}"
126 -D'CMAKE_INSTALL_PREFIX'="${install_dir}" \
127 -D'CMAKE_BUILD_TYPE'="${build_type}" \
128 "${cmake_user_opts[@]}" \
129 "${project_source_dir}"
132 task_build_builtins () {
134 make -j"${job_count}" builtins
137 task_discover_builtins () {
139 cmake "${project_source_dir}"
144 make -j"${job_count}"
149 make "${install_target}"
156 task_fetch_submodules
162 task_discover_builtins