Plasma GitLab Archive
Projects Blog Knowledge

#! /bin/sh

# usage: like ocamlmklib. This is only to be used until O'Caml 3.10.
# O'Caml 3.11 supports ocamlmklib on mingw!

mingw_mklib () {
	libname=""
	clibname=""
	cmo=""
	cmx=""
	o=""
	dyno=""
	libopts=""
	ldopts=""
	ccopts=""

	while [ $# -gt 0 ]; do
		case "$1" in
			-o)
				libname="$2"; shift 2 ;;
			-oc)
				clibname="$2"; shift 2 ;;
			*.o)
				file="$1"
				o="$o $file"
				if [ -f "${file%*.o}".d.o ]; then
					dyno="$dyno ${file%*.o}.d.o"
				fi
				shift ;;
			*.a)
				echo "Archives not supported: $1" >&2
				exit 1 ;;
			*.cmo)
				cmo="$cmo $1"; shift ;;
			*.cmx)
				cmx="$cmx $1"; shift ;;
			-cclib)
				libopts="$libopts $2"; shift 2 ;;
			-ccopt)
				ccopts="$ccopts $2"; shift 2 ;;
			-ldopt)
				ldopts="$ldopts $2"; shift 2 ;;
			-L)
				ccopts="$ccopts -L$2"; shift 2 ;;
			-L*)
				ccopts="$ccopts $1"; shift ;;
			-l)
				libopts="$libopts -l$2"; shift 2 ;;
			-l*)
				libopts="$libopts $1"; shift ;;
			*)
				: ;;
		esac
	done

	if [ -z "$clibname" ]; then
		clibname="$libname"
	fi

	if [ -z "$libname" ]; then
		echo "Missing -o option!" >&2
		exit 1
	fi

	# Create static archive:
	if [ -n "$o" ]; then
		set -x
		rm -f "lib$clibname.a"
		ar cr "lib$clibname.a" $o
		ranlib "lib$clibname.a"	
		set +x
	fi

	# Create DLL:
	if [ -n "$dyno" -a -n "$cmo" ]; then
		stdlib=`ocamlc -where | sed -e 's/\r//'`
		set -x
		gcc -mno-cygwin -shared -o "dll$clibname.dll" \
			$dyno $ccopts $ldopts $libopts $stdlib/ocamlrun.a
		set +x
	fi

	# Create ocaml archive(s):
	if [ -n "$cmo" ]; then
		set -x
		ocamlc -a -o "$libname.cma" $cmo -dllib "-l$clibname" \
			-cclib "-l$clibname" -ccopt "$ccopts" \
			-cclib "$cclibs"
		set +x
	fi
	if [ -n "$cmx" ]; then
		set -x
		ocamlopt -a -o "$libname.cmxa" $cmx \
			-cclib "-l$clibname" -ccopt "$ccopts" \
			-cclib "$cclibs"
		set +x
	fi
}





set -e
system=`ocamlc -config | grep system | sed -e 's/system: //'`
version=`ocamlc -version`

case "$version" in
	3.09|3.09.*|3.10|3.10.*|3.11.0*)
		case "$system" in
			mingw*)
				mingw_mklib "$@" ;;
			*)
				set +x
				ocamlmklib "$@" ;;
		esac
		;;
	*)
		set +x
		ocamlmklib "$@"
		;;
esac


This web site is published by Informatikbüro Gerd Stolpmann
Powered by Caml