blob: 934901c1cecfcdcb11da65c95e009bc8fc62a2d8 [file] [log] [blame] [edit]
package dkms
import (
"fmt"
"path"
"cos.googlesource.com/cos/tools.git/src/pkg/modules"
)
// PackageStatus is an enum representing the different possible states for a package.
// A package can be Added, Built, Installed, or Broken. See the IsAdded, IsBuilt, etc.,
// functions for more detail.
type PackageStatus int
const (
Broken PackageStatus = iota
Added
Built
Installed
)
// Trees is the collection of directories which DKMS will use as the root paths for
// adding, compiling, and installing packages.
type Trees struct {
// The path to the DKMS tree, where package sources will be copied and package
// build directories will be maintained.
Dkms string
// The path to the install tree where packages will be installed.
Install string
// The path to the user source tree from which package sources will be copied
// into the DKMS tree.
Source string
// The path to the kernel source directory which will be used for compiling
// the modules within a package.
Kernel string
// The path to the directory where compiled (possibly read-only) kernel modules are
// stored. This is separate from the install tree because the built-in kernel modules
// tree in COS is read-only.
KernelModules string
}
// A Package contains the information necessary to manage a collection of kernel modules.
// Specifically, a Package has all of the fields required for constructing the paths
// required to perform DKMS operations on that package, such as compiling and installing
// modules.
type Package struct {
// These fields disambiguate which package is being referred to.
// For instance, two packages with the same source code but which have been compiled
// for different kernel versions are considered different and will have different
// corresponding paths within the DKMS tree.
Name string
Version string
Arch string
KernelVersion string
BuildId string
Board string
// This is the set of parameters to pass when inserting modules. Each module can
// have its own list of params of the form param1=value1.
ModuleParams modules.ModuleParameters
// This is the collection of trees which will be used as the base directories
// for the paths related to this package.
Trees *Trees
// This is the configuration for the package, as specified in its dkms.conf.
Config *Config
}
// SourceTreeDir returns the path to the package within the user's source tree.
func (pkg *Package) SourceTreeDir() string {
return path.Join(pkg.Trees.Source, fmt.Sprintf("%s-%s", pkg.Name, pkg.Version))
}
// Path returns the disambiguated path to the package within the DKMS tree.
func (pkg *Package) Path() string {
return path.Join(pkg.Name, pkg.Version, pkg.KernelVersion, pkg.Arch, pkg.BuildId, pkg.Board)
}
// SourceDir returns the path to the package sources within the DKMS tree.
func (pkg *Package) SourceDir() string {
return path.Join(pkg.Trees.Dkms, pkg.Path(), "source")
}
// CacheSourceDir returns the path to the package sources within the cache DKMS tree.
func (pkg *Package) CacheSourceDir() string {
return path.Join(pkg.Path(), "source")
}
// BuildDir returns the path to the package build directory within the DKMS tree.
func (pkg *Package) BuildDir() string {
return path.Join(pkg.Trees.Dkms, pkg.Path(), "build")
}
// CacheBuildDir returns the path to the package build directory within the cache DKMS tree.
func (pkg *Package) CacheBuildDir() string {
return path.Join(pkg.Path(), "build")
}
// ConfigPath returns the path to package's configuration within the DKMS tree.
func (pkg *Package) ConfigPath() string {
return path.Join(pkg.SourceDir(), "dkms.conf")
}
// CacheConfigPath returns the path to package's configuration within the cache DKMS tree.
func (pkg *Package) CacheConfigPath() string {
return path.Join(pkg.CacheSourceDir(), "dkms.conf")
}