#!/bin/sh
set -C -e -f -u

foo_dev=libfoo3-dev
f_l_dev=libf-l4-dev
foo_lib=libfoo5
f_l_lib=libf-l6
src_dir=usr/share/ada/adainclude
gpr_dir=usr/share/gpr

DEB_HOST_MULTIARCH=`dpkg-architecture -qDEB_HOST_MULTIARCH`
lib_dir=usr/lib/$DEB_HOST_MULTIARCH
ali_dir=usr/lib/$DEB_HOST_MULTIARCH/ada/adalib

GNAT_PKG=gnat-`gnatgcc -dumpversion`
GPR_DEV_PKG=`sed -nr '/^ (libgnatprj[0-9.]+-dev),$/{s//\1/p;q}' debian/control`

cp -a tests/libfoo "$AUTOPKGTEST_TMP"
cd "$AUTOPKGTEST_TMP"/libfoo

DEB_DATE="`dpkg-parsechangelog -S date`"
ADA_SOURCES="`find foo f_l -name "*.ad[abs]"`"
touch "--date=$DEB_DATE" $ADA_SOURCES

sed "s/@GNAT_PKG@/$GNAT_PKG/;s/@GPR_DEV_PKG@/$GPR_DEV_PKG/" \
    debian/control.sed > debian/control

fakeroot make -f debian/rules binary

cd debian

sort > expected1 <<EOF
$foo_dev/$ali_dir/foo/sep.ali
$foo_dev/$ali_dir/foo/proc.ali
$foo_dev/$ali_dir/foo/specnobody.ali
$foo_dev/$ali_dir/foo/renamed.ali
$foo_dev/$ali_dir/foo/replacement.ali
$foo_dev/$lib_dir/libfoo.a
$foo_dev/usr/share/doc/$foo_dev/copyright
$foo_dev/usr/share/doc/$foo_dev/changelog.gz
$foo_dev/$src_dir/foo/specnobody.ads
$foo_dev/$src_dir/foo/sep.adb
$foo_dev/$src_dir/foo/proc.adb
$foo_dev/$src_dir/foo/c_hello.c
$foo_dev/$src_dir/foo/renamed.ads
$foo_dev/$src_dir/foo/sep.ads
$foo_dev/$src_dir/foo/proc.ads
$foo_dev/$src_dir/foo/sep-p.adb
$foo_dev/$src_dir/foo/renamed.ada
$foo_dev/$src_dir/foo/replacement.ads
$foo_dev/$src_dir/foo/c_hello.h
$foo_dev/$gpr_dir/foo.gpr
$foo_dev/DEBIAN/control
$foo_dev/DEBIAN/md5sums
EOF
find $foo_dev -type f | sort | diff expected1 -

sort > expected2 <<EOF
$foo_lib/$lib_dir/libfoo.so.5
$foo_lib/usr/share/doc/$foo_lib/copyright
$foo_lib/usr/share/doc/$foo_lib/changelog.gz
$foo_lib/DEBIAN/control
$foo_lib/DEBIAN/md5sums
$foo_lib/DEBIAN/shlibs
$foo_lib/DEBIAN/triggers
EOF
find $foo_lib -type f | sort | diff expected2 -

sort > expected3 <<EOF
$f_l_dev/$ali_dir/f_l/use_gpr.ali
$f_l_dev/$lib_dir/libf_l.a
$f_l_dev/$src_dir/f_l/use_gpr.adb
$f_l_dev/$src_dir/f_l/use_gpr.ads
$f_l_dev/$gpr_dir/f_l.gpr
$f_l_dev/usr/share/doc/$f_l_dev/copyright
$f_l_dev/usr/share/doc/$f_l_dev/changelog.gz
$f_l_dev/DEBIAN/control
$f_l_dev/DEBIAN/md5sums
EOF
find $f_l_dev -type f | sort | diff expected3 -

sort > expected4 <<EOF
$f_l_lib/$lib_dir/libf_l.so.6
$f_l_lib/usr/share/doc/$f_l_lib/copyright
$f_l_lib/usr/share/doc/$f_l_lib/changelog.gz
$f_l_lib/DEBIAN/control
$f_l_lib/DEBIAN/md5sums
$f_l_lib/DEBIAN/shlibs
$f_l_lib/DEBIAN/triggers
EOF
find $f_l_lib -type f | sort | diff expected4 -

cat > expected5 <<EOF
ada:Depends=$f_l_dev (= \${binary:Version}), zlib1g-dev, gnat, $GNAT_PKG, $foo_lib (= \${binary:Version})
EOF
grep ada:Depends $foo_dev.substvars | diff expected5 -

cat > expected6 <<EOF
ada:Depends=$GPR_DEV_PKG, gnat, $GNAT_PKG, $f_l_lib (= \${binary:Version})
EOF
grep ada:Depends $f_l_dev.substvars | diff expected6 -

diff -u $f_l_dev/$gpr_dir/f_l.gpr - <<EOF
--  This file is generated by dh_ada_library during package build.
--  Ada libraries in Debian are described at
--  https://people.debian.org/~lbrenta/debian-ada-policy.html.

with "gnatprj.gpr";
library project f_l is
   for Library_Name use "f_l";
   for Library_Kind use "dynamic";
   for Library_Dir use "/$lib_dir/";
   for Source_Dirs use ("/$src_dir/f_l");
   for Library_ALI_Dir use "/$ali_dir/f_l";
   for Externally_Built use "True";
end f_l;
EOF

diff -u $foo_dev/$gpr_dir/foo.gpr - <<EOF
--  This file is generated by dh_ada_library during package build.
--  Ada libraries in Debian are described at
--  https://people.debian.org/~lbrenta/debian-ada-policy.html.

with "f_l.gpr";
library project foo is
   for Library_Name use "foo";
   for Library_Kind use "dynamic";
   for Library_Dir use "/$lib_dir/";
   for Source_Dirs use ("/$src_dir/foo");
   for Library_ALI_Dir use "/$ali_dir/foo";
   for Externally_Built use "True";
   package Linker is
      for Linker_Options use ("-lz");
   end Linker;
   package Naming is
      for Implementation ("new_name")
        use "renamed.ada";
      for Specification ("new_name")
        use "renamed.ads";
      for Specification ("replaced")
        use "replacement.ads";
   end Naming;
end foo;
EOF

# Check the work-around stripping -fdebug-prefix-map.
status=0
grep 'fdebug-prefix-map=' \
     $f_l_dev/$ali_dir/f_l/use_gpr.ali \
     $foo_dev/$ali_dir/foo/proc.ali \
     $foo_dev/$ali_dir/foo/renamed.ali \
     $foo_dev/$ali_dir/foo/replacement.ali \
     $foo_dev/$ali_dir/foo/sep.ali \
     $foo_dev/$ali_dir/foo/specnobody.ali \
    || status=$?
test $status = 1

echo All checks passed.
