# Copyright (c) 2017 The NetBSD Foundation, Inc. # All rights reserved. # # This code is derived from software contributed to The NetBSD Foundation # by Johnny C. Lam. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS # ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # # NAME # postinstall.subr -- post-installation actions for packages # # SYNOPSIS # task_postinstall # # DESCRIPTION # The task_postinstall function performs actions that SHOULD occur # AFTER the package files are installed into their final location # for the installation: # # o Copy configuration files into correct locations. # o Set special permissions on package files and directories. # o Rebuild the system run-time library search path database. # o Update fonts databases. # o Register shells in the system shells database. # o Register GNU info files. # o Update OCaml module run-time library search path database. # # The datafile contains lines of the form: # # # : ... # # These lines are used as input to the various script functions. # # RETURN VALUES # Returns 0 on success, and >0 if an error occurs. # __task_postinstall__="yes" task_load directories task_load files task_load fonts task_load info_files task_load ocaml_findlib task_load permissions task_load shells task_load shlibs task_load sort task_load taskfunc task_postinstall() { [ $# -gt 0 ] || return 127 local datafile="$1"; shift [ -f "$datafile" ] || return 1 local post_actions= # Copy configuration/support files into place. post_actions="task_files" # Set special permissions on files and directories that need them. post_actions="$post_actions task_permissions" # Rebuild the system run-time library search path database. post_actions="$post_actions task_shlibs" # Update font databases. post_actions="$post_actions task_fonts" # Register shells. post_actions="$post_actions task_shells" # Register GNU info files. post_actions="$post_actions task_info_files" # Update OCaml module run-time library search path database. post_actions="$post_actions task_ocaml_findlib" # Run generic package tasks. post_actions="$post_actions task_function" # Seed checks with actions from preinstall, in order. local post_checks="task_directories" local result=0 local stage="postinstall" local post_fn silent for post_fn in $post_actions; do case $post_fn in task_files|\ task_permissions|\ task_shells) # These tasks should be verbose since they touch # system files and directories. silent= ;; *) silent="-s" ;; esac $post_fn $silent add $stage < $datafile || result=1 post_checks="$post_checks $post_fn" done # Run all checks after all post-installation actions have completed # and write messages to standard output for any checks that don't # pass. # for post_fn in $post_checks; do case $post_fn in task_directories) # Sort data lines for this task. task_sort < $datafile | $post_fn check-add $stage ;; *) $post_fn check-add $stage < $datafile ;; esac done return $result }