Makefile 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294
  1. #!/usr/bin/make -f
  2. default: help all
  3. date -u
  4. project?=tizen
  5. package?=${project}-helper
  6. SHELL=/bin/bash -o pipefail
  7. export SHELL
  8. self?=$(lastword $(MAKEFILE_LIST))
  9. thisdir:=$(shell dirname $(realpath ${self}))
  10. make=${MAKE} -f ${self}
  11. export make
  12. home?=${HOME}
  13. export home
  14. user?=$(shell echo "${USER}" || echo nobody)
  15. tmpdir?=${CURDIR}/tmp
  16. tmpdir?=${home}/tmp/tmp-${USER}.tmp/${package}/${CURDIR}/tmp
  17. osc_url?=https://api.${project}.org
  18. gbs_conf?=${thisdir}/config/gbs.conf
  19. profile?=${project}
  20. export profile
  21. profile_name=$(shell echo ${profile} | cut -d. -f2-)
  22. package?=$(shell grep '^Name *:' packaging/*.spec \
  23. | sed -e 's|.*:[ \t]*\(.*\)|\1|g' \
  24. || echo TODO)
  25. version?=$(shell grep '^Version *:' packaging/*.spec \
  26. | sed -e 's|.*:[ \t]*\([0-9].*\)|\1|g' \
  27. || echo 0)
  28. revision?=$(shell grep '^Release *:' packaging/*.spec \
  29. | sed -e 's|.*:[ \t]*\([0-9].*\)|\1|g' \
  30. || echo 0)
  31. date?=$(shell date -u +%s)
  32. stamp?=$(shell date -u +%Y%m%d.%H%M%S)
  33. export stamp
  34. local_revision?=${stamp}${user}+${profile_name}
  35. host_arch?=$(shell uname -m || echo "unknown")
  36. arch?=${host_arch}
  37. export arch
  38. tmp?=._$(shell date -u +%s).tmp
  39. srcs?=${SELF} \
  40. $(shell find ${thisdir}/config -iname "*.in")
  41. gbs_file?=${thisdir}/config/gbs.conf
  42. profiles?=$(shell grep '\[profile' ${gbs_file} \
  43. | sed -e 's|\[\(profile\..*\)\]|\1|g' \
  44. | sort \
  45. )
  46. urls?=$(shell grep 'url=' ${gbs_file} \
  47. | sed -e 's|url=\(.*\)|\1|g' \
  48. )
  49. sudo?=sudo
  50. gbs_dir?=${home}/tmp/gbs/tmp-GBS-${profile_name}
  51. repo_dir?=${gbs_dir}/local/repos/${profile_name}/${arch}
  52. mount_dir?=${gbs_dir}/local/BUILD-ROOTS/scratch.${arch}.0/proc
  53. src_rpm?=${repo_dir}/SRPMS/${package}-${version}-${revision}.src.rpm
  54. gbs?=gbs
  55. export gbs
  56. help: ${thisdir}/README.txt
  57. cat $<
  58. @echo '# Usage:'
  59. @echo 'make rule/profile/profile.distro_$$version_$$profile_$$arch'
  60. @echo '# Existing profiles:'
  61. @echo "${profiles}" | tr ' ' '\n'
  62. print:
  63. @echo "arch: ${arch}"
  64. @echo "urls:"
  65. @echo "${urls}"
  66. @echo "profiles:"
  67. ${make} print/profiles
  68. @echo "self: ${self}"
  69. @echo "thisdir: ${thisdir}"
  70. print/profiles:
  71. @echo "${profiles}"
  72. clean:
  73. rm -fv *~ *.tmp ${tmpdir}/*
  74. install: ${gbs_file}
  75. install -d ${DESTDIR}/usr/share/${package}/
  76. install $< ${DESTDIR}/usr/share/${package}/
  77. deploy: ${home}/.gbs.conf
  78. ls -l $^
  79. ${home}/.gbs.conf: ${gbs_file}
  80. mkdir -p ${@D}
  81. -mv -fv ${home}/.gbs.conf ${home}/.gbs.conf${tmp}
  82. ln -fs $< ${@}
  83. log/%: ${tmpdir}
  84. @mkdir -p "${tmpdir}"
  85. script -e -c "${make} rule/${@F}" ${tmpdir}/${@F}
  86. tee/%:
  87. @mkdir -p "${tmpdir}"
  88. time stdbuf -o 0 ${make} rule/${@F} | tee "${tmpdir}/${@F}"
  89. revision: packaging
  90. -sed -e 's|Release:\( *\)[^ ]*|Release:\1${local_revision}|g' -i packaging/*.spec \
  91. || echo "ignored: $@"
  92. packaging:
  93. -cd ../packaging/.. \
  94. && grep '^Release' packaging/*.spec \
  95. || echo "ignored: $@"
  96. revision-clean: packaging
  97. -sed -e 's|Release:\( *\)[^ ]*|Release:\10|g' -i packaging/*.spec \
  98. || echo "ignored: $@"
  99. gbs-build: ${home}/.gbs.conf ${srcs}
  100. HOME=${home} gbs build -P ${profile} --arch ${arch} --include-all
  101. rule/gbs-build-sed-${profile}: ${home}/.gbs.conf ${srcs}
  102. HOME=${home} gbs build -P ${profile} --arch ${arch} --include-all \
  103. | sed -e 's|^\[.*s\] ||g' -e 's|^../../../||g' \
  104. #TODO: refactor
  105. gbs_builder?=gbs-build-sed
  106. gbs_builder_rule?=gbs-build-sed-${profile}
  107. logfile?=${gbs_builder_rule}
  108. gbs-build-track/%: print
  109. @mkdir -p "${tmpdir}"
  110. { ${make} tee/${gbs_builder_rule} rpm \
  111. && ln -fs "${logfile}" "${tmpdir}/${logfile}.log._success.tmp" \
  112. && rm -f "${tmpdir}/${logfile}.log._fail.tmp" ; \
  113. } || { ln -fs "${logfile}" "${tmpdir}/${logfile}.log._fail.tmp" ; exit $$? ; }
  114. rule/gbs-default: gbs-build-track/${profile}
  115. reset/%: umount binfmt
  116. ${sudo} sync
  117. rule/gbs-try:
  118. @echo "#{ $@: $^"
  119. ${make} rule/gbs-default \
  120. || ${make} reset/${profile} rule/gbs-default
  121. @echo "#} $@: $^"
  122. gbs-try/%:
  123. gbs/%: tee/gbs-try
  124. date
  125. #${src_rpm}:
  126. # echo "TODO"
  127. rpm: ${src_rpm} print
  128. @ls ${repo_dir}/logs/success/${package}-${version}-${revision}/log.txt
  129. -rpm -q --info -p $<
  130. rule/profile%_x86_64:
  131. ${make} ${gbs}/build profile=${@F} arch=x86_64
  132. rule/profile%_i586:
  133. ${make} ${gbs}/build profile=${@F} arch=i586
  134. rule/profile%_armv6l:
  135. ${make} ${gbs}/build profile=${@F} arch=armv6l
  136. rule/profile%_armv7hl:
  137. ${make} ${gbs}/build profile=${@F} arch=armv7hl
  138. rule/profile%_armv7l:
  139. ${make} ${gbs}/build profile=${@F} arch=armv7l
  140. rule/profile%_aarch64:
  141. ${make} ${gbs}/build profile=${@F} arch=aarch64
  142. rule/profile%_mips:
  143. ${make} ${gbs}/build profile=${@F} arch=mips
  144. rule/profile%_mipsel:
  145. ${make} ${gbs}/build profile=${@F} arch=mipsel
  146. force/%:
  147. -mv -f ${tmpdir}/${@F} ${tmpdir}/${@F}.bak
  148. ${make} profile=${@F} revision rule/${@F} revision-clean
  149. check/%:
  150. -@ls "${tmpdir}/${gbs_builder}-${@F}.log._success.tmp" \
  151. || ${make} "force/${@F}" || echo "fail: ${@F}"
  152. -cat "${tmpdir}/${gbs_builder}-${@F}"
  153. -@ls "${tmpdir}/${gbs_builder}-${@F}.log._success.tmp" \
  154. rule/check: ${gbs_file}
  155. ${make} check/urls
  156. for profile in ${profiles} ; do \
  157. ${make} check/$${profile} \
  158. || echo "fail: $${profile}"\
  159. ; done
  160. @echo "# $@: Failures ? in ${tmpdir}"
  161. @ls ${tmpdir}/*.log._fail.tmp 2> /dev/null \
  162. && exit 1 || echo "# $@: Failures: NONE"
  163. check:
  164. HOME=${CURDIR}/local/tmp/home/${USER} ${MAKE} rule/check
  165. reset: ${gbs_file}
  166. ${make} check/urls
  167. for profile in ${profiles} ; do \
  168. ${make} reset/$${profile} \
  169. || echo "fail: $${profile}"\
  170. ; done
  171. check/urls: ${tmpdir}/urls-check
  172. @echo "# Failures ?"
  173. @[ -r $<._fail.tmp ] && cat $<._fail.tmp 2>&1 && exit 1 || echo "# NONE: $@"
  174. ${tmpdir}/urls-check: ${gbs_file}
  175. @mkdir -p ${@D}
  176. @grep 'url=' ${gbs_file} \
  177. | grep -v '#' \
  178. | sed -e 's|url=\(.*\)|\1|g' \
  179. | while read url ; do \
  180. wget -O /dev/null $${url} >/dev/null 2>&1 \
  181. || echo "error: $@: $${url}" >> ${@}._fail.tmp ; \
  182. done
  183. @touch $@
  184. #TODO: only change status?
  185. umount:
  186. [ ! -e ${mount_dir} ] || ${sudo} umount ${mount_dir}
  187. binfmt: /proc/sys/fs/binfmt_misc/
  188. @echo "TODO: add tests"
  189. ls "$<" | while read file ; do \
  190. echo '-1' | ${sudo} tee "$</$${file}" ; \
  191. done
  192. ${gbs_file}: ${thisdir}/config/gbs/ ${srcs}
  193. find $< -iname "*.conf.in" -print \
  194. | sort | while read t ; do cat $${t} ; done | tee $@.tmp
  195. mv $@.tmp $@
  196. osc-touch/%:
  197. mkdir -p "tmp/url/${osc_url}/${@F}/"
  198. osc -v -A${osc_url} meta prjconf ${@F} | tee "tmp/url/${osc_url}/${@F}/prjconf"
  199. osc -v -A${osc_url} repositories ${@F} | tee "tmp/url/${osc_url}/${@F}/repositories"
  200. osc-ls:
  201. mkdir -p "tmp/url/${osc_url}/"
  202. osc -v -A${osc_url} ls | grep -i '^${project}:' \
  203. | while read project ; do ${make} osc-touch/$${project} ; done
  204. all: ${gbs_conf}
  205. commit:
  206. -rm -fv ${gbs_conf}
  207. ${make} all
  208. -git commit -sm 'gbs: Generate config/gbs.conf' ${gbs_conf}
  209. cleanall:
  210. -find ${tmpdir}/../tmp/ -exec rm -fv {} \;
  211. /var/tmp/${user}-gbs/${profile}.conf:
  212. @echo "TODO: osc"
  213. exit 1
  214. # compatible macro
  215. profile.%: rule/profile.%
  216. @echo "done: $@: $^"
  217. .PHONY: default help