| 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") |
| } |