]> de.git.xonotic.org Git - xonotic/netradiant.git/blob - easy-builder
easy-builder: the immediate build retry does not fix the random linking issue on...
[xonotic/netradiant.git] / easy-builder
1 #! /usr/bin/env bash
2
3 # This script is meant to be kept small and simple
4 # If you think about adding features, it's probably a bad idea
5
6 set -e # exit if a command fails
7 set -o pipefail # Will return the exit status of make if it fails
8
9 project_source_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"
10
11 build_dir="${project_source_dir}/build${SUBDIR:+/${SUBDIR}}"
12 install_dir="${project_source_dir}/install${SUBDIR:+/${SUBDIR}}"
13
14 install_target='install/strip'
15 build_type='Release'
16
17 if [ "$(uname -s)" = 'FreeBSD' ]
18 then
19         install_target='install'
20 fi
21
22 _job_count=4
23
24 _nproc () {
25         if command -v 'nproc' >/dev/null
26         then
27                 nproc
28         else
29                 case "$(uname -s)" in
30                         'Linux')
31                                 egrep "^processor" /proc/cpuinfo | wc -l
32                                 ;;
33                         'FreeBSD')
34                                 sysctl -n hw.ncpu
35                                 ;;
36                         'Darwin')
37                                 sysctl -n hw.logicalcpu \
38                                 || sysctl -n hw.ncpu
39                                 ;;
40                         'MSYS_NT-'*|'CYGWIN_NT-'*|'MINGW'*'_NT-'*)
41                                 if command -v 'wmic' >/dev/null
42                                 then
43                                         wmic cpu get NumberOfLogicalProcessors/Format:List \
44                                                 | grep -m1 '=' | cut -f2 -d'='
45                                 else
46                                         echo "${NUMBER_OF_PROCESSORS:-${_job_count}}"
47                                 fi
48                                 ;;
49                         *)
50                                 echo "${_job_count}"
51                                 ;;
52                 esac
53         fi
54 }
55
56 job_count="$(_nproc)" 2>/dev/null
57 job_count="${job_count:-${_job_count}}"
58
59 declare -a cmake_user_opts
60 while [ ! -z "${1}" ]
61 do
62         case "${1}" in
63         '-j'*)
64                 job_count="${1:2}"
65                 shift
66                 ;;
67         '--debug')
68                 install_target='install'
69                 build_type='Debug'
70                 shift
71                 ;;
72         *)
73         cmake_user_opts[${#cmake_user_opts[@]}]="${1}"
74         shift
75                 ;;
76         esac
77 done
78
79 declare -a fetch_submodules_cmd
80 for submodule_file in 'libs/crunch/inc/crn_decomp.h' \
81         'tools/unvanquished/daemonmap/tools/quake3/q3map2/main.c'
82 do
83         if ! [ -f "${project_source_dir}/${submodule_file}" ]
84         then
85                 fetch_submodules_cmd=(git -C "${project_source_dir}" submodule update --init --recursive)
86         fi
87 done
88
89 case "$(uname -s)" in
90         'Darwin')
91                 cmake_user_opts[${#cmake_user_opts[@]}]='-DBUILTIN_GTKGLEXT=ON -DBUILTIN_GTKTHEME_MOJAVE=ON'
92                 ;;
93 esac
94
95 task_enter_build_dir () {
96         mkdir -pv "${build_dir}"
97         cd "${build_dir}"
98 }
99
100 task_fetch_submodules () {
101         "${fetch_submodules_cmd[@]}"
102 }
103
104 task_configure () {
105         cmake \
106                 -G'Unix Makefiles' \
107                 -D'CMAKE_INSTALL_PREFIX'="${install_dir}" \
108                 -D'CMAKE_BUILD_TYPE'="${build_type}" \
109                 "${cmake_user_opts[@]}" \
110                 "${project_source_dir}"
111 }
112
113 task_build_builtins () {
114         make -j"${job_count}" builtins
115 }
116
117 task_build () {
118         make -j"${job_count}"
119 }
120
121 task_install () {
122         make "${install_target}"
123 }
124
125 set -x
126
127 task_enter_build_dir
128
129 task_fetch_submodules
130
131 task_configure
132
133 task_build_builtins
134
135 task_build
136
137 task_install