github.com/kastenhq/syft@v0.0.0-20230821225854-0710af25cdbe/syft/pkg/cataloger/cpp/package.go (about)

     1  package cpp
     2  
     3  import (
     4  	"strings"
     5  
     6  	"github.com/anchore/packageurl-go"
     7  	"github.com/kastenhq/syft/syft/file"
     8  	"github.com/kastenhq/syft/syft/pkg"
     9  )
    10  
    11  func newConanfilePackage(m pkg.ConanMetadata, locations ...file.Location) *pkg.Package {
    12  	fields := strings.Split(strings.TrimSpace(m.Ref), "/")
    13  	if len(fields) < 2 {
    14  		return nil
    15  	}
    16  
    17  	pkgName, pkgVersion := fields[0], fields[1]
    18  
    19  	if pkgName == "" || pkgVersion == "" {
    20  		return nil
    21  	}
    22  
    23  	p := pkg.Package{
    24  		Name:         pkgName,
    25  		Version:      pkgVersion,
    26  		Locations:    file.NewLocationSet(locations...),
    27  		PURL:         packageURL(pkgName, pkgVersion),
    28  		Language:     pkg.CPP,
    29  		Type:         pkg.ConanPkg,
    30  		MetadataType: pkg.ConanMetadataType,
    31  		Metadata:     m,
    32  	}
    33  
    34  	p.SetID()
    35  
    36  	return &p
    37  }
    38  
    39  func newConanlockPackage(m pkg.ConanLockMetadata, locations ...file.Location) *pkg.Package {
    40  	fields := strings.Split(strings.Split(m.Ref, "@")[0], "/")
    41  	if len(fields) < 2 {
    42  		return nil
    43  	}
    44  
    45  	pkgName, pkgVersion := fields[0], fields[1]
    46  
    47  	if pkgName == "" || pkgVersion == "" {
    48  		return nil
    49  	}
    50  
    51  	p := pkg.Package{
    52  		Name:         pkgName,
    53  		Version:      pkgVersion,
    54  		Locations:    file.NewLocationSet(locations...),
    55  		PURL:         packageURL(pkgName, pkgVersion),
    56  		Language:     pkg.CPP,
    57  		Type:         pkg.ConanPkg,
    58  		MetadataType: pkg.ConanLockMetadataType,
    59  		Metadata:     m,
    60  	}
    61  
    62  	p.SetID()
    63  
    64  	return &p
    65  }
    66  
    67  func packageURL(name, version string) string {
    68  	return packageurl.NewPackageURL(
    69  		packageurl.TypeConan,
    70  		"",
    71  		name,
    72  		version,
    73  		nil, // TODO: no qualifiers (...yet)
    74  		"",
    75  	).ToString()
    76  }