85 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| 
 | |
| usage() {
 | |
|     echo "
 | |
| $0 <path to unpacked binary distribution directory>
 | |
| 
 | |
| This program return the list of libraries and where to find them based on
 | |
| your currently installed programs.
 | |
| ";
 | |
|     exit 1
 | |
| }
 | |
| 
 | |
| if test $# -ne 1; then
 | |
|   usage
 | |
| fi
 | |
| 
 | |
| binaryDist=$1
 | |
| 
 | |
| hasBinaries=false
 | |
| for bin in $(find $binaryDist -executable -type f) :; do
 | |
|     if test $bin = ":"; then
 | |
|         $hasBinaries || \
 | |
|             echo "No patchable found in this directory."
 | |
|         break
 | |
|     fi
 | |
|     hasBinaries=true
 | |
| 
 | |
|     echo ""
 | |
|     echo "$bin:"
 | |
|     hasLibraries=false
 | |
|     unset interpreter
 | |
|     unset addRPath
 | |
|     for lib in $(strings $bin | grep '^\(/\|\)lib.*\.so' | sort | uniq) :; do
 | |
|         if test $lib = ":"; then
 | |
|             $hasLibraries || \
 | |
|                 echo "  This program is a script or it is statically linked."
 | |
|             break
 | |
|         fi
 | |
|         hasLibraries=true
 | |
| 
 | |
|         echo "  $lib:";
 | |
| 
 | |
|         libPath=$lib
 | |
|         lib=$(basename $lib)
 | |
| 
 | |
|         #versionLessLib=$(echo $lib | sed 's,[.][.0-9]*$,,')
 | |
| 
 | |
|         libs="$(
 | |
|             find /nix/store/*/lib* \( -type f -or -type l \) -name $lib |
 | |
|             grep -v '\(bootstrap-tools\|system-path\|user-environment\|extra-utils\)'
 | |
|         )"
 | |
| 
 | |
|         echo "$libs" |
 | |
|         sed 's,^/nix/store/[a-z0-9]*-\([^/]*\)/.*/\([^/]*\)$,    \1 -> \2,' |
 | |
|         sort |
 | |
|         uniq;
 | |
| 
 | |
|         names=$(
 | |
|             echo "$libs" |
 | |
|             sed 's,^/nix/store/[a-z0-9]*-\([^/]*\)-[.0-9]*/.*$,\1,' |
 | |
|             sort |
 | |
|             uniq;
 | |
|         )
 | |
| 
 | |
|         if test "$names" = "glibc"; then names="stdenv.glibc"; fi
 | |
|         if echo $names | grep -c "gcc" &> /dev/null; then names="stdenv.gcc.gcc"; fi
 | |
| 
 | |
|         if test $lib != $libPath; then
 | |
|             interpreter="--interpreter \${$names}/lib/$lib"
 | |
|         elif echo $addRPath | grep -c "$names" &> /dev/null; then
 | |
|             :
 | |
|         else
 | |
|             addRPath=${addRPath+$addRPath:}"\${$names}/lib"
 | |
|         fi
 | |
|     done;
 | |
|     $hasLibraries && \
 | |
|         echo "
 | |
|   Patchelf command:
 | |
| 
 | |
|     patchelf $interpreter \\
 | |
|       ${addRPath+--set-rpath $addRPath \\
 | |
| }      \$out/$bin
 | |
| 
 | |
| "
 | |
| done;
 | 
