Guest User

Untitled

a guest
Jan 24th, 2019
221
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 130.86 KB | None | 0 0
  1. From bc87dbb6218c201009f9bb7f2a8e8aa41fa30fe2 Mon Sep 17 00:00:00 2001
  2. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  3. Date: Mon, 21 Jan 2019 13:15:11 +0000
  4. Subject: [PATCH 01/28] buildsystem: restore set -e fail-on-error behaviour
  5.  
  6. ---
  7. config/functions | 27 +++++++++++++--------------
  8. packages/sysutils/e2fsprogs/package.mk | 2 +-
  9. scripts/build | 26 ++++++++++++++++----------
  10. scripts/create_addon | 4 +++-
  11. scripts/install | 4 ++--
  12. scripts/unpack | 12 +++++++-----
  13. 6 files changed, 42 insertions(+), 33 deletions(-)
  14.  
  15. diff --git a/config/functions b/config/functions
  16. index 4221465..5b0b072 100644
  17. --- a/config/functions
  18. +++ b/config/functions
  19. @@ -805,22 +805,18 @@ find_dir_path() {
  20. find_path -d "$1" "$2"
  21. }
  22.  
  23. -# p1: name of potential function to execute if it exists
  24. -# return 0 if function executed, 1 if not, die if error
  25. +# p1: name of function to test for
  26. +# return 0 if function exists, 1 if not
  27. +pkg_call_exists() {
  28. + [ "$(type -t ${1})" = "function" ] && return 0 || return 1
  29. +}
  30. +
  31. +# p1: name of function to execute unconditionally
  32. +# testing the exit code value of this function is likely to break set -e fail-on-error behaviour
  33. pkg_call() {
  34. [ -n "${PKG_NAME}" ] || die "$(print_color CLR_ERROR "FAILURE: Cannot call ${1} package function when package is not known!")"
  35.  
  36. - if [ "$(type -t ${1})" = "function" ]; then
  37. - ${1} || die "$(print_color CLR_ERROR "FAILURE: ${1} for package ${PKG_NAME} did not succeed!")"
  38. - else
  39. - return 1
  40. - fi
  41. -}
  42. -
  43. -# p1: name of potential function to execute if it exists
  44. -# return 0 if function executed or not, or die if error
  45. -pkg_call_optional() {
  46. - pkg_call ${1} || return 0
  47. + ${1}
  48. }
  49.  
  50. unset_functions() {
  51. @@ -922,7 +918,10 @@ source_package() {
  52. # Late variable binding - allow the package to now evaluate any variables
  53. # that we may have initialised after sourcing the package, typically
  54. # PKG_BUILD etc.
  55. - [ -n "${PKG_NAME}" ] && pkg_call_optional configure_package || true
  56. + if [ -n "${PKG_NAME}" ]; then
  57. + pkg_call_exists configure_package && pkg_call configure_package
  58. + fi
  59. + return 0
  60. }
  61.  
  62.  
  63. diff --git a/packages/sysutils/e2fsprogs/package.mk b/packages/sysutils/e2fsprogs/package.mk
  64. index 0daafc5..65ba2b8 100644
  65. --- a/packages/sysutils/e2fsprogs/package.mk
  66. +++ b/packages/sysutils/e2fsprogs/package.mk
  67. @@ -48,7 +48,7 @@ pre_configure_target() {
  68. }
  69.  
  70. pre_configure_init() {
  71. - pkg_call pre_configure_target || die "pre_configure_target not found"
  72. + pkg_call pre_configure_target
  73.  
  74. PKG_CONFIGURE_OPTS_INIT="$PKG_CONFIGURE_OPTS_TARGET"
  75. }
  76. diff --git a/scripts/build b/scripts/build
  77. index 9032474..1d240b2 100755
  78. --- a/scripts/build
  79. +++ b/scripts/build
  80. @@ -205,7 +205,7 @@ if [ "$PKG_TOOLCHAIN" = "autotools" ]; then
  81. fi
  82.  
  83. # include build template and build
  84. -pkg_call_optional pre_build_$TARGET
  85. +pkg_call_exists pre_build_$TARGET && pkg_call pre_build_$TARGET
  86.  
  87. # ensure $PKG_BUILD is there. (installer? PKG_URL="")
  88. if [ ! -d "$PKG_BUILD" ] ; then
  89. @@ -228,9 +228,11 @@ if [ -f "$PKG_CONFIGURE_SCRIPT" -o -f "$PKG_CMAKE_SCRIPT" -o -f "$PKG_MESON_SCRI
  90. fi
  91.  
  92. # configure
  93. -pkg_call_optional pre_configure_$TARGET
  94. +pkg_call_exists pre_configure_$TARGET && pkg_call pre_configure_$TARGET
  95.  
  96. -if ! pkg_call configure_$TARGET; then
  97. +if pkg_call_exists configure_$TARGET; then
  98. + pkg_call configure_$TARGET
  99. +else
  100. case "$PKG_TOOLCHAIN:$TARGET" in
  101. # meson builds
  102. "meson:target")
  103. @@ -310,12 +312,14 @@ if ! pkg_call configure_$TARGET; then
  104. esac
  105. fi
  106.  
  107. -pkg_call_optional post_configure_$TARGET
  108. +pkg_call_exists post_configure_$TARGET && pkg_call post_configure_$TARGET
  109.  
  110. # make
  111. -pkg_call_optional pre_make_$TARGET
  112. +pkg_call_exists pre_make_$TARGET && pkg_call pre_make_$TARGET
  113.  
  114. -if ! pkg_call make_$TARGET; then
  115. +if pkg_call_exists make_$TARGET; then
  116. + pkg_call make_$TARGET
  117. +else
  118. case "$PKG_TOOLCHAIN:$TARGET" in
  119. # ninja based builds
  120. "meson:target"|"cmake:target"|"ninja:target")
  121. @@ -355,12 +359,14 @@ if ! pkg_call make_$TARGET; then
  122. esac
  123. fi
  124.  
  125. -pkg_call_optional post_make_$TARGET
  126. +pkg_call_exists post_make_$TARGET && pkg_call post_make_$TARGET
  127.  
  128. # make install
  129. -pkg_call_optional pre_makeinstall_$TARGET
  130. +pkg_call_exists pre_makeinstall_$TARGET && pkg_call pre_makeinstall_$TARGET
  131.  
  132. -if ! pkg_call makeinstall_$TARGET; then
  133. +if pkg_call_exists makeinstall_$TARGET; then
  134. + pkg_call makeinstall_$TARGET
  135. +else
  136. case "$PKG_TOOLCHAIN:$TARGET" in
  137. # ninja based builds
  138. "meson:target"|"cmake:target")
  139. @@ -394,7 +400,7 @@ if ! pkg_call makeinstall_$TARGET; then
  140. esac
  141. fi
  142.  
  143. -pkg_call_optional post_makeinstall_$TARGET
  144. +pkg_call_exists post_makeinstall_$TARGET && pkg_call post_makeinstall_$TARGET
  145.  
  146. if [ "$TARGET" = "target" -o "$TARGET" = "init" ]; then
  147. if [ -d $INSTALL ]; then
  148. diff --git a/scripts/create_addon b/scripts/create_addon
  149. index 1644793..6458869 100755
  150. --- a/scripts/create_addon
  151. +++ b/scripts/create_addon
  152. @@ -208,7 +208,9 @@ build_addon() {
  153. rm -rf $ADDON_BUILD
  154.  
  155. # install addon parts
  156. - if ! pkg_call addon; then
  157. + if pkg_call_exists addon; then
  158. + pkg_call addon
  159. + else
  160. install_binary_addon $PKG_ADDON_ID
  161. fi
  162.  
  163. diff --git a/scripts/install b/scripts/install
  164. index d9e0bfa..cb8521c 100755
  165. --- a/scripts/install
  166. +++ b/scripts/install
  167. @@ -123,7 +123,7 @@ fi
  168.  
  169. # install
  170. if [ "$TARGET" = target ] ; then
  171. - pkg_call_optional pre_install
  172. + pkg_call_exists pre_install && pkg_call pre_install
  173. fi
  174.  
  175. if [ "$TARGET" = "target" -a -d $PKG_BUILD/.install_pkg ]; then
  176. @@ -133,7 +133,7 @@ elif [ "$TARGET" = "init" -a -d $PKG_BUILD/.install_init ]; then
  177. fi
  178.  
  179. if [ "$TARGET" = target ] ; then
  180. - pkg_call_optional post_install
  181. + pkg_call_exists post_install && pkg_call post_install
  182. fi
  183.  
  184. touch $STAMP
  185. diff --git a/scripts/unpack b/scripts/unpack
  186. index 3dce2c4..5da8a4f 100755
  187. --- a/scripts/unpack
  188. +++ b/scripts/unpack
  189. @@ -44,9 +44,11 @@ fi
  190. if [ -d "$SOURCES/$1" -o -d "$PKG_DIR/sources" ]; then
  191. build_msg "CLR_UNPACK" "UNPACK" "${1}" "indent"
  192.  
  193. - pkg_call_optional pre_unpack
  194. + pkg_call_exists pre_unpack && pkg_call pre_unpack
  195.  
  196. - if ! pkg_call unpack; then
  197. + if pkg_call_exists unpack; then
  198. + pkg_call unpack
  199. + else
  200. if [ -n "$PKG_URL" ]; then
  201. $SCRIPTS/extract $1 $BUILD
  202. fi
  203. @@ -69,10 +71,10 @@ if [ -d "$SOURCES/$1" -o -d "$PKG_DIR/sources" ]; then
  204. mkdir -p "${PKG_BUILD}"
  205. fi
  206.  
  207. - pkg_call_optional post_unpack
  208. + pkg_call_exists post_unpack && pkg_call post_unpack
  209.  
  210. if [ "${PKG_SKIP_PATCHES}" != "yes" ]; then
  211. - pkg_call_optional pre_patch
  212. + pkg_call_exists pre_patch && pkg_call pre_patch
  213.  
  214. if [ "$TARGET_ARCH" = "x86_64" ]; then
  215. PATCH_ARCH="x86"
  216. @@ -141,7 +143,7 @@ if [ -d "$SOURCES/$1" -o -d "$PKG_DIR/sources" ]; then
  217. fi
  218. done
  219.  
  220. - pkg_call_optional post_patch
  221. + pkg_call_exists post_patch && pkg_call post_patch
  222. fi
  223.  
  224. if [ ! "$PKG_NAME" = "configtools" ] ; then
  225. --
  226. 2.14.1
  227.  
  228.  
  229. From 952e6819f8b5c7c6c8a014282e8c39c1acbc6f19 Mon Sep 17 00:00:00 2001
  230. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  231. Date: Mon, 21 Jan 2019 13:17:00 +0000
  232. Subject: [PATCH 02/28] Revert "linux: sub-process eats exit/failure code"
  233.  
  234. This reverts commit 710d4316522581c3a6a1ced53e23e63a6b362210.
  235. ---
  236. packages/linux/package.mk | 2 +-
  237. 1 file changed, 1 insertion(+), 1 deletion(-)
  238.  
  239. diff --git a/packages/linux/package.mk b/packages/linux/package.mk
  240. index e51516b..93c4407 100644
  241. --- a/packages/linux/package.mk
  242. +++ b/packages/linux/package.mk
  243. @@ -206,7 +206,7 @@ make_target() {
  244. ( cd $ROOT
  245. rm -rf $BUILD/initramfs
  246. $SCRIPTS/install initramfs
  247. - ) || die "FAILURE: Building initramfs"
  248. + )
  249.  
  250. if [ "$BOOTLOADER" = "u-boot" -a -n "$KERNEL_UBOOT_EXTRA_TARGET" ]; then
  251. for extra_target in "$KERNEL_UBOOT_EXTRA_TARGET"; do
  252. --
  253. 2.14.1
  254.  
  255.  
  256. From 85292e40a25cd7383120cfb5723633f331e6305a Mon Sep 17 00:00:00 2001
  257. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  258. Date: Sat, 5 Jan 2019 02:35:53 +0000
  259. Subject: [PATCH 03/28] config/path: add THREAD_CONTROL directory
  260.  
  261. ---
  262. config/path | 2 ++
  263. 1 file changed, 2 insertions(+)
  264.  
  265. diff --git a/config/path b/config/path
  266. index 1f1080b..c5c116f 100644
  267. --- a/config/path
  268. +++ b/config/path
  269. @@ -29,6 +29,8 @@ if [ -n "$BUILD_SUFFIX" ]; then
  270. BUILD=$BUILD-$BUILD_SUFFIX
  271. fi
  272.  
  273. +THREAD_CONTROL=${BUILD}/.threads
  274. +
  275. TARGET_ADDONS="$TARGET_IMG/$ADDONS/$ADDON_PATH"
  276. ADDON_BUILD="$BUILD/$ADDONS/$1"
  277. STAMPS_NOARCH=.stamps
  278. --
  279. 2.14.1
  280.  
  281.  
  282. From 678a5a3dc6a2e143cd7c5ce31505cef300461716 Mon Sep 17 00:00:00 2001
  283. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  284. Date: Sun, 6 Jan 2019 04:55:48 +0000
  285. Subject: [PATCH 04/28] config/path: stop logging patch progress to stderr when
  286. stdout is fine
  287.  
  288. ---
  289. config/path | 2 +-
  290. 1 file changed, 1 insertion(+), 1 deletion(-)
  291.  
  292. diff --git a/config/path b/config/path
  293. index c5c116f..98b8e91 100644
  294. --- a/config/path
  295. +++ b/config/path
  296. @@ -91,7 +91,7 @@ if [ -z "${SILENT_OUT}" -a -z "${VERBOSE_OUT}" ]; then
  297.  
  298. if [ "$VERBOSE" = yes ]; then
  299. exec 3>&1
  300. - exec 4>&2
  301. + exec 4>&1
  302. else
  303. exec 3>&2
  304. exec 4>/dev/null
  305. --
  306. 2.14.1
  307.  
  308.  
  309. From e00f069c9659200a868dd11bcd0f352ec61e807e Mon Sep 17 00:00:00 2001
  310. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  311. Date: Sun, 6 Jan 2019 05:43:26 +0000
  312. Subject: [PATCH 05/28] config/path: VERBOSE_OUT/SILENT_OUT - drop export, need
  313. to exec for every parallel process
  314.  
  315. ---
  316. config/path | 22 ++++++++++------------
  317. 1 file changed, 10 insertions(+), 12 deletions(-)
  318.  
  319. diff --git a/config/path b/config/path
  320. index 98b8e91..134f7ca 100644
  321. --- a/config/path
  322. +++ b/config/path
  323. @@ -84,18 +84,16 @@ fi
  324. VERSION_SUFFIX=$TARGET_ARCH
  325.  
  326. # redirect formatted output
  327. -if [ -z "${SILENT_OUT}" -a -z "${VERBOSE_OUT}" ]; then
  328. - export BUILD_INDENT_SIZE=4
  329. - export SILENT_OUT=3
  330. - export VERBOSE_OUT=4
  331. -
  332. - if [ "$VERBOSE" = yes ]; then
  333. - exec 3>&1
  334. - exec 4>&1
  335. - else
  336. - exec 3>&2
  337. - exec 4>/dev/null
  338. - fi
  339. +export BUILD_INDENT_SIZE=4
  340. +SILENT_OUT=3
  341. +VERBOSE_OUT=4
  342. +
  343. +if [ "$VERBOSE" = yes ]; then
  344. + exec 3>&1
  345. + exec 4>&1
  346. +else
  347. + exec 3>&2
  348. + exec 4>/dev/null
  349. fi
  350.  
  351. unset LD_LIBRARY_PATH
  352. --
  353. 2.14.1
  354.  
  355.  
  356. From c0c741f0b169052dd3986e66ade66820640381b2 Mon Sep 17 00:00:00 2001
  357. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  358. Date: Sat, 19 Jan 2019 03:20:27 +0000
  359. Subject: [PATCH 06/28] config/path: get rid of MAKEINSTALL
  360.  
  361. ---
  362. config/path | 1 -
  363. scripts/build | 2 +-
  364. 2 files changed, 1 insertion(+), 2 deletions(-)
  365.  
  366. diff --git a/config/path b/config/path
  367. index 134f7ca..fd0dddc 100644
  368. --- a/config/path
  369. +++ b/config/path
  370. @@ -62,7 +62,6 @@ INSTALL_INIT=$BUILD/image/initramfs/root-image
  371. . config/sources
  372.  
  373. MAKE="$TOOLCHAIN/bin/make"
  374. -MAKEINSTALL="$TOOLCHAIN/bin/make -j1 DESTDIR=$SYSROOT_PREFIX install"
  375.  
  376. XORG_PATH_DRI=/usr/lib/dri
  377. XORG_PATH_XKB=/usr/share/X11/xkb
  378. diff --git a/scripts/build b/scripts/build
  379. index 1d240b2..1746d87 100755
  380. --- a/scripts/build
  381. +++ b/scripts/build
  382. @@ -385,7 +385,7 @@ else
  383.  
  384. # make based builds
  385. "configure:target"|"cmake-make:target"|"autotools:target"|"make:target")
  386. - $MAKEINSTALL $PKG_MAKEINSTALL_OPTS_TARGET
  387. + make install DESTDIR=$SYSROOT_PREFIX -j1 $PKG_MAKEINSTALL_OPTS_TARGET
  388. make install DESTDIR=$INSTALL $PKG_MAKEINSTALL_OPTS_TARGET
  389. ;;
  390. "configure:host"|"cmake-make:host"|"autotools:host"|"make:host")
  391. --
  392. 2.14.1
  393.  
  394.  
  395. From ecc52214c0bb88e06f8e7e808d686a58e85d8231 Mon Sep 17 00:00:00 2001
  396. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  397. Date: Sat, 5 Jan 2019 02:31:32 +0000
  398. Subject: [PATCH 07/28] config/functions: allow package to be sourced using
  399. path
  400.  
  401. ---
  402. config/functions | 2 +-
  403. 1 file changed, 1 insertion(+), 1 deletion(-)
  404.  
  405. diff --git a/config/functions b/config/functions
  406. index 5b0b072..65677e2 100644
  407. --- a/config/functions
  408. +++ b/config/functions
  409. @@ -854,7 +854,7 @@ source_package() {
  410. unset_functions
  411.  
  412. if [ -n "${1}" ]; then
  413. - PKG_DIR="$(get_pkg_directory ${1})"
  414. + [ -f "${1}" ] && PKG_DIR="$(dirname "${1}")" || PKG_DIR="$(get_pkg_directory "${1}")"
  415.  
  416. [ -n "$PKG_DIR" -a -r $PKG_DIR/package.mk ] || die "FAILURE: unable to source package - ${1}/package.mk does not exist"
  417.  
  418. --
  419. 2.14.1
  420.  
  421.  
  422. From 9faf947680e1b9feddd401fbbe1e998e5c7a5c92 Mon Sep 17 00:00:00 2001
  423. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  424. Date: Sat, 5 Jan 2019 02:34:45 +0000
  425. Subject: [PATCH 08/28] config/functions: add pkg_lock helpers
  426.  
  427. ---
  428. config/functions | 139 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
  429. 1 file changed, 138 insertions(+), 1 deletion(-)
  430.  
  431. diff --git a/config/functions b/config/functions
  432. index 65677e2..0e7b19c 100644
  433. --- a/config/functions
  434. +++ b/config/functions
  435. @@ -1171,7 +1171,7 @@ add_group() {
  436. }
  437.  
  438. # Usage: enable_service <unit> [target]
  439. -enable_service () {
  440. +enable_service() {
  441. local unit="$1"
  442. local unit_dir="/usr/lib/systemd/system"
  443. local target="$2"
  444. @@ -1193,6 +1193,143 @@ enable_service () {
  445. done
  446. }
  447.  
  448. +# Prevent concurrent modifications to a package (unpack) or
  449. +# package:target (install/build).
  450. +#
  451. +# If a package is already locked and the owner is ourselves
  452. +# then assume we already have the required lock.
  453. +pkg_lock() {
  454. + [ "${MTWITHLOCKS}" != "yes" ] && return 0
  455. +
  456. + local pkg="$1" task="$2" parent_pkg="$3"
  457. + local this_job="${MTJOBID}"
  458. + local lock_job lock_task lock_pkg
  459. +
  460. + exec 98>"${THREAD_CONTROL}/locks/${pkg}.${task}"
  461. + if ! flock --nonblock --exclusive 98; then
  462. + while [ : ]; do
  463. + read -r lock_job lock_task lock_pkg <<<$(cat "${THREAD_CONTROL}/locks/${pkg}.${task}.owner" 2>/dev/null)
  464. + [ -n "${lock_job}" ] && break || sleep 1
  465. + done
  466. +
  467. + if [ ${lock_job} != ${this_job} ]; then
  468. + pkg_lock_status "STALLED" "${parent_pkg}" "${task}" "$(printf "waiting on [%02d] %s %s" ${lock_job} "${lock_task}" "${lock_pkg}")"
  469. + flock --exclusive 98
  470. + fi
  471. + fi
  472. + echo "${this_job} ${task} ${pkg}" >"${THREAD_CONTROL}/locks/${pkg}.${task}.owner"
  473. +
  474. + pkg_lock_status "LOCKED" "${pkg}" "${task}"
  475. +}
  476. +
  477. +# Log additional information for a locked package.
  478. +pkg_lock_status() {
  479. + [ "${MTWITHLOCKS}" != "yes" ] && return 0
  480. +
  481. + local status="$1" pkg="$2" task="$3" msg="$4"
  482. + local this_job="${MTJOBID}" line
  483. +
  484. + printf -v line "%s: <%05d> [%02d/%0*d] %-7s %-7s %-35s" \
  485. + "$(date +%Y-%m-%d\ %H:%M:%S.%N)" $$ ${this_job} ${#MTMAXJOBS} ${PARALLEL_SEQ:-0} "${status}" "${task}" "${pkg}"
  486. + [ -n "${msg}" ] && line+=" (${msg})"
  487. +
  488. + echo "${line}" >>"${THREAD_CONTROL}/history"
  489. +
  490. + [ "${DASHBOARD}" != "no" ] && update_dashboard "${status}" "${pkg}" "${task}" "${msg}"
  491. +}
  492. +
  493. +update_dashboard() {
  494. + local status="$1" pkg="$2" task="$3" msg="$4"
  495. + local line sedline preamble num elapsed projdevarch
  496. + local boldred boldgreen boldyellow endcolor
  497. +
  498. + (
  499. + flock --exclusive 97
  500. +
  501. + [ -n "${MTJOBID}" ] && sedline=$((MTJOBID + 2)) || sedline=1
  502. +
  503. + num=$(cat "${THREAD_CONTROL}/status" | wc -l)
  504. + while [ ${num} -lt ${sedline} ]; do echo "" >>"${THREAD_CONTROL}/status"; num=$((num + 1)); done
  505. +
  506. + num=$(($(cat "${THREAD_CONTROL}/progress.prev") + 1))
  507. + projdevarch="${PROJECT}/"
  508. + [ -n "${DEVICE}" ] && projdevarch+="${DEVICE}/"
  509. + projdevarch+="${TARGET_ARCH}"
  510. + TZ=UTC0 printf -v elapsed "%(%H:%M:%S)T" $(($(date +%s) - MTBUILDSTART))
  511. + printf -v preamble "%s Dashboard (%s) - %d of %d jobs completed, %s elapsed" "${DISTRONAME}" "${projdevarch}" ${num} ${MTMAXJOBS} "${elapsed}"
  512. + printf -v preamble "%b%-105s %s" "\e[2J\e[0;0H" "${preamble//\//\\/}" "$(date "+%Y-%m-%d %H:%M:%S")"
  513. +
  514. + # Only update the header when caller is not a worker thread
  515. + if [ -z "${MTJOBID}" ]; then
  516. + sed -e "1s/.*/${preamble}/" -i "${THREAD_CONTROL}/status"
  517. + else
  518. + if [ "${DISABLE_COLORS}" != "yes" ]; then
  519. + boldred="\e[1;31m"
  520. + boldgreen="\e[1;32m"
  521. + boldyellow="\e[1;33m"
  522. + endcolor="\e[0m"
  523. +
  524. + case "${status}" in
  525. + STALLED) color="${boldyellow}";;
  526. + FAILED ) color="${boldred}";;
  527. + *) color="${boldgreen}";;
  528. + esac
  529. + fi
  530. +
  531. + printf -v line "[%02d\/%0*d]: %b%-7s%b %-7s %-35s" ${MTJOBID} ${#MTMAXJOBS} ${PARALLEL_SEQ:-0} "${color}" "${status//\//\\/}" "${endcolor}" "${task}" "${pkg}"
  532. + [ -n "${msg}" ] && line+=" ${msg//\//\\/}"
  533. + sed -e "1s/.*/${preamble}/;${sedline}s/.*/${line}/" -i "${THREAD_CONTROL}/status"
  534. + fi
  535. + ) 97>"${THREAD_CONTROL}/locks/.status"
  536. +}
  537. +
  538. +# Thread concurrency helpers to avoid concurrency issues with some code,
  539. +# eg. when Python installs directly into $TOOLCHAIN.
  540. +# Test MTJOBID so that these functions are a no-op during non-multithreaded builds.
  541. +acquire_exclusive_lock() {
  542. + [ "${MTWITHLOCKS}" != "yes" ] && return 0
  543. +
  544. + local pkg="$1" task="$2" lockfile="${3:-.global}"
  545. + local this_job="${MTJOBID}"
  546. + local lock_job lock_task lock_pkg
  547. +
  548. + exec 96>"${THREAD_CONTROL}/locks/${lockfile}"
  549. + if ! flock --nonblock --exclusive 96; then
  550. + while [ : ]; do
  551. + read -r lock_job lock_task lock_pkg <<<$(cat "${THREAD_CONTROL}/locks/${lockfile}.owner" 2>/dev/null)
  552. + [ -n "${lock_job}" ] && break || sleep 1
  553. + done
  554. +
  555. + if [ ${lock_job} != ${this_job} ]; then
  556. + pkg_lock_status "MUTEX/W" "${pkg}" "${task}" "$(printf "mutex: %s; waiting on [%02d] %s %s" "${lockfile}" ${lock_job} "${lock_task}" "${lock_pkg}")"
  557. + flock --exclusive 96
  558. + fi
  559. + fi
  560. + echo "${this_job} ${task} ${pkg}" >"${THREAD_CONTROL}/locks/${lockfile}.owner"
  561. +
  562. + pkg_lock_status "MUTEX" "${pkg}" "${task}" "mutex: ${lockfile}"
  563. +}
  564. +
  565. +release_exclusive_lock() {
  566. + [ "${MTWITHLOCKS}" != "yes" ] && return 0
  567. +
  568. + local pkg="$1" task="$2"
  569. +
  570. + flock --unlock 96 2>/dev/null
  571. +
  572. + pkg_lock_status "ACTIVE" "${pkg}" "${task}"
  573. +}
  574. +
  575. +# Execute single command using mutex
  576. +exec_thread_safe() {
  577. + local result
  578. + acquire_exclusive_lock "${PKG_NAME:exec}" "execcmd"
  579. + $@
  580. + result=$?
  581. + release_exclusive_lock "${PKG_NAME:exec}" "execcmd"
  582. + return ${result}
  583. +}
  584. +
  585. # Use distribution functions if any
  586. if [ -f "distributions/$DISTRO/config/functions" ]; then
  587. . distributions/$DISTRO/config/functions
  588. --
  589. 2.14.1
  590.  
  591.  
  592. From 7f3a98fa344d9a899710645717c77b3a77e9a9e6 Mon Sep 17 00:00:00 2001
  593. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  594. Date: Sat, 5 Jan 2019 02:37:33 +0000
  595. Subject: [PATCH 09/28] build system: add parallel build support; use new
  596. "image" package
  597.  
  598. ---
  599. config/multithread | 125 ++++++++++
  600. packages/devel/parallel/package.mk | 11 +
  601. packages/virtual/image/package.mk | 44 ++++
  602. scripts/build | 35 ++-
  603. scripts/genbuildplan.py | 374 ++++++++++++++++++++++++++++
  604. scripts/image | 12 +-
  605. scripts/image_mt | 498 +++++++++++++++++++++++++++++++++++++
  606. scripts/install | 18 +-
  607. scripts/unpack | 28 ++-
  608. tools/dashboard | 12 +
  609. tools/viewplan | 25 ++
  610. 11 files changed, 1148 insertions(+), 34 deletions(-)
  611. create mode 100644 config/multithread
  612. create mode 100644 packages/devel/parallel/package.mk
  613. create mode 100644 packages/virtual/image/package.mk
  614. create mode 100755 scripts/genbuildplan.py
  615. create mode 100755 scripts/image_mt
  616. create mode 100755 tools/dashboard
  617. create mode 100755 tools/viewplan
  618.  
  619. diff --git a/config/multithread b/config/multithread
  620. new file mode 100644
  621. index 0000000..f1eea57
  622. --- /dev/null
  623. +++ b/config/multithread
  624. @@ -0,0 +1,125 @@
  625. +# SPDX-License-Identifier: GPL-2.0-or-later
  626. +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
  627. +
  628. +THREADCOUNT=${THREADCOUNT:-100%}
  629. +
  630. +# This function is passed a list of package.mk paths to be processed.
  631. +# Each package.mk is sourced with relevant variables output in JSON format.
  632. +json_worker() {
  633. + local packages="$@"
  634. + local pkgpath hierarchy
  635. +
  636. + exit() { :; }
  637. +
  638. + . config/options ""
  639. +
  640. + for pkgpath in ${packages}; do
  641. + pkgpath="${pkgpath%%@*}"
  642. + source_package "${pkgpath}/package.mk" &>/dev/null
  643. + [[ ${pkgpath} =~ ^${ROOT}/${PACKAGES}/ ]] && hierarchy="global" || hierarchy="local"
  644. +
  645. + if [ -n "$PKG_ARCH" ]; then
  646. + listcontains "$PKG_ARCH" "!$TARGET_ARCH" && continue
  647. + listcontains "$PKG_ARCH" "$TARGET_ARCH" || listcontains "$PKG_ARCH" "any" || continue
  648. + fi
  649. +
  650. + cat <<EOF
  651. + {
  652. + "name": "${PKG_NAME}",
  653. + "hierarchy": "${hierarchy}",
  654. + "section": "${PKG_SECTION}",
  655. + "bootstrap": "${PKG_DEPENDS_BOOTSTRAP}",
  656. + "init": "${PKG_DEPENDS_INIT}",
  657. + "host": "${PKG_DEPENDS_HOST}",
  658. + "target": "${PKG_DEPENDS_TARGET}"
  659. + },
  660. +EOF
  661. + done
  662. +}
  663. +export -f json_worker
  664. +
  665. +# This function is passed the build instruction for a single job.
  666. +# The function will run either "build <package>" or "install <package>".
  667. +# ${slot} is the job slot number, ie. 1-8 when THREADCOUNT=8.
  668. +# ${job} is the sequence within the total number of ${jobs}.
  669. +package_worker() {
  670. + local slot=$1 job=$2 jobs=$3 args="$4"
  671. + local task pkgname result status
  672. +
  673. + . config/options ""
  674. +
  675. + export MTJOBID=${slot} MTMAXJOBS=${jobs}
  676. +
  677. + read -r task pkgname <<<$(echo "${args}")
  678. +
  679. + ${SCRIPTS}/${task} ${pkgname} 2>&1 && result=0 || result=1
  680. +
  681. + [ ${result} -eq 0 ] && status="DONE" || status="FAIL"
  682. +
  683. + (
  684. + flock --exclusive 95
  685. + num=$(($(cat "${THREAD_CONTROL}/progress") + 1))
  686. + cp "${THREAD_CONTROL}/progress" "${THREAD_CONTROL}/progress.prev"
  687. + echo "${num}" >"${THREAD_CONTROL}/progress"
  688. + printf "[%0*d/%0*d] [%-4s] %-7s %s\n" ${#jobs} ${num} ${#jobs} ${jobs} "${status}" "${task}" "${pkgname}" >&2
  689. + ) 95<"${THREAD_CONTROL}/progress"
  690. +
  691. + if [ ${result} -eq 0 ]; then
  692. + pkg_lock_status "IDLE"
  693. + else
  694. + pkg_lock_status "FAILED" "${pkgname}" "${task}"
  695. +
  696. + print_color CLR_ERROR "FAILURE: $SCRIPTS/${task} ${pkgname} has failed!\n"
  697. +
  698. + if [ -d "${THREAD_CONTROL}/logs" ]; then
  699. + cat >&2 <<EOF
  700. +
  701. +The following logs for this failure are available:
  702. + stdout: ${THREAD_CONTROL}/logs/${job}/stdout
  703. + stderr: ${THREAD_CONTROL}/logs/${job}/stderr
  704. +
  705. +EOF
  706. + fi
  707. + fi
  708. +
  709. + return ${result}
  710. +}
  711. +export -f package_worker
  712. +
  713. +start_multithread_build() {
  714. + local logbuffer withlocks now
  715. +
  716. + now=$(date +%s)
  717. +
  718. + # init thread control folder
  719. + rm -fr "${THREAD_CONTROL}"
  720. + mkdir -p "${THREAD_CONTROL}/locks"
  721. + echo -1 >"${THREAD_CONTROL}/progress.prev"
  722. + echo 0 >"${THREAD_CONTROL}/progress"
  723. + touch "${THREAD_CONTROL}/status"
  724. +
  725. + [ "${THREADCOUNT}" = "0" ] && THREADCOUNT=1
  726. +
  727. + # Bootstrap GNU parallel
  728. + $SCRIPTS/build parallel:host 2>&1 || die "Unable to bootstrap parallel package"
  729. +
  730. + # if number of detected slots is 1 then don't bother using inter-process locks as this is a sequential build
  731. + [ $(seq 1 32 | ${TOOLCHAIN}/bin/parallel --plain --no-notice --max-procs ${THREADCOUNT} echo {%} | sort -n | tail -1) -eq 1 ] && withlocks=no || withlocks=yes
  732. +
  733. + # create a single log file by default if not using locks (single build process), or the builder is a masochist
  734. + if [ "${withlocks}" = "no" -a "${ONELOG,,}" != "no" ] || [ "${ONELOG,,}" = "yes" ]; then
  735. + logbuffer="--ungroup"
  736. + else
  737. + mkdir -p "${THREAD_CONTROL}/logs"
  738. + logbuffer="--group --results ${THREAD_CONTROL}/logs/{#}/"
  739. + fi
  740. +
  741. + cat ${_CACHE_PACKAGE_GLOBAL} ${_CACHE_PACKAGE_LOCAL} | \
  742. + ${TOOLCHAIN}/bin/parallel --plain --no-notice --max-args 30 json_worker | \
  743. + ${SCRIPTS}/genbuildplan.py --no-reorder --show-wants --build ${@} > "${THREAD_CONTROL}"/plan || return
  744. +
  745. + cat "${THREAD_CONTROL}"/plan | awk '{print $1 " " $2}' | \
  746. + MTBUILDSTART=${now} MTWITHLOCKS=${withlocks} ${TOOLCHAIN}/bin/parallel \
  747. + --plain --no-notice --max-procs ${THREADCOUNT} --joblog="${THREAD_CONTROL}/joblog" ${logbuffer} --halt now,fail=1 --plus \
  748. + package_worker {%} {#} {##} {}
  749. +}
  750. diff --git a/packages/devel/parallel/package.mk b/packages/devel/parallel/package.mk
  751. new file mode 100644
  752. index 0000000..b509f6e
  753. --- /dev/null
  754. +++ b/packages/devel/parallel/package.mk
  755. @@ -0,0 +1,11 @@
  756. +# SPDX-License-Identifier: GPL-2.0-or-later
  757. +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
  758. +
  759. +PKG_NAME="parallel"
  760. +PKG_VERSION="20190122"
  761. +PKG_SHA256="ae735f201a8ceeff2ace48ff779bda9d19846e629bcc02ea7c8768a42394190c"
  762. +PKG_LICENSE="GPLv3"
  763. +PKG_SITE="https://www.gnu.org/software/parallel/"
  764. +PKG_URL="http://ftpmirror.gnu.org/parallel/$PKG_NAME-$PKG_VERSION.tar.bz2"
  765. +PKG_DEPENDS_HOST=""
  766. +PKG_LONGDESC="GNU parallel is a shell tool for executing jobs in parallel using one or more computers."
  767. diff --git a/packages/virtual/image/package.mk b/packages/virtual/image/package.mk
  768. new file mode 100644
  769. index 0000000..0ccc00b
  770. --- /dev/null
  771. +++ b/packages/virtual/image/package.mk
  772. @@ -0,0 +1,44 @@
  773. +# SPDX-License-Identifier: GPL-2.0-or-later
  774. +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
  775. +
  776. +PKG_NAME="image"
  777. +PKG_LICENSE="GPL"
  778. +PKG_SITE="https://libreelec.tv"
  779. +PKG_DEPENDS_TARGET="toolchain squashfs:host dosfstools:host fakeroot:host kmod:host mtools:host populatefs:host libc gcc linux linux-drivers linux-firmware ${BOOTLOADER} busybox util-linux corefonts network misc-packages debug"
  780. +PKG_SECTION="virtual"
  781. +PKG_LONGDESC="Root package used to build cnd create complete image"
  782. +
  783. +# Graphic support
  784. +[ ! "$DISPLAYSERVER" = "no" ] && PKG_DEPENDS_TARGET+=" $DISPLAYSERVER"
  785. +
  786. +# Multimedia support
  787. +[ ! "$MEDIACENTER" = "no" ] && PKG_DEPENDS_TARGET+=" mediacenter"
  788. +
  789. +# Sound support
  790. +[ "$ALSA_SUPPORT" = "yes" ] && PKG_DEPENDS_TARGET+=" alsa"
  791. +
  792. +# Automounter support
  793. +[ "$UDEVIL" = "yes" ] && PKG_DEPENDS_TARGET+=" udevil"
  794. +
  795. +# EXFAT support
  796. +[ "$EXFAT" = "yes" ] && PKG_DEPENDS_TARGET+=" fuse-exfat"
  797. +
  798. +# NTFS 3G support
  799. +[ "$NTFS3G" = "yes" ] && PKG_DEPENDS_TARGET+=" ntfs-3g_ntfsprogs"
  800. +
  801. +# Remote support
  802. +[ "$REMOTE_SUPPORT" = "yes" ] && PKG_DEPENDS_TARGET+=" remote"
  803. +
  804. +# Virtual image creation support
  805. +[ "$PROJECT" = "Generic" ] && PKG_DEPENDS_TARGET+=" virtual"
  806. +
  807. +# Installer support
  808. +[ "$INSTALLER_SUPPORT" = "yes" ] && PKG_DEPENDS_TARGET+=" installer"
  809. +
  810. +# Devtools... (not for Release)
  811. +[ "$TESTING" = "yes" ] && PKG_DEPENDS_TARGET+=" testing"
  812. +
  813. +# OEM packages
  814. +[ "$OEM_SUPPORT" = "yes" ] && PKG_DEPENDS_TARGET+=" oem"
  815. +
  816. +true
  817. diff --git a/scripts/build b/scripts/build
  818. index 1746d87..c20a934 100755
  819. --- a/scripts/build
  820. +++ b/scripts/build
  821. @@ -7,7 +7,7 @@
  822. . config/options "$1"
  823.  
  824. if [ -z "$1" ]; then
  825. - die "usage: $0 package_name[:<host|target|init|bootstrap>]"
  826. + die "usage: $0 package_name[:<host|target|init|bootstrap>] [parent_pkg]"
  827. fi
  828.  
  829. if [ "$1" = "--all" ]; then
  830. @@ -32,10 +32,14 @@ if [ "${1//:/}" != "${1}" ]; then
  831. PACKAGE_NAME="${1%:*}"
  832. TARGET="${1#*:}"
  833. else
  834. - PACKAGE_NAME=$1
  835. + PACKAGE_NAME="${1}"
  836. TARGET=
  837. fi
  838. TARGET="${TARGET:-target}"
  839. +PARENT_PKG="${2:-${PKG_NAME}:${TARGET}}"
  840. +
  841. +# virtual packages are not built, so no need to lock
  842. +[ "$PKG_SECTION" != "virtual" ] && pkg_lock "${PACKAGE_NAME}:${TARGET}" "build" "${PARENT_PKG}"
  843.  
  844. mkdir -p $STAMPS/$PACKAGE_NAME
  845. STAMP=$STAMPS/$PACKAGE_NAME/build_$TARGET
  846. @@ -46,10 +50,11 @@ if [ -f $STAMP ]; then
  847. rm -f $STAMP
  848. elif [ ! "$BUILD_WITH_DEBUG" = "$STAMP_BUILD_WITH_DEBUG" ]; then
  849. rm -f $STAMP
  850. - elif [ "$1" = "u-boot" -a ! "$UBOOT_SYSTEM" = "$STAMP_UBOOT_SYSTEM" ]; then
  851. + elif [ "${PKG_NAME}" = "u-boot" -a ! "$UBOOT_SYSTEM" = "$STAMP_UBOOT_SYSTEM" ]; then
  852. rm -f $STAMP
  853. else
  854. # stamp matched: already built, do nothing
  855. + [ "$PKG_SECTION" != "virtual" ] && pkg_lock_status "UNLOCK" "${PKG_NAME}:${TARGET}" "build" "already built"
  856. exit 0
  857. fi
  858. fi
  859. @@ -65,16 +70,9 @@ case "$TARGET" in
  860. "bootstrap") _pkg_depends="$PKG_DEPENDS_BOOTSTRAP";;
  861. esac
  862. for p in $_pkg_depends; do
  863. - $SCRIPTS/build $p
  864. + $SCRIPTS/build "${p}" "${PARENT_PKG}"
  865. done
  866.  
  867. -# build this package
  868. -if [ "${BUILD_WITH_DEBUG}" = "yes" ]; then
  869. - build_msg "CLR_BUILD" "BUILD" "${PACKAGE_NAME} $(print_color "CLR_TARGET" "(${TARGET})") [DEBUG]" "indent"
  870. -else
  871. - build_msg "CLR_BUILD" "BUILD" "${PACKAGE_NAME} $(print_color "CLR_TARGET" "(${TARGET})")" "indent"
  872. -fi
  873. -
  874. # virtual packages are not built as they only contain dependencies, so dont go further here
  875. if [ "$PKG_SECTION" = "virtual" ]; then
  876. PKG_DEEPHASH=$(calculate_stamp)
  877. @@ -85,6 +83,15 @@ if [ "$PKG_SECTION" = "virtual" ]; then
  878. exit 0
  879. fi
  880.  
  881. +# build this package
  882. +if [ "${BUILD_WITH_DEBUG}" = "yes" ]; then
  883. + build_msg "CLR_BUILD" "BUILD" "${PACKAGE_NAME} $(print_color "CLR_TARGET" "(${TARGET})") [DEBUG]" "indent"
  884. +else
  885. + build_msg "CLR_BUILD" "BUILD" "${PACKAGE_NAME} $(print_color "CLR_TARGET" "(${TARGET})")" "indent"
  886. +fi
  887. +
  888. +pkg_lock_status "ACTIVE" "${PKG_NAME}:${TARGET}" "build"
  889. +
  890. setup_toolchain $TARGET
  891.  
  892. # configure install directory
  893. @@ -224,7 +231,7 @@ if [ -f "$PKG_CONFIGURE_SCRIPT" -o -f "$PKG_CMAKE_SCRIPT" -o -f "$PKG_MESON_SCRI
  894. mkdir -p "$PKG_REAL_BUILD"
  895. cd "$PKG_REAL_BUILD"
  896.  
  897. - MESON_CONF="$PKG_REAL_BUILD/meson.conf"
  898. + MESON_CONF="$PKG_REAL_BUILD/${TARGET}.meson.conf"
  899. fi
  900.  
  901. # configure
  902. @@ -455,6 +462,8 @@ PKG_DEEPHASH=$(calculate_stamp)
  903. for i in PKG_NAME PKG_DEEPHASH BUILD_WITH_DEBUG; do
  904. echo "STAMP_$i=\"${!i}\"" >> $STAMP
  905. done
  906. -if [ "$1" = "u-boot" ]; then
  907. +if [ "${PKG_NAME}" = "u-boot" ]; then
  908. echo "STAMP_UBOOT_SYSTEM=\"${UBOOT_SYSTEM}\"" >> $STAMP
  909. fi
  910. +
  911. +pkg_lock_status "UNLOCK" "${PKG_NAME}:${TARGET}" "build" "built"
  912. diff --git a/scripts/genbuildplan.py b/scripts/genbuildplan.py
  913. new file mode 100755
  914. index 0000000..afff284
  915. --- /dev/null
  916. +++ b/scripts/genbuildplan.py
  917. @@ -0,0 +1,374 @@
  918. +#!/usr/bin/env python
  919. +# -*- coding: utf-8 -*-
  920. +
  921. +# SPDX-License-Identifier: GPL-2.0-or-later
  922. +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
  923. +
  924. +from __future__ import print_function
  925. +import sys, os, codecs, json, argparse, re
  926. +
  927. +ROOT_PKG = "__root__"
  928. +
  929. +class LibreELEC_Package:
  930. + def __init__(self, name, section):
  931. + self.name = name
  932. + self.section = section
  933. + self.deps = {"bootstrap": [],
  934. + "init": [],
  935. + "host": [],
  936. + "target": []}
  937. + self.wants = []
  938. + self.wantedby = []
  939. +
  940. + def __repr__(self):
  941. + s = "%-9s: %s" % ("name", self.name)
  942. + s = "%s\n%-9s: %s" % (s, "section", self.section)
  943. +
  944. + for t in self.deps:
  945. + s = "%s\n%-9s: %s" % (s, t, self.deps[t])
  946. +
  947. + s = "%s\n%-9s: %s" % (s, "NEEDS", self.wants)
  948. + s = "%s\n%-9s: %s" % (s, "WANTED BY", self.wantedby)
  949. +
  950. + return s
  951. +
  952. + def addDependencies(self, target, packages):
  953. + for d in " ".join(packages.split()).split():
  954. + self.deps[target].append(d)
  955. + name = d.split(":")[0]
  956. + if name not in self.wants and name != self.name:
  957. + self.wants.append(name)
  958. +
  959. + def delDependency(self, target, package):
  960. + if package in self.deps[target]:
  961. + self.deps[target].remove(package)
  962. + name = package.split(":")[0]
  963. + if name in self.wants:
  964. + self.wants.remove(name)
  965. +
  966. + def addReference(self, package):
  967. + name = package.split(":")[0]
  968. + if name not in self.wantedby:
  969. + self.wantedby.append(name)
  970. +
  971. + def delReference(self, package):
  972. + name = package.split(":")[0]
  973. + if name in self.wantedby:
  974. + self.wantedby.remove(name)
  975. +
  976. + def isReferenced(self):
  977. + return False if self.wants == [] else True
  978. +
  979. + def isWanted(self):
  980. + return False if self.wantedby == [] else True
  981. +
  982. + def references(self, package):
  983. + return package in self.wants
  984. +
  985. +# Reference material:
  986. +# https://www.electricmonk.nl/docs/dependency_resolving_algorithm/dependency_resolving_algorithm.html
  987. +class Node:
  988. + def __init__(self, name, target, section):
  989. + self.name = name
  990. + self.target = target
  991. + self.section = section
  992. + self.fqname = "%s:%s" % (name, target)
  993. + self.edges = []
  994. +
  995. + def appendEdges(self, node):
  996. + # Add the node itself...
  997. + if node not in self.edges:
  998. + self.edges.append(node)
  999. + # as well as its edges
  1000. + for e in node.edges:
  1001. + if e not in self.edges:
  1002. + self.edges.append(e)
  1003. +
  1004. + # Return True if the dependencies of the specified node are met by this node
  1005. + def satisfies(self, node):
  1006. + for e in node.edges:
  1007. + if e not in self.edges:
  1008. + return False
  1009. + return True
  1010. +
  1011. + def __repr__(self):
  1012. + s = "%-9s: %s" % ("name", self.name)
  1013. + s = "%s\n%-9s: %s" % (s, "target", self.target)
  1014. + s = "%s\n%-9s: %s" % (s, "fqname", self.fqname)
  1015. + s = "%s\n%-9s: %s" % (s, "common", self.commonName())
  1016. + s = "%s\n%-9s: %s" % (s, "section", self.section)
  1017. +
  1018. + for e in self.edges:
  1019. + s = "%s\nEDGE: %s" % (s, e.fqname)
  1020. +
  1021. + return s
  1022. +
  1023. + def commonName(self):
  1024. + return self.name if self.target == "target" else "%s:%s" % (self.name, self.target)
  1025. +
  1026. + def addEdge(self, node):
  1027. + self.edges.append(node)
  1028. +
  1029. +def eprint(*args, **kwargs):
  1030. + print(*args, file=sys.stderr, **kwargs)
  1031. +
  1032. +# Read a JSON list of all possible packages from stdin
  1033. +def loadPackages():
  1034. + jdata = json.loads("[%s]" % sys.stdin.read().replace('\n','')[:-1])
  1035. +
  1036. + map = {}
  1037. +
  1038. + # Load "global" packages first
  1039. + for pkg in jdata:
  1040. + if pkg["hierarchy"] == "global":
  1041. + map[pkg["name"]] = initPackage(pkg)
  1042. +
  1043. + # Then the "local" packages, as these will replace any matching "global" packages
  1044. + for pkg in jdata:
  1045. + if pkg["hierarchy"] == "local":
  1046. + map[pkg["name"]] = initPackage(pkg)
  1047. +
  1048. + return map
  1049. +
  1050. +# Create a fully formed LibreELEC_Package object
  1051. +def initPackage(package):
  1052. + pkg = LibreELEC_Package(package["name"], package["section"])
  1053. +
  1054. + for target in ["bootstrap", "init", "host", "target"]:
  1055. + pkg.addDependencies(target, package[target])
  1056. +
  1057. + return pkg
  1058. +
  1059. +# Split name:target into components
  1060. +def split_package(name):
  1061. + parts = name.split(":")
  1062. + pn = parts[0]
  1063. + pt = parts[1] if len(parts) != 1 else "target"
  1064. + return (pn, pt)
  1065. +
  1066. +# Return a list of packages of the specified type
  1067. +def get_packages_by_target(target, list):
  1068. + newlist = []
  1069. +
  1070. + for p in list:
  1071. + (pn, pt) = split_package(p)
  1072. + if target in ["target", "init"] and pt in ["target", "init"]:
  1073. + newlist.append(p)
  1074. + elif target in ["bootstrap", "host"] and pt in ["bootstrap", "host"]:
  1075. + newlist.append(p)
  1076. +
  1077. + return newlist
  1078. +
  1079. +# For the specified node iterate over the list of scheduled nodes and return the first
  1080. +# position where we could possibly build this node (ie. all dependencies satisfied).
  1081. +def findbuildpos(node, list):
  1082. +
  1083. + # Keep a running total of all dependencies as we progress through the list
  1084. + alldeps = Node("", "", "")
  1085. +
  1086. + candidate = None
  1087. + for n in list:
  1088. + alldeps.appendEdges(n)
  1089. + if alldeps.satisfies(node):
  1090. + if len(n.edges) > len(node.edges):
  1091. + if candidate == None:
  1092. + candidate = n
  1093. + break
  1094. + candidate = n
  1095. +
  1096. + return list.index(candidate) + 1 if candidate else -1
  1097. +
  1098. +# Resolve dependencies for a node
  1099. +def dep_resolve(node, resolved, unresolved, noreorder):
  1100. + unresolved.append(node)
  1101. +
  1102. + for edge in node.edges:
  1103. + if edge not in resolved:
  1104. + if edge in unresolved:
  1105. + raise Exception('Circular reference detected: %s -> %s\nRemove %s from %s package.mk::PKG_DEPENDS_%s' % \
  1106. + (node.fqname, edge.commonName(), edge.commonName(), node.name, node.target.upper()))
  1107. + dep_resolve(edge, resolved, unresolved, noreorder)
  1108. +
  1109. + if node not in resolved:
  1110. + pos = -1 if noreorder else findbuildpos(node, resolved)
  1111. + if pos != -1:
  1112. + resolved.insert(pos, node)
  1113. + else:
  1114. + resolved.append(node)
  1115. +
  1116. + unresolved.remove(node)
  1117. +
  1118. +# Return a list of build steps for the trigger packages
  1119. +def get_build_steps(args, nodes, trigger_pkgs, built_pkgs):
  1120. + resolved = []
  1121. + unresolved = []
  1122. +
  1123. + for pkgname in [x for x in trigger_pkgs if x]:
  1124. + if pkgname.find(":") == -1:
  1125. + pkgname = "%s:target" % pkgname
  1126. +
  1127. + dep_resolve(nodes[pkgname], resolved, unresolved, args.no_reorder)
  1128. +
  1129. + # Abort if any references remain unresolved
  1130. + if unresolved != []:
  1131. + eprint("The following dependencies have not been resolved:")
  1132. + for dep in unresolved:
  1133. + eprint(" %s" % dep)
  1134. + raise("Unresolved references")
  1135. +
  1136. + # Output list of resolved dependencies
  1137. + for pkg in resolved:
  1138. + if pkg.fqname not in built_pkgs:
  1139. + built_pkgs.append(pkg.fqname)
  1140. + task = "build" if pkg.fqname.endswith(":host") else "install"
  1141. + yield(task, pkg.fqname)
  1142. +
  1143. +# Reduce the complete list of packages to a map of those packages that will
  1144. +# be needed for the build.
  1145. +def processPackages(args, packages, build):
  1146. + # Add dummy package to ensure build/install dependencies are not culled
  1147. + pkg = {
  1148. + "name": ROOT_PKG,
  1149. + "section": "virtual",
  1150. + "hierarchy": "global",
  1151. + "bootstrap": "",
  1152. + "init": "",
  1153. + "host": " ".join(get_packages_by_target("host", build)),
  1154. + "target": " ".join(get_packages_by_target("target", build))
  1155. + }
  1156. +
  1157. + packages[pkg["name"]] = initPackage(pkg)
  1158. +
  1159. + # Resolve reverse references that we can use to ignore unreferenced packages
  1160. + for pkgname in packages:
  1161. + for opkgname in packages:
  1162. + opkg = packages[opkgname]
  1163. + if opkg.references(pkgname):
  1164. + if pkgname in packages:
  1165. + packages[pkgname].addReference(opkgname)
  1166. +
  1167. + # Identify unused packages
  1168. + while True:
  1169. + changed = False
  1170. + for pkgname in packages:
  1171. + pkg = packages[pkgname]
  1172. + if pkg.isWanted():
  1173. + for opkgname in pkg.wantedby:
  1174. + if opkgname != ROOT_PKG:
  1175. + if not packages[opkgname].isWanted():
  1176. + pkg.delReference(opkgname)
  1177. + changed = True
  1178. + if not changed:
  1179. + break
  1180. +
  1181. + # Create a new map of "needed" packages
  1182. + needed_map = {}
  1183. + for pkgname in packages:
  1184. + pkg = packages[pkgname]
  1185. + if pkg.isWanted() or pkgname == ROOT_PKG:
  1186. + needed_map[pkgname] = pkg
  1187. +
  1188. + # Validate package dependency references
  1189. + for pkgname in needed_map:
  1190. + pkg = needed_map[pkgname]
  1191. + for t in pkg.deps:
  1192. + for d in pkg.deps[t]:
  1193. + if split_package(d)[0] not in needed_map:
  1194. + msg = 'Invalid package reference: dependency %s in package %s::PKG_DEPENDS_%s is not valid' % (d, pkgname, t.upper())
  1195. + if args.warn_invalid:
  1196. + eprint("WARNING: %s" % msg)
  1197. + else:
  1198. + raise Exception(msg)
  1199. +
  1200. + node_map = {}
  1201. +
  1202. + # Convert all packages to target-specific nodes
  1203. + for pkgname in needed_map:
  1204. + pkg = needed_map[pkgname]
  1205. + for target in pkg.deps:
  1206. + if pkg.deps[target]:
  1207. + node = Node(pkgname, target, pkg.section)
  1208. + node_map[node.fqname] = node
  1209. +
  1210. + # Ensure all referenced dependencies exist as a basic node
  1211. + for pkgname in needed_map:
  1212. + pkg = needed_map[pkgname]
  1213. + for target in pkg.deps:
  1214. + for dep in pkg.deps[target]:
  1215. + dfq = dep if dep.find(":") != -1 else "%s:target" % dep
  1216. + if dfq not in node_map:
  1217. + (dfq_p, dfq_t) = split_package(dfq)
  1218. + if dfq_p not in packages:
  1219. + raise Exception("Invalid package! Package %s cannot be found for this PROJECT/DEVICE/ARCH" % dfq_p)
  1220. + dpkg = packages[dfq_p]
  1221. + node_map[dfq] = Node(dfq_p, dfq_t, dpkg.section)
  1222. +
  1223. + # To each target-specific node, add the correspnding
  1224. + # target-specific dependency nodes ("edges")
  1225. + for name in node_map:
  1226. + node = node_map[name]
  1227. + if node.name not in needed_map:
  1228. + if args.warn_invalid:
  1229. + continue
  1230. + else:
  1231. + raise Exception("Invalid package! Package %s cannot be found for this PROJECT/DEVICE/ARCH" % node.name)
  1232. + for dep in needed_map[node.name].deps[node.target]:
  1233. + dfq = dep if dep.find(":") != -1 else "%s:target" % dep
  1234. + node.addEdge(node_map[dfq])
  1235. +
  1236. + return node_map
  1237. +
  1238. +#---------------------------------------------
  1239. +parser = argparse.ArgumentParser(description="Generate package dependency list for the requested build/install packages. \
  1240. + Package data will be read from stdin in JSON format.", \
  1241. + formatter_class=lambda prog: argparse.HelpFormatter(prog,max_help_position=25,width=90))
  1242. +
  1243. +parser.add_argument("-b", "--build", nargs="+", metavar="PACKAGE", required=True, \
  1244. + help="Space-separated list of build trigger packages, either for host or target. Required property - specify at least one package.")
  1245. +
  1246. +parser.add_argument("--warn-invalid", action="store_true", \
  1247. + help="Warn about invalid/missing dependency packages, perhaps excluded by a PKG_ARCH incompatability. Default is to abort.")
  1248. +
  1249. +parser.add_argument("--no-reorder", action="store_true", \
  1250. + help="Do not resequence steps based on dependencies. Default is to resequence.")
  1251. +
  1252. +parser.add_argument("--reorder", action="store_false", dest="no_reorder", \
  1253. + help="Disable --no-reorder.")
  1254. +
  1255. +parser.add_argument("--show-wants", action="store_true", \
  1256. + help="Output \"wants\" dependencies for each step.")
  1257. +
  1258. +parser.add_argument("--hide-wants", action="store_false", dest="show_wants", \
  1259. + help="Disable --show-wants.")
  1260. +
  1261. +args = parser.parse_args()
  1262. +
  1263. +ALL_PACKAGES = loadPackages()
  1264. +
  1265. +loaded = len(ALL_PACKAGES)
  1266. +
  1267. +REQUIRED_PKGS = processPackages(args, ALL_PACKAGES, args.build)
  1268. +
  1269. +# Output list of packages to build/install
  1270. +built_pkgs = []
  1271. +steps = []
  1272. +
  1273. +for step in get_build_steps(args, REQUIRED_PKGS, args.build, built_pkgs):
  1274. + steps.append(step)
  1275. +
  1276. +eprint("Packages loaded : %d" % loaded)
  1277. +eprint("Build trigger(s): %d [%s]" % (len(args.build), " ".join(args.build)))
  1278. +eprint("Package steps : %d" % len(steps))
  1279. +eprint("")
  1280. +
  1281. +# Output build/install steps
  1282. +if args.show_wants:
  1283. + for step in steps:
  1284. + wants = []
  1285. + node = (REQUIRED_PKGS[step[1]])
  1286. + for e in node.edges:
  1287. + wants.append(e.fqname)
  1288. + print("%-7s %-25s (wants: %s)" % (step[0], step[1].replace(":target",""), ", ".join(wants).replace(":target","")))
  1289. +else:
  1290. + for step in steps:
  1291. + print("%-7s %s" % (step[0], step[1].replace(":target","")))
  1292. diff --git a/scripts/image b/scripts/image
  1293. index c164aa0..ea126e8 100755
  1294. --- a/scripts/image
  1295. +++ b/scripts/image
  1296. @@ -97,14 +97,14 @@ mkdir -p $INSTALL
  1297. for directory in etc dev proc run sys tmp usr var flash storage; do
  1298. mkdir -p $INSTALL/$directory
  1299. done
  1300. -ln -sf /var/media $INSTALL/media
  1301. -ln -sf /usr/lib $INSTALL/lib
  1302. -ln -sf /usr/bin $INSTALL/bin
  1303. -ln -sf /usr/sbin $INSTALL/sbin
  1304. +ln -sfn /var/media $INSTALL/media
  1305. +ln -sfn /usr/lib $INSTALL/lib
  1306. +ln -sfn /usr/bin $INSTALL/bin
  1307. +ln -sfn /usr/sbin $INSTALL/sbin
  1308.  
  1309. if [ "$TARGET_ARCH" = "x86_64" ]; then
  1310. - ln -s /usr/lib $INSTALL/lib64
  1311. - ln -s /usr/lib $INSTALL/usr/lib64
  1312. + ln -sfn /usr/lib $INSTALL/lib64
  1313. + ln -sfn /usr/lib $INSTALL/usr/lib64
  1314. fi
  1315.  
  1316. echo "$TARGET_VERSION" > $INSTALL/etc/release
  1317. diff --git a/scripts/image_mt b/scripts/image_mt
  1318. new file mode 100755
  1319. index 0000000..14bcdc0
  1320. --- /dev/null
  1321. +++ b/scripts/image_mt
  1322. @@ -0,0 +1,498 @@
  1323. +#!/bin/bash
  1324. +
  1325. +# SPDX-License-Identifier: GPL-2.0-or-later
  1326. +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
  1327. +
  1328. +unset _CACHE_PACKAGE_LOCAL _CACHE_PACKAGE_GLOBAL _DEBUG_DEPENDS_LIST _DEBUG_PACKAGE_LIST
  1329. +
  1330. +. config/options ""
  1331. +. config/multithread
  1332. +. config/show_config
  1333. +
  1334. +show_config
  1335. +save_build_config
  1336. +
  1337. +# Setup both toolchain cmake configs to avoid potentially racy behaviour later,
  1338. +# using a fork as we don't want the exports at this stage.
  1339. +for t in host target; do
  1340. + ( setup_toolchain ${t} )
  1341. +done
  1342. +
  1343. +if [ -n "$CUSTOM_GIT_HASH" ]; then
  1344. + GIT_HASH="$CUSTOM_GIT_HASH"
  1345. +else
  1346. + GIT_HASH=$(git rev-parse HEAD)
  1347. +fi
  1348. +
  1349. +if [ "$LIBREELEC_VERSION" = "devel" ]; then
  1350. + GIT_ABBREV=${GIT_HASH:0:7}
  1351. + DEVEL_VERSION=$LIBREELEC_VERSION
  1352. + case "$BUILD_PERIODIC" in
  1353. + nightly) LIBREELEC_VERSION=nightly-$(date +%Y%m%d)-$GIT_ABBREV;;
  1354. + daily) LIBREELEC_VERSION=daily-$(date +%Y%j)-$GIT_ABBREV;;
  1355. + weekly) LIBREELEC_VERSION=weekly-$(date +%G%V)-$GIT_ABBREV;;
  1356. + monthly) LIBREELEC_VERSION=monthly-$(date +%Y%m)-$GIT_ABBREV;;
  1357. + *) LIBREELEC_VERSION=devel-$(date +%Y%m%d%H%M%S)-$GIT_ABBREV;;
  1358. + esac
  1359. +fi
  1360. +
  1361. +# Get origin url, fix git:// and git@github.com: urls if necessary
  1362. +ORIGIN_URL="$(git remote -v | awk '$1 == "origin" { print $2 }' | head -1 | sed 's#\.git$##;s#^git:#https:#;s#^git@github\.com:#https://github.com/#')"
  1363. +
  1364. +[ "${BUILDER_NAME,,}" = "official" ] && BUILDER_NAME=
  1365. +if [ "$OFFICIAL" = "yes" ]; then
  1366. + LIBREELEC_BUILD="official"
  1367. +else
  1368. + if [ -n "$BUILDER_NAME" ]; then
  1369. + LIBREELEC_BUILD="$BUILDER_NAME"
  1370. + else
  1371. + LIBREELEC_BUILD="community"
  1372. + fi
  1373. +fi
  1374. +
  1375. +if [ -n "$CUSTOM_VERSION" ]; then
  1376. + LIBREELEC_VERSION="$CUSTOM_VERSION"
  1377. +fi
  1378. +
  1379. +LIBREELEC_ARCH="${DEVICE:-$PROJECT}.$TARGET_ARCH"
  1380. +TARGET_VERSION="$LIBREELEC_ARCH-$LIBREELEC_VERSION"
  1381. +
  1382. +if [ -n "$CUSTOM_IMAGE_NAME" ]; then
  1383. + IMAGE_NAME="$CUSTOM_IMAGE_NAME"
  1384. +else
  1385. + if [ "$DEVEL_VERSION" = "devel" ]; then
  1386. + IMAGE_NAME="$DISTRONAME-$LIBREELEC_ARCH-$OS_VERSION-$LIBREELEC_VERSION"
  1387. + else
  1388. + IMAGE_NAME="$DISTRONAME-$TARGET_VERSION"
  1389. + fi
  1390. +
  1391. + if [ -n "$UBOOT_SYSTEM" ] && [ "$UBOOT_SYSTEM" != "${DEVICE:-$PROJECT}" ]; then
  1392. + IMAGE_NAME="$IMAGE_NAME-$UBOOT_SYSTEM"
  1393. + fi
  1394. +fi
  1395. +
  1396. +if [ -n "$IMAGE_SUFFIX" ]; then
  1397. + IMAGE_NAME="$IMAGE_NAME-$IMAGE_SUFFIX"
  1398. +fi
  1399. +
  1400. +echo "$IMAGE_NAME" > $BUILD/BUILD_FILENAME
  1401. +
  1402. +# Setup fakeroot
  1403. +rm -rf $FAKEROOT_SCRIPT # remove $FAKEROOT_SCRIPT if it exist
  1404. +touch $FAKEROOT_SCRIPT # create an empty $FAKEROOT_SCRIPT
  1405. +chmod +x $FAKEROOT_SCRIPT # make $FAKEROOT_SCRIPT executable
  1406. +echo "chown -R 0:0 $INSTALL" >> $FAKEROOT_SCRIPT
  1407. +
  1408. +# Clean old install dirs
  1409. +rm -rf $INSTALL
  1410. +rm -rf $STAMPS_INSTALL
  1411. +mkdir -p $INSTALL
  1412. +
  1413. +# Create base layout of LibreELEC read-only file system
  1414. +for directory in etc dev proc run sys tmp usr var flash storage; do
  1415. + mkdir -p $INSTALL/$directory
  1416. +done
  1417. +
  1418. +# Build image contents
  1419. +start_multithread_build image || die "Parallel build failure - see log for details. Time of failure: $(date)"
  1420. +
  1421. +echo "Successful build, creating image..." >&2
  1422. +
  1423. +# Create legacy sym links
  1424. +ln -sfn /var/media $INSTALL/media
  1425. +ln -sfn /usr/lib $INSTALL/lib
  1426. +ln -sfn /usr/bin $INSTALL/bin
  1427. +ln -sfn /usr/sbin $INSTALL/sbin
  1428. +
  1429. +if [ "$TARGET_ARCH" = "x86_64" ]; then
  1430. + ln -sfn /usr/lib $INSTALL/lib64
  1431. + ln -sfn /usr/lib $INSTALL/usr/lib64
  1432. +fi
  1433. +
  1434. +echo "$TARGET_VERSION" > $INSTALL/etc/release
  1435. +
  1436. +# Create /etc/os-release
  1437. +echo -e "NAME=\"$DISTRONAME\"" > $INSTALL/etc/os-release
  1438. +echo -e "VERSION=\"$LIBREELEC_VERSION\"" >> $INSTALL/etc/os-release
  1439. +echo -e "ID=\"libreelec\"" >> $INSTALL/etc/os-release
  1440. +echo -e "VERSION_ID=\"$OS_VERSION\"" >> $INSTALL/etc/os-release
  1441. +echo -e "PRETTY_NAME=\"$DISTRONAME ($LIBREELEC_BUILD): $LIBREELEC_VERSION\"" >> $INSTALL/etc/os-release
  1442. +echo -e "HOME_URL=\"https://libreelec.tv\"" >> $INSTALL/etc/os-release
  1443. +echo -e "BUG_REPORT_URL=\"$ORIGIN_URL\"" >> $INSTALL/etc/os-release
  1444. +echo -e "BUILD_ID=\"$GIT_HASH\"" >> $INSTALL/etc/os-release
  1445. +echo -e "OPENELEC_ARCH=\"$LIBREELEC_ARCH\"" >> $INSTALL/etc/os-release
  1446. +echo -e "LIBREELEC_ARCH=\"$LIBREELEC_ARCH\"" >> $INSTALL/etc/os-release
  1447. +echo -e "LIBREELEC_BUILD=\"$LIBREELEC_BUILD\"" >> $INSTALL/etc/os-release
  1448. +echo -e "LIBREELEC_PROJECT=\"$PROJECT\"" >> $INSTALL/etc/os-release
  1449. +[ -n "$DEVICE" ] && echo -e "LIBREELEC_DEVICE=\"$DEVICE\"" >> $INSTALL/etc/os-release
  1450. +[ -n "$BUILDER_NAME" ] && echo -e "BUILDER_NAME=\"$BUILDER_NAME\"" >> $INSTALL/etc/os-release
  1451. +[ -n "$BUILDER_VERSION" ] && echo -e "BUILDER_VERSION=\"$BUILDER_VERSION\"" >> $INSTALL/etc/os-release
  1452. +
  1453. +# Create /etc/issue
  1454. +echo "$GREETING0" > $INSTALL/etc/issue
  1455. +echo "$GREETING1" >> $INSTALL/etc/issue
  1456. +echo "$GREETING2" >> $INSTALL/etc/issue
  1457. +echo "$GREETING3" >> $INSTALL/etc/issue
  1458. +echo "$GREETING4" >> $INSTALL/etc/issue
  1459. +echo "$DISTRONAME ($LIBREELEC_BUILD): $LIBREELEC_VERSION ($LIBREELEC_ARCH)" >> $INSTALL/etc/issue
  1460. +
  1461. +ln -sf /etc/issue $INSTALL/etc/motd
  1462. +
  1463. +# Copy PROJECT related files to filesystem
  1464. +if [ -d "$PROJECT_DIR/$PROJECT/filesystem" ]; then
  1465. + cp -PR $PROJECT_DIR/$PROJECT/filesystem/* $INSTALL
  1466. + # Install project specific systemd services
  1467. + for service in $PROJECT_DIR/$PROJECT/filesystem/usr/lib/systemd/system/*.service; do
  1468. + if [ -f "$service" ]; then
  1469. + enable_service $(basename $service)
  1470. + fi
  1471. + done
  1472. +fi
  1473. +
  1474. +# Copy DEVICE related files to filesystem
  1475. +if [ -n "$DEVICE" -a -d "$PROJECT_DIR/$PROJECT/devices/$DEVICE/filesystem" ]; then
  1476. + cp -PR $PROJECT_DIR/$PROJECT/devices/$DEVICE/filesystem/* $INSTALL
  1477. + # Install device specific systemd services
  1478. + for service in $PROJECT_DIR/$PROJECT/devices/$DEVICE/filesystem/usr/lib/systemd/system/*.service; do
  1479. + if [ -f "$service" ]; then
  1480. + enable_service $(basename $service)
  1481. + fi
  1482. + done
  1483. +fi
  1484. +
  1485. +# Run depmod for base overlay modules
  1486. +MODVER=$(basename $(ls -d $INSTALL/usr/lib/kernel-overlays/base/lib/modules/*))
  1487. +find $INSTALL/usr/lib/kernel-overlays/base/lib/modules/$MODVER/ -name *.ko | \
  1488. + sed -e "s,$INSTALL/usr/lib/kernel-overlays/base/lib/modules/$MODVER/,," \
  1489. + > $INSTALL/usr/lib/kernel-overlays/base/lib/modules/$MODVER/modules.order
  1490. +$TOOLCHAIN/bin/depmod -b $INSTALL/usr/lib/kernel-overlays/base -a -e -F "$BUILD/linux-$(kernel_version)/System.map" $MODVER 2>&1
  1491. +
  1492. +# Strip kernel modules
  1493. +for MOD in $(find $INSTALL/usr/lib/kernel-overlays/ -type f -name *.ko); do
  1494. + ${TARGET_KERNEL_PREFIX}strip --strip-debug $MOD
  1495. +done
  1496. +
  1497. +# Symlink overlayed modules to /usr/lib/modules
  1498. +ln -sT /var/lib/modules $INSTALL/usr/lib/modules
  1499. +
  1500. +# Symlink overlayed firmware to /usr/lib/firmware
  1501. +ln -sT /var/lib/firmware $INSTALL/usr/lib/firmware
  1502. +
  1503. +# Make target dir
  1504. +mkdir -p $TARGET_IMG
  1505. +rm -rf $TARGET_IMG/$IMAGE_NAME.kernel
  1506. +
  1507. +# Copy kernel to target dir
  1508. +cp -PR $BUILD/linux-$(kernel_version)/arch/$TARGET_KERNEL_ARCH/boot/$KERNEL_TARGET $TARGET_IMG/$IMAGE_NAME.kernel
  1509. +chmod 0644 $TARGET_IMG/$IMAGE_NAME.kernel
  1510. +
  1511. +# Set mksquashfs options for each compression method
  1512. +if [ -z "$SQUASHFS_COMPRESSION_OPTION" ]; then
  1513. + if [ "${SQUASHFS_COMPRESSION:-gzip}" = "gzip" ]; then
  1514. + SQUASHFS_COMPRESSION_OPTION="-Xcompression-level 9 -b 262144"
  1515. + elif [ "$SQUASHFS_COMPRESSION" = "lzo" ]; then
  1516. + SQUASHFS_COMPRESSION_OPTION="-Xcompression-level 9 -b 524288"
  1517. + elif [ "$SQUASHFS_COMPRESSION" = "zstd" ]; then
  1518. + SQUASHFS_COMPRESSION_OPTION="-Xcompression-level 22 -b 262144"
  1519. + fi
  1520. +fi
  1521. +
  1522. +# Create squashfs file, default to gzip if no compression configured
  1523. +echo "rm -rf \"$TARGET_IMG/$IMAGE_NAME.system\"" >> $FAKEROOT_SCRIPT
  1524. +echo "$TOOLCHAIN/bin/mksquashfs \"$BUILD/image/system\" \"$TARGET_IMG/$IMAGE_NAME.system\" -noappend -comp ${SQUASHFS_COMPRESSION:-gzip} ${SQUASHFS_COMPRESSION_OPTION}" >> $FAKEROOT_SCRIPT
  1525. +
  1526. +# Run fakeroot
  1527. +$TOOLCHAIN/bin/fakeroot -- $FAKEROOT_SCRIPT
  1528. +rm -rf $FAKEROOT_SCRIPT
  1529. +
  1530. +# Set permissions
  1531. +chmod 0644 $TARGET_IMG/$IMAGE_NAME.system
  1532. +
  1533. +if [ "$1" = "release" -o "$1" = "mkimage" -o "$1" = "amlpkg" -o "$1" = "noobs" ]; then
  1534. +
  1535. + RELEASE_DIR="target/$IMAGE_NAME"
  1536. +
  1537. + # Cleanup
  1538. + rm -rf $RELEASE_DIR
  1539. +
  1540. + # Create release dir
  1541. + mkdir -p $RELEASE_DIR
  1542. +
  1543. + # Remove any previously created release images
  1544. + rm -rf $TARGET_IMG/$IMAGE_NAME.img.gz
  1545. +
  1546. + if [ -n "$BOOTLOADER" ]; then
  1547. +
  1548. + BOOTLOADER_DIR="$(get_pkg_directory "$BOOTLOADER")"
  1549. +
  1550. + if [ -d $BOOTLOADER_DIR/files ]; then
  1551. + cp -R $BOOTLOADER_DIR/files/* $RELEASE_DIR
  1552. + fi
  1553. +
  1554. + if find_file_path bootloader/release $BOOTLOADER_DIR/release; then
  1555. + echo "Running $FOUND_PATH"
  1556. + . $FOUND_PATH
  1557. + fi
  1558. + fi
  1559. +
  1560. + cp $ROOT/README* $RELEASE_DIR
  1561. + cp $ROOT/CHANGELOG* $RELEASE_DIR
  1562. + echo "$TARGET_VERSION" > $RELEASE_DIR/RELEASE
  1563. +
  1564. + if [ ! "$MEDIACENTER" = "no" ]; then
  1565. + echo "Kodi commit: $(get_pkg_version $MEDIACENTER)" >> $RELEASE_DIR/RELEASE
  1566. + fi
  1567. +
  1568. + mkdir -p $RELEASE_DIR/licenses
  1569. + cp $ROOT/licenses/* $RELEASE_DIR/licenses
  1570. +
  1571. + mkdir -p $RELEASE_DIR/target
  1572. + cp $TARGET_IMG/$IMAGE_NAME.system $RELEASE_DIR/target/SYSTEM
  1573. + cp $TARGET_IMG/$IMAGE_NAME.kernel $RELEASE_DIR/target/KERNEL
  1574. +
  1575. + # Create md5sum's
  1576. + ( cd $RELEASE_DIR;
  1577. + md5sum -t target/SYSTEM > target/SYSTEM.md5;
  1578. + md5sum -t target/KERNEL > target/KERNEL.md5;
  1579. + )
  1580. +
  1581. + # Create target directory
  1582. + mkdir -p $TARGET_IMG
  1583. +
  1584. + # Remove any previously created release tarballs
  1585. + rm -rf $TARGET_IMG/$IMAGE_NAME.tar
  1586. +
  1587. + # Create release tarball
  1588. + tar cf $TARGET_IMG/$IMAGE_NAME.tar -C target $IMAGE_NAME
  1589. +
  1590. + # Create sha256 checksum of tarball
  1591. + ( cd $TARGET_IMG
  1592. + sha256sum ${IMAGE_NAME}.tar > ${IMAGE_NAME}.tar.sha256
  1593. + )
  1594. +
  1595. + # Create image files if requested
  1596. + if [[ ( "$1" = "amlpkg" || "$1" = "noobs" || "$1" = "mkimage" ) && -n "$BOOTLOADER" ]]; then
  1597. + # INSTALL_SRC_DIR can be board specific
  1598. + if [ -n "$DEVICE" -a -d "$PROJECT_DIR/$PROJECT/devices/$DEVICE/install" ]; then
  1599. + INSTALL_SRC_DIR="$PROJECT_DIR/$PROJECT/devices/$DEVICE/install"
  1600. + else
  1601. + INSTALL_SRC_DIR="$PROJECT_DIR/$PROJECT/install"
  1602. + fi
  1603. +
  1604. + # Variables used in image script must be passed
  1605. + env \
  1606. + PATH="$PATH:/sbin" \
  1607. + ROOT="$ROOT" \
  1608. + SCRIPTS="$SCRIPTS" \
  1609. + TOOLCHAIN="$TOOLCHAIN" \
  1610. + PROJECT_DIR="$PROJECT_DIR" \
  1611. + PROJECT="$PROJECT" \
  1612. + DEVICE="$DEVICE" \
  1613. + DISTRO="$DISTRO" \
  1614. + TARGET_IMG="$TARGET_IMG" \
  1615. + IMAGE_NAME="$IMAGE_NAME" \
  1616. + INSTALL_SRC_DIR="$INSTALL_SRC_DIR" \
  1617. + BOOTLOADER="$BOOTLOADER" \
  1618. + KERNEL_NAME="$KERNEL_NAME" \
  1619. + TARGET_KERNEL_ARCH="$TARGET_KERNEL_ARCH" \
  1620. + RELEASE_DIR=$RELEASE_DIR \
  1621. + UUID_STORAGE="$(uuidgen)" \
  1622. + DISTRO_BOOTLABEL="$DISTRO_BOOTLABEL" \
  1623. + DISTRO_DISKLABEL="$DISTRO_DISKLABEL" \
  1624. + UBOOT_SYSTEM="$UBOOT_SYSTEM" \
  1625. + UBOOT_VERSION="$UBOOT_VERSION" \
  1626. + EXTRA_CMDLINE="$EXTRA_CMDLINE" \
  1627. + SYSTEM_SIZE="$SYSTEM_SIZE" \
  1628. + SYSTEM_PART_START="$SYSTEM_PART_START" \
  1629. + $SCRIPTS/mkimage
  1630. + fi
  1631. +
  1632. + # Cleanup release dir
  1633. + rm -rf $RELEASE_DIR
  1634. +
  1635. + # Create WeTek Play (Amlogic) ZIP update and auto-install packages if requested
  1636. + if [ "$1" = "amlpkg" ]; then
  1637. + echo "Creating Amlogic ZIP update package"
  1638. +
  1639. + AML_PKG_DIR="$RELEASE_DIR/ampl-pkg"
  1640. +
  1641. + # Create package directory
  1642. + mkdir -p "$AML_PKG_DIR"
  1643. +
  1644. + # Copy system and kernel images
  1645. + mkdir -p "$AML_PKG_DIR/system"
  1646. + cp $TARGET_IMG/$IMAGE_NAME.system $AML_PKG_DIR/system/SYSTEM
  1647. + cp $TARGET_IMG/$IMAGE_NAME.kernel $AML_PKG_DIR/KERNEL
  1648. +
  1649. + # Copy update-binary and updater-script
  1650. + META_INF_DIR="$AML_PKG_DIR/META-INF/com/google/android"
  1651. + mkdir -p "$META_INF_DIR"
  1652. + cp $INSTALL_SRC_DIR/update-binary $META_INF_DIR
  1653. + cp $INSTALL_SRC_DIR/updater-script $META_INF_DIR
  1654. +
  1655. + # Copy other files if any
  1656. + if [ -d "$INSTALL_SRC_DIR/files" ]; then
  1657. + cp -PR $INSTALL_SRC_DIR/files/* $AML_PKG_DIR
  1658. + fi
  1659. +
  1660. + # Copy device tree image if any
  1661. + if [ -f "$INSTALL/usr/share/bootloader/dtb.img" ]; then
  1662. + cp "$INSTALL/usr/share/bootloader/dtb.img" $AML_PKG_DIR/dtb.img
  1663. + fi
  1664. +
  1665. + # Create the update package
  1666. + pushd "$AML_PKG_DIR" > /dev/null
  1667. + zip -rq update.zip *
  1668. +
  1669. + # Sign the update package
  1670. + echo "Signing the update package"
  1671. + mkdir -p sign
  1672. + SIGNAPK_DIR="$ROOT/tools/signapk"
  1673. + java -Xmx1024m -jar $SIGNAPK_DIR/signapk.jar -w $SIGNAPK_DIR/testkey.x509.pem $SIGNAPK_DIR/testkey.pk8 update.zip sign/$IMAGE_NAME-update.zip
  1674. +
  1675. + # Create the auto-install package
  1676. + echo "Creating Amlogic ZIP auto-install package"
  1677. + pushd sign > /dev/null
  1678. + echo --update_package=/sdcard/$IMAGE_NAME-update.zip > factory_update_param.aml
  1679. + echo --wipe_data >> factory_update_param.aml
  1680. + echo --wipe_cache >> factory_update_param.aml
  1681. + if [ -f "$INSTALL_SRC_DIR/files/recovery.img" ]; then
  1682. + cp $INSTALL_SRC_DIR/files/recovery.img .
  1683. + fi
  1684. +
  1685. + if [ -f $INSTALL_SRC_DIR/files/aml_autoscript ]; then
  1686. + cp $INSTALL_SRC_DIR/files/aml_autoscript .
  1687. + fi
  1688. +
  1689. + # Copy device tree image if any
  1690. + if [ -f "$INSTALL/usr/share/bootloader/dtb.img" ]; then
  1691. + cp "$INSTALL/usr/share/bootloader/dtb.img" .
  1692. + fi
  1693. +
  1694. + zip -q $TARGET_IMG/$IMAGE_NAME.zip *
  1695. +
  1696. + # Create sha256 checksum of zip
  1697. + ( cd $TARGET_IMG
  1698. + sha256sum ${IMAGE_NAME}.zip > ${IMAGE_NAME}.zip.sha256
  1699. + )
  1700. +
  1701. + popd > /dev/null
  1702. + popd > /dev/null
  1703. +
  1704. + elif [ "$1" = "noobs" ]; then
  1705. + echo "Creating \"$1\" release tarball..."
  1706. +
  1707. + RELEASE_DIR="$TARGET_IMG/${IMAGE_NAME}-$1"
  1708. +
  1709. + # eg. LibreELEC_RPi, LibreELEC_RPi2 etc.
  1710. + NOOBS_DISTRO="${DISTRONAME}_${DEVICE:-$PROJECT}"
  1711. +
  1712. + # Create release dir
  1713. + mkdir -p $RELEASE_DIR/${NOOBS_DISTRO}
  1714. +
  1715. + if [ -f $DISTRO_DIR/$DISTRO/${DISTRONAME}_40x40.png ]; then
  1716. + cp -PR $DISTRO_DIR/$DISTRO/${DISTRONAME}_40x40.png $RELEASE_DIR/${NOOBS_DISTRO}/${NOOBS_DISTRO}.png
  1717. + else
  1718. + cp -PR $DISTRO_DIR/$DISTRO/${DISTRONAME}.png $RELEASE_DIR/${NOOBS_DISTRO}/${NOOBS_DISTRO}.png
  1719. + fi
  1720. + cp -PR $ROOT/config/noobs/os.json $RELEASE_DIR/${NOOBS_DISTRO}
  1721. + cp -PR $ROOT/config/noobs/partition_setup.sh $RELEASE_DIR/${NOOBS_DISTRO}
  1722. + cp -PR $ROOT/config/noobs/partitions.json $RELEASE_DIR/${NOOBS_DISTRO}
  1723. + if [ -d $DISTRO_DIR/$DISTRO/noobs/marketing ]; then
  1724. + tar cf $RELEASE_DIR/${NOOBS_DISTRO}/marketing.tar -C $DISTRO_DIR/$DISTRO/noobs/marketing .
  1725. + else
  1726. + tar cf $RELEASE_DIR/${NOOBS_DISTRO}/marketing.tar -C $ROOT/config/noobs/marketing .
  1727. + fi
  1728. + cp $ROOT/README* $RELEASE_DIR/${NOOBS_DISTRO}
  1729. + cp $ROOT/CHANGELOG $RELEASE_DIR/${NOOBS_DISTRO}/release_notes.txt
  1730. +
  1731. + sed -e "s%@DISTRONAME@%$DISTRONAME%g" \
  1732. + -e "s%@PROJECT@%${DEVICE:-$PROJECT}%g" \
  1733. + -e "s%@LIBREELEC_VERSION@%$LIBREELEC_VERSION%g" \
  1734. + -e "s%@RELEASE_DATE@%$(date +%F)%g" \
  1735. + -e "s%@KERNEL_VERSION@%$(kernel_version)%g" \
  1736. + -e "s%@DESCRIPTION@%$DESCRIPTION%g" \
  1737. + -e "s%@ROOT_PASSWORD@%$ROOT_PASSWORD%g" \
  1738. + -e "s%@NOOBS_SUPPORTED_MODELS@%$NOOBS_SUPPORTED_MODELS%g" \
  1739. + -e "s%@NOOBS_HEX@%$NOOBS_HEX%g" \
  1740. + -i $RELEASE_DIR/${NOOBS_DISTRO}/os.json
  1741. +
  1742. + sed -e "s%@DISTRONAME@%$DISTRONAME%g" \
  1743. + -e "s%@PROJECT@%${DEVICE:-$PROJECT}%g" \
  1744. + -e "s%@SYSTEM_SIZE@%$SYSTEM_SIZE%g" \
  1745. + -i $RELEASE_DIR/${NOOBS_DISTRO}/partitions.json
  1746. +
  1747. + # Create System dir
  1748. + mkdir -p $RELEASE_DIR/${NOOBS_DISTRO}/System
  1749. +
  1750. + BOOTLOADER_DIR="$(get_pkg_directory "$BOOTLOADER")"
  1751. + if [ -d $BOOTLOADER_DIR/files/3rdparty/bootloader/ ]; then
  1752. + cp -PR $BOOTLOADER_DIR/files/3rdparty/bootloader/* $RELEASE_DIR/${NOOBS_DISTRO}/System
  1753. + fi
  1754. +
  1755. + # Copy Bootloader
  1756. + cp -PR $BUILD/bcm2835-bootloader-*/LICENCE* $RELEASE_DIR/${NOOBS_DISTRO}/System/
  1757. + cp -PR $BUILD/bcm2835-bootloader-*/bootcode.bin $RELEASE_DIR/${NOOBS_DISTRO}/System/
  1758. + cp -PR $BUILD/bcm2835-bootloader-*/fixup_x.dat $RELEASE_DIR/${NOOBS_DISTRO}/System/fixup.dat
  1759. + cp -PR $BUILD/bcm2835-bootloader-*/start_x.elf $RELEASE_DIR/${NOOBS_DISTRO}/System/start.elf
  1760. + [ -f $BUILD/bcm2835-bootloader-*/dt-blob.bin ] && cp -PR $BUILD/bcm2835-bootloader-*/dt-blob.bin $RELEASE_DIR/${NOOBS_DISTRO}/System/dt-blob.bin
  1761. +
  1762. + # Copy system files
  1763. + cp $TARGET_IMG/$IMAGE_NAME.system $RELEASE_DIR/${NOOBS_DISTRO}/System/SYSTEM
  1764. + cp $TARGET_IMG/$IMAGE_NAME.kernel $RELEASE_DIR/${NOOBS_DISTRO}/System/kernel.img
  1765. +
  1766. + for dtb in $INSTALL/usr/share/bootloader/*.dtb; do
  1767. + if [ -f $dtb ]; then
  1768. + cp -PR $dtb $RELEASE_DIR/${NOOBS_DISTRO}/System
  1769. + fi
  1770. + done
  1771. +
  1772. + for overlay in $INSTALL/usr/share/bootloader/overlays/*; do
  1773. + if [ -f $overlay ]; then
  1774. + mkdir -p $RELEASE_DIR/${NOOBS_DISTRO}/System/overlays
  1775. + cp -PR $overlay $RELEASE_DIR/${NOOBS_DISTRO}/System/overlays
  1776. + fi
  1777. + done
  1778. +
  1779. + # Create md5sum's
  1780. + ( cd $RELEASE_DIR/${NOOBS_DISTRO}/System;
  1781. + md5sum -t SYSTEM > SYSTEM.md5;
  1782. + md5sum -t kernel.img > kernel.img.md5;
  1783. + )
  1784. +
  1785. + # Copy additional files
  1786. + mkdir -p $RELEASE_DIR/${NOOBS_DISTRO}/System/licenses
  1787. + cp $ROOT/licenses/* $RELEASE_DIR/${NOOBS_DISTRO}/System/licenses
  1788. +
  1789. + # Create Storage dir
  1790. + mkdir -p $RELEASE_DIR/${NOOBS_DISTRO}/Storage
  1791. +
  1792. + # Remove any previously created release tarball
  1793. + rm -rf $RELEASE_DIR/${NOOBS_DISTRO}/System.tar.xz
  1794. + rm -rf $RELEASE_DIR/${NOOBS_DISTRO}/Storage.tar.xz
  1795. +
  1796. + # Create filesystem tarballs
  1797. + tar cJf $RELEASE_DIR/${NOOBS_DISTRO}/System.tar.xz -C $RELEASE_DIR/${NOOBS_DISTRO}/System/ .
  1798. + tar cJf $RELEASE_DIR/${NOOBS_DISTRO}/Storage.tar.xz -C $RELEASE_DIR/${NOOBS_DISTRO}/Storage/ .
  1799. +
  1800. + # Remove filesystem dirs
  1801. + rm -rf $RELEASE_DIR/${NOOBS_DISTRO}/System
  1802. + rm -rf $RELEASE_DIR/${NOOBS_DISTRO}/Storage
  1803. +
  1804. + # Remove any previously created release tarball
  1805. + rm -rf $TARGET_IMG/${IMAGE_NAME}-$1.tar
  1806. +
  1807. + # Create release tarball
  1808. + tar cf $TARGET_IMG/${IMAGE_NAME}-$1.tar -C $TARGET_IMG ${IMAGE_NAME}-$1
  1809. +
  1810. + # Create sha256 checksum of tarball
  1811. + ( cd $TARGET_IMG
  1812. + sha256sum ${IMAGE_NAME}-$1.tar > ${IMAGE_NAME}-$1.tar.sha256
  1813. + )
  1814. + fi
  1815. +
  1816. + if [ -d $RELEASE_DIR ]; then
  1817. + # Cleanup release dir
  1818. + rm -rf $RELEASE_DIR
  1819. + fi
  1820. +fi
  1821. diff --git a/scripts/install b/scripts/install
  1822. index cb8521c..4d7e85c 100755
  1823. --- a/scripts/install
  1824. +++ b/scripts/install
  1825. @@ -8,7 +8,7 @@
  1826. . config/options "$1"
  1827.  
  1828. if [ -z "$1" ]; then
  1829. - die "usage: $0 package_name"
  1830. + die "usage: $0 package_name [parent_pkg]"
  1831. fi
  1832.  
  1833. if [ -z "${PKG_NAME}" ]; then
  1834. @@ -29,29 +29,35 @@ if [ "${1//:/}" != "${1}" ]; then
  1835. PACKAGE_NAME="${1%:*}"
  1836. TARGET="${1#*:}"
  1837. else
  1838. - PACKAGE_NAME=$1
  1839. + PACKAGE_NAME="${1}"
  1840. TARGET=
  1841. fi
  1842. [ -z "$TARGET" ] && TARGET="target"
  1843. +PARENT_PKG="${2:-${PKG_NAME}:${TARGET}}"
  1844. +
  1845. +[ "$PKG_SECTION" != "virtual" ] && pkg_lock "${PACKAGE_NAME}:${TARGET}" "install" "${PARENT_PKG}"
  1846.  
  1847. STAMP=$STAMPS_INSTALL/$PACKAGE_NAME/install_$TARGET
  1848. +[ -f $STAMP ] && pkg_lock_status "UNLOCK" "${PACKAGE_NAME}:${TARGET}" "install" "already installed"
  1849. [ -f $STAMP ] && exit 0
  1850.  
  1851. mkdir -p $STAMPS_INSTALL/$PACKAGE_NAME
  1852.  
  1853. -$SCRIPTS/build $@
  1854. +$SCRIPTS/build "${1}" "${PARENT_PKG}"
  1855.  
  1856. if [ "$TARGET" = target ] ; then
  1857. for p in $PKG_DEPENDS_TARGET; do
  1858. - $SCRIPTS/install $p
  1859. + $SCRIPTS/install "${p}" "${PARENT_PKG}"
  1860. done
  1861. elif [ "$TARGET" = init ] ; then
  1862. for p in $PKG_DEPENDS_INIT; do
  1863. - $SCRIPTS/install $p
  1864. + $SCRIPTS/install "${p}" "${PARENT_PKG}"
  1865. done
  1866. INSTALL=$BUILD/initramfs
  1867. fi
  1868.  
  1869. +pkg_lock_status "ACTIVE" "${PACKAGE_NAME}:${TARGET}" "install"
  1870. +
  1871. build_msg "CLR_INSTALL" "INSTALL" "${PACKAGE_NAME} $(print_color CLR_TARGET "(${TARGET})")" "indent"
  1872.  
  1873. mkdir -p $INSTALL
  1874. @@ -137,3 +143,5 @@ if [ "$TARGET" = target ] ; then
  1875. fi
  1876.  
  1877. touch $STAMP
  1878. +
  1879. +pkg_lock_status "UNLOCK" "${PACKAGE_NAME}:${TARGET}" "install" "installed"
  1880. diff --git a/scripts/unpack b/scripts/unpack
  1881. index 5da8a4f..c19ffef 100755
  1882. --- a/scripts/unpack
  1883. +++ b/scripts/unpack
  1884. @@ -7,14 +7,19 @@
  1885. . config/options "$1"
  1886.  
  1887. if [ -z "$1" ]; then
  1888. - die "usage: $0 package_name"
  1889. + die "usage: $0 package_name [parent_pkg]"
  1890. fi
  1891.  
  1892. if [ -z "${PKG_NAME}" ]; then
  1893. die "$(print_color CLR_ERROR "${1}: no package.mk file found")"
  1894. fi
  1895. +PARENT_PKG="${2:-${PKG_NAME}}"
  1896.  
  1897. -$SCRIPTS/get $1
  1898. +pkg_lock "${PKG_NAME}" "unpack" "${PARENT_PKG}"
  1899. +
  1900. +pkg_lock_status "ACTIVE" "${PKG_NAME}" "unpack"
  1901. +
  1902. +$SCRIPTS/get "${PKG_NAME}"
  1903.  
  1904. STAMP="$PKG_BUILD/.libreelec-unpack"
  1905.  
  1906. @@ -22,13 +27,13 @@ mkdir -p $BUILD
  1907.  
  1908. # Perform a wildcard match on the package to ensure old versions are cleaned too
  1909. PKG_DEEPHASH=
  1910. -for i in $BUILD/$1-*; do
  1911. +for i in $BUILD/${PKG_NAME}-*; do
  1912. if [ -d $i -a -f "$i/.libreelec-unpack" ] ; then
  1913. . "$i/.libreelec-unpack"
  1914. - if [ "$STAMP_PKG_NAME" = "$1" ]; then
  1915. + if [ "$STAMP_PKG_NAME" = "${PKG_NAME}" ]; then
  1916. [ -z "${PKG_DEEPHASH}" ] && PKG_DEEPHASH=$(calculate_stamp)
  1917. if [ ! "$PKG_DEEPHASH" = "$STAMP_PKG_DEEPHASH" ] ; then
  1918. - $SCRIPTS/clean $1
  1919. + $SCRIPTS/clean "${PKG_NAME}"
  1920. fi
  1921. fi
  1922. fi
  1923. @@ -36,13 +41,14 @@ done
  1924.  
  1925. if [ -d "$PKG_BUILD" -a ! -f "$STAMP" ]; then
  1926. # stale pkg build dir
  1927. - $SCRIPTS/clean $1
  1928. + $SCRIPTS/clean "${PKG_NAME}"
  1929. fi
  1930.  
  1931. +[ -f "$STAMP" ] && pkg_lock_status "UNLOCK" "${PKG_NAME}" "unpack" "already unpacked"
  1932. [ -f "$STAMP" ] && exit 0
  1933.  
  1934. -if [ -d "$SOURCES/$1" -o -d "$PKG_DIR/sources" ]; then
  1935. - build_msg "CLR_UNPACK" "UNPACK" "${1}" "indent"
  1936. +if [ -d "$SOURCES/${PKG_NAME}" -o -d "$PKG_DIR/sources" ]; then
  1937. + build_msg "CLR_UNPACK" "UNPACK" "${PKG_NAME}" "indent"
  1938.  
  1939. pkg_call_exists pre_unpack && pkg_call pre_unpack
  1940.  
  1941. @@ -50,7 +56,7 @@ if [ -d "$SOURCES/$1" -o -d "$PKG_DIR/sources" ]; then
  1942. pkg_call unpack
  1943. else
  1944. if [ -n "$PKG_URL" ]; then
  1945. - $SCRIPTS/extract $1 $BUILD
  1946. + $SCRIPTS/extract "${PKG_NAME}" $BUILD
  1947. fi
  1948. fi
  1949.  
  1950. @@ -161,10 +167,12 @@ fi
  1951. if [ "$PKG_SECTION" != "virtual" ]; then
  1952. mkdir -p "$PKG_BUILD"
  1953.  
  1954. - rm -f $STAMPS/$1/build_*
  1955. + rm -f $STAMPS/${PKG_NAME}/build_*
  1956.  
  1957. PKG_DEEPHASH=$(calculate_stamp)
  1958. for i in PKG_NAME PKG_DEEPHASH; do
  1959. echo "STAMP_$i=\"${!i}\"" >> $STAMP
  1960. done
  1961. fi
  1962. +
  1963. +pkg_lock_status "UNLOCK" "${PKG_NAME}" "unpack" "unpacked"
  1964. diff --git a/tools/dashboard b/tools/dashboard
  1965. new file mode 100755
  1966. index 0000000..cd728db
  1967. --- /dev/null
  1968. +++ b/tools/dashboard
  1969. @@ -0,0 +1,12 @@
  1970. +#!/bin/bash
  1971. +
  1972. +# SPDX-License-Identifier: GPL-2.0-or-later
  1973. +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
  1974. +
  1975. +. config/options ""
  1976. +
  1977. +[ ! -f "${THREAD_CONTROL}/status" ] && die "FAILURE: ${THREAD_CONTROL}/status not found!"
  1978. +
  1979. +command -v inotifywait >/dev/null && delay= || delay="-s 1.0"
  1980. +
  1981. +tail -Fn+0 ${delay} ${THREAD_CONTROL}/status 2>/dev/null
  1982. diff --git a/tools/viewplan b/tools/viewplan
  1983. new file mode 100755
  1984. index 0000000..27d0cb7
  1985. --- /dev/null
  1986. +++ b/tools/viewplan
  1987. @@ -0,0 +1,25 @@
  1988. +#!/bin/bash
  1989. +
  1990. +# SPDX-License-Identifier: GPL-2.0-or-later
  1991. +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
  1992. +
  1993. +unset _CACHE_PACKAGE_LOCAL _CACHE_PACKAGE_GLOBAL _DEBUG_DEPENDS_LIST _DEBUG_PACKAGE_LIST
  1994. +
  1995. +. config/options ""
  1996. +. config/multithread
  1997. +
  1998. +# Fake the parallel command if GNU parallel is not available - slow, but works.
  1999. +fake_parallel() {
  2000. + while read -r line; do
  2001. + ${5} "${line}"
  2002. + done
  2003. +}
  2004. +
  2005. +PARALLEL_BIN=${TOOLCHAIN}/bin/parallel
  2006. +
  2007. +[ -x ${PARALLEL_BIN} ] || PARALLEL_BIN=parallel
  2008. +command -v ${PARALLEL_BIN} >/dev/null || PARALLEL_BIN=fake_parallel
  2009. +
  2010. +cat ${_CACHE_PACKAGE_GLOBAL} ${_CACHE_PACKAGE_LOCAL} | \
  2011. + ${PARALLEL_BIN} --plain --no-notice --max-args 30 json_worker | \
  2012. + ${SCRIPTS}/genbuildplan.py --no-reorder --show-wants --build ${@:-image} --warn-invalid ${GENFLAGS}
  2013. --
  2014. 2.14.1
  2015.  
  2016.  
  2017. From 4401db10c906a13a7a19dc4a80cb927acffe2667 Mon Sep 17 00:00:00 2001
  2018. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  2019. Date: Fri, 18 Jan 2019 00:41:41 +0000
  2020. Subject: [PATCH 10/28] scripts/build: use global lock as sed -i
  2021. $SYSROOT_PREFIX/usr/lib/*.la is racy
  2022.  
  2023. ---
  2024. scripts/build | 21 +++++++++++++++++----
  2025. 1 file changed, 17 insertions(+), 4 deletions(-)
  2026.  
  2027. diff --git a/scripts/build b/scripts/build
  2028. index c20a934..f25813e 100755
  2029. --- a/scripts/build
  2030. +++ b/scripts/build
  2031. @@ -368,6 +368,14 @@ fi
  2032.  
  2033. pkg_call_exists post_make_$TARGET && pkg_call post_make_$TARGET
  2034.  
  2035. +# make install writes directly to sysroot which then needs fixing up - this is racy
  2036. +if listcontains "configure:target cmake-make:target autotools:target make:target" "${PKG_TOOLCHAIN}:${TARGET}"; then
  2037. + acquire_exclusive_lock "${PKG_NAME}:${TARGET}" "build"
  2038. + PKG_NEED_UNLOCK=yes
  2039. +else
  2040. + PKG_NEED_UNLOCK=no
  2041. +fi
  2042. +
  2043. # make install
  2044. pkg_call_exists pre_makeinstall_$TARGET && pkg_call pre_makeinstall_$TARGET
  2045.  
  2046. @@ -409,6 +417,15 @@ fi
  2047.  
  2048. pkg_call_exists post_makeinstall_$TARGET && pkg_call post_makeinstall_$TARGET
  2049.  
  2050. +# This is the racy part - one or more processes may be creating, modifying or deleting
  2051. +# $SYSROOT_PREFIX/usr/lib/*.la files while another (eg. this) process is rewriting the same
  2052. +# files as it fixes up the libdir prefix. Eugh.
  2053. +for i in $(find $SYSROOT_PREFIX/usr/lib/ -name "*.la" 2>/dev/null); do
  2054. + sed -e "s:\(['= ]\)/usr:\\1$SYSROOT_PREFIX/usr:g" -i $i
  2055. +done
  2056. +
  2057. +[ "${PKG_NEED_UNLOCK}" = "yes" ] && release_exclusive_lock "${PKG_NAME}:${TARGET}" "build" || true
  2058. +
  2059. if [ "$TARGET" = "target" -o "$TARGET" = "init" ]; then
  2060. if [ -d $INSTALL ]; then
  2061. rm -rf $INSTALL/{usr/,}include
  2062. @@ -454,10 +471,6 @@ fi
  2063.  
  2064. cd $ROOT
  2065.  
  2066. -for i in $(find $SYSROOT_PREFIX/usr/lib/ -name "*.la" 2>/dev/null); do
  2067. - sed -e "s:\(['= ]\)/usr:\\1$SYSROOT_PREFIX/usr:g" -i $i
  2068. -done
  2069. -
  2070. PKG_DEEPHASH=$(calculate_stamp)
  2071. for i in PKG_NAME PKG_DEEPHASH BUILD_WITH_DEBUG; do
  2072. echo "STAMP_$i=\"${!i}\"" >> $STAMP
  2073. --
  2074. 2.14.1
  2075.  
  2076.  
  2077. From 629f507cd8ac8b2cf9bbb04df3eee94ae3ecc1d3 Mon Sep 17 00:00:00 2001
  2078. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  2079. Date: Sat, 5 Jan 2019 02:48:53 +0000
  2080. Subject: [PATCH 11/28] PKG_DEPENDS_UNPACK: solution for packages using source
  2081. code of another
  2082.  
  2083. ---
  2084. packages/mediacenter/JsonSchemaBuilder/package.mk | 3 ++-
  2085. packages/mediacenter/TexturePacker/package.mk | 3 ++-
  2086. packages/security/nspr/package.mk | 2 ++
  2087. scripts/build | 8 +++++++-
  2088. 4 files changed, 13 insertions(+), 3 deletions(-)
  2089.  
  2090. diff --git a/packages/mediacenter/JsonSchemaBuilder/package.mk b/packages/mediacenter/JsonSchemaBuilder/package.mk
  2091. index b61af9f..b62b79a 100644
  2092. --- a/packages/mediacenter/JsonSchemaBuilder/package.mk
  2093. +++ b/packages/mediacenter/JsonSchemaBuilder/package.mk
  2094. @@ -1,11 +1,12 @@
  2095. # SPDX-License-Identifier: GPL-2.0-or-later
  2096. # Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv)
  2097. +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
  2098.  
  2099. PKG_NAME="JsonSchemaBuilder"
  2100. PKG_VERSION="0"
  2101. PKG_LICENSE="GPL"
  2102. PKG_SITE="http://www.kodi.tv"
  2103. -PKG_URL=""
  2104. +PKG_DEPENDS_UNPACK="kodi"
  2105. PKG_NEED_UNPACK="$(get_pkg_directory $MEDIACENTER)"
  2106. PKG_LONGDESC="kodi-platform:"
  2107.  
  2108. diff --git a/packages/mediacenter/TexturePacker/package.mk b/packages/mediacenter/TexturePacker/package.mk
  2109. index 8faa689..ed8ee07 100644
  2110. --- a/packages/mediacenter/TexturePacker/package.mk
  2111. +++ b/packages/mediacenter/TexturePacker/package.mk
  2112. @@ -1,12 +1,13 @@
  2113. # SPDX-License-Identifier: GPL-2.0-or-later
  2114. # Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv)
  2115. +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
  2116.  
  2117. PKG_NAME="TexturePacker"
  2118. PKG_VERSION="0"
  2119. PKG_LICENSE="GPL"
  2120. PKG_SITE="http://www.kodi.tv"
  2121. -PKG_URL=""
  2122. PKG_DEPENDS_HOST="lzo:host libpng:host libjpeg-turbo:host giflib:host"
  2123. +PKG_DEPENDS_UNPACK="kodi"
  2124. PKG_NEED_UNPACK="$(get_pkg_directory $MEDIACENTER)"
  2125. PKG_LONGDESC="kodi-platform:"
  2126.  
  2127. diff --git a/packages/security/nspr/package.mk b/packages/security/nspr/package.mk
  2128. index 7d16ac8..fd63908 100644
  2129. --- a/packages/security/nspr/package.mk
  2130. +++ b/packages/security/nspr/package.mk
  2131. @@ -1,5 +1,6 @@
  2132. # SPDX-License-Identifier: GPL-2.0-or-later
  2133. # Copyright (C) 2009-2012 Stephan Raue (stephan@openelec.tv)
  2134. +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
  2135.  
  2136. PKG_NAME="nspr"
  2137. PKG_VERSION="4.19"
  2138. @@ -7,6 +8,7 @@ PKG_LICENSE="Mozilla Public License"
  2139. PKG_SITE="http://www.linuxfromscratch.org/blfs/view/svn/general/nspr.html"
  2140. PKG_DEPENDS_HOST="ccache:host"
  2141. PKG_DEPENDS_TARGET="toolchain nss:host"
  2142. +PKG_DEPENDS_UNPACK="nss"
  2143. PKG_LONGDESC="Netscape Portable Runtime (NSPR) provides a platform-neutral API for system level and libc like functions"
  2144. PKG_TOOLCHAIN="configure"
  2145. PKG_BUILD_FLAGS="-parallel"
  2146. diff --git a/scripts/build b/scripts/build
  2147. index f25813e..d8930cf 100755
  2148. --- a/scripts/build
  2149. +++ b/scripts/build
  2150. @@ -59,7 +59,13 @@ if [ -f $STAMP ]; then
  2151. fi
  2152. fi
  2153.  
  2154. -$SCRIPTS/unpack $PACKAGE_NAME
  2155. +if [ -n "${PKG_DEPENDS_UNPACK}" ]; then
  2156. + for p in ${PKG_DEPENDS_UNPACK}; do
  2157. + $SCRIPTS/unpack "${p}" "${PARENT_PKG}"
  2158. + done
  2159. +else
  2160. + $SCRIPTS/unpack "${PACKAGE_NAME}" "${PARENT_PKG}"
  2161. +fi
  2162.  
  2163. # build dependencies, only when PKG_DEPENDS_? is filled
  2164. unset _pkg_depends
  2165. --
  2166. 2.14.1
  2167.  
  2168.  
  2169. From 8e58573ff54825652bd6e7713542df700ff01f23 Mon Sep 17 00:00:00 2001
  2170. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  2171. Date: Wed, 9 Jan 2019 03:27:04 +0000
  2172. Subject: [PATCH 12/28] PKG_DEPENDS_UNPACK: add source package to
  2173. PKG_NEED_UNPACK
  2174.  
  2175. If the source package changes then we need to rebuild too.
  2176. ---
  2177. config/functions | 6 ++++++
  2178. 1 file changed, 6 insertions(+)
  2179.  
  2180. diff --git a/config/functions b/config/functions
  2181. index 0e7b19c..7edca50 100644
  2182. --- a/config/functions
  2183. +++ b/config/functions
  2184. @@ -870,6 +870,12 @@ source_package() {
  2185. [ "$PKG_ADDON_IS_STANDALONE" != "yes" ] && PKG_NEED_UNPACK="${PKG_NEED_UNPACK} $(get_pkg_directory $MEDIACENTER)"
  2186. fi
  2187.  
  2188. + if [ -n "${PKG_DEPENDS_UNPACK}" ]; then
  2189. + for _p in ${PKG_DEPENDS_UNPACK}; do
  2190. + PKG_NNED_UNPACK+=" $(get_pkg_directory ${_p})"
  2191. + done
  2192. + fi
  2193. +
  2194. # Automatically set PKG_SOURCE_NAME unless it is already defined.
  2195. # PKG_SOURCE_NAME will be automatically set to a name based on
  2196. # the $PKG_NAME-$PKG_VERSION convention.
  2197. --
  2198. 2.14.1
  2199.  
  2200.  
  2201. From 8d24612b8314a45450c5dc8f8cd5ca3984f87618 Mon Sep 17 00:00:00 2001
  2202. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  2203. Date: Sat, 5 Jan 2019 02:44:12 +0000
  2204. Subject: [PATCH 13/28] packages: pciutils, nasm: build only for x86_64
  2205.  
  2206. ---
  2207. packages/linux/package.mk | 4 ++--
  2208. packages/mediacenter/kodi/package.mk | 6 +++++-
  2209. packages/multimedia/dav1d/package.mk | 6 +++++-
  2210. packages/sysutils/busybox/package.mk | 6 +++++-
  2211. 4 files changed, 17 insertions(+), 5 deletions(-)
  2212.  
  2213. diff --git a/packages/linux/package.mk b/packages/linux/package.mk
  2214. index 93c4407..6daa186 100644
  2215. --- a/packages/linux/package.mk
  2216. +++ b/packages/linux/package.mk
  2217. @@ -6,7 +6,7 @@ PKG_NAME="linux"
  2218. PKG_LICENSE="GPL"
  2219. PKG_SITE="http://www.kernel.org"
  2220. PKG_DEPENDS_HOST="ccache:host"
  2221. -PKG_DEPENDS_TARGET="toolchain cpio:host kmod:host pciutils xz:host wireless-regdb keyutils $KERNEL_EXTRA_DEPENDS_TARGET"
  2222. +PKG_DEPENDS_TARGET="toolchain cpio:host kmod:host xz:host wireless-regdb keyutils $KERNEL_EXTRA_DEPENDS_TARGET"
  2223. PKG_DEPENDS_INIT="toolchain"
  2224. PKG_NEED_UNPACK="$LINUX_DEPENDS"
  2225. PKG_LONGDESC="This package contains a precompiled kernel image and the modules."
  2226. @@ -65,7 +65,7 @@ if [ "$PKG_BUILD_PERF" != "no" ] && grep -q ^CONFIG_PERF_EVENTS= $PKG_KERNEL_CFG
  2227. fi
  2228.  
  2229. if [ "$TARGET_ARCH" = "x86_64" ]; then
  2230. - PKG_DEPENDS_TARGET="$PKG_DEPENDS_TARGET intel-ucode:host kernel-firmware elfutils:host"
  2231. + PKG_DEPENDS_TARGET="$PKG_DEPENDS_TARGET intel-ucode:host kernel-firmware elfutils:host pciutils"
  2232. fi
  2233.  
  2234. if [ "$BUILD_ANDROID_BOOTIMG" = "yes" ]; then
  2235. diff --git a/packages/mediacenter/kodi/package.mk b/packages/mediacenter/kodi/package.mk
  2236. index ddcc9e1..c85ac38 100644
  2237. --- a/packages/mediacenter/kodi/package.mk
  2238. +++ b/packages/mediacenter/kodi/package.mk
  2239. @@ -5,7 +5,7 @@
  2240. PKG_NAME="kodi"
  2241. PKG_LICENSE="GPL"
  2242. PKG_SITE="http://www.kodi.tv"
  2243. -PKG_DEPENDS_TARGET="toolchain JsonSchemaBuilder:host TexturePacker:host Python2 zlib systemd pciutils lzo pcre swig:host libass curl fontconfig fribidi tinyxml libjpeg-turbo freetype libcdio taglib libxml2 libxslt rapidjson sqlite ffmpeg crossguid giflib libdvdnav libhdhomerun libfmt lirc libfstrcmp flatbuffers:host flatbuffers"
  2244. +PKG_DEPENDS_TARGET="toolchain JsonSchemaBuilder:host TexturePacker:host Python2 zlib systemd lzo pcre swig:host libass curl fontconfig fribidi tinyxml libjpeg-turbo freetype libcdio taglib libxml2 libxslt rapidjson sqlite ffmpeg crossguid giflib libdvdnav libhdhomerun libfmt lirc libfstrcmp flatbuffers:host flatbuffers"
  2245. PKG_LONGDESC="A free and open source cross-platform media player."
  2246.  
  2247. PKG_PATCH_DIRS="$KODI_VENDOR"
  2248. @@ -39,6 +39,10 @@ configure_package() {
  2249.  
  2250. get_graphicdrivers
  2251.  
  2252. + if [ "$TARGET_ARCH" = "x86_64" ]; then
  2253. + PKG_DEPENDS_TARGET="$PKG_DEPENDS_TARGET pciutils"
  2254. + fi
  2255. +
  2256. PKG_DEPENDS_TARGET="$PKG_DEPENDS_TARGET dbus"
  2257.  
  2258. if [ "$DISPLAYSERVER" = "x11" ]; then
  2259. diff --git a/packages/multimedia/dav1d/package.mk b/packages/multimedia/dav1d/package.mk
  2260. index 275aca4..ab20356 100644
  2261. --- a/packages/multimedia/dav1d/package.mk
  2262. +++ b/packages/multimedia/dav1d/package.mk
  2263. @@ -7,5 +7,9 @@ PKG_SHA256="3662184809fa29af39c920877cedec3724dc5c3cf71d94bec424f2a7ee4825cf"
  2264. PKG_LICENSE="BSD"
  2265. PKG_SITE="http://www.jbkempf.com/blog/post/2018/Introducing-dav1d"
  2266. PKG_URL="https://code.videolan.org/videolan/dav1d/-/archive/${PKG_VERSION}/dav1d-${PKG_VERSION}.tar.bz2"
  2267. -PKG_DEPENDS_TARGET="toolchain nasm:host"
  2268. +PKG_DEPENDS_TARGET="toolchain"
  2269. PKG_LONGDESC="dav1d is an AV1 decoder :)"
  2270. +
  2271. +if [ "$TARGET_ARCH" = "x86_64" ]; then
  2272. + PKG_DEPENDS_TARGET+=" nasm:host"
  2273. +fi
  2274. diff --git a/packages/sysutils/busybox/package.mk b/packages/sysutils/busybox/package.mk
  2275. index 4d8b2fb..4aa977c 100644
  2276. --- a/packages/sysutils/busybox/package.mk
  2277. +++ b/packages/sysutils/busybox/package.mk
  2278. @@ -9,7 +9,7 @@ PKG_LICENSE="GPL"
  2279. PKG_SITE="http://www.busybox.net"
  2280. PKG_URL="http://busybox.net/downloads/$PKG_NAME-$PKG_VERSION.tar.bz2"
  2281. PKG_DEPENDS_HOST=""
  2282. -PKG_DEPENDS_TARGET="toolchain busybox:host hdparm dosfstools e2fsprogs zip unzip pciutils usbutils parted procps-ng gptfdisk libtirpc"
  2283. +PKG_DEPENDS_TARGET="toolchain busybox:host hdparm dosfstools e2fsprogs zip unzip usbutils parted procps-ng gptfdisk libtirpc"
  2284. PKG_DEPENDS_INIT="toolchain libtirpc"
  2285. PKG_LONGDESC="BusyBox combines tiny versions of many common UNIX utilities into a single small executable."
  2286. # busybox fails to build with GOLD support enabled with binutils-2.25
  2287. @@ -25,6 +25,10 @@ if [ "$NFS_SUPPORT" = yes ]; then
  2288. PKG_DEPENDS_TARGET="$PKG_DEPENDS_TARGET rpcbind"
  2289. fi
  2290.  
  2291. +if [ "$TARGET_ARCH" = "x86_64" ]; then
  2292. + PKG_DEPENDS_TARGET+=" pciutils"
  2293. +fi
  2294. +
  2295. pre_build_target() {
  2296. PKG_MAKE_OPTS_TARGET="ARCH=$TARGET_ARCH \
  2297. HOSTCC=$HOST_CC \
  2298. --
  2299. 2.14.1
  2300.  
  2301.  
  2302. From 520a608fe81257c312c2cb93614f137e623aa9c1 Mon Sep 17 00:00:00 2001
  2303. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  2304. Date: Sat, 5 Jan 2019 02:50:57 +0000
  2305. Subject: [PATCH 14/28] packages: add missing dependencies
  2306.  
  2307. ---
  2308. packages/addons/addon-depends/rsyslog-depends/liblognorm/package.mk | 2 +-
  2309. packages/addons/addon-depends/system-tools-depends/p7zip/package.mk | 1 +
  2310. packages/compress/bzip2/package.mk | 2 +-
  2311. packages/compress/xz/package.mk | 1 +
  2312. packages/compress/zstd/package.mk | 1 +
  2313. packages/databases/sqlite/package.mk | 1 +
  2314. packages/debug/libunwind/package.mk | 1 +
  2315. packages/devel/elfutils/package.mk | 2 +-
  2316. packages/devel/flex/package.mk | 1 +
  2317. packages/devel/glib/package.mk | 2 +-
  2318. packages/devel/glibc/package.mk | 2 +-
  2319. packages/devel/libffi/package.mk | 2 ++
  2320. packages/devel/ncurses/package.mk | 1 +
  2321. packages/devel/pcre/package.mk | 2 +-
  2322. packages/lang/gcc/package.mk | 1 +
  2323. packages/linux/package.mk | 2 +-
  2324. packages/mediacenter/JsonSchemaBuilder/package.mk | 1 +
  2325. packages/print/freetype/package.mk | 1 +
  2326. packages/security/nspr/package.mk | 2 +-
  2327. packages/sysutils/busybox/package.mk | 2 +-
  2328. packages/sysutils/dosfstools/package.mk | 2 ++
  2329. packages/sysutils/e2fsprogs/package.mk | 1 +
  2330. packages/sysutils/gptfdisk/package.mk | 2 +-
  2331. packages/sysutils/util-linux/package.mk | 2 +-
  2332. packages/sysutils/v4l-utils/package.mk | 2 +-
  2333. packages/tools/aml-dtbtools/package.mk | 1 +
  2334. packages/tools/dtc/package.mk | 2 +-
  2335. packages/tools/mkbootimg/package.mk | 3 ++-
  2336. packages/tools/mtools/package.mk | 3 ++-
  2337. packages/x11/lib/pixman/package.mk | 2 ++
  2338. projects/Amlogic/packages/autoscript-amlogic/package.mk | 2 +-
  2339. 31 files changed, 36 insertions(+), 16 deletions(-)
  2340.  
  2341. diff --git a/packages/addons/addon-depends/rsyslog-depends/liblognorm/package.mk b/packages/addons/addon-depends/rsyslog-depends/liblognorm/package.mk
  2342. index 737648d..e9f1989 100644
  2343. --- a/packages/addons/addon-depends/rsyslog-depends/liblognorm/package.mk
  2344. +++ b/packages/addons/addon-depends/rsyslog-depends/liblognorm/package.mk
  2345. @@ -7,7 +7,7 @@ PKG_SHA256="dd779b6992de37995555e1d54caf0716a694765efc65480eed2c713105ab46fe"
  2346. PKG_LICENSE="GPL"
  2347. PKG_SITE="http://www.liblognorm.com"
  2348. PKG_URL="https://github.com/rsyslog/liblognorm/archive/v$PKG_VERSION.tar.gz"
  2349. -PKG_DEPENDS_TARGET="toolchain"
  2350. +PKG_DEPENDS_TARGET="toolchain libestr"
  2351. PKG_TOOLCHAIN="autotools"
  2352. PKG_LONGDESC="A fast samples-based log normalization library."
  2353.  
  2354. diff --git a/packages/addons/addon-depends/system-tools-depends/p7zip/package.mk b/packages/addons/addon-depends/system-tools-depends/p7zip/package.mk
  2355. index 4db0399..53ef8ff 100644
  2356. --- a/packages/addons/addon-depends/system-tools-depends/p7zip/package.mk
  2357. +++ b/packages/addons/addon-depends/system-tools-depends/p7zip/package.mk
  2358. @@ -7,6 +7,7 @@ PKG_SHA256="5eb20ac0e2944f6cb9c2d51dd6c4518941c185347d4089ea89087ffdd6e2341f"
  2359. PKG_LICENSE="GPL"
  2360. PKG_SITE="http://p7zip.sourceforge.net/"
  2361. PKG_URL="http://downloads.sourceforge.net/project/p7zip/p7zip/${PKG_VERSION}/p7zip_${PKG_VERSION}_src_all.tar.bz2"
  2362. +PKG_DEPENDS_HOST="gcc:host"
  2363. PKG_DEPENDS_TARGET="toolchain"
  2364. PKG_LONGDESC="p7zip is a port of 7za.exe for POSIX systems like Unix."
  2365. PKG_TOOLCHAIN="manual"
  2366. diff --git a/packages/compress/bzip2/package.mk b/packages/compress/bzip2/package.mk
  2367. index 610406b..9a12838 100644
  2368. --- a/packages/compress/bzip2/package.mk
  2369. +++ b/packages/compress/bzip2/package.mk
  2370. @@ -8,7 +8,7 @@ PKG_SHA256="a2848f34fcd5d6cf47def00461fcb528a0484d8edef8208d6d2e2909dc61d9cd"
  2371. PKG_LICENSE="GPL"
  2372. PKG_SITE="http://www.bzip.org"
  2373. PKG_URL="$DISTRO_SRC/$PKG_NAME-$PKG_VERSION.tar.gz"
  2374. -PKG_DEPENDS_HOST=""
  2375. +PKG_DEPENDS_HOST="gcc:host"
  2376. PKG_DEPENDS_TARGET="toolchain"
  2377. PKG_LONGDESC="A high-quality bzip2 data compressor."
  2378. PKG_BUILD_FLAGS="+pic +pic:host"
  2379. diff --git a/packages/compress/xz/package.mk b/packages/compress/xz/package.mk
  2380. index 0974846..ab7d013 100644
  2381. --- a/packages/compress/xz/package.mk
  2382. +++ b/packages/compress/xz/package.mk
  2383. @@ -9,6 +9,7 @@ PKG_LICENSE="GPL"
  2384. PKG_SITE="http://tukaani.org/xz/"
  2385. PKG_URL="http://tukaani.org/xz/$PKG_NAME-$PKG_VERSION.tar.bz2"
  2386. PKG_DEPENDS_HOST="ccache:host"
  2387. +PKG_DEPENDS_TARGET="gcc:host"
  2388. PKG_LONGDESC="A free general-purpose data compression software with high compression ratio."
  2389. PKG_BUILD_FLAGS="+pic"
  2390.  
  2391. diff --git a/packages/compress/zstd/package.mk b/packages/compress/zstd/package.mk
  2392. index 3ec5713..2aee9d6 100644
  2393. --- a/packages/compress/zstd/package.mk
  2394. +++ b/packages/compress/zstd/package.mk
  2395. @@ -8,6 +8,7 @@ PKG_LICENSE="BSD/GPLv2"
  2396. PKG_SITE="http://www.zstd.net"
  2397. PKG_URL="https://github.com/facebook/zstd/releases/download/v${PKG_VERSION}/${PKG_NAME}-${PKG_VERSION}.tar.gz"
  2398. PKG_SOURCE_DIR=$PKG_NAME-$PKG_VERSION
  2399. +PKG_DEPENDS_HOST="gcc:host ninja:host"
  2400. PKG_DEPENDS_TARGET="toolchain"
  2401. PKG_LONGDESC="A fast real-time compression algorithm."
  2402.  
  2403. diff --git a/packages/databases/sqlite/package.mk b/packages/databases/sqlite/package.mk
  2404. index 66af712..8a793e8 100644
  2405. --- a/packages/databases/sqlite/package.mk
  2406. +++ b/packages/databases/sqlite/package.mk
  2407. @@ -8,6 +8,7 @@ PKG_SHA256="5daa6a3fb7d1e8c767cd59c4ded8da6e4b00c61d3b466d0685e35c4dd6d7bf5d"
  2408. PKG_LICENSE="PublicDomain"
  2409. PKG_SITE="https://www.sqlite.org/"
  2410. PKG_URL="https://www.sqlite.org/2018/$PKG_NAME-$PKG_VERSION.tar.gz"
  2411. +PKG_DEPENDS_HOST="gcc:host"
  2412. PKG_DEPENDS_TARGET="toolchain"
  2413. PKG_LONGDESC="An Embeddable SQL Database Engine."
  2414. # libsqlite3.a(sqlite3.o): requires dynamic R_X86_64_PC32 reloc against 'sqlite3_stricmp' which may overflow at runtime
  2415. diff --git a/packages/debug/libunwind/package.mk b/packages/debug/libunwind/package.mk
  2416. index 47698d3..44b91b6 100644
  2417. --- a/packages/debug/libunwind/package.mk
  2418. +++ b/packages/debug/libunwind/package.mk
  2419. @@ -7,6 +7,7 @@ PKG_SHA256="3f3ecb90e28cbe53fba7a4a27ccce7aad188d3210bb1964a923a731a27a75acb"
  2420. PKG_LICENSE="GPL"
  2421. PKG_SITE="http://www.nongnu.org/libunwind/"
  2422. PKG_URL="http://download.savannah.nongnu.org/releases/libunwind/libunwind-${PKG_VERSION}.tar.gz"
  2423. +PKG_DEPENDS_TARGET="gcc:host"
  2424. PKG_LONGDESC="library to determine the call-chain of a program"
  2425.  
  2426. PKG_CONFIGURE_OPTS_TARGET="--enable-static \
  2427. diff --git a/packages/devel/elfutils/package.mk b/packages/devel/elfutils/package.mk
  2428. index 6a2cedb..3534b60 100644
  2429. --- a/packages/devel/elfutils/package.mk
  2430. +++ b/packages/devel/elfutils/package.mk
  2431. @@ -9,7 +9,7 @@ PKG_LICENSE="GPL"
  2432. PKG_SITE="https://sourceware.org/elfutils/"
  2433. PKG_URL="https://sourceware.org/elfutils/ftp/$PKG_VERSION/$PKG_NAME-$PKG_VERSION.tar.bz2"
  2434. PKG_DEPENDS_HOST="make:host zlib:host"
  2435. -PKG_DEPENDS_TARGET="toolchain zlib"
  2436. +PKG_DEPENDS_TARGET="toolchain zlib elfutils:host"
  2437. PKG_LONGDESC="A collection of utilities to handle ELF objects."
  2438. PKG_TOOLCHAIN="autotools"
  2439. PKG_BUILD_FLAGS="+pic"
  2440. diff --git a/packages/devel/flex/package.mk b/packages/devel/flex/package.mk
  2441. index 091e4c2..37e2324 100644
  2442. --- a/packages/devel/flex/package.mk
  2443. +++ b/packages/devel/flex/package.mk
  2444. @@ -8,6 +8,7 @@ PKG_LICENSE="GPL"
  2445. PKG_SITE="http://flex.sourceforge.net/"
  2446. PKG_URL="$SOURCEFORGE_SRC/flex/$PKG_NAME-$PKG_VERSION.tar.bz2"
  2447. PKG_DEPENDS_HOST="ccache:host"
  2448. +PKG_DEPENDS_TARGET="toolchain"
  2449. PKG_LONGDESC="A tool for generating programs that perform pattern-matching on text."
  2450. PKG_TOOLCHAIN="autotools"
  2451.  
  2452. diff --git a/packages/devel/glib/package.mk b/packages/devel/glib/package.mk
  2453. index a6ee221..d490da4 100644
  2454. --- a/packages/devel/glib/package.mk
  2455. +++ b/packages/devel/glib/package.mk
  2456. @@ -8,8 +8,8 @@ PKG_SHA256="991421f41a4ed4cc1637e5f9db0d03fd236d2cbd19f3c5b097a343bec5126602"
  2457. PKG_LICENSE="LGPL"
  2458. PKG_SITE="http://www.gtk.org/"
  2459. PKG_URL="http://ftp.gnome.org/pub/gnome/sources/glib/${PKG_VERSION%.*}/$PKG_NAME-$PKG_VERSION.tar.xz"
  2460. +PKG_DEPENDS_HOST="libffi:host pcre:host pkg-config:host"
  2461. PKG_DEPENDS_TARGET="toolchain zlib libffi Python2:host util-linux"
  2462. -PKG_DEPENDS_HOST="libffi:host pcre:host"
  2463. PKG_LONGDESC="A library which includes support routines for C such as lists, trees, hashes, memory allocation."
  2464. PKG_TOOLCHAIN="autotools"
  2465.  
  2466. diff --git a/packages/devel/glibc/package.mk b/packages/devel/glibc/package.mk
  2467. index a487ed0..545a6c0 100644
  2468. --- a/packages/devel/glibc/package.mk
  2469. +++ b/packages/devel/glibc/package.mk
  2470. @@ -8,7 +8,7 @@ PKG_SHA256="b1900051afad76f7a4f73e71413df4826dce085ef8ddb785a945b66d7d513082"
  2471. PKG_LICENSE="GPL"
  2472. PKG_SITE="http://www.gnu.org/software/libc/"
  2473. PKG_URL="http://ftp.gnu.org/pub/gnu/glibc/$PKG_NAME-$PKG_VERSION.tar.xz"
  2474. -PKG_DEPENDS_TARGET="ccache:host autotools:host autoconf:host linux:host gcc:bootstrap"
  2475. +PKG_DEPENDS_TARGET="ccache:host autotools:host linux:host gcc:bootstrap"
  2476. PKG_DEPENDS_INIT="glibc"
  2477. PKG_LONGDESC="The Glibc package contains the main C library."
  2478. PKG_BUILD_FLAGS="-gold"
  2479. diff --git a/packages/devel/libffi/package.mk b/packages/devel/libffi/package.mk
  2480. index b4e83eb..0cb80e0 100644
  2481. --- a/packages/devel/libffi/package.mk
  2482. +++ b/packages/devel/libffi/package.mk
  2483. @@ -1,5 +1,6 @@
  2484. # SPDX-License-Identifier: GPL-2.0-or-later
  2485. # Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv)
  2486. +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
  2487.  
  2488. PKG_NAME="libffi"
  2489. PKG_VERSION="3.2.1"
  2490. @@ -7,6 +8,7 @@ PKG_SHA256="d06ebb8e1d9a22d19e38d63fdb83954253f39bedc5d46232a05645685722ca37"
  2491. PKG_LICENSE="GPL"
  2492. PKG_SITE="http://sourceware.org/$PKG_NAME/"
  2493. PKG_URL="ftp://sourceware.org/pub/$PKG_NAME/$PKG_NAME-$PKG_VERSION.tar.gz"
  2494. +PKG_DEPENDS_HOST="gcc:host"
  2495. PKG_DEPENDS_TARGET="toolchain"
  2496. PKG_LONGDESC="Foreign Function Interface Library."
  2497. PKG_TOOLCHAIN="autotools"
  2498. diff --git a/packages/devel/ncurses/package.mk b/packages/devel/ncurses/package.mk
  2499. index c04d685..e579734 100644
  2500. --- a/packages/devel/ncurses/package.mk
  2501. +++ b/packages/devel/ncurses/package.mk
  2502. @@ -7,6 +7,7 @@ PKG_SHA256="08b07c3e792961f300829512c283d5fefc0b1c421a57b76922c3d13303ed677d"
  2503. PKG_LICENSE="MIT"
  2504. PKG_SITE="http://www.gnu.org/software/ncurses/"
  2505. PKG_URL="http://invisible-mirror.net/archives/ncurses/current/ncurses-$PKG_VERSION.tgz"
  2506. +PKG_DEPENDS_HOST="gcc:host"
  2507. PKG_DEPENDS_TARGET="toolchain zlib ncurses:host"
  2508. PKG_LONGDESC="A library is a free software emulation of curses in System V Release 4.0, and more."
  2509. # causes some segmentation fault's (dialog) when compiled with gcc's link time optimization.
  2510. diff --git a/packages/devel/pcre/package.mk b/packages/devel/pcre/package.mk
  2511. index 0518214..3148324 100644
  2512. --- a/packages/devel/pcre/package.mk
  2513. +++ b/packages/devel/pcre/package.mk
  2514. @@ -8,7 +8,7 @@ PKG_SHA256="2cd04b7c887808be030254e8d77de11d3fe9d4505c39d4b15d2664ffe8bf9301"
  2515. PKG_LICENSE="OSS"
  2516. PKG_SITE="http://www.pcre.org/"
  2517. PKG_URL="https://ftp.pcre.org/pub/pcre/$PKG_NAME-$PKG_VERSION.tar.bz2"
  2518. -PKG_DEPENDS_HOST=""
  2519. +PKG_DEPENDS_HOST="gcc:host"
  2520. PKG_DEPENDS_TARGET="toolchain"
  2521. PKG_LONGDESC="A set of functions that implement regular expression pattern matching."
  2522. PKG_TOOLCHAIN="configure"
  2523. diff --git a/packages/lang/gcc/package.mk b/packages/lang/gcc/package.mk
  2524. index f899aeb..a7d1d87 100644
  2525. --- a/packages/lang/gcc/package.mk
  2526. +++ b/packages/lang/gcc/package.mk
  2527. @@ -11,6 +11,7 @@ PKG_URL="http://ftpmirror.gnu.org/gcc/$PKG_NAME-$PKG_VERSION/$PKG_NAME-$PKG_VERS
  2528. PKG_DEPENDS_BOOTSTRAP="ccache:host autoconf:host binutils:host gmp:host mpfr:host mpc:host"
  2529. PKG_DEPENDS_TARGET="gcc:host"
  2530. PKG_DEPENDS_HOST="ccache:host autoconf:host binutils:host gmp:host mpfr:host mpc:host glibc"
  2531. +PKG_DEPENDS_INIT="toolchain"
  2532. PKG_LONGDESC="This package contains the GNU Compiler Collection."
  2533.  
  2534. GCC_COMMON_CONFIGURE_OPTS="--target=$TARGET_NAME \
  2535. diff --git a/packages/linux/package.mk b/packages/linux/package.mk
  2536. index 6daa186..45e82d2 100644
  2537. --- a/packages/linux/package.mk
  2538. +++ b/packages/linux/package.mk
  2539. @@ -5,7 +5,7 @@
  2540. PKG_NAME="linux"
  2541. PKG_LICENSE="GPL"
  2542. PKG_SITE="http://www.kernel.org"
  2543. -PKG_DEPENDS_HOST="ccache:host"
  2544. +PKG_DEPENDS_HOST="ccache:host openssl:host"
  2545. PKG_DEPENDS_TARGET="toolchain cpio:host kmod:host xz:host wireless-regdb keyutils $KERNEL_EXTRA_DEPENDS_TARGET"
  2546. PKG_DEPENDS_INIT="toolchain"
  2547. PKG_NEED_UNPACK="$LINUX_DEPENDS"
  2548. diff --git a/packages/mediacenter/JsonSchemaBuilder/package.mk b/packages/mediacenter/JsonSchemaBuilder/package.mk
  2549. index b62b79a..91fefc9 100644
  2550. --- a/packages/mediacenter/JsonSchemaBuilder/package.mk
  2551. +++ b/packages/mediacenter/JsonSchemaBuilder/package.mk
  2552. @@ -6,6 +6,7 @@ PKG_NAME="JsonSchemaBuilder"
  2553. PKG_VERSION="0"
  2554. PKG_LICENSE="GPL"
  2555. PKG_SITE="http://www.kodi.tv"
  2556. +PKG_DEPENDS_HOST="toolchain"
  2557. PKG_DEPENDS_UNPACK="kodi"
  2558. PKG_NEED_UNPACK="$(get_pkg_directory $MEDIACENTER)"
  2559. PKG_LONGDESC="kodi-platform:"
  2560. diff --git a/packages/print/freetype/package.mk b/packages/print/freetype/package.mk
  2561. index 4188f2c..23759c3 100644
  2562. --- a/packages/print/freetype/package.mk
  2563. +++ b/packages/print/freetype/package.mk
  2564. @@ -8,6 +8,7 @@ PKG_SHA256="e20a6e1400798fd5e3d831dd821b61c35b1f9a6465d6b18a53a9df4cf441acf0"
  2565. PKG_LICENSE="GPL"
  2566. PKG_SITE="http://www.freetype.org"
  2567. PKG_URL="http://download.savannah.gnu.org/releases/freetype/$PKG_NAME-$PKG_VERSION.tar.bz2"
  2568. +PKG_DEPENDS_HOST="gcc:host"
  2569. PKG_DEPENDS_TARGET="toolchain zlib libpng"
  2570. PKG_LONGDESC="The FreeType engine is a free and portable TrueType font rendering engine."
  2571. PKG_TOOLCHAIN="configure"
  2572. diff --git a/packages/security/nspr/package.mk b/packages/security/nspr/package.mk
  2573. index fd63908..58f4f22 100644
  2574. --- a/packages/security/nspr/package.mk
  2575. +++ b/packages/security/nspr/package.mk
  2576. @@ -7,7 +7,7 @@ PKG_VERSION="4.19"
  2577. PKG_LICENSE="Mozilla Public License"
  2578. PKG_SITE="http://www.linuxfromscratch.org/blfs/view/svn/general/nspr.html"
  2579. PKG_DEPENDS_HOST="ccache:host"
  2580. -PKG_DEPENDS_TARGET="toolchain nss:host"
  2581. +PKG_DEPENDS_TARGET="toolchain nss:host nspr:host"
  2582. PKG_DEPENDS_UNPACK="nss"
  2583. PKG_LONGDESC="Netscape Portable Runtime (NSPR) provides a platform-neutral API for system level and libc like functions"
  2584. PKG_TOOLCHAIN="configure"
  2585. diff --git a/packages/sysutils/busybox/package.mk b/packages/sysutils/busybox/package.mk
  2586. index 4aa977c..dd1fba0 100644
  2587. --- a/packages/sysutils/busybox/package.mk
  2588. +++ b/packages/sysutils/busybox/package.mk
  2589. @@ -8,7 +8,7 @@ PKG_SHA256="97648636e579462296478e0218e65e4bc1e9cd69089a3b1aeb810bff7621efb7"
  2590. PKG_LICENSE="GPL"
  2591. PKG_SITE="http://www.busybox.net"
  2592. PKG_URL="http://busybox.net/downloads/$PKG_NAME-$PKG_VERSION.tar.bz2"
  2593. -PKG_DEPENDS_HOST=""
  2594. +PKG_DEPENDS_HOST="gcc:host"
  2595. PKG_DEPENDS_TARGET="toolchain busybox:host hdparm dosfstools e2fsprogs zip unzip usbutils parted procps-ng gptfdisk libtirpc"
  2596. PKG_DEPENDS_INIT="toolchain libtirpc"
  2597. PKG_LONGDESC="BusyBox combines tiny versions of many common UNIX utilities into a single small executable."
  2598. diff --git a/packages/sysutils/dosfstools/package.mk b/packages/sysutils/dosfstools/package.mk
  2599. index 6f8c72b..65bc096 100644
  2600. --- a/packages/sysutils/dosfstools/package.mk
  2601. +++ b/packages/sysutils/dosfstools/package.mk
  2602. @@ -1,5 +1,6 @@
  2603. # SPDX-License-Identifier: GPL-2.0-or-later
  2604. # Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv)
  2605. +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
  2606.  
  2607. PKG_NAME="dosfstools"
  2608. PKG_VERSION="3.0.28"
  2609. @@ -7,6 +8,7 @@ PKG_SHA256="ee95913044ecf2719b63ea11212917649709a6e53209a72d622135aaa8517ee2"
  2610. PKG_LICENSE="GPLv3"
  2611. PKG_SITE="https://github.com/dosfstools/dosfstools"
  2612. PKG_URL="https://github.com/dosfstools/dosfstools/releases/download/v$PKG_VERSION/$PKG_NAME-$PKG_VERSION.tar.xz"
  2613. +PKG_DEPENDS_HOST="gcc:host"
  2614. PKG_DEPENDS_TARGET="toolchain"
  2615. PKG_DEPENDS_INIT="toolchain dosfstools"
  2616. PKG_LONGDESC="dosfstools contains utilities for making and checking MS-DOS FAT filesystems."
  2617. diff --git a/packages/sysutils/e2fsprogs/package.mk b/packages/sysutils/e2fsprogs/package.mk
  2618. index 65ba2b8..410ada8 100644
  2619. --- a/packages/sysutils/e2fsprogs/package.mk
  2620. +++ b/packages/sysutils/e2fsprogs/package.mk
  2621. @@ -8,6 +8,7 @@ PKG_SHA256="926f8e8de1ffba55d791f21b71334e8a32b5227257ad370f2bf7e4396629e97f"
  2622. PKG_LICENSE="GPL"
  2623. PKG_SITE="http://e2fsprogs.sourceforge.net/"
  2624. PKG_URL="https://www.kernel.org/pub/linux/kernel/people/tytso/$PKG_NAME/v$PKG_VERSION/$PKG_NAME-$PKG_VERSION.tar.xz"
  2625. +PKG_DEPENDS_HOST="gcc:host"
  2626. PKG_DEPENDS_TARGET="toolchain"
  2627. PKG_DEPENDS_INIT="toolchain"
  2628. PKG_LONGDESC="The filesystem utilities for the EXT2 filesystem, including e2fsck, mke2fs, dumpe2fs, fsck, and others."
  2629. diff --git a/packages/sysutils/gptfdisk/package.mk b/packages/sysutils/gptfdisk/package.mk
  2630. index 2668ea6..5e59cb0 100644
  2631. --- a/packages/sysutils/gptfdisk/package.mk
  2632. +++ b/packages/sysutils/gptfdisk/package.mk
  2633. @@ -7,7 +7,7 @@ PKG_SHA256="b663391a6876f19a3cd901d862423a16e2b5ceaa2f4a3b9bb681e64b9c7ba78d"
  2634. PKG_LICENSE="GPL"
  2635. PKG_SITE="http://www.rodsbooks.com/gdisk/"
  2636. PKG_URL="https://downloads.sourceforge.net/project/$PKG_NAME/$PKG_NAME/$PKG_VERSION/$PKG_NAME-$PKG_VERSION.tar.gz"
  2637. -PKG_DEPENDS_TARGET="toolchain popt"
  2638. +PKG_DEPENDS_TARGET="toolchain popt crossguid"
  2639. PKG_LONGDESC="GPT text-mode partitioning tools"
  2640.  
  2641. make_target() {
  2642. diff --git a/packages/sysutils/util-linux/package.mk b/packages/sysutils/util-linux/package.mk
  2643. index 07e07e8..27a18b8 100644
  2644. --- a/packages/sysutils/util-linux/package.mk
  2645. +++ b/packages/sysutils/util-linux/package.mk
  2646. @@ -7,7 +7,7 @@ PKG_VERSION="2.32.1"
  2647. PKG_SHA256="86e6707a379c7ff5489c218cfaf1e3464b0b95acf7817db0bc5f179e356a67b2"
  2648. PKG_LICENSE="GPL"
  2649. PKG_URL="http://www.kernel.org/pub/linux/utils/util-linux/v${PKG_VERSION%.*}/$PKG_NAME-$PKG_VERSION.tar.xz"
  2650. -PKG_DEPENDS_HOST=""
  2651. +PKG_DEPENDS_HOST="gcc:host pkg-config:host"
  2652. PKG_DEPENDS_TARGET="toolchain"
  2653. PKG_DEPENDS_INIT="toolchain"
  2654. PKG_LONGDESC="A large variety of low-level system utilities that are necessary for a Linux system to function."
  2655. diff --git a/packages/sysutils/v4l-utils/package.mk b/packages/sysutils/v4l-utils/package.mk
  2656. index 6e37014..84495df 100644
  2657. --- a/packages/sysutils/v4l-utils/package.mk
  2658. +++ b/packages/sysutils/v4l-utils/package.mk
  2659. @@ -10,7 +10,7 @@ PKG_SHA256="e6b962c4b1253cf852c31da13fd6b5bb7cbe5aa9e182881aec55123bae680692"
  2660. PKG_LICENSE="GPL"
  2661. PKG_SITE="http://linuxtv.org/"
  2662. PKG_URL="http://linuxtv.org/downloads/v4l-utils/$PKG_NAME-$PKG_VERSION.tar.bz2"
  2663. -PKG_DEPENDS_TARGET="toolchain"
  2664. +PKG_DEPENDS_TARGET="toolchain alsa-lib systemd"
  2665. PKG_LONGDESC="Linux V4L2 and DVB API utilities and v4l libraries (libv4l)."
  2666.  
  2667. PKG_CONFIGURE_OPTS_TARGET="--without-jpeg \
  2668. diff --git a/packages/tools/aml-dtbtools/package.mk b/packages/tools/aml-dtbtools/package.mk
  2669. index 8e21b9b..93a0d28 100644
  2670. --- a/packages/tools/aml-dtbtools/package.mk
  2671. +++ b/packages/tools/aml-dtbtools/package.mk
  2672. @@ -7,6 +7,7 @@ PKG_SHA256="8bcaa83fcc9e85c9c04930e7411447d96a97da0809c5ecd9af91c8b554133c41"
  2673. PKG_LICENSE="free"
  2674. PKG_SITE="https://github.com/Wilhansen/aml-dtbtools"
  2675. PKG_URL="https://github.com/Wilhansen/aml-dtbtools/archive/${PKG_VERSION}.tar.gz"
  2676. +PKG_DEPENDS_HOST="gcc:host"
  2677. PKG_LONGDESC="AML DTB Tools"
  2678.  
  2679. PKG_MAKE_OPTS_HOST="dtbTool"
  2680. diff --git a/packages/tools/dtc/package.mk b/packages/tools/dtc/package.mk
  2681. index e943d3e..4fe132c 100644
  2682. --- a/packages/tools/dtc/package.mk
  2683. +++ b/packages/tools/dtc/package.mk
  2684. @@ -8,7 +8,7 @@ PKG_LICENSE="GPL"
  2685. PKG_SITE="https://git.kernel.org/pub/scm/utils/dtc/dtc.git/"
  2686. PKG_URL="https://git.kernel.org/pub/scm/utils/dtc/dtc.git/snapshot/$PKG_VERSION.tar.gz"
  2687. PKG_DEPENDS_HOST="Python2:host swig:host"
  2688. -PKG_DEPENDS_TARGET="toolchain"
  2689. +PKG_DEPENDS_TARGET="toolchain dtc:host"
  2690. PKG_LONGDESC="The Device Tree Compiler"
  2691.  
  2692. PKG_MAKE_OPTS_HOST="dtc libfdt"
  2693. diff --git a/packages/tools/mkbootimg/package.mk b/packages/tools/mkbootimg/package.mk
  2694. index 0b9d83a..adc1d3a 100644
  2695. --- a/packages/tools/mkbootimg/package.mk
  2696. +++ b/packages/tools/mkbootimg/package.mk
  2697. @@ -1,5 +1,6 @@
  2698. # SPDX-License-Identifier: GPL-2.0-or-later
  2699. # Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv)
  2700. +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
  2701.  
  2702. PKG_NAME="mkbootimg"
  2703. PKG_VERSION="6668fc2"
  2704. @@ -7,7 +8,7 @@ PKG_SHA256="d84870e055414d638a3e7eb4b7a3ebf415899841218f24cb3647d06ecf6ddb17"
  2705. PKG_LICENSE="GPL"
  2706. PKG_SITE="https://android.googlesource.com/platform/system/core/+/master/mkbootimg/"
  2707. PKG_URL="https://github.com/codesnake/mkbootimg/archive/$PKG_VERSION.tar.gz"
  2708. -PKG_DEPENDS_HOST=""
  2709. +PKG_DEPENDS_HOST="gcc:host"
  2710. PKG_LONGDESC="mkbootimg: Creates kernel boot images for Android"
  2711.  
  2712. makeinstall_host() {
  2713. diff --git a/packages/tools/mtools/package.mk b/packages/tools/mtools/package.mk
  2714. index 099488f..e0dd42e 100644
  2715. --- a/packages/tools/mtools/package.mk
  2716. +++ b/packages/tools/mtools/package.mk
  2717. @@ -1,5 +1,6 @@
  2718. # SPDX-License-Identifier: GPL-2.0-or-later
  2719. # Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv)
  2720. +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
  2721.  
  2722. PKG_NAME="mtools"
  2723. PKG_VERSION="4.0.18"
  2724. @@ -7,6 +8,6 @@ PKG_SHA256="59e9cf80885399c4f229e5d87e49c0c2bfeec044e1386d59fcd0b0aead6b2f85"
  2725. PKG_LICENSE="GPL"
  2726. PKG_SITE="http://www.gnu.org/software/mtools/"
  2727. PKG_URL="http://ftpmirror.gnu.org/$PKG_NAME/$PKG_NAME-$PKG_VERSION.tar.bz2"
  2728. -PKG_DEPENDS_HOST=""
  2729. +PKG_DEPENDS_HOST="gcc:host"
  2730. PKG_LONGDESC="mtools: A collection of utilities to access MS-DOS disks"
  2731. PKG_TOOLCHAIN="autotools"
  2732. diff --git a/packages/x11/lib/pixman/package.mk b/packages/x11/lib/pixman/package.mk
  2733. index 65868f2..631a570 100644
  2734. --- a/packages/x11/lib/pixman/package.mk
  2735. +++ b/packages/x11/lib/pixman/package.mk
  2736. @@ -1,5 +1,6 @@
  2737. # SPDX-License-Identifier: GPL-2.0-or-later
  2738. # Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv)
  2739. +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
  2740.  
  2741. PKG_NAME="pixman"
  2742. PKG_VERSION="0.34.0"
  2743. @@ -7,6 +8,7 @@ PKG_SHA256="39ba3438f3d17c464b0cb8be006dacbca0ab5aee97ebde69fec7ecdbf85794a0"
  2744. PKG_LICENSE="OSS"
  2745. PKG_SITE="http://www.x.org/"
  2746. PKG_URL="http://xorg.freedesktop.org/archive/individual/lib/$PKG_NAME-$PKG_VERSION.tar.bz2"
  2747. +PKG_DEPENDS_HOST="gcc:host"
  2748. PKG_DEPENDS_TARGET="toolchain util-macros"
  2749. PKG_LONGDESC="Pixman is a generic library for manipulating pixel regions, contains low-level pixel manipulation routines."
  2750.  
  2751. diff --git a/projects/Amlogic/packages/autoscript-amlogic/package.mk b/projects/Amlogic/packages/autoscript-amlogic/package.mk
  2752. index b35cfac..ce08e3f 100644
  2753. --- a/projects/Amlogic/packages/autoscript-amlogic/package.mk
  2754. +++ b/projects/Amlogic/packages/autoscript-amlogic/package.mk
  2755. @@ -4,7 +4,7 @@
  2756. PKG_NAME="autoscript-amlogic"
  2757. PKG_VERSION=""
  2758. PKG_LICENSE="GPL"
  2759. -PKG_DEPENDS_TARGET="toolchain"
  2760. +PKG_DEPENDS_TARGET="toolchain u-boot-tools-aml:host"
  2761. PKG_LONGDESC="Autoscript package for Amlogic devices"
  2762. PKG_TOOLCHAIN="manual"
  2763.  
  2764. --
  2765. 2.14.1
  2766.  
  2767.  
  2768. From 33b3c0da664194d5546c59722b905ae21d7aaddf Mon Sep 17 00:00:00 2001
  2769. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  2770. Date: Sun, 6 Jan 2019 10:22:10 +0000
  2771. Subject: [PATCH 15/28] packages: add missing xorg dependencies
  2772.  
  2773. ---
  2774. packages/x11/app/xkbcomp/package.mk | 3 ++-
  2775. packages/x11/driver/xf86-input-evdev/package.mk | 2 +-
  2776. packages/x11/driver/xf86-input-synaptics/package.mk | 2 +-
  2777. packages/x11/lib/libXi/package.mk | 2 +-
  2778. packages/x11/lib/libxshmfence/package.mk | 2 +-
  2779. 5 files changed, 6 insertions(+), 5 deletions(-)
  2780.  
  2781. diff --git a/packages/x11/app/xkbcomp/package.mk b/packages/x11/app/xkbcomp/package.mk
  2782. index fdee2ed..cefb1e3 100644
  2783. --- a/packages/x11/app/xkbcomp/package.mk
  2784. +++ b/packages/x11/app/xkbcomp/package.mk
  2785. @@ -1,5 +1,6 @@
  2786. # SPDX-License-Identifier: GPL-2.0-or-later
  2787. # Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv)
  2788. +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
  2789.  
  2790. PKG_NAME="xkbcomp"
  2791. PKG_VERSION="1.4.1"
  2792. @@ -7,7 +8,7 @@ PKG_SHA256="748dc4cf58ac95684106bd9cf163ac6ab7de9a236faec02a6f4d4006d63a5736"
  2793. PKG_LICENSE="OSS"
  2794. PKG_SITE="http://www.X.org"
  2795. PKG_URL="http://xorg.freedesktop.org/archive/individual/app/$PKG_NAME-$PKG_VERSION.tar.bz2"
  2796. -PKG_DEPENDS_TARGET="toolchain util-macros libX11"
  2797. +PKG_DEPENDS_TARGET="toolchain util-macros libX11 libxkbfile"
  2798. PKG_LONGDESC="The xkbcomp keymap compiler converts a description of an XKB keymap into one of several output formats."
  2799.  
  2800. PKG_CONFIGURE_OPTS_TARGET="--with-xkb-config-root=$XORG_PATH_XKB"
  2801. diff --git a/packages/x11/driver/xf86-input-evdev/package.mk b/packages/x11/driver/xf86-input-evdev/package.mk
  2802. index e83dd81..c015cfc 100644
  2803. --- a/packages/x11/driver/xf86-input-evdev/package.mk
  2804. +++ b/packages/x11/driver/xf86-input-evdev/package.mk
  2805. @@ -8,7 +8,7 @@ PKG_SHA256="9edaa6205baf6d2922cc4db3d8e54a7e7773b5f733b0ae90f6be7725f983b70d"
  2806. PKG_LICENSE="OSS"
  2807. PKG_SITE="http://www.X.org"
  2808. PKG_URL="http://xorg.freedesktop.org/archive/individual/driver/$PKG_NAME-$PKG_VERSION.tar.bz2"
  2809. -PKG_DEPENDS_TARGET="toolchain util-macros libevdev mtdev systemd"
  2810. +PKG_DEPENDS_TARGET="toolchain xorg-server util-macros libevdev mtdev systemd"
  2811. PKG_LONGDESC="Evdev is an Xorg input driver for Linux's generic event devices."
  2812. PKG_TOOLCHAIN="autotools"
  2813.  
  2814. diff --git a/packages/x11/driver/xf86-input-synaptics/package.mk b/packages/x11/driver/xf86-input-synaptics/package.mk
  2815. index abbdf17..450fbf7 100644
  2816. --- a/packages/x11/driver/xf86-input-synaptics/package.mk
  2817. +++ b/packages/x11/driver/xf86-input-synaptics/package.mk
  2818. @@ -7,7 +7,7 @@ PKG_SHA256="afba3289d7a40217a19d90db98ce181772f9ca6d77e1898727b0afcf02073b5a"
  2819. PKG_LICENSE="GPL"
  2820. PKG_SITE="http://lists.freedesktop.org/mailman/listinfo/xorg"
  2821. PKG_URL="http://xorg.freedesktop.org/archive/individual/driver/$PKG_NAME-$PKG_VERSION.tar.bz2"
  2822. -PKG_DEPENDS_TARGET="toolchain libXi"
  2823. +PKG_DEPENDS_TARGET="toolchain xorg-server libXi libXext"
  2824. PKG_LONGDESC="Synaptics touchpad driver for X.Org."
  2825. PKG_TOOLCHAIN="autotools"
  2826.  
  2827. diff --git a/packages/x11/lib/libXi/package.mk b/packages/x11/lib/libXi/package.mk
  2828. index 8f50cc5..ac1707c 100644
  2829. --- a/packages/x11/lib/libXi/package.mk
  2830. +++ b/packages/x11/lib/libXi/package.mk
  2831. @@ -8,7 +8,7 @@ PKG_SHA256="c2e6b8ff84f9448386c1b5510a5cf5a16d788f76db018194dacdc200180faf45"
  2832. PKG_LICENSE="OSS"
  2833. PKG_SITE="http://www.x.org/"
  2834. PKG_URL="http://xorg.freedesktop.org/archive/individual/lib/$PKG_NAME-$PKG_VERSION.tar.bz2"
  2835. -PKG_DEPENDS_TARGET="toolchain util-macros libX11 libXfixes"
  2836. +PKG_DEPENDS_TARGET="toolchain util-macros libX11 libXfixes libXext"
  2837. PKG_LONGDESC="LibXi provides an X Window System client interface to the XINPUT extension to the X protocol."
  2838. PKG_BUILD_FLAGS="+pic"
  2839.  
  2840. diff --git a/packages/x11/lib/libxshmfence/package.mk b/packages/x11/lib/libxshmfence/package.mk
  2841. index daa5868..63d48f6 100644
  2842. --- a/packages/x11/lib/libxshmfence/package.mk
  2843. +++ b/packages/x11/lib/libxshmfence/package.mk
  2844. @@ -8,7 +8,7 @@ PKG_SHA256="b884300d26a14961a076fbebc762a39831cb75f92bed5ccf9836345b459220c7"
  2845. PKG_LICENSE="OSS"
  2846. PKG_SITE="http://www.X.org"
  2847. PKG_URL="http://xorg.freedesktop.org/archive/individual/lib/$PKG_NAME-$PKG_VERSION.tar.bz2"
  2848. -PKG_DEPENDS_TARGET="toolchain util-macros"
  2849. +PKG_DEPENDS_TARGET="toolchain util-macros xorgproto"
  2850. PKG_LONGDESC="libxshmfence is the Shared memory 'SyncFence' synchronization primitive."
  2851. PKG_TOOLCHAIN="autotools"
  2852. PKG_BUILD_FLAGS="+pic"
  2853. --
  2854. 2.14.1
  2855.  
  2856.  
  2857. From 9fe12b69663f9b09af58d58b23c8b5502e963afa Mon Sep 17 00:00:00 2001
  2858. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  2859. Date: Sat, 12 Jan 2019 14:12:26 +0000
  2860. Subject: [PATCH 16/28] packages: more missing dependencies
  2861.  
  2862. ---
  2863. packages/databases/sqlite/package.mk | 2 +-
  2864. packages/devel/bison/package.mk | 3 ++-
  2865. packages/devel/flex/package.mk | 2 +-
  2866. packages/devel/gmp/package.mk | 4 +++-
  2867. packages/lang/Python2/package.mk | 2 +-
  2868. 5 files changed, 8 insertions(+), 5 deletions(-)
  2869.  
  2870. diff --git a/packages/databases/sqlite/package.mk b/packages/databases/sqlite/package.mk
  2871. index 8a793e8..9bda7be 100644
  2872. --- a/packages/databases/sqlite/package.mk
  2873. +++ b/packages/databases/sqlite/package.mk
  2874. @@ -9,7 +9,7 @@ PKG_LICENSE="PublicDomain"
  2875. PKG_SITE="https://www.sqlite.org/"
  2876. PKG_URL="https://www.sqlite.org/2018/$PKG_NAME-$PKG_VERSION.tar.gz"
  2877. PKG_DEPENDS_HOST="gcc:host"
  2878. -PKG_DEPENDS_TARGET="toolchain"
  2879. +PKG_DEPENDS_TARGET="toolchain ncurses"
  2880. PKG_LONGDESC="An Embeddable SQL Database Engine."
  2881. # libsqlite3.a(sqlite3.o): requires dynamic R_X86_64_PC32 reloc against 'sqlite3_stricmp' which may overflow at runtime
  2882. PKG_BUILD_FLAGS="+pic +pic:host -parallel"
  2883. diff --git a/packages/devel/bison/package.mk b/packages/devel/bison/package.mk
  2884. index 5c15fbc..886e922 100644
  2885. --- a/packages/devel/bison/package.mk
  2886. +++ b/packages/devel/bison/package.mk
  2887. @@ -1,5 +1,6 @@
  2888. # SPDX-License-Identifier: GPL-2.0-or-later
  2889. # Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv)
  2890. +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
  2891.  
  2892. PKG_NAME="bison"
  2893. PKG_VERSION="3.0.5"
  2894. @@ -7,7 +8,7 @@ PKG_SHA256="075cef2e814642e30e10e8155e93022e4a91ca38a65aa1d5467d4e969f97f338"
  2895. PKG_LICENSE="GPL"
  2896. PKG_SITE="http://www.gnu.org/software/bison/"
  2897. PKG_URL="http://ftpmirror.gnu.org/bison/$PKG_NAME-$PKG_VERSION.tar.xz"
  2898. -PKG_DEPENDS_HOST="ccache:host"
  2899. +PKG_DEPENDS_HOST="ccache:host m4:host"
  2900. PKG_LONGDESC="A general-purpose parser generator."
  2901.  
  2902. PKG_CONFIGURE_OPTS_HOST="--disable-rpath --with-gnu-ld"
  2903. diff --git a/packages/devel/flex/package.mk b/packages/devel/flex/package.mk
  2904. index 37e2324..dc68458 100644
  2905. --- a/packages/devel/flex/package.mk
  2906. +++ b/packages/devel/flex/package.mk
  2907. @@ -7,7 +7,7 @@ PKG_SHA256="add2b55f3bc38cb512b48fad7d72f43b11ef244487ff25fc00aabec1e32b617f"
  2908. PKG_LICENSE="GPL"
  2909. PKG_SITE="http://flex.sourceforge.net/"
  2910. PKG_URL="$SOURCEFORGE_SRC/flex/$PKG_NAME-$PKG_VERSION.tar.bz2"
  2911. -PKG_DEPENDS_HOST="ccache:host"
  2912. +PKG_DEPENDS_HOST="ccache:host m4:host"
  2913. PKG_DEPENDS_TARGET="toolchain"
  2914. PKG_LONGDESC="A tool for generating programs that perform pattern-matching on text."
  2915. PKG_TOOLCHAIN="autotools"
  2916. diff --git a/packages/devel/gmp/package.mk b/packages/devel/gmp/package.mk
  2917. index fddce60..53eef6c 100644
  2918. --- a/packages/devel/gmp/package.mk
  2919. +++ b/packages/devel/gmp/package.mk
  2920. @@ -1,5 +1,6 @@
  2921. # SPDX-License-Identifier: GPL-2.0-or-later
  2922. # Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv)
  2923. +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
  2924.  
  2925. PKG_NAME="gmp"
  2926. PKG_VERSION="6.1.2"
  2927. @@ -7,7 +8,8 @@ PKG_SHA256="87b565e89a9a684fe4ebeeddb8399dce2599f9c9049854ca8c0dfbdea0e21912"
  2928. PKG_LICENSE="LGPLv3+"
  2929. PKG_SITE="http://gmplib.org/"
  2930. PKG_URL="https://gmplib.org/download/gmp/$PKG_NAME-$PKG_VERSION.tar.xz"
  2931. -PKG_DEPENDS_HOST="ccache:host"
  2932. +PKG_DEPENDS_HOST="ccache:host m4:host"
  2933. +PKG_DEPENDS_TARGET="toolchain"
  2934. PKG_LONGDESC="A library for arbitrary precision arithmetic, operating on signed integers, rational numbers, and floating point numbers."
  2935. PKG_BUILD_FLAGS="+pic:host"
  2936.  
  2937. diff --git a/packages/lang/Python2/package.mk b/packages/lang/Python2/package.mk
  2938. index a5e17da..edfe51e 100644
  2939. --- a/packages/lang/Python2/package.mk
  2940. +++ b/packages/lang/Python2/package.mk
  2941. @@ -10,7 +10,7 @@ PKG_LICENSE="OSS"
  2942. PKG_SITE="http://www.python.org/"
  2943. PKG_URL="http://www.python.org/ftp/python/$PKG_VERSION/${PKG_NAME::-1}-$PKG_VERSION.tar.xz"
  2944. PKG_DEPENDS_HOST="zlib:host bzip2:host sqlite:host"
  2945. -PKG_DEPENDS_TARGET="toolchain sqlite expat zlib bzip2 openssl libffi Python2:host"
  2946. +PKG_DEPENDS_TARGET="toolchain sqlite expat zlib bzip2 openssl libffi Python2:host ncurses readline"
  2947. PKG_LONGDESC="Python2 is an interpreted object-oriented programming language."
  2948.  
  2949. PKG_TOOLCHAIN="autotools"
  2950. --
  2951. 2.14.1
  2952.  
  2953.  
  2954. From 33b8cdbefff0ff1ad0f0d4c9a0b03e6a103a6e9b Mon Sep 17 00:00:00 2001
  2955. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  2956. Date: Sat, 12 Jan 2019 01:25:27 +0000
  2957. Subject: [PATCH 17/28] packages: add thread safety workaround
  2958.  
  2959. Avoids trashing $TOOLCHAIN/lib/python2.7/site-packages/easy-install.pth
  2960. when installing Python host packages (distutilscross:host, setuptools:host,
  2961. MarkupSafe:host etc.).
  2962. ---
  2963. packages/python/devel/Mako/package.mk | 2 +-
  2964. packages/python/devel/MarkupSafe/package.mk | 2 +-
  2965. packages/python/devel/distutilscross/package.mk | 3 ++-
  2966. packages/python/devel/meson/package.mk | 2 +-
  2967. packages/python/devel/pathlib/package.mk | 2 +-
  2968. packages/python/devel/setuptools/package.mk | 4 ++--
  2969. packages/tools/dtc/package.mk | 2 +-
  2970. 7 files changed, 9 insertions(+), 8 deletions(-)
  2971.  
  2972. diff --git a/packages/python/devel/Mako/package.mk b/packages/python/devel/Mako/package.mk
  2973. index 45007cf..41217f6 100644
  2974. --- a/packages/python/devel/Mako/package.mk
  2975. +++ b/packages/python/devel/Mako/package.mk
  2976. @@ -13,5 +13,5 @@ PKG_LONGDESC="Mako is a super-fast templating language that borrows the best ide
  2977. PKG_TOOLCHAIN="manual"
  2978.  
  2979. makeinstall_host() {
  2980. - python3 setup.py install --prefix=$TOOLCHAIN
  2981. + exec_thread_safe python3 setup.py install --prefix=$TOOLCHAIN
  2982. }
  2983. diff --git a/packages/python/devel/MarkupSafe/package.mk b/packages/python/devel/MarkupSafe/package.mk
  2984. index 3780381..20c090e 100644
  2985. --- a/packages/python/devel/MarkupSafe/package.mk
  2986. +++ b/packages/python/devel/MarkupSafe/package.mk
  2987. @@ -13,5 +13,5 @@ PKG_LONGDESC="MarkupSafe implements a XML/HTML/XHTML Markup safe string for Pyth
  2988. PKG_TOOLCHAIN="manual"
  2989.  
  2990. makeinstall_host() {
  2991. - python3 setup.py install --prefix=$TOOLCHAIN
  2992. + exec_thread_safe python3 setup.py install --prefix=$TOOLCHAIN
  2993. }
  2994. diff --git a/packages/python/devel/distutilscross/package.mk b/packages/python/devel/distutilscross/package.mk
  2995. index 367e35a..4c767be 100644
  2996. --- a/packages/python/devel/distutilscross/package.mk
  2997. +++ b/packages/python/devel/distutilscross/package.mk
  2998. @@ -1,5 +1,6 @@
  2999. # SPDX-License-Identifier: GPL-2.0-or-later
  3000. # Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv)
  3001. +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
  3002.  
  3003. PKG_NAME="distutilscross"
  3004. PKG_VERSION="0.1"
  3005. @@ -12,5 +13,5 @@ PKG_LONGDESC="distutilscross enhances distutils to support Cross Compile of Pyth
  3006. PKG_TOOLCHAIN="manual"
  3007.  
  3008. makeinstall_host() {
  3009. - python setup.py install --prefix=$TOOLCHAIN
  3010. + exec_thread_safe python setup.py install --prefix=$TOOLCHAIN
  3011. }
  3012. diff --git a/packages/python/devel/meson/package.mk b/packages/python/devel/meson/package.mk
  3013. index 0e34988..ff0820d 100644
  3014. --- a/packages/python/devel/meson/package.mk
  3015. +++ b/packages/python/devel/meson/package.mk
  3016. @@ -16,7 +16,7 @@ make_host() {
  3017. }
  3018.  
  3019. makeinstall_host() {
  3020. - python3 setup.py install --prefix=$TOOLCHAIN --skip-build
  3021. + exec_thread_safe python3 setup.py install --prefix=$TOOLCHAIN --skip-build
  3022.  
  3023. # Avoid using full path to python3 that may exceed 128 byte limit.
  3024. # Instead use PATH as we know our toolchain is first.
  3025. diff --git a/packages/python/devel/pathlib/package.mk b/packages/python/devel/pathlib/package.mk
  3026. index 30c9bea..61f8e55 100644
  3027. --- a/packages/python/devel/pathlib/package.mk
  3028. +++ b/packages/python/devel/pathlib/package.mk
  3029. @@ -12,5 +12,5 @@ PKG_LONGDESC="This module offers a set of classes featuring all the common opera
  3030. PKG_TOOLCHAIN="manual"
  3031.  
  3032. makeinstall_host() {
  3033. - python3 setup.py install --prefix=$TOOLCHAIN
  3034. + exec_thread_safe python3 setup.py install --prefix=$TOOLCHAIN
  3035. }
  3036. diff --git a/packages/python/devel/setuptools/package.mk b/packages/python/devel/setuptools/package.mk
  3037. index 8a21964..531e6d7 100644
  3038. --- a/packages/python/devel/setuptools/package.mk
  3039. +++ b/packages/python/devel/setuptools/package.mk
  3040. @@ -18,6 +18,6 @@ make_host() {
  3041. }
  3042.  
  3043. makeinstall_host() {
  3044. - python2 setup.py install --prefix=$TOOLCHAIN
  3045. - python3 setup.py install --prefix=$TOOLCHAIN
  3046. + exec_thread_safe python2 setup.py install --prefix=$TOOLCHAIN
  3047. + exec_thread_safe python3 setup.py install --prefix=$TOOLCHAIN
  3048. }
  3049. diff --git a/packages/tools/dtc/package.mk b/packages/tools/dtc/package.mk
  3050. index 4fe132c..c5a005a 100644
  3051. --- a/packages/tools/dtc/package.mk
  3052. +++ b/packages/tools/dtc/package.mk
  3053. @@ -22,7 +22,7 @@ makeinstall_host() {
  3054.  
  3055. post_makeinstall_host() {
  3056. python ./pylibfdt/setup.py build_ext --inplace
  3057. - python ./pylibfdt/setup.py install --prefix=$TOOLCHAIN
  3058. + exec_thread_safe python ./pylibfdt/setup.py install --prefix=$TOOLCHAIN
  3059.  
  3060. touch $TOOLCHAIN/lib/$PKG_PYTHON_VERSION/site-packages/pylibfdt/__init__.py
  3061. }
  3062. --
  3063. 2.14.1
  3064.  
  3065.  
  3066. From 776fff4ae96dfe7e47fba20cfc57ff51f5edabd6 Mon Sep 17 00:00:00 2001
  3067. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  3068. Date: Sun, 6 Jan 2019 10:48:46 +0000
  3069. Subject: [PATCH 18/28] flex: work around realloc/malloc build failures with
  3070. flex:target
  3071.  
  3072. ---
  3073. packages/devel/flex/package.mk | 4 ++++
  3074. 1 file changed, 4 insertions(+)
  3075.  
  3076. diff --git a/packages/devel/flex/package.mk b/packages/devel/flex/package.mk
  3077. index dc68458..42bdc27 100644
  3078. --- a/packages/devel/flex/package.mk
  3079. +++ b/packages/devel/flex/package.mk
  3080. @@ -1,5 +1,6 @@
  3081. # SPDX-License-Identifier: GPL-2.0-or-later
  3082. # Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv)
  3083. +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
  3084.  
  3085. PKG_NAME="flex"
  3086. PKG_VERSION="2.5.39"
  3087. @@ -14,6 +15,9 @@ PKG_TOOLCHAIN="autotools"
  3088.  
  3089. PKG_CONFIGURE_OPTS_HOST="--enable-static --disable-shared --disable-rpath --with-gnu-ld"
  3090.  
  3091. +PKG_CONFIGURE_OPTS_TARGET="ac_cv_func_realloc_0_nonnull=yes \
  3092. + ac_cv_func_malloc_0_nonnull=yes"
  3093. +
  3094. post_makeinstall_host() {
  3095. cat > $TOOLCHAIN/bin/lex << "EOF"
  3096. #!/bin/sh
  3097. --
  3098. 2.14.1
  3099.  
  3100.  
  3101. From 2f1ea73b04b855d14e3bdb56787621c96ae81f11 Mon Sep 17 00:00:00 2001
  3102. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  3103. Date: Sun, 13 Jan 2019 04:30:32 +0000
  3104. Subject: [PATCH 19/28] libcec: remove useless demo script
  3105.  
  3106. ---
  3107. packages/devel/libcec/package.mk | 3 +++
  3108. 1 file changed, 3 insertions(+)
  3109.  
  3110. diff --git a/packages/devel/libcec/package.mk b/packages/devel/libcec/package.mk
  3111. index ef45e2a..53b143e 100644
  3112. --- a/packages/devel/libcec/package.mk
  3113. +++ b/packages/devel/libcec/package.mk
  3114. @@ -49,6 +49,9 @@ pre_configure_target() {
  3115. }
  3116.  
  3117. post_makeinstall_target() {
  3118. + # Remove the Python3 demo - useless for us
  3119. + rm -f $INSTALL/usr/bin/pyCecClient
  3120. +
  3121. PYTHON_DIR=$INSTALL/usr/lib/$PKG_PYTHON_VERSION
  3122. if [ -d $PYTHON_DIR/dist-packages ]; then
  3123. mv $PYTHON_DIR/dist-packages $PYTHON_DIR/site-packages
  3124. --
  3125. 2.14.1
  3126.  
  3127.  
  3128. From 5c9cabe2ff553ea8e2d10688a0a33c286f594939 Mon Sep 17 00:00:00 2001
  3129. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  3130. Date: Sat, 5 Jan 2019 22:42:12 +0000
  3131. Subject: [PATCH 20/28] initramfs: use ln -sfn when LINK_NAME is a directory
  3132.  
  3133. INSTALL initramfs (target)
  3134. ln: failed to create symbolic link '/home/ubuntu/projects/LibreELEC.tv/build.LibreELEC-RPi2.arm-9.0-devel-mt/initramfs/lib/lib': Permission denied
  3135. ln: failed to create symbolic link '/home/ubuntu/projects/LibreELEC.tv/build.LibreELEC-RPi2.arm-9.0-devel-mt/initramfs/bin/bin': Permission denied
  3136. ln: failed to create symbolic link '/home/ubuntu/projects/LibreELEC.tv/build.LibreELEC-RPi2.arm-9.0-devel-mt/initramfs/sbin/sbin': Permission denied
  3137.  
  3138. If the directory sym link already exists, we try to
  3139. create a directory within the dereferenced sym link. So...
  3140.  
  3141. ln -sf /usr/lib $BUILD/initramfs/lib
  3142.  
  3143. means we attempt to create a sym link within the existing
  3144. $BUILD/initramfs/lib which is derefernced to /usr/lib/lib,
  3145. resulting in "permission denied".
  3146. ---
  3147. packages/virtual/initramfs/package.mk | 10 +++++-----
  3148. 1 file changed, 5 insertions(+), 5 deletions(-)
  3149.  
  3150. diff --git a/packages/virtual/initramfs/package.mk b/packages/virtual/initramfs/package.mk
  3151. index ef17f19..b278804 100644
  3152. --- a/packages/virtual/initramfs/package.mk
  3153. +++ b/packages/virtual/initramfs/package.mk
  3154. @@ -22,14 +22,14 @@ fi
  3155. post_install() {
  3156. ( cd $BUILD/initramfs
  3157. if [ "$TARGET_ARCH" = "x86_64" ]; then
  3158. - ln -sf /usr/lib $BUILD/initramfs/lib64
  3159. + ln -sfn /usr/lib $BUILD/initramfs/lib64
  3160. mkdir -p $BUILD/initramfs/usr
  3161. - ln -sf /usr/lib $BUILD/initramfs/usr/lib64
  3162. + ln -sfn /usr/lib $BUILD/initramfs/usr/lib64
  3163. fi
  3164.  
  3165. - ln -sf /usr/lib $BUILD/initramfs/lib
  3166. - ln -sf /usr/bin $BUILD/initramfs/bin
  3167. - ln -sf /usr/sbin $BUILD/initramfs/sbin
  3168. + ln -sfn /usr/lib $BUILD/initramfs/lib
  3169. + ln -sfn /usr/bin $BUILD/initramfs/bin
  3170. + ln -sfn /usr/sbin $BUILD/initramfs/sbin
  3171.  
  3172. mkdir -p $BUILD/image/
  3173. fakeroot -- sh -c \
  3174. --
  3175. 2.14.1
  3176.  
  3177.  
  3178. From 1c3349763fcba0ea2a0b88a6306d4ded3cd8ed70 Mon Sep 17 00:00:00 2001
  3179. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  3180. Date: Wed, 16 Jan 2019 06:35:00 +0000
  3181. Subject: [PATCH 21/28] alsa-utils: depends on systemd otherwise udev rules
  3182. installed incorrectly
  3183.  
  3184. udev rules will be installed to /lib/udev/rules.d and not /usr/lib/udev/rules.d
  3185. if udev (via systemd) is not already installed.
  3186.  
  3187. if test "${with_udev_rules_dir+set}" = set; then :
  3188. withval=$with_udev_rules_dir; udevrulesdir="$withval"
  3189. else
  3190. udevdir=$($PKG_CONFIG udev --variable=udevdir)
  3191. if test "x$udevdir" = "x"; then
  3192. udevrulesdir="/lib/udev/rules.d"
  3193. else
  3194. udevrulesdir="$udevdir/rules.d"
  3195. fi
  3196. fi
  3197. ---
  3198. packages/audio/alsa-utils/package.mk | 2 +-
  3199. 1 file changed, 1 insertion(+), 1 deletion(-)
  3200.  
  3201. diff --git a/packages/audio/alsa-utils/package.mk b/packages/audio/alsa-utils/package.mk
  3202. index 0416893..c123f21 100644
  3203. --- a/packages/audio/alsa-utils/package.mk
  3204. +++ b/packages/audio/alsa-utils/package.mk
  3205. @@ -8,7 +8,7 @@ PKG_SHA256="fd9bf528922b3829a91913b89a1858c58a0b24271a7b5f529923aa9ea12fa4cf"
  3206. PKG_LICENSE="GPL"
  3207. PKG_SITE="http://www.alsa-project.org/"
  3208. PKG_URL="ftp://ftp.alsa-project.org/pub/utils/alsa-utils-$PKG_VERSION.tar.bz2"
  3209. -PKG_DEPENDS_TARGET="toolchain alsa-lib ncurses"
  3210. +PKG_DEPENDS_TARGET="toolchain alsa-lib ncurses systemd"
  3211. PKG_LONGDESC="This package includes the utilities for ALSA, like alsamixer, aplay, arecord, alsactl, iecset and speaker-test."
  3212.  
  3213. PKG_CONFIGURE_OPTS_TARGET="--disable-alsaconf \
  3214. --
  3215. 2.14.1
  3216.  
  3217.  
  3218. From ee18d28b726d1e6c032dc7cf54f831adb4248a82 Mon Sep 17 00:00:00 2001
  3219. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  3220. Date: Wed, 16 Jan 2019 06:48:17 +0000
  3221. Subject: [PATCH 22/28] lirc: detects alsa automagically - we don't want the
  3222. alsa libs
  3223.  
  3224. When building lirc after alsa-utils, the following unwanted alsa libraries are built by lirc:
  3225.  
  3226. NEW FILE Delta: 10,536 devel-20190115185543-5767941: 10,536 devel-20190115133317-5767941: n/a /usr/lib/lirc/plugins/alsa_usb.so
  3227. NEW FILE Delta: 19,176 devel-20190115185543-5767941: 19,176 devel-20190115133317-5767941: n/a /usr/lib/lirc/plugins/audio_alsa.so
  3228. ---
  3229. packages/sysutils/lirc/package.mk | 5 ++++-
  3230. 1 file changed, 4 insertions(+), 1 deletion(-)
  3231.  
  3232. diff --git a/packages/sysutils/lirc/package.mk b/packages/sysutils/lirc/package.mk
  3233. index 5358c9e..c273a59 100644
  3234. --- a/packages/sysutils/lirc/package.mk
  3235. +++ b/packages/sysutils/lirc/package.mk
  3236. @@ -1,5 +1,6 @@
  3237. # SPDX-License-Identifier: GPL-2.0-or-later
  3238. # Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv)
  3239. +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
  3240.  
  3241. PKG_NAME="lirc"
  3242. PKG_VERSION="0.10.0"
  3243. @@ -13,7 +14,9 @@ PKG_TOOLCHAIN="autotools"
  3244.  
  3245. PKG_PYTHON_WANTED=Python2
  3246.  
  3247. -PKG_CONFIGURE_OPTS_TARGET="--enable-devinput \
  3248. +PKG_CONFIGURE_OPTS_TARGET="ac_cv_header_alsa_asoundlib_h=no \
  3249. + ac_cv_lib_asound_snd_async_del_handler=no \
  3250. + --enable-devinput \
  3251. --with-gnu-ld \
  3252. --without-x \
  3253. --runstatedir=/run"
  3254. --
  3255. 2.14.1
  3256.  
  3257.  
  3258. From 8e591dcf0f028923ddafe91cae2b4924970ac194 Mon Sep 17 00:00:00 2001
  3259. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  3260. Date: Wed, 16 Jan 2019 11:30:13 +0000
  3261. Subject: [PATCH 23/28] libcec: add libX11/libXrandr depends (optional, but
  3262. needed for reproducible build)
  3263.  
  3264. "libX11 and xrandr to read the sink's EDID, used to determine the PC's HDMI physical address"
  3265. ---
  3266. packages/devel/libcec/package.mk | 5 +++++
  3267. 1 file changed, 5 insertions(+)
  3268.  
  3269. diff --git a/packages/devel/libcec/package.mk b/packages/devel/libcec/package.mk
  3270. index 53b143e..b9706ad 100644
  3271. --- a/packages/devel/libcec/package.mk
  3272. +++ b/packages/devel/libcec/package.mk
  3273. @@ -32,6 +32,11 @@ else
  3274. PKG_CMAKE_OPTS_TARGET="$PKG_CMAKE_OPTS_TARGET -DHAVE_AOCEC_API=0 -DHAVE_AMLOGIC_API=0"
  3275. fi
  3276.  
  3277. +# libX11 and xrandr to read the sink's EDID, used to determine the PC's HDMI physical address
  3278. +if [ "$DISPLAYSERVER" = "x11" ]; then
  3279. + PKG_DEPENDS_TARGET="$PKG_DEPENDS_TARGET libX11 libXrandr"
  3280. +fi
  3281. +
  3282. if [ "$CEC_FRAMEWORK_SUPPORT" = "yes" ]; then
  3283. PKG_PATCH_DIRS="cec-framework"
  3284. PKG_CMAKE_OPTS_TARGET="$PKG_CMAKE_OPTS_TARGET -DHAVE_LINUX_API=1"
  3285. --
  3286. 2.14.1
  3287.  
  3288.  
  3289. From eb7750312af842654e46ad8bf9aecffeea001032 Mon Sep 17 00:00:00 2001
  3290. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  3291. Date: Wed, 16 Jan 2019 12:53:44 +0000
  3292. Subject: [PATCH 24/28] flex: host depends on autotools
  3293.  
  3294. ---
  3295. packages/devel/flex/package.mk | 2 +-
  3296. 1 file changed, 1 insertion(+), 1 deletion(-)
  3297.  
  3298. diff --git a/packages/devel/flex/package.mk b/packages/devel/flex/package.mk
  3299. index 42bdc27..2594643 100644
  3300. --- a/packages/devel/flex/package.mk
  3301. +++ b/packages/devel/flex/package.mk
  3302. @@ -8,7 +8,7 @@ PKG_SHA256="add2b55f3bc38cb512b48fad7d72f43b11ef244487ff25fc00aabec1e32b617f"
  3303. PKG_LICENSE="GPL"
  3304. PKG_SITE="http://flex.sourceforge.net/"
  3305. PKG_URL="$SOURCEFORGE_SRC/flex/$PKG_NAME-$PKG_VERSION.tar.bz2"
  3306. -PKG_DEPENDS_HOST="ccache:host m4:host"
  3307. +PKG_DEPENDS_HOST="ccache:host m4:host autotools:host"
  3308. PKG_DEPENDS_TARGET="toolchain"
  3309. PKG_LONGDESC="A tool for generating programs that perform pattern-matching on text."
  3310. PKG_TOOLCHAIN="autotools"
  3311. --
  3312. 2.14.1
  3313.  
  3314.  
  3315. From 157b5f23ae3618941967b6ccf5fa6ff3abecf6f6 Mon Sep 17 00:00:00 2001
  3316. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  3317. Date: Thu, 17 Jan 2019 19:07:28 +0000
  3318. Subject: [PATCH 25/28] font-bitstream-type1: add font-xfree86-type1 dependency
  3319. to avoid install race condition
  3320.  
  3321. Both packages update the same fonts.dir, but font-xfree86-type1 trashes it so build this first.
  3322. ---
  3323. packages/x11/font/font-bitstream-type1/package.mk | 3 ++-
  3324. 1 file changed, 2 insertions(+), 1 deletion(-)
  3325.  
  3326. diff --git a/packages/x11/font/font-bitstream-type1/package.mk b/packages/x11/font/font-bitstream-type1/package.mk
  3327. index 276cd58..a0e4695 100644
  3328. --- a/packages/x11/font/font-bitstream-type1/package.mk
  3329. +++ b/packages/x11/font/font-bitstream-type1/package.mk
  3330. @@ -1,5 +1,6 @@
  3331. # SPDX-License-Identifier: GPL-2.0-or-later
  3332. # Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv)
  3333. +# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
  3334.  
  3335. PKG_NAME="font-bitstream-type1"
  3336. PKG_VERSION="1.0.3"
  3337. @@ -7,7 +8,7 @@ PKG_SHA256="c6ea0569adad2c577f140328dc3302e729cb1b1ea90cd0025caf380625f8a688"
  3338. PKG_LICENSE="OSS"
  3339. PKG_SITE="http://www.X.org"
  3340. PKG_URL="http://xorg.freedesktop.org/archive/individual/font/$PKG_NAME-$PKG_VERSION.tar.bz2"
  3341. -PKG_DEPENDS_TARGET="toolchain util-macros"
  3342. +PKG_DEPENDS_TARGET="toolchain util-macros font-xfree86-type1"
  3343. PKG_LONGDESC="Bitstream font family."
  3344.  
  3345. PKG_CONFIGURE_OPTS_TARGET="--with-fontrootdir=/usr/share/fonts"
  3346. --
  3347. 2.14.1
  3348.  
  3349.  
  3350. From d29f6c2b46028ac9334b74219d7edfbdfa0bbc22 Mon Sep 17 00:00:00 2001
  3351. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  3352. Date: Fri, 18 Jan 2019 23:55:21 +0000
  3353. Subject: [PATCH 26/28] autoconf: add yoctoproject/poky performance patch
  3354.  
  3355. Source: http://git.yoctoproject.org/cgit.cgi/poky/tree/meta/recipes-devtools/autoconf/autoconf
  3356. ---
  3357. .../patches/autoconf-0200-performance.patch | 60 ++++++++++++++++++++++
  3358. 1 file changed, 60 insertions(+)
  3359. create mode 100644 packages/devel/autoconf/patches/autoconf-0200-performance.patch
  3360.  
  3361. diff --git a/packages/devel/autoconf/patches/autoconf-0200-performance.patch b/packages/devel/autoconf/patches/autoconf-0200-performance.patch
  3362. new file mode 100644
  3363. index 0000000..1842fe9
  3364. --- /dev/null
  3365. +++ b/packages/devel/autoconf/patches/autoconf-0200-performance.patch
  3366. @@ -0,0 +1,60 @@
  3367. +The check for solaris 'print' causes significant problems on a linux machine
  3368. +with dash as /bin/sh since it triggers the execution of "print" which on some
  3369. +linux systems is a perl script which is part of mailcap. Worse, this perl
  3370. +script calls "which file" and if successful ignores the path file was found
  3371. +in and just runs "file" without a path. Each exection causes PATH to be searched.
  3372. +
  3373. +Simply assuming the shell's printf function works cuts out all the fork overhead
  3374. +and when parallel tasks are running, this overhead appears to be significant.
  3375. +
  3376. +RP
  3377. +2015/11/28
  3378. +Upstream-Status: Inappropriate
  3379. +
  3380. +Index: autoconf-2.69/lib/m4sugar/m4sh.m4
  3381. +===================================================================
  3382. +--- autoconf-2.69.orig/lib/m4sugar/m4sh.m4
  3383. ++++ autoconf-2.69/lib/m4sugar/m4sh.m4
  3384. +@@ -1045,40 +1045,8 @@ m4_defun([_AS_ECHO_PREPARE],
  3385. + [[as_nl='
  3386. + '
  3387. + export as_nl
  3388. +-# Printing a long string crashes Solaris 7 /usr/bin/printf.
  3389. +-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
  3390. +-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
  3391. +-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
  3392. +-# Prefer a ksh shell builtin over an external printf program on Solaris,
  3393. +-# but without wasting forks for bash or zsh.
  3394. +-if test -z "$BASH_VERSION$ZSH_VERSION" \
  3395. +- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
  3396. +- as_echo='print -r --'
  3397. +- as_echo_n='print -rn --'
  3398. +-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
  3399. +- as_echo='printf %s\n'
  3400. +- as_echo_n='printf %s'
  3401. +-else
  3402. +- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
  3403. +- as_echo_body='eval /usr/ucb/echo -n "$][1$as_nl"'
  3404. +- as_echo_n='/usr/ucb/echo -n'
  3405. +- else
  3406. +- as_echo_body='eval expr "X$][1" : "X\\(.*\\)"'
  3407. +- as_echo_n_body='eval
  3408. +- arg=$][1;
  3409. +- case $arg in @%:@(
  3410. +- *"$as_nl"*)
  3411. +- expr "X$arg" : "X\\(.*\\)$as_nl";
  3412. +- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
  3413. +- esac;
  3414. +- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
  3415. +- '
  3416. +- export as_echo_n_body
  3417. +- as_echo_n='sh -c $as_echo_n_body as_echo'
  3418. +- fi
  3419. +- export as_echo_body
  3420. +- as_echo='sh -c $as_echo_body as_echo'
  3421. +-fi
  3422. ++as_echo='printf %s\n'
  3423. ++as_echo_n='printf %s'
  3424. + ]])# _AS_ECHO_PREPARE
  3425. +
  3426. +
  3427. --
  3428. 2.14.1
  3429.  
  3430.  
  3431. From e859ac6b37f514d1460ea89b2c2d17f07a0deaec Mon Sep 17 00:00:00 2001
  3432. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  3433. Date: Tue, 15 Jan 2019 11:36:33 +0000
  3434. Subject: [PATCH 27/28] scripts/image: enable multithreaded builds when
  3435. THREADCOUNT is defined
  3436.  
  3437. Temporary solution until scripts/image_mt replaces scripts/image.
  3438. ---
  3439. scripts/image | 6 ++++++
  3440. 1 file changed, 6 insertions(+)
  3441.  
  3442. diff --git a/scripts/image b/scripts/image
  3443. index ea126e8..ee727ee 100755
  3444. --- a/scripts/image
  3445. +++ b/scripts/image
  3446. @@ -4,6 +4,12 @@
  3447. # Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv)
  3448. # Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
  3449.  
  3450. +# Temporary hack solution to enable multithreaded building when THREADCOUNT is defined
  3451. +if [ -n "${THREADCOUNT}" ]; then
  3452. + scripts/image_mt $@
  3453. + exit
  3454. +fi
  3455. +
  3456. unset _CACHE_PACKAGE_LOCAL _CACHE_PACKAGE_GLOBAL _DEBUG_DEPENDS_LIST _DEBUG_PACKAGE_LIST
  3457.  
  3458. . config/options ""
  3459. --
  3460. 2.14.1
  3461.  
  3462.  
  3463. From 6e45e741362116b2c42f9994ff4f6b5b4e0ea53f Mon Sep 17 00:00:00 2001
  3464. From: MilhouseVH <milhouseVH.github@nmacleod.com>
  3465. Date: Tue, 22 Jan 2019 11:04:29 +0000
  3466. Subject: [PATCH 28/28] scripts/create_addon: enable multithreaded builds when
  3467. THREADCOUNT is defined
  3468.  
  3469. ---
  3470. scripts/create_addon | 20 +++++++++++++++++---
  3471. 1 file changed, 17 insertions(+), 3 deletions(-)
  3472.  
  3473. diff --git a/scripts/create_addon b/scripts/create_addon
  3474. index 6458869..8245971 100755
  3475. --- a/scripts/create_addon
  3476. +++ b/scripts/create_addon
  3477. @@ -6,6 +6,11 @@
  3478.  
  3479. . config/options ""
  3480.  
  3481. +# Temporary hack solution to enable multithreaded building when THREADCOUNT is defined
  3482. +if [ -n "${THREADCOUNT}" ]; then
  3483. + . config/multithread
  3484. +fi
  3485. +
  3486. # usage
  3487. usage() {
  3488. cat - >&2 <<EOUSAGE
  3489. @@ -202,7 +207,11 @@ build_addon() {
  3490. fi
  3491.  
  3492. # build addon
  3493. - $SCRIPTS/build $1
  3494. + if [ -n "${THREADCOUNT}" ]; then
  3495. + start_multithread_build $1 || die "Parallel build failure - see log for details. Time of failure: $(date)"
  3496. + else
  3497. + $SCRIPTS/build $1
  3498. + fi
  3499.  
  3500. # cleanup old install path
  3501. rm -rf $ADDON_BUILD
  3502. @@ -269,9 +278,14 @@ if [ -n "$log_path" ]; then
  3503. rm -f $summary_file
  3504. fi
  3505.  
  3506. -# check environment and create toolchain
  3507. +# check environment
  3508. $SCRIPTS/checkdeps
  3509. -setup_toolchain target
  3510. +
  3511. +# Setup both toolchain cmake configs to avoid potentially racy behaviour later,
  3512. +# using a fork as we don't want the exports at this stage.
  3513. +for t in host target; do
  3514. + ( setup_toolchain ${t} )
  3515. +done
  3516.  
  3517. # build addons, by calling function build_addon with one addon, after another
  3518. # (do not abort on build failure)
  3519. --
  3520. 2.14.1
Add Comment
Please, Sign In to add comment