install 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. #!/bin/bash
  2. # SPDX-License-Identifier: GPL-2.0-or-later
  3. # Copyright (C) 2010-2011 Roman Weber (roman@openelec.tv)
  4. # Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv)
  5. # Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv)
  6. . config/options "${1}"
  7. if [ -z "${1}" ]; then
  8. die "usage: ${0} package_name [parent_pkg]"
  9. fi
  10. if [ -z "${PKG_NAME}" ]; then
  11. die "$(print_color CLR_ERROR "${1}: no package.mk file found")"
  12. fi
  13. if [ -z "${INSTALL}" ] ; then
  14. die "error: '\${INSTALL}' not set! this script is not intended to be run manually"
  15. fi
  16. if [ -n "${PKG_ARCH}" ]; then
  17. listcontains "${PKG_ARCH}" "!${TARGET_ARCH}" && exit 0
  18. listcontains "${PKG_ARCH}" "${TARGET_ARCH}" || listcontains "${PKG_ARCH}" "any" || exit 0
  19. fi
  20. # set defaults
  21. if [ "${1//:/}" != "${1}" ]; then
  22. TARGET="${1#*:}"
  23. else
  24. TARGET=
  25. fi
  26. [ -z "${TARGET}" ] && TARGET="target"
  27. PARENT_PKG="${2:-${PKG_NAME}:${TARGET}}"
  28. pkg_lock "${PKG_NAME}:${TARGET}" "install" "${PARENT_PKG}"
  29. STAMP=${STAMPS_INSTALL}/${PKG_NAME}/install_${TARGET}
  30. if [ -f ${STAMP} ]; then
  31. pkg_lock_status "UNLOCK" "${PKG_NAME}:${TARGET}" "install" "already installed"
  32. exit 0
  33. fi
  34. mkdir -p ${STAMPS_INSTALL}/${PKG_NAME}
  35. ${SCRIPTS}/build "${1}" "${PARENT_PKG}"
  36. if is_sequential_build || [ "${PARENT_PKG}" = "initramfs:target" ]; then
  37. if [ "${TARGET}" = "target" ] ; then
  38. for p in ${PKG_DEPENDS_TARGET}; do
  39. ${SCRIPTS}/install "${p}" "${PARENT_PKG}"
  40. done
  41. elif [ "${TARGET}" = "init" ] ; then
  42. for p in ${PKG_DEPENDS_INIT}; do
  43. ${SCRIPTS}/install "${p}" "${PARENT_PKG}"
  44. done
  45. fi
  46. fi
  47. if [ "${TARGET}" = "init" ] ; then
  48. INSTALL=${BUILD}/initramfs
  49. fi
  50. pkg_lock_status "ACTIVE" "${PKG_NAME}:${TARGET}" "install"
  51. build_msg "CLR_INSTALL" "INSTALL" "${PKG_NAME} $(print_color CLR_TARGET "(${TARGET})")" "indent"
  52. print_qa_checks
  53. acquire_update_lock image
  54. mkdir -p ${INSTALL}
  55. if [ "${TARGET}" = "target" ] ; then
  56. for PKG_TMP_DIR in ${PKG_DIR} \
  57. ${PROJECT_DIR}/${PROJECT}/packages/${PKG_NAME} \
  58. ${PROJECT_DIR}/${PROJECT}/devices/${DEVICE}/packages/${PKG_NAME} \
  59. ; do
  60. [ -d ${PKG_TMP_DIR} ] || continue
  61. if [ -d ${PKG_TMP_DIR}/profile.d ]; then
  62. mkdir -p ${INSTALL}/etc/profile.d
  63. cp ${PKG_TMP_DIR}/profile.d/*.conf ${INSTALL}/etc/profile.d
  64. fi
  65. if [ -d ${PKG_TMP_DIR}/tmpfiles.d ]; then
  66. mkdir -p ${INSTALL}/usr/lib/tmpfiles.d
  67. cp ${PKG_TMP_DIR}/tmpfiles.d/*.conf ${INSTALL}/usr/lib/tmpfiles.d
  68. fi
  69. if [ -d ${PKG_TMP_DIR}/system.d ]; then
  70. mkdir -p ${INSTALL}/usr/lib/systemd/system
  71. cp -Pr ${PKG_TMP_DIR}/system.d/*.* ${INSTALL}/usr/lib/systemd/system
  72. fi
  73. if [ -d ${PKG_TMP_DIR}/udev.d ]; then
  74. mkdir -p ${INSTALL}/usr/lib/udev/rules.d
  75. cp ${PKG_TMP_DIR}/udev.d/*.rules ${INSTALL}/usr/lib/udev/rules.d
  76. fi
  77. if [ -d ${PKG_TMP_DIR}/hwdb.d ]; then
  78. mkdir -p ${INSTALL}/usr/lib/udev/hwdb.d
  79. cp ${PKG_TMP_DIR}/hwdb.d/*.hwdb ${INSTALL}/usr/lib/udev/hwdb.d
  80. fi
  81. if [ -d ${PKG_TMP_DIR}/sleep.d ]; then
  82. mkdir -p ${INSTALL}/usr/lib/systemd/system-sleep
  83. cp ${PKG_TMP_DIR}/sleep.d/* ${INSTALL}/usr/lib/systemd/system-sleep
  84. fi
  85. if [ -d ${PKG_TMP_DIR}/sleep.d.serial ]; then
  86. mkdir -p ${INSTALL}/usr/lib/systemd/system-sleep.serial
  87. cp ${PKG_TMP_DIR}/sleep.d.serial/* ${INSTALL}/usr/lib/systemd/system-sleep.serial
  88. fi
  89. if [ -d ${PKG_TMP_DIR}/sysctl.d ]; then
  90. mkdir -p ${INSTALL}/usr/lib/sysctl.d
  91. cp ${PKG_TMP_DIR}/sysctl.d/*.conf ${INSTALL}/usr/lib/sysctl.d
  92. fi
  93. if [ -d ${PKG_TMP_DIR}/modules-load.d ]; then
  94. mkdir -p ${INSTALL}/usr/lib/modules-load.d
  95. cp ${PKG_TMP_DIR}/modules-load.d/*.conf ${INSTALL}/usr/lib/modules-load.d
  96. fi
  97. if [ -d ${PKG_TMP_DIR}/sysconf.d ]; then
  98. mkdir -p ${INSTALL}/etc/sysconf.d
  99. cp ${PKG_TMP_DIR}/sysconf.d/*.conf ${INSTALL}/etc/sysconf.d
  100. fi
  101. if [ -d ${PKG_TMP_DIR}/debug.d ]; then
  102. mkdir -p ${INSTALL}/usr/share/debugconf
  103. cp ${PKG_TMP_DIR}/debug.d/*.conf ${INSTALL}/usr/share/debugconf
  104. fi
  105. if [ -d ${PKG_TMP_DIR}/modprobe.d ]; then
  106. mkdir -p ${INSTALL}/usr/lib/modprobe.d
  107. cp ${PKG_TMP_DIR}/modprobe.d/*.conf ${INSTALL}/usr/lib/modprobe.d
  108. fi
  109. done
  110. fi
  111. # install
  112. if [ "${TARGET}" = "target" ] ; then
  113. pkg_call_exists_opt pre_install && pkg_call
  114. fi
  115. if [ -n "${PKG_INSTALL}" -a -d "${PKG_INSTALL}" ]; then
  116. tar \
  117. -C "${PKG_INSTALL}" \
  118. --exclude=./usr/local/include \
  119. --exclude=./usr/local/lib/cmake \
  120. --exclude=./usr/local/lib/pkgconfig \
  121. --exclude=./usr/local/share/aclocal \
  122. --exclude=./usr/local/share/pkgconfig \
  123. --exclude=./usr/include \
  124. --exclude=./usr/lib/cmake \
  125. --exclude=./usr/lib/pkgconfig \
  126. --exclude=./usr/share/aclocal \
  127. --exclude=./usr/share/pkgconfig \
  128. --exclude=./include \
  129. --exclude=./lib/cmake \
  130. --exclude=./lib/pkgconfig \
  131. --exclude=./share/aclocal \
  132. --exclude=./share/pkgconfig \
  133. --exclude=./.* \
  134. --exclude='*.a' \
  135. --exclude='*.la' \
  136. -cf - . | tar -C "${INSTALL}" -xf -
  137. fi
  138. if [ "${TARGET}" = "target" ] ; then
  139. pkg_call_exists_opt post_install && pkg_call
  140. fi
  141. release_update_lock
  142. touch ${STAMP}
  143. pkg_lock_status "UNLOCK" "${PKG_NAME}:${TARGET}" "install" "installed"