#!/bin/sh -ef
export LC_ALL=C

[ -d "$1" -a -d "$2" ]
cd "${workdir:?}"

mkdir -p 1 2
env workdir="$PWD"/1 linkage_problems -p "$1"
env workdir="$PWD"/2 linkage_problems -p "$2"

sort -t$'\t' -k5 -o 1/sodef 1/sodef
sort -t$'\t' -k2 -o 2/elfneed 2/elfneed
sort -t$'\t' -k2 -o 2/ref 2/ref

# join new soref on old sodef (soref is pipe, see linkage_problems)
join -t$'\t' -j 2 -o '1.1 2.1 1.2 2.3 1.4' 2/ref 2/elfneed |
	awk -F'\t' '$1==$2' |cut -f2- |sort -t$'\t' -T. -k4,4 |
		join -t$'\t' -14 -25 -o '1.1 1.2 1.3 2.1 2.2 2.3 2.4 2.5' - 1/sodef |
			awk -F'\t' '$3==$6' |cut -f-2,4- >joined
sort -o 2/ref -u 2/ref
awk -F'\t' 'BEGIN{OFS=FS}{print$1,$2,"U",$NF}' joined |sort -u |
	comm -23 2/ref - >unjoined

sort -t$'\t' -k7 -o 2/joined 2/joined
sort -t$'\t' -k4 -o unjoined unjoined

# now here are symbols that are joined on new sodef but cannot be joined on old sodef
# but exclude binaries that are joined within the same package (last awk condition)
join -t$'\t' -14 -27 -o '1.1 1.2 2.1 2.2 2.3 2.4 2.5 2.6 2.7' unjoined 2/joined |
	awk -F'\t' '$1==$3&&$2==$4&&$3!=$5' |cut -f3- >joindrift

sort -t$'\t' -k5 -o joindrift joindrift
sort -t$'\t' -k3 -o 1/sonames 1/sonames

# abidrift ::= newpkg newbin oldlibpkg oldlibpath newlibpkg newlibpath soname T sym
join -t$'\t' -15 -23 joindrift 1/sonames -o '1.1 1.2 2.1 2.2 1.3 1.4 1.5 1.6 1.7' >abidrift
sort -o abidrift -u abidrift
cat abidrift

cd - >/dev/null
