#!/usr/bin/env nix-shell #!nix-shell -p ruby -i ruby # This script is expected to be used to copy back the `kernel-builder` built # linux configuration to the kernel's source directory. # # Use this to normalize the configuration after: # # - Changing configuration options # - Changing the kernel version require "shellwords" ROOT = File.join(__dir__, "..") def usage() puts "Usage: bin/kernel-normalize-config " end # Poor approximation to arguments parsing. params, other_args = ARGV.partition { |s| s.match(/^--/) } if other_args.empty? $stderr.puts "Device name required." usage exit 1 end DEVICE = other_args.shift FILE = # Is the device a path? if DEVICE.match(%r{/}) Dir.glob(File.join(DEVICE, "kernel", "config.*")).sort.first else Dir.glob(File.join(Dir.pwd, "devices", DEVICE, "kernel", "config.*")).sort.first end unless params.empty? $stderr.puts "Unknown parameters #{params.join(", ")}." usage exit 1 end unless other_args.empty? $stderr.puts "Unexpected arguments #{other_args.join(", ")}." usage exit 1 end unless FILE $stderr.puts "Could not find kernel configuration file for #{DEVICE}." usage exit 1 end arg = # Is the device a path? if DEVICE.match(%r{/}) ["--arg", "device", DEVICE] else ["--argstr", "device", DEVICE] end Dir.chdir(ROOT) do result = `#{[ "nix-build", "--no-out-link", *arg, "-A", "config.mobile.boot.stage-1.kernel.package.normalizedConfig" ].shelljoin}`.strip # We "cat" into the file to ensure we don't copy the store path access rights. File.write(FILE, File.read(result)) end # vim: ft=ruby