// This file was auto-generated by the veyron vdl tool.
// Source: profile.vdl

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

import (
	"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 nodes.
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 map[Library]struct{}
	// 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
}
