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 }