// Package profile contains implementation and internal interfaces and
// types used by the implementation of Veyron profiles.
package profile

import "v.io/v23/services/mgmt/build"

// Library describes a shared library that applications may use.
type Library struct {
	// Name is the name of the library.
	Name         string
	// MajorVersion is the major version of the library.
	MajorVersion string
	// MinorVersion is the minor version of the library.
	MinorVersion string
}

// Specification is how we represent a profile internally. It should
// provide enough information to allow matching of binaries to devices.
type Specification struct {
	// Label is a human-friendly concise label for the profile,
	// e.g. "linux-media".
	Label       string
	// Description is a human-friendly description of the profile.
	Description string
	// Arch is the target hardware architecture of the profile.
	Arch        build.Architecture
	// OS is the target operating system of the profile.
	OS          build.OperatingSystem
	// Format is the file format supported by the profile.
	Format      build.Format
	// Libraries is a set of libraries the profile requires.
	Libraries   set[Library]
}
