diff options
Diffstat (limited to 'src/oh-gencontrol')
-rw-r--r-- | src/oh-gencontrol | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/src/oh-gencontrol b/src/oh-gencontrol new file mode 100644 index 0000000..b89b3d1 --- /dev/null +++ b/src/oh-gencontrol @@ -0,0 +1,133 @@ +#! /bin/sh +# +# opkhelper +# src/oh-buildopk +# Pack binary package files into an opk file. +# +# Copyright (C) 2012 Patrick "P. J." McDermott +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +. @@LIBDIR@@/opkhelper/controlfields + +print_usage() +{ + printf 'Usage: %s -s | pkgname...\n' "$1" +} + +missing_field() +{ + printf 'ERROR: Missing field "%s" in control file.\n' "${1}" >&2 + exit 2 +} + +if [ ${#} -eq 0 ]; then + print_usage ${0} >&2 + exit 1 +fi + +is_src=false +opts=$(getopt -n "${0}" -o 's' -- "${@}") +if [ ${?} -ne 0 ]; then + print_usage "${0}" >&2 + exit 1; +fi +eval set -- "${opts}" +while true; do + case "${1}" in + -s) + is_src=true + shift + ;; + --) + shift + break + ;; + *) + print_usage "${0}" >&2 + exit 1 + ;; + esac +done + +if ${is_src}; then + srcpkg=$(oh_get_field Source) || missing_field Source + oh_validate_pkg_name "${srcpkg}" || invalid_pkg_name "${srcpkg}" + + control_dir="${srcpkg}-src.control" + control="${control_dir}/control" + + mkdir "${control_dir}" + + printf 'Package: %s' "${srcpkg}-src" > ${control} + printf 'Source: %s' "${srcpkg}" >> ${control} + {printf 'Version: ' && oh_get_field Version} >> ${control} + [ ${?} -eq 1 ] && missing_field Version + printf 'Architecture: all' >> ${control} + # TODO: Calculate "Installed-Size". + {printf 'Maintainer: ' && oh_get_field Maintainer} >> ${control} + [ ${?} -eq 1 ] && missing_field Maintainer + {printf 'Homepage: ' && oh_get_field Homepage} >> ${control} +else + if [ ${#} -ne 1 ]; then + print_usage "${0}" >&2 + exit 1 + fi + + binpkg="${1}" + oh_validate_pkg_name "${binpkg}" || invalid_pkg_name "${binpkg}" + + control_dir="${binpkg}.control" + control="${control_dir}/control" + + mkdir "${control_dir}" + + # Binary and source package names and version. + {printf 'Package: ' && oh_get_field ${binpkg} Package} > ${control} + [ ${?} -eq 1 ] && missing_field Package + {printf 'Source: ' && oh_get_field Source} >> ${control} + [ ${?} -eq 1 ] && missing_field Source + {printf 'Version: ' && oh_get_field Version} >> ${control} + [ ${?} -eq 1 ] && missing_field Version + + # TODO: Handle architecture. + {printf 'Architecture: ' && oh_get_field ${binpkg} Architecture} \ + >> ${control} + [ ${?} -eq 1 ] && missing_field Architecture + + # Optional fields. + {printf 'Essential: ' && oh_get_field ${binpkg} Essential} >> ${control} + {printf 'Depends: ' && oh_get_field ${binpkg} Depends} >> ${control} + {printf 'Recommends: ' && oh_get_field ${binpkg} Recommends} >> ${control} + {printf 'Suggests: ' && oh_get_field ${binpkg} Suggests} >> ${control} + {printf 'Pre-Depends: ' && oh_get_field ${binpkg} Pre-Depends} >> ${control} + {printf 'Conflicts: ' && oh_get_field ${binpkg} Conflictss} >> ${control} + {printf 'Provides: ' && oh_get_field ${binpkg} Provides} >> ${control} + {printf 'Replaces: ' && oh_get_field ${binpkg} Replaces} >> ${control} + + # TODO: Calculate "Installed-Size". + {printf 'Maintainer: ' && oh_get_field Maintainer} >> ${control} + [ ${?} -eq 1 ] && missing_field Maintainer + {printf 'Description: ' && oh_get_field ${binpkg} Description} >> ${control} + [ ${?} -eq 1 ] && missing_field Description + {printf 'Homepage: ' && oh_get_field Homepage} >> ${control} + + for script in preinst postinst prerm postrm; do + if [ -f ../${binpkg}.pkg/${script} ]; then + cp ../${binpkg}.pkg/${script} ${control_dir} + # TODO: Set mode? + # TODO: Handle links? + fi + done +fi |