PROCEDURE bind_installation_tools (
  unbound_library, ul: file =
    $fname(wev$working_catalog//'.'//wev$working_build_level//'.maintenance.raf$library')
  bound_library, bl: file = $fname(wev$working_catalog//'.'//wev$working_build_level//'.bound_installation_tools')
  cybil_library, cl: file = $system.cybil.cyf$run_time_library
  map, m: file = $local.load_map
  status)

"$FORMAT=OFF
  VAR
    bound_inss   : file =  $fname($unique)
    bound_pacs   : file =  $fname($unique)
    ignore_status : status
    inss_delete_list : list 0..$max_list of string 0..$max_name
    master_delete_list : $type(inss_delete_list)
    pacs_delete_list : $type(inss_delete_list)
    scratch_file : file = $fname($unique)
    scratch_library : file =  $fname($unique)
  VAREND

"$FORMAT=ON

  CREATE_OBJECT_LIBRARY
    put_message 'Bind Install_Software...'
    add_module l=unbound_library m=ram$install_software
    satisfy_external_references l=(unbound_library)

"   Produce a LIST of modules which have been bound into INSS

    set_file_attributes f=scratch_file fc=legible pf=continuous
    display_new_library do=none o=scratch_file
    get_lines i=scratch_file v=inss_delete_list
    delete_file f=scratch_file status=ignore_status

    satisfy_external_references l=(cybil_library)
    generate_library l=scratch_library

"   Create the bound module for INSS.

    create_module n=ram$install_software c=scratch_library sp=rap$install_software ibsm=true o=map.$eoi
    change_module_attributes m=ram$install_software retain=(rap$install_software,..
         ocp$copy,ocp$normalize_binding_sec_value,ocp$apply_message_predictor,..
         ocp$build_code_sec_directory,..
         ocp$process_info_element,ocp$process_interp_element,..
         ocp$new_global_offset,ocp$process_module_dictionary,..
         ocp$process_ept_dictionary,ocp$process_command_dictionary,..
         ocp$process_function_dictionary,ocp$process_help_dictionary,..
         ocp$process_message_dictionary,..
         ocp$new_offset,ocp$build_first_intermediate_ol,..
         ocp$process_rel_records,ocp$process_section_maps,..
         ocp$process_epts,ocp$process_exts,..
         ocp$process_sections,ocp$apply_corrector,ocp$checksum,..
         ocp$apply_move_items)

    change_module_attributes m=ram$install_software omit_non_retained_entry_points=true
    change_module_attributes m=ram$install_software omit_library=cyf$run_time_library
    add_copyright ram$install_software
    generate_library l=bound_inss

    put_message 'Bind Package_Software...'
    add_module l=unbound_library m=ram$package_software
    satisfy_external_references l=(unbound_library)

"   Produce a LIST of modules which have been bound into PACS

    set_file_attributes f=scratch_file fc=legible pf=continuous
    display_new_library do=none o=scratch_file
    get_lines i=scratch_file v=pacs_delete_list
    delete_file f=scratch_file status=ignore_status

    satisfy_external_references l=(cybil_library)
    generate_library l=scratch_library

"   Create the bound module for PACS.

    create_module n=ram$package_software c=scratch_library sp=rap$package_software ibsm=true o=map.$eoi
    change_module_attributes m=ram$package_software not_retain=all
    change_module_attributes m=ram$package_software retain=rap$package_software ..
          omit_non_retained_entry_points=true
    change_module_attributes m=ram$package_software omit_library=cyf$run_time_library
    add_copyright ram$package_software
    generate_library l=bound_pacs

    put_message 'Pick up tag-along modules...'
    add_module unbound_library
    master_delete_list = $union(inss_delete_list, pacs_delete_list)
"$FORMAT=OFF
    delete_module m=$apply($select(master_delete_list, $size(x)>1), $program_name(x))
"$FORMAT=ON
    addm bound_inss
    addm bound_pacs
    generate_library bound_library
  QUIT

  delete_file f=scratch_library status=ignore_status
  delete_file f=bound_pacs status=ignore_status
  delete_file f=bound_inss status=ignore_status

PROCEND bind_installation_tools

