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

import "v.io/core/veyron2/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 {
	// Arch is the target hardware architecture of the profile.
	Arch        build.Architecture
	// Description is a human-friendly description of the profile.
	Description string
	// Format is the file format supported by the profile.
	Format      build.Format
	// Libraries is a set of libraries the profile requires.
	Libraries   set[Library]
	// Label is a human-friendly concise label for the profile,
	// e.g. "linux-media".
	Label       string
	// OS is the target operating system of the profile.
	OS          build.OperatingSystem
}
