def run()

in build-script-helper.py [0:0]


def run(args):
  package_name = os.path.basename(args.package_dir)

  env = dict(os.environ)
  # Use local dependencies (i.e. checked out next sourcekit-lsp).
  if not args.no_local_deps:
    env['SWIFTCI_USE_LOCAL_DEPS'] = "1"
  env['SWIFT_STRESS_TESTER_SOURCEKIT_SEARCHPATH'] = args.sourcekitd_dir

  if args.update:
    print("** Updating dependencies of %s **" % package_name)
    handle_errors(update_swiftpm_dependencies,
      'Updating dependencies of %s failed' % package_name,
      package_dir=args.package_dir,
      swift_exec=args.swift_exec,
      build_dir=args.build_dir,
      env=env,
      verbose=args.verbose)

  # The test action creates its own build. No need to build if we are just testing
  if should_run_any_action(['build', 'install'], args.build_actions):
    print("** Building %s **" % package_name)
    handle_errors(invoke_swift,
      'Building %s failed' % package_name,
      package_dir=args.package_dir,
      swift_exec=args.swift_exec,
      action='build',
      products=get_products(args.package_dir),
      build_dir=args.build_dir,
      multiroot_data_file=args.multiroot_data_file,
      config=args.config,
      env=env,
      verbose=args.verbose)

  output_dir = os.path.realpath(os.path.join(args.build_dir, args.config))

  if should_run_action("generate-xcodeproj", args.build_actions):
    print("** Generating Xcode project for %s **" % package_name)
    handle_errors(generate_xcodeproj,
      'Generating the Xcode project failed',
      args.package_dir,
      swift_exec=args.swift_exec,
      sourcekit_searchpath=args.sourcekitd_dir,
      env=env,
      verbose=args.verbose)

  if should_run_action("test", args.build_actions):
    print("** Testing %s **" % package_name)
    handle_errors(invoke_swift,
      'Testing %s failed' % package_name,
      package_dir=args.package_dir,
      swift_exec=args.swift_exec,
      action='test',
      products=['%sPackageTests' % package_name],
      build_dir=args.build_dir,
      multiroot_data_file=args.multiroot_data_file,
      config=args.config,
      env=env,
      verbose=args.verbose)

  if should_run_action("install", args.build_actions):
    print("** Installing %s **" % package_name)
    stdlib_dir = os.path.join(args.toolchain, 'lib', 'swift', 'macosx')
    handle_errors(install_package,
      'Installing %s failed' % package_name,
      args.package_dir,
      install_dir=args.prefix,
      sourcekit_searchpath=args.sourcekitd_dir,
      build_dir=output_dir,
      rpaths_to_delete=[stdlib_dir],
      verbose=args.verbose)