about summary refs log tree commit diff
path: root/pkgs/os-specific
diff options
context:
space:
mode:
authorArmijn Hemel <armijn@gpl-violations.org>2006-07-27 15:06:58 +0000
committerArmijn Hemel <armijn@gpl-violations.org>2006-07-27 15:06:58 +0000
commit4961c5e3e1d7759e721eed1ba7e5536acdab397d (patch)
tree9a5b8dd43c44cf64eb1e75f3f92a0ce4a8a9de68 /pkgs/os-specific
parent2c13ff7bcfb253a35dcbc262a4b295b2b0995647 (diff)
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
Diffstat (limited to 'pkgs/os-specific')
-rw-r--r--pkgs/os-specific/linux/module-init-tools/default.nix1
-rw-r--r--pkgs/os-specific/linux/module-init-tools/module-dir.patch153
2 files changed, 154 insertions, 0 deletions
diff --git a/pkgs/os-specific/linux/module-init-tools/default.nix b/pkgs/os-specific/linux/module-init-tools/default.nix
index eb0364ccddac5..a632561773208 100644
--- a/pkgs/os-specific/linux/module-init-tools/default.nix
+++ b/pkgs/os-specific/linux/module-init-tools/default.nix
@@ -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];
 }
 
 
diff --git a/pkgs/os-specific/linux/module-init-tools/module-dir.patch b/pkgs/os-specific/linux/module-init-tools/module-dir.patch
new file mode 100644
index 0000000000000..3743bb589a6c9
--- /dev/null
+++ b/pkgs/os-specific/linux/module-init-tools/module-dir.patch
@@ -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);