diff options
Diffstat (limited to 'src/ob-gencontrol.sh')
-rw-r--r-- | src/ob-gencontrol.sh | 143 |
1 files changed, 91 insertions, 52 deletions
diff --git a/src/ob-gencontrol.sh b/src/ob-gencontrol.sh index 172f50f..f88508c 100644 --- a/src/ob-gencontrol.sh +++ b/src/ob-gencontrol.sh @@ -1,6 +1,6 @@ # Generate a control directory with a control file and scripts # -# Copyright (C) 2012, 2019 Patrick McDermott +# Copyright (C) 2012, 2019, 2023-2024 Patrick McDermott # # This file is part of opkbuild. # @@ -67,14 +67,17 @@ gen_control_src() local binary= local name= local value= + local deps= + local dep= local homepage= - binary="src-${OPK_SOURCE}" + binary="src:${OPK_SOURCE}" mkdir -p -- "${binary}.control" + exec 3>"${binary}.control/control" - cat >"${binary}.control/control" <<-EOF - Package: src-${OPK_SOURCE} + cat >&3 <<-EOF + Package: src:${OPK_SOURCE} Source: ${OPK_SOURCE} Binary:$(printf '%s\n' $(ob_get_binary_packages) | \ LC_ALL='C' sort | xargs printf ' %s') @@ -90,23 +93,30 @@ gen_control_src() if [ -z "${value}" ]; then continue fi - value="$(ob_substvars "${value}")" - printf '%s: %s\n' "${name}" "${value}" | \ - sed 's/[, ]*$//' \ - >>"${binary}.control/control" + deps='' + IFS=',' + for dep in ${value}; do + unset IFS + deps="${deps}$(ob_parse_dep "${dep}"), " + done + unset IFS + value="$(ob_substvars "${deps}")" + printf '%s: %s\n' "${name}" "${deps}" | sed 's/[, ]*$//' >&3 done - cat >>"${binary}.control/control" <<-EOF - Installed-Size: $(calc_inst_size "src-${OPK_SOURCE}") + cat >&3 <<-EOF + Installed-Size: $(calc_inst_size "src:${OPK_SOURCE}") + Format: $(ob_get_source_parameter 'Format') Description: ${OPK_SOURCE} source package EOF homepage="$(ob_get_source_parameter 'Homepage')" if [ -n "${homepage}" ]; then - printf '%s: %s\n' 'Homepage' "${homepage}" \ - >>"${binary}.control/control" + printf '%s: %s\n' 'Homepage' "${homepage}" >&3 fi + exec 3>&- + return 0 } @@ -118,67 +128,96 @@ gen_control_bin() local plat="${4}" local desc="${5}" shift 5 - local name= + local binary_qual= local value= + local doc_pkg= + local doc_pkg_q= + local doc_dep= + local name= local homepage= mkdir -p -- "${binary}.control" + exec 3>"${binary}.control/control" - cat >"${binary}.control/control" <<-EOF - Package: ${binary} + binary_qual="$(ob_qualify_package_name "${binary}" "${OPK_HOST_ARCH}")" + + cat >&3 <<-EOF + Package: ${binary_qual} Source: ${OPK_SOURCE} Version: ${version} Architecture: ${arch} Platform: ${plat} + EOF + value="$(ob_get_binary_parameter "${binary}" 'Section')" + if [ -n "${value}" ]; then + cat >&3 <<-EOF + Section: ${value} + EOF + fi + cat >&3 <<-EOF Maintainer: $(ob_get_source_parameter 'Maintainer' | \ tr '\n' ' ') EOF - if :; then - for name in Essential Depends Recommends Suggests Pre-Depends \ - Conflicts Provides Replaces; do - value="$(ob_get_binary_parameter "${binary}" "${name}")" - if [ -z "${value}" ]; then - continue - fi - case "${name}" in - 'Essential') - ;; - 'Depends' | 'Recommends' | \ - 'Suggests' | 'Pre-Depends') - value="$(ob_reduce_deps \ - -a "${OPK_HOST_ARCH}" \ - -p "${OPK_HOST_PLAT}" \ - -- "${value}")" - value="$(ob_substvars "${value}" \ - "${binary}")" - ;; - 'Conflicts' | 'Provides' | 'Replaces') - value="$(ob_reduce_deps \ - -a "${OPK_HOST_ARCH}" \ - -p "${OPK_HOST_PLAT}" \ - -u -- "${value}")" - value="$(ob_substvars "${value}" \ - "${binary}")" - ;; - esac - printf '%s: %s\n' "${name}" "${value}" | \ - sed 's/[, ]*$//' \ - >>"${binary}.control/control" - done + if ! doc_pkg="$(ob_get_doc_package)"; then + ob_error "$(ob_get_msg 'cant_get_doc_pkg')" + return 1 fi + doc_pkg_q="$(ob_qualify_package_name "${doc_pkg}" "${OPK_HOST_ARCH}")" + if [ x"$(ob_get_binary_parameter "${doc_pkg}" 'Architecture')" \ + = x'all' ]; then + doc_dep="${doc_pkg_q} (= ${OPK_SOURCE_VERSION})" + elif [ x"$(ob_get_binary_parameter "${binary}" 'Architecture')" \ + = x'all' ]; then + doc_dep="${doc_pkg_q} (>= ${OPK_SOURCE_VERSION}), $(: \ + )${doc_pkg_q} (<< ${OPK_SOURCE_VERSION}.~)" + else + doc_dep="${doc_pkg_q} (= ${OPK_BINARY_VERSION})" + fi + + for name in Essential Depends Recommends Suggests Pre-Depends \ + Conflicts Provides Replaces; do + value="$(ob_get_binary_parameter "${binary}" "${name}")" + if [ x"${name}" = x'Depends' ] && + [ x"${binary_qual}" != x"${doc_pkg_q}" ]; then + value="${doc_dep}, ${value}" + fi + if [ -z "${value}" ]; then + continue + fi + case "${name}" in + 'Essential') + ;; + 'Depends' | 'Recommends' | 'Suggests' | 'Pre-Depends') + value="$(ob_substvars "${value}" "${binary}")" + value="$(ob_reduce_deps \ + -a "${OPK_HOST_ARCH}" \ + -p "${OPK_HOST_PLAT}" \ + -- "${value}")" + ;; + 'Conflicts' | 'Provides' | 'Replaces') + value="$(ob_substvars "${value}" "${binary}")" + value="$(ob_reduce_deps \ + -a "${OPK_HOST_ARCH}" \ + -p "${OPK_HOST_PLAT}" \ + -u -- "${value}")" + ;; + esac + printf '%s: %s\n' "${name}" "${value}" | sed 's/[, ]*$//' >&3 + done - cat >>"${binary}.control/control" <<-EOF + cat >&3 <<-EOF Installed-Size: $(calc_inst_size "${binary}") Description:$(printf '%s' "${desc}" | sed 's/^/ /') EOF homepage="$(ob_get_source_parameter 'Homepage')" if [ -n "${homepage}" ]; then - printf '%s: %s\n' 'Homepage' "${homepage}" \ - >>"${binary}.control/control" + printf '%s: %s\n' 'Homepage' "${homepage}" >&3 fi + exec 3>&- + return 0 } @@ -268,9 +307,9 @@ main() ob_init_package '..' || return 1 if [ x"${OB_DO_SOURCE:+set}" = x'set' ]; then - ob_info "$(ob_get_msg 'gen_control')" "src-${OPK_SOURCE}" + ob_info "$(ob_get_msg 'gen_control')" "src:${OPK_SOURCE}" gen_control_src - gen_md5sums "src-${OPK_SOURCE}" + gen_md5sums "src:${OPK_SOURCE}" else for pkg in ${OPK_PACKAGES_REDUCED}; do ob_info "$(ob_get_msg 'gen_control')" "${pkg}" |