Advertisement
Guest User

Untitled

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