forked from rpms/kernel
		
	Some of the downstream users want to package some modules for internal use only. While Fedora isn't internal, it's still useful to have packaging aligned. Add a few modules to this package.
		
			
				
	
	
		
			87 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			87 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #! /bin/bash
 | |
| 
 | |
| Dir=$1
 | |
| List=$2
 | |
| Dest="extra"
 | |
| 
 | |
| # Destination was specified on the command line
 | |
| test -n "$3" && Dest="$3"
 | |
| 
 | |
| pushd $Dir
 | |
| rm -rf modnames
 | |
| find . -name "*.ko" -type f > modnames
 | |
| # Look through all of the modules, and throw any that have a dependency in
 | |
| # our list into the list as well.
 | |
| rm -rf dep.list dep2.list
 | |
| rm -rf req.list req2.list
 | |
| touch dep.list req.list
 | |
| cp "$List" .
 | |
| 
 | |
| # This variable needs to be exported because it is used in sub-script
 | |
| # executed by xargs
 | |
| export ListName=$(basename "$List")
 | |
| 
 | |
| # NB: this loop runs 2000+ iterations. Try to be fast.
 | |
| NPROC=`nproc`
 | |
| [ -z "$NPROC" ] && NPROC=1
 | |
| cat modnames | xargs -r -n1 -P $NPROC sh -c '
 | |
|   dep=$1
 | |
|   depends=`modinfo $dep | sed -n -e "/^depends/ s/^depends:[ \t]*//p"`
 | |
|   [ -z "$depends" ] && exit
 | |
|   for mod in ${depends//,/ }
 | |
|   do
 | |
|     match=$(grep "^$mod.ko" "$ListName")
 | |
|     [ -z "$match" ] && continue
 | |
|     # check if the module we are looking at is in mod-extra too.
 | |
|     # if so we do not need to mark the dep as required.
 | |
|     mod2=${dep##*/}  # same as `basename $dep`, but faster
 | |
|     match2=$(grep "^$mod2" "$ListName")
 | |
|     if [ -n "$match2" ]
 | |
|     then
 | |
|       #echo $mod2 >> notreq.list
 | |
|       continue
 | |
|     fi
 | |
|     echo $mod.ko >> req.list
 | |
|   done
 | |
| ' DUMMYARG0   # xargs appends MODNAME, which becomes $dep in the script above
 | |
| 
 | |
| sort -u req.list > req2.list
 | |
| sort -u "$ListName" > modules2.list
 | |
| join -v 1 modules2.list req2.list > modules3.list
 | |
| 
 | |
| for mod in $(cat modules3.list)
 | |
| do
 | |
|   # get the path for the module
 | |
|   modpath=`grep /$mod modnames`
 | |
|   [ -z "$modpath" ] && continue
 | |
|   echo $modpath >> dep.list
 | |
| done
 | |
| 
 | |
| sort -u dep.list > dep2.list
 | |
| 
 | |
| # now move the modules into the extra/ directory
 | |
| for mod in `cat dep2.list`
 | |
| do
 | |
|   newpath=`dirname $mod | sed -e "s/kernel\\//$Dest\//"`
 | |
|   mkdir -p $newpath
 | |
|   mv $mod $newpath
 | |
| done
 | |
| 
 | |
| popd
 | |
| 
 | |
| # If we're signing modules, we can't leave the .mod files for the .ko files
 | |
| # we've moved in .tmp_versions/.  Remove them so the Kbuild 'modules_sign'
 | |
| # target doesn't try to sign a non-existent file.  This is kinda ugly, but
 | |
| # so is modules-extra.
 | |
| 
 | |
| for mod in `cat ${Dir}/dep2.list`
 | |
| do
 | |
|   modfile=`basename $mod | sed -e 's/.ko/.mod/'`
 | |
|   rm .tmp_versions/$modfile
 | |
| done
 | |
| 
 | |
| pushd $Dir
 | |
| rm modnames dep.list dep2.list req.list req2.list
 | |
| rm "$ListName" modules2.list modules3.list
 | |
| popd
 |