Guest User

Untitled

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