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