// 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 (
	"veyron.io/veyron/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
}
