Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Android/build/build/soong/android/   (Android Betriebssystem Version 17©)  Datei vom 26.5.2026 mit Größe 8 kB image not shown  

Quelle  notices.go   Sprache: Unknown

 

Spracherkennung für: .go vermutete Sprache: CS {CS[46] Delphi[46] SPS[46]} [Methode: maximale Elemente, drei Dimensionen]

// Copyright 2019 Google Inc. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package android

import (
 "fmt"
 "path/filepath"
 "strings"

 "github.com/google/blueprint/proptools"
)

//go:generate go run ../../blueprint/gobtools/codegen

func modulesOutputDirs(ctx BuilderContext, modules ...ModuleProxy) []string {
 dirs := make([]string, 0, len(modules))
 for _, module := range modules {
  paths, err := outputFilesForModule(ctx, module, "")
  if err != nil {
   continue
  }
  for _, path := range paths {
   if path != nil {
    dirs = append(dirs, filepath.Dir(path.String()))
   }
  }
 }
 return SortedUniqueStrings(dirs)
}

type BuilderAndOtherModuleProviderContext interface {
 BuilderContext
 OtherModuleProviderContext
}

func modulesLicenseMetadata(ctx OtherModuleProviderContext, modules ...ModuleProxy) Paths {
 result := make(Paths, 0, len(modules))
 mctx, isMctx := ctx.(ModuleContext)
 for _, module := range modules {
  var mf Path
  if isMctx && EqualModules(mctx.Module(), module) {
   mf = mctx.LicenseMetadataFile()
  } else {
   mf = GetInstallFiles(ctx, module).LicenseMetadataFile
  }
  if mf != nil {
   result = append(result, mf)
  }
 }
 return result
}

// All the information we need from a particular module to build its notice file entry.
// Can be passed through providers, unlike the module itself.
// @auto-generate: gob
type NoticeModuleInfo struct {
 Name                string
 OutputDirs          []string
 LicenseMetadataFile Path
}

// @auto-generate: gob
type NoticeModuleInfos []NoticeModuleInfo

func (i *NoticeModuleInfos) OutputDirs() []string {
 var result []string
 for _, info := range *i {
  result = append(result, info.OutputDirs...)
 }
 return result
}

func (i *NoticeModuleInfos) LicenseMetadataFiles() Paths {
 result := make(Paths, 0, len(*i))
 for _, info := range *i {
  if info.LicenseMetadataFile != nil {
   result = append(result, info.LicenseMetadataFile)
  }
 }
 return result
}

func GetNoticeModuleInfo(ctx BuilderAndOtherModuleProviderContext, m ModuleProxy) NoticeModuleInfo {
 var licenseMetadataFile Path
 licenseMetadataFiles := modulesLicenseMetadata(ctx, m)
 if len(licenseMetadataFiles) > 1 {
  panic("Didn't expect more than 1 licence metadata file")
 } else if len(licenseMetadataFiles) > 0 {
  licenseMetadataFile = licenseMetadataFiles[0]
 }
 return NoticeModuleInfo{
  Name:                m.Name(),
  OutputDirs:          modulesOutputDirs(ctx, m),
  LicenseMetadataFile: licenseMetadataFile,
 }
}

func GetNoticeModuleInfos(ctx BuilderAndOtherModuleProviderContext, modules []ModuleProxy) NoticeModuleInfos {
 result := make(NoticeModuleInfos, 0, len(modules))
 for _, m := range modules {
  result = append(result, GetNoticeModuleInfo(ctx, m))
 }
 return result
}

// buildNoticeOutputFromLicenseMetadata writes out a notice file.
func buildNoticeOutputFromLicenseMetadata(
 ctx BuilderAndOtherModuleProviderContext, tool, ruleName string, outputFile WritablePath,
 libraryName string, extraArgs BuildNoticeFromLicenseDataArgs, modules NoticeModuleInfos) {
 depsFile := outputFile.ReplaceExtension(ctx, strings.TrimPrefix(outputFile.Ext()+".d", "."))
 if len(modules) == 0 {
  panic(fmt.Errorf("%s %q needs a module to generate the notice for", ruleName, libraryName))
 }
 if libraryName == "" {
  libraryName = modules[0].Name
 }
 rule := NewRuleBuilder(pctx, ctx).SandboxDisabled()

 // Arguments that will go into the response file.
 var rspArgs []string

 for _, sp := range extraArgs.StripPrefix {
  rspArgs = append(rspArgs, "--strip_prefix", sp)
 }
 for _, sp := range modules.OutputDirs() {
  rspArgs = append(rspArgs, "--strip_prefix", sp)
 }

 // The difference between nil and empty slice matters here, to allow for empty filter sets
 if extraArgs.Filter != nil {
  rspArgs = append(rspArgs, "--filter")
  for _, f := range extraArgs.Filter {
   rspArgs = append(rspArgs, "--filter_to", f)
  }
 }
 for _, r := range extraArgs.Replace.Args() {
  rspArgs = append(rspArgs, "--replace", r)
 }

 // Add input files.
 for _, f := range modules.LicenseMetadataFiles() {
  rspArgs = append(rspArgs, f.String())
 }

 rspFile := outputFile.ReplaceExtension(ctx, strings.TrimPrefix(outputFile.Ext()+".rsp", "."))
 WriteFileRule(ctx, rspFile, strings.Join(rspArgs, "\n"))

 cmd := rule.Command().
  BuiltTool(tool).
  FlagWithOutput("-o ", outputFile).
  FlagWithDepFile("-d ", depsFile)

 if libraryName != "" {
  cmd.FlagWithArg("--product ", proptools.ShellEscapeIncludingSpaces(libraryName))
 }
 if extraArgs.Title != "" {
  cmd.FlagWithArg("--title ", proptools.ShellEscapeIncludingSpaces(extraArgs.Title))
 }

 cmd.Flag("@" + rspFile.String())

 cmd.Implicits(modules.LicenseMetadataFiles())
 cmd.Implicit(rspFile)

 rule.Build(ruleName, "container notice file")
}

type NoticeReplace struct {
 From string
 To   string
}

type NoticeReplaces []NoticeReplace

func (r *NoticeReplaces) Args() []string {
 var result []string
 for _, i := range *r {
  result = append(result, i.From+":::"+i.To)
 }
 return result
}

// Additional optional arguments that can be passed to notice building functions
type BuildNoticeFromLicenseDataArgs struct {
 Title       string
 StripPrefix []string
 Filter      []string
 Replace     NoticeReplaces
}

// BuildNoticeTextOutputFromLicenseMetadata writes out a notice text file based
// on the license metadata files for the input `modules` defaulting to the
// current context module if none given.
func BuildNoticeTextOutputFromLicenseMetadata(
 ctx BuilderAndOtherModuleProviderContext, outputFile WritablePath, ruleName, libraryName string,
 extraArgs BuildNoticeFromLicenseDataArgs, modules ...ModuleProxy) {
 buildNoticeOutputFromLicenseMetadata(ctx, "textnotice", "text_notice_"+ruleName,
  outputFile, libraryName, extraArgs, GetNoticeModuleInfos(ctx, modules))
}

// BuildNoticeHtmlOutputFromLicenseMetadata writes out a notice text file based
// on the license metadata files for the input `modules` defaulting to the
// current context module if none given.
func BuildNoticeHtmlOutputFromLicenseMetadata(
 ctx BuilderAndOtherModuleProviderContext, outputFile WritablePath, ruleName, libraryName string,
 extraArgs BuildNoticeFromLicenseDataArgs, modules ...ModuleProxy) {
 buildNoticeOutputFromLicenseMetadata(ctx, "htmlnotice", "html_notice_"+ruleName,
  outputFile, libraryName, extraArgs, GetNoticeModuleInfos(ctx, modules))
}

// BuildNoticeXmlOutputFromLicenseMetadata writes out a notice text file based
// on the license metadata files for the input `modules` defaulting to the
// current context module if none given.
func BuildNoticeXmlOutputFromLicenseMetadata(
 ctx BuilderAndOtherModuleProviderContext, outputFile WritablePath, ruleName, libraryName string,
 extraArgs BuildNoticeFromLicenseDataArgs, modules ...ModuleProxy) {
 buildNoticeOutputFromLicenseMetadata(ctx, "xmlnotice", "xml_notice_"+ruleName,
  outputFile, libraryName, extraArgs, GetNoticeModuleInfos(ctx, modules))
}

// BuildNoticeTextOutputFromNoticeModuleInfos is the same as
// BuildNoticeTextOutputFromLicenseMetadata, but it accepts NoticeModuleInfos instead of straight
// ModuleProxies. This is useful for when you don't have direct access to the modules you
// want to generate a notice file for, for example a singleton accessing the transitive dependencies
// of a particular module.
func BuildNoticeTextOutputFromNoticeModuleInfos(
 ctx BuilderAndOtherModuleProviderContext, outputFile WritablePath, ruleName, libraryName string,
 extraArgs BuildNoticeFromLicenseDataArgs, moduleInfos NoticeModuleInfos) {
 buildNoticeOutputFromLicenseMetadata(ctx, "textnotice", "text_notice_"+ruleName,
  outputFile, libraryName, extraArgs, moduleInfos)
}

¤ Dauer der Verarbeitung: 0.1 Sekunden  (vorverarbeitet am  2026-11-04) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover


Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.