]> git.ipfire.org Git - people/stevee/ipfire-3.x.git/blame - tools/naoki-functions
naoki: Mixed things.
[people/stevee/ipfire-3.x.git] / tools / naoki-functions
CommitLineData
166a6c21
MT
1#!/bin/bash
2
cee183e8 3LOGFILE=${BASEDIR}/naoki.log
166a6c21
MT
4
5function exithandler() {
6 local mount
7 local mounts
8
9 log DEBUG "Unmounting everything in ${BUILD_DIR}..."
10 while true; do
11 mounts=$(mount | grep "${BUILD_DIR}")
12 if [ -z "${mounts}" ]; then
13 log DEBUG " Everything is unmounted."
14 break
15 fi
16
17 while read mount; do
18 umount $(awk '{ print $3 }' <<<${mount})
19 done <<<"${mounts}"
20 done
21
17c0ee8a
MT
22 if [ ! -e "${BUILD_DIR}/.failed" ]; then
23 rm -rf ${BUILD_DIR}
166a6c21
MT
24 fi
25
26 log DEBUG "Shut down naoki instance with pid $$."
27 log DEBUG "----------"
28}
29trap exithandler EXIT
30
31function debug() {
32 [ "${DEBUG}" = "1" ]
33}
34
35function force() {
36 [ "${FORCE}" = "1" ]
37}
38
39function naoki_lock() {
40 local lockfile="${BUILD_DIR}/.lock"
41
42 case "${1}" in
43 1)
44 touch ${lockfile}
45 ;;
46 0)
47 rm -f ${lockfile}
48 ;;
49 *)
50 if [ -e "${lockfile}" ]; then
51 return 0
52 else
53 return 1
54 fi
55 ;;
56 esac
57}
58
59function naoki_prepare() {
60 local p=$(find_package ${1})
61 shift
62
166a6c21
MT
63 msg "Preparing environment ${BUILD_DIR}..."
64
65 mkdir -p \
66 ${BUILD_DIR} \
17c0ee8a 67 ${BUILD_DIR}/{boot,root,tmp} \
166a6c21
MT
68 ${BUILD_DIR}/{dev,proc,sys} \
69 ${BUILD_DIR}/{,usr/}{bin,lib,sbin} \
70 ${BUILD_DIR}/usr/src \
71 ${BUILD_DIR}/${BUILD_ROOT} \
72 ${BUILD_DIR}/${TOOLS_DIR}
73
74 local i
6edb7ef6 75 for i in cache ccache pkgs src tools ${DIR_PACKAGES##*/}; do
166a6c21
MT
76 mkdir -p ${BASEDIR}/${i} ${BUILD_DIR}/usr/src/${i} 2>/dev/null
77 mount --bind ${BASEDIR}/${i} ${BUILD_DIR}/usr/src/${i}
78 done
79 mount --bind ${TOOLS_DIR} ${BUILD_DIR}/${TOOLS_DIR}/
80
81 # Mounting kernel fs
82 for i in dev proc sys; do
83 mount --bind /${i} ${BUILD_DIR}/${i}
84 done
85
17c0ee8a
MT
86 local object
87 local to_download
88 for object in $(package_objects ${p}); do
89 if [ -e "${DIR_TARBALLS}/${object}" ] || \
90 [ -e "${DIR_PATCHES}/${object}" ]; then
91 continue
92 fi
93 to_download="${to_download} ${object}"
94 done
95 if [ -n "${to_download}" ]; then
96 log DEBUG "Going to get file(s): ${to_download}"
97 ${DOWNLOADER} --tarballs="${DIR_TARBALLS}" \
98 --patches="${DIR_PATCHES}" ${to_download}
99 if [ "$?" != "0" ]; then
100 return 1
101 fi
102 fi
166a6c21
MT
103
104 # Extract needed packages
17c0ee8a 105 local pkg_dependencies=$(package_dependencies_for_build ${p})
7cfd59ee
MT
106 msg " Resolving dependencies: ${pkg_dependencies-None}"
107 local dep
17c0ee8a 108 local missing
7cfd59ee
MT
109 for dep in ${pkg_dependencies}; do
110 if ! package_is_built ${dep}; then
17c0ee8a 111 missing="${missing} ${dep}"
7cfd59ee
MT
112 fi
113 done
17c0ee8a
MT
114 if [ -n "${missing}" ]; then
115 msg "Dependencies for ${p} are missing: ${missing}"
116 return 4
117 fi
7cfd59ee
MT
118
119 for dep in ${pkg_dependencies}; do
120 msg "Decompressing ${dep}..."
121 package_decompress ${dep}
122 done
166a6c21 123
79f35170 124 for i in /bin/bash /bin/pwd /bin/sh; do
166a6c21
MT
125 if [ -e "${BUILD_DIR}${i}" ]; then
126 continue
127 fi
128 log DEBUG "Creating symlink: ${BUILD_DIR}${i} --> ${TOOLS_DIR}${i}"
129 ln -sf ${TOOLS_DIR}${i} ${BUILD_DIR}${i}
130 done
131
17c0ee8a 132 return 0
166a6c21
MT
133}
134
135function naoki_cleanup() {
136 local p=$(find_package ${1})
137
138 log INFO "Cleaning up environment ${BUILD_DIR}..."
139
140 if naoki_lock; then
141 error "Cannot remove locked ${BUILD_DIR}..."
142 return 1
143 fi
144
145 #rm -rf ${BUILD_DIR}
146}
147
148function naoki_cmd() {
149 local package
150 local chroot_cmd
151 local cmd
152 local with_chroot=1
153
154 while [ $# -gt 0 ]; do
155 case "${1}" in
156 --without-chroot)
157 with_chroot=0
158 ;;
159 *)
160 if [ -z "${package}" ]; then
161 package=$(find_package ${1})
162 else
163 cmd="${cmd} ${1}"
164 fi
165 ;;
166 esac
167 shift
168 done
169 cmd=${cmd:1}
170
171 is_package ${package} || return 1
172
173 log DEBUG "Running command \"${cmd}\" - chroot=${with_chroot}."
174
175 local path="/sbin:/usr/sbin:/bin:/usr/bin"
176 if [ "${TOOLCHAIN}" = "1" ] || [ ! -e "${BUILD_DIR}/usr/bin/env" ]; then
177 path="${TOOLS_DIR}/sbin:${TOOLS_DIR}/bin:${path}"
178 fi
179 log DEBUG " PATH : ${path}"
180
181 local ps1="\u:\w\$ "
182
183 if [ "${with_chroot}" = "1" ]; then
184 chroot_cmd="chroot ${BUILD_DIR}"
185 ps1="${CLR_NORM_RED}chroot${NORMAL}: \w\$ "
186
187 touch ${BUILD_DIR}/.chroot
188 fi
189
190 local ret
191 PATH=${path} \
192 ${chroot_cmd} \
193 env -i \
194 HOME="/root" \
195 TERM="${TERM}" \
196 PS1="${ps1}" \
197 PATH="${path}" \
198 \
199 DISTRO_NAME="${DISTRO_NAME}" \
200 DISTRO_SNAME="${DISTRO_SNAME}" \
79f35170 201 DISTRO_VERSION="${DISTRO_VERSION}" \
166a6c21
MT
202 DISTRO_EPOCH="${DISTRO_EPOCH}" \
203 DISTRO_SLOGAN="${DISTRO_SLOGAN}" \
204 \
79f35170 205 BASEDIR="${BASEDIR}" \
166a6c21
MT
206 ROOT=$([ "${TOOLCHAIN}" = "1" ] && \
207 echo "${BUILD_DIR}") \
79f35170 208 CHROOT="${with_chroot}" \
166a6c21
MT
209 TOOLS_DIR="${TOOLS_DIR}" \
210 TOOLCHAIN="${TOOLCHAIN}" \
211 BUILDROOT="${BUILD_ROOT}" \
212 \
213 CFLAGS="${CFLAGS}" \
214 CXXFLAGS="${CXXFLAGS}" \
215 TARGET="${TARGET}" \
216 TARGET_MACHINE="${MACHINE}" \
217 PARALLELISMFLAGS="${PARALLELISMFLAGS}" \
218 \
219 ${cmd}
220
221 ret=$?
222 log DEBUG " Exit code: ${ret}"
223
224 return ${ret}
225}
226
227function naoki_make() {
228 local p=$(find_package ${1})
229 shift
230
231 local cmd="make --no-print-directory -C"
232 if [ "${CHROOT}" = "0" ] || [ "${TOOLCHAIN}" = "1" ]; then
cee183e8 233 cmd="${cmd} ${DIR_PKGS}/${p}"
166a6c21
MT
234 else
235 cmd="${cmd} /usr/src/pkgs/${p}"
236 fi
237 cmd="${cmd} -f ${p##*/}.nm"
238
17c0ee8a 239 naoki_cmd ${p} "${cmd}" $@
166a6c21
MT
240 return ${PIPESTATUS[0]}
241}
242
166a6c21
MT
243function naoki_build() {
244 local p=$(find_package ${1})
245 shift
246
247 local ret
248 msg "Going on to build package \"${p}\"."
249
250 naoki_prepare ${p} $@
251 ret=$?
252
253 if [ "${ret}" != "0" ]; then
254 error "Prepare command failed."
255 exit ${ret}
256 fi
257
166a6c21
MT
258 naoki_make ${p} package $@
259 ret=$?
260
261 if [ "${ret}" != "0" ]; then
17c0ee8a
MT
262 error "Package build failed."
263 touch ${BUILD_DIR}/.failed
166a6c21
MT
264 exit ${ret}
265 fi
266}
267
268function naoki_build_tree() {
269 local packages
270 local p
271
272 package_tree $@ | \
273 while read packages; do
274 for p in ${packages}; do
275 naoki_build ${p}
276 done
277 done
278}
279
280function naoki_shell() {
281 local p=$(find_package ${1})
282 shift
283
284 naoki_prepare ${p}
17c0ee8a 285 naoki_make ${p} shell
166a6c21
MT
286
287 # A little help message
288 echo
289 echo -e " ${CLR_NORM_RED}Chroot environment${NORMAL}"
290 echo
291 echo " This is starting a chrooted environment where you can natively"
292 echo " access the build system. When you leave the shell all files will"
293 echo " be lost."
294 echo
295 echo " Source of ${PKG_NAME} is extracted to /usr/src."
296 echo
297 echo -e " ${BOLD}Exit with Ctrl+D.${NORMAL}"
298 echo
299
300 naoki_cmd ${p} "bash --login"
301 local ret=$?
17c0ee8a 302
166a6c21
MT
303 echo
304 echo "Exit code: ${ret}"
305 echo
306}
307
308function naoki_toolchain() {
309 TOOLCHAIN=1
310
311 local p=$(find_package ${1})
312 shift
313
314 naoki_build ${p} --without-chroot $@
315}