#!/bin/bash

log=${1}

usage() {
	echo "${0##*/} compilation_log"
	echo "  Returns a list of -llibrary gcc link commands."
	exit 1
}

if [[ $# -ne 1 ]]; then
	usage
fi

get_libnames() {
	for linkline in $(grep ' \-l[a-zA-Z]' ${1}); do
		if [[ "${linkline}" = -l[a-zA-Z]* ]]; then
			echo ${linkline%%\|*}
		fi
	done \
		| sort | sed -e "s:\.*::g" | uniq | sed -e "s:^-l::g"
}

get_libdirs() {
	cat /etc/ld.so.conf | sed -e "/^#/d"
}

libdirs="/lib /usr/lib $(get_libdirs)"

echo "Analyzing log ..."
libnames="$(get_libnames ${1})"

echo "Looking for libraries ..."
for libname in ${libnames}; do
	static=0
	shared=0
	if grep ' \-l[a-zA-Z]' ${1} | grep ${libname} | grep -q static; then
		static=1
	fi
	if ! grep ' \-l[a-zA-Z]' ${1} | grep ${libname} | grep -q static; then
		shared=1
	fi
	staticlibname="lib${libname}.a"
	sharedlibname="lib${libname}.so"
	if [[ ${static} -eq 1 ]]; then
		echo "  Looking for ${staticlibname}"
		for libdir in ${libdirs}; do
			if [[ -e ${libdir}/${staticlibname} ]]; then
				libpaths="${libpaths} ${libdir}/${staticlibname}"
			fi
		done
	fi
	if [[ ${shared} -eq 1 ]]; then
		echo "  Looking for ${sharedlibname}"
		for libdir in ${libdirs}; do
			if [[ -e ${libdir}/${sharedlibname} ]]; then
				libpaths="${libpaths} ${libdir}/${sharedlibname}"
			fi
		done
	fi
done

echo "Tracing libraries back to packages ..."
echo
equery -q belongs ${libpaths} | cut -d'(' -f1
