add an option to dynamically set the MODULE_DIR path using an environment variable. This way we can keep more information in the store (as suggested by Eelco) and get rid of my ugly hack in NixOS...and a large part of one chapter of my thesis :|

svn path=/nixpkgs/trunk/; revision=5966
This commit is contained in:
Armijn Hemel 2006-07-27 15:06:58 +00:00
parent 2c13ff7bcf
commit 4961c5e3e1
2 changed files with 154 additions and 0 deletions

View File

@ -6,6 +6,7 @@ stdenv.mkDerivation {
url = http://nix.cs.uu.nl/dist/tarballs/module-init-tools-3.2.2.tar.bz2;
md5 = "a1ad0a09d3231673f70d631f3f5040e9";
};
patches = [./module-dir.patch];
}

View File

@ -0,0 +1,153 @@
diff -rc module-init-tools-3.2.2/depmod.c module-init-tools-3.2.2.new/depmod.c
*** module-init-tools-3.2.2/depmod.c 2005-11-21 03:45:15.000000000 +0100
--- module-init-tools-3.2.2.new/depmod.c 2006-07-27 16:50:35.000000000 +0200
***************
*** 25,34 ****
#include "testing.h"
- #ifndef MODULE_DIR
- #define MODULE_DIR "/lib/modules/"
- #endif
-
static int verbose;
static unsigned int skipchars;
--- 25,30 ----
***************
*** 756,761 ****
--- 752,758 ----
*system_map = NULL;
struct module *list = NULL;
int i;
+ char *module_dir;
/* Don't print out any errors just yet, we might want to exec
backwards compat version. */
***************
*** 834,843 ****
if (optind == argc)
all = 1;
dirname = NOFAIL(malloc(strlen(basedir)
! + strlen(MODULE_DIR)
+ strlen(version) + 1));
! sprintf(dirname, "%s%s%s", basedir, MODULE_DIR, version);
if (maybe_all) {
if (!doing_stdout && !depfile_out_of_date(dirname))
--- 831,844 ----
if (optind == argc)
all = 1;
+ if((module_dir = getenv("MODULE_DIR")) == NULL) {
+ module_dir = "/lib/modules";
+ }
+
dirname = NOFAIL(malloc(strlen(basedir)
! + strlen(module_dir)
+ strlen(version) + 1));
! sprintf(dirname, "%s%s%s", basedir, module_dir, version);
if (maybe_all) {
if (!doing_stdout && !depfile_out_of_date(dirname))
diff -rc module-init-tools-3.2.2/modinfo.c module-init-tools-3.2.2.new/modinfo.c
*** module-init-tools-3.2.2/modinfo.c 2005-01-18 04:25:23.000000000 +0100
--- module-init-tools-3.2.2.new/modinfo.c 2006-07-27 16:51:38.000000000 +0200
***************
*** 18,27 ****
#define streq(a,b) (strcmp((a),(b)) == 0)
#define strstarts(a,start) (strncmp((a),(start), strlen(start)) == 0)
- #ifndef MODULE_DIR
- #define MODULE_DIR "/lib/modules"
- #endif
-
static int elf_endian;
static int my_endian;
--- 18,23 ----
***************
*** 277,282 ****
--- 273,279 ----
char *data;
struct utsname buf;
char *depname, *p;
+ char *module_dir;
data = grab_file(name, size);
if (data) {
***************
*** 289,297 ****
return NULL;
}
/* Search for it in modules.dep. */
uname(&buf);
! asprintf(&depname, "%s/%s/modules.dep", MODULE_DIR, buf.release);
data = grab_file(depname, size);
if (!data) {
fprintf(stderr, "modinfo: could not open %s\n", depname);
--- 286,298 ----
return NULL;
}
+ if((module_dir = getenv("MODULE_DIR")) == NULL) {
+ module_dir = "/lib/modules";
+ }
+
/* Search for it in modules.dep. */
uname(&buf);
! asprintf(&depname, "%s/%s/modules.dep", module_dir, buf.release);
data = grab_file(depname, size);
if (!data) {
fprintf(stderr, "modinfo: could not open %s\n", depname);
diff -rc module-init-tools-3.2.2/modprobe.c module-init-tools-3.2.2.new/modprobe.c
*** module-init-tools-3.2.2/modprobe.c 2005-12-02 00:42:09.000000000 +0100
--- module-init-tools-3.2.2.new/modprobe.c 2006-07-27 16:51:58.000000000 +0200
***************
*** 55,64 ****
char filename[0];
};
- #ifndef MODULE_DIR
- #define MODULE_DIR "/lib/modules"
- #endif
-
typedef void (*errfn_t)(const char *fmt, ...);
/* Do we use syslog or stderr for messages? */
--- 55,60 ----
***************
*** 1416,1421 ****
--- 1412,1418 ----
char *newname = NULL;
char *aliasfilename, *symfilename;
errfn_t error = fatal;
+ char *module_dir = NULL;
/* Prepend options from environment. */
argv = merge_args(getenv("MODPROBE_OPTIONS"), argv, &argc);
***************
*** 1538,1545 ****
if (argc < optind + 1 && !dump_only && !list_only && !remove)
print_usage(argv[0]);
! dirname = NOFAIL(malloc(strlen(buf.release) + sizeof(MODULE_DIR) + 1));
! sprintf(dirname, "%s/%s", MODULE_DIR, buf.release);
aliasfilename = NOFAIL(malloc(strlen(dirname)
+ sizeof("/modules.alias")));
sprintf(aliasfilename, "%s/modules.alias", dirname);
--- 1535,1546 ----
if (argc < optind + 1 && !dump_only && !list_only && !remove)
print_usage(argv[0]);
! if((module_dir = getenv("MODULE_DIR")) == NULL) {
! module_dir = "/lib/modules";
! }
!
! dirname = NOFAIL(malloc(strlen(buf.release) + sizeof(module_dir) + 1));
! sprintf(dirname, "%s/%s", module_dir, buf.release);
aliasfilename = NOFAIL(malloc(strlen(dirname)
+ sizeof("/modules.alias")));
sprintf(aliasfilename, "%s/modules.alias", dirname);