ocaml-find-requires.sh modified so that it adds this requires to other
    packages. Now can upgrade base ocaml packages without needing to
    rebuild everything else.
		
	
			
		
			
				
	
	
		
			73 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/sh -
 | |
| # OCaml-specific "find-requires" for RPM.
 | |
| # By Richard W.M. Jones <rjones@redhat.com>
 | |
| # $Id: ocaml-find-requires.sh,v 1.1 2007/07/02 15:13:39 gemi Exp $
 | |
| 
 | |
| #set -x
 | |
| 
 | |
| # Usage:
 | |
| #   (1) Add the following to the spec file:
 | |
| #   %define _use_internal_dependency_generator 0
 | |
| #   %define __find_requires /usr/lib/rpm/ocaml-find-requires.sh
 | |
| #   %define __find_provides /usr/lib/rpm/ocaml-find-provides.sh
 | |
| #
 | |
| #   (2) If you don't want the module to depend on the exact compiler
 | |
| #   version then use ocaml-find-requires.sh -c, but this is not something
 | |
| #   you should do normally.
 | |
| #
 | |
| #   (3) For any modules which you want to ignore, use '-i Modulename'.
 | |
| 
 | |
| OCAMLOBJINFO=ocamlobjinfo
 | |
| TEMP=`getopt -o ci:f: -n ocaml-find-requires.sh -- "$@"`
 | |
| if [ $? != 0 ]; then echo "ocaml-find-requires.sh: failed" >&2; exit 1; fi
 | |
| eval set -- "$TEMP"
 | |
| 
 | |
| emit_compiler_version=yes
 | |
| ignore_modules=nOTREAL
 | |
| 
 | |
| while true; do
 | |
|     case "$1" in
 | |
| 	-c) emit_compiler_version=; shift;;
 | |
| 	-i) ignore_modules="$2 $ignore_modules"; shift 2;;
 | |
| 	-f) OCAMLOBJINFO="$2"; shift 2;;
 | |
| 	--) shift; break;;
 | |
| 	*) echo "ocaml-find-requires.sh: option error at $1"; exit 1;;
 | |
|     esac
 | |
| done
 | |
| 
 | |
| # Get the list of files.
 | |
| files=`sed "s/['\"]/\\\&/g"`
 | |
| 
 | |
| # Use ordinary find-requires first.
 | |
| echo $files | tr [:blank:] '\n' | /usr/lib/rpm/find-requires
 | |
| 
 | |
| # Get list of .cmi, .cmo and .cma files.
 | |
| files=`echo $files | tr [:blank:] '\n' | grep '\.cm[ioa]$'`
 | |
| 
 | |
| if [ -z "$files" ]; then exit 0; fi
 | |
| 
 | |
| # Get the list of modules exported by the file(s).
 | |
| modules=`$OCAMLOBJINFO $files |
 | |
|           grep -E '(Unit|Module) name: ' |
 | |
|           awk '{print $3}'`
 | |
| 
 | |
| # Turn list of modules into a regexp that matches the module names.
 | |
| modules_re=`echo $modules | sed 's/ /|/g'`
 | |
| ignore_modules_re=`echo $ignore_modules | sed 's/ /|/g'`
 | |
| 
 | |
| # Get a list of the modules these file(s) depend on.
 | |
| $OCAMLOBJINFO $files |
 | |
| grep -Eo '[0-9a-f]{32}[[:space:]]+[A-Za-z0-9_]+' |
 | |
| grep -Ev "$modules_re" |
 | |
| while read md5sum module; do
 | |
|     echo "ocaml($module) = $md5sum"
 | |
| done |
 | |
| grep -Ev "$ignore_modules_re" |
 | |
| sort -u
 | |
| 
 | |
| if [ -n "$emit_compiler_version" ]; then
 | |
|     # Every OCaml program depends on the version of the
 | |
|     # runtime which was used to compile it.
 | |
|     echo "ocaml(runtime) = `cat /usr/lib*/ocaml/fedora-ocaml-release`"
 | |
| fi
 |