aboutsummaryrefslogtreecommitdiffstats
path: root/lang
diff options
context:
space:
mode:
authormarino <marino@FreeBSD.org>2014-04-13 06:04:15 +0800
committermarino <marino@FreeBSD.org>2014-04-13 06:04:15 +0800
commitd80ea7bd01c6c7403d075865dcbde00dbf460988 (patch)
treeb9ea194e40ec1cc4aba61e0459a9e3e03c0d4f95 /lang
parent2193a7fe690ba00229e454d05f74d8ab2a1544ed (diff)
downloadfreebsd-ports-gnome-d80ea7bd01c6c7403d075865dcbde00dbf460988.tar.gz
freebsd-ports-gnome-d80ea7bd01c6c7403d075865dcbde00dbf460988.tar.zst
freebsd-ports-gnome-d80ea7bd01c6c7403d075865dcbde00dbf460988.zip
lang/gnatdroid-armv7 (&gcc-aux): Fix socket support and gnat.dg testsuite
The socket support on Gnatdroid was broken, and it had to be fixed at lang/gcc-aux. Until now, the dejagnu testsuite did not work on remote targets. To fix this, support files had to be installed at ${LOCALBASE}/share/dejagnu. Dejagnu was not made a run dependency, conditional or otherwise. The test targets for gnatdroid are really maintainer targets. Running the gnat.dg testsuite confirms that everything works in the cross-compiler except stack checking (there's no support in gcc for this just yet).
Diffstat (limited to 'lang')
-rw-r--r--lang/gcc-aux/Makefile21
-rw-r--r--lang/gcc-aux/Makefile.version4
-rw-r--r--lang/gcc-aux/files/android.exp106
-rw-r--r--lang/gcc-aux/files/diff-ada46
-rw-r--r--lang/gcc-aux/files/diff-ada-testsuite415
-rw-r--r--lang/gcc-aux/files/gnatdroid.exp14
-rw-r--r--lang/gnatdroid-armv7/Makefile7
-rw-r--r--lang/gnatdroid-armv7/files/acats.diff63
8 files changed, 589 insertions, 87 deletions
diff --git a/lang/gcc-aux/Makefile b/lang/gcc-aux/Makefile
index 6f4e3a937075..1d2a0c03e60b 100644
--- a/lang/gcc-aux/Makefile
+++ b/lang/gcc-aux/Makefile
@@ -26,6 +26,7 @@ BOOTSTRAP_COMPILER= gnat-bootstrap.${GARCH}.${OPSYS:L}.tar.bz2
BLD_TARGET= ${GARCH}-aux-${OPSYS:L}${OSREL}
FULL_GNATGCC= NOT_SET
OS_LABEL4VERS= [${OPSYS}${GARCH:M*64:S/amd_//:S/x86_//}]
+NO_MTREE= yes
OPTIONS_GROUP= Standard Bootstrap
OPTIONS_GROUP_Standard= FORT OBJC NLS TESTSUITE STATIC
@@ -250,17 +251,25 @@ test-objc:
do-install:
cd ${BUILDDIR} && ${SETENV} ${ADA_MAKE_ENV} \
${MAKE_CMD} install-strip ${MAKE_ARGS}
- ${RM} -rf ${STAGEDIR}${PKG_PREFIX}/share/info
+ ${MV} ${STAGEDIR}${PKG_PREFIX}/share ${WRKDIR}/moved_share
+ ${MKDIR} -p ${STAGEDIR}${PREFIX}/share/dejagnu/baseboards \
+ ${STAGEDIR}${PREFIX}/share/dejagnu/config
+ ${INSTALL_DATA} ${FILESDIR}/android.exp \
+ ${STAGEDIR}${PREFIX}/share/dejagnu/config
+ ${INSTALL_DATA} ${FILESDIR}/gnatdroid.exp \
+ ${STAGEDIR}${PREFIX}/share/dejagnu/baseboards
post-install:
cd ${STAGEDIR}${PKG_PREFIX}; ${FIND} * -type d -empty | \
${SORT} -dr | ${XARGS} ${RMDIR}
- cd ${STAGEDIR}${PREFIX}; \
- ${FIND} ${PORTNAME} \( -type f -or -type l \) | \
- ${SORT} | ${SED} -e 's/\/man\/man[1578]\/.*[1578]$$/&.gz/' \
- >> ${TMPPLIST}
+ cd ${STAGEDIR}${PREFIX}; ${FIND} ${PORTNAME} share \
+ \( -type f -or -type l \) | ${SORT} | \
+ ${SED} -e 's/\/man\/man[1578]\/.*[1578]$$/&.gz/' >> ${TMPPLIST}
cd ${STAGEDIR}${PREFIX}; ${FIND} ${PORTNAME} -type d | ${SORT} -r | \
- ${SED} -e '/^share/d' -e 's/^/@dirrm /g' >> ${TMPPLIST}
+ ${SED} -e 's/^/@dirrm /g' >> ${TMPPLIST}
+ cd ${STAGEDIR}${PREFIX}; ${FIND} share -type d | ${SORT} -r | \
+ ${SED} -e 's/\(.*\)/@unexec rmdir %D\/\1 2>\/dev\/null || true/g' \
+ >> ${TMPPLIST}
.if ${PORT_OPTIONS:MBOOTSTRAP}
post-stage:
diff --git a/lang/gcc-aux/Makefile.version b/lang/gcc-aux/Makefile.version
index 8b0b88e2f77f..2b7aee618ec8 100644
--- a/lang/gcc-aux/Makefile.version
+++ b/lang/gcc-aux/Makefile.version
@@ -4,9 +4,9 @@ GCC_BRANCH= 4.9
GCC_POINT= 0
GCC_VERSION= ${GCC_BRANCH}.${GCC_POINT}
SNAPSHOT= 20140406
-MAIN_PR= 1
+MAIN_PR= 2
ARMV5_PR= 1
-ARMV7_PR= 1
+ARMV7_PR= 2
IDENTIFICATION= gcc-${GCC_BRANCH}-${SNAPSHOT}
MS_SUBDIR= snapshots/${GCC_BRANCH}-${SNAPSHOT}
diff --git a/lang/gcc-aux/files/android.exp b/lang/gcc-aux/files/android.exp
new file mode 100644
index 000000000000..b3eb17563371
--- /dev/null
+++ b/lang/gcc-aux/files/android.exp
@@ -0,0 +1,106 @@
+# This file is part of DejaGnu.
+
+if {![info exists board]} {
+ error "must set $board before loading android.exp"
+}
+
+# For rcp_download, rsh_exec.
+load_lib remote.exp
+
+#
+# unix_load -- load the program and execute it
+#
+# See default.exp for explanation of arguments and results.
+#
+
+
+proc unix_load { dest prog args } {
+ global ld_library_path
+ set output ""
+ set orig_ld_library_path ""
+
+ if { [llength $args] > 0 } {
+ set parg [lindex $args 0]
+ } else {
+ set parg ""
+ }
+
+ if { [llength $args] > 1 } {
+ set inp [lindex $args 1]
+ } else {
+ set inp ""
+ }
+
+ if {![file exists $prog]} then {
+ # We call both here because this should never happen.
+ perror "$prog does not exist in unix_load."
+ verbose -log "$prog does not exist." 3
+ return "untested"
+ }
+ verbose "loading to $dest" 2
+ if {![is_remote $dest]} {
+ if { "$inp" != "" } {
+ set command "$prog $parg < $inp"
+ } else {
+ set command "$prog $parg"
+ }
+
+ if {![info exists ld_library_path]} {
+ set ld_library_path ""
+ }
+
+ set orig_ld_library_path "[getenv LD_LIBRARY_PATH]"
+ setenv LD_LIBRARY_PATH "$ld_library_path:$orig_ld_library_path"
+ setenv SHLIB_PATH "$ld_library_path:$orig_ld_library_path"
+ verbose -log "Setting LD_LIBRARY_PATH to $ld_library_path:$orig_ld_library_path" 2
+
+ set id [remote_spawn $dest "$command" "readonly"]
+ if { $id < 0 } {
+ set output "remote_spawn failed"
+ set status -1
+ } else {
+ set status [remote_wait $dest 300]
+ set output [lindex $status 1]
+ set status [lindex $status 0]
+ }
+ # Unset them so we don't potentially get hosed when we try to run a
+ # non-testcase executable. (Setting LD_LIBRARY_PATH is the wrong
+ # fix in the first place; this just tries to minimize the resulting
+ # crap.)
+ if {[info exists ld_library_path]} {
+ setenv LD_LIBRARY_PATH $orig_ld_library_path
+ setenv SHLIB_PATH $orig_ld_library_path
+ }
+ } else {
+ set remotefile "/data/local/testsuite/[file tail $prog].[pid]"
+ set remotefile [remote_download $dest $prog $remotefile]
+ if { $remotefile == "" } {
+ verbose -log "Download of $prog to [board_info $dest name] failed." 3
+ return [list "unresolved" ""]
+ }
+ set status [remote_exec $dest "$remotefile" $parg $inp]
+ remote_file $dest delete $remotefile.o $remotefile
+ if { [lindex $status 0] < 0 } {
+ verbose -log "Couldn't execute $prog, [lindex $status 1]" 3
+ return [list "unresolved" ""]
+ }
+ set output [lindex $status 1]
+ set status [lindex $status 0]
+ }
+
+ setenv LD_LIBRARY_PATH $orig_ld_library_path
+ setenv SHLIB_PATH $orig_ld_library_path
+
+ verbose "Executed $prog, status $status" 2
+ if {![string match "" $output]} {
+ verbose -- "$output" 2
+ }
+ if { $status == 0 } {
+ set result "pass"
+ } else {
+ set result "fail"
+ }
+ return [list $result $output]
+}
+
+set_board_info protocol "unix"
diff --git a/lang/gcc-aux/files/diff-ada b/lang/gcc-aux/files/diff-ada
index 1763266297c6..53b26e3b6497 100644
--- a/lang/gcc-aux/files/diff-ada
+++ b/lang/gcc-aux/files/diff-ada
@@ -846,7 +846,7 @@
+ use Interfaces;
+ flags : constant Unsigned_32 :=
+ Unsigned_32 (C_Fcntl (S, SOSC.F_GETFL, 0));
-+ nonblock : constant Unsigned_32 := Unsigned_32 (SOSC.FNDELAY);
++ nonblock : constant Unsigned_32 := Unsigned_32 (SOSC.O_NDELAY);
+ enabled : constant Boolean := Arg.all = 1;
+ newval : C.int := C.int (flags);
+ begin
@@ -1207,7 +1207,7 @@
+ use Interfaces;
+ flags : constant Unsigned_32 :=
+ Unsigned_32 (C_Fcntl (S, SOSC.F_GETFL, 0));
-+ nonblock : constant Unsigned_32 := Unsigned_32 (SOSC.FNDELAY);
++ nonblock : constant Unsigned_32 := Unsigned_32 (SOSC.O_NDELAY);
+ enabled : constant Boolean := Arg.all = 1;
+ newval : C.int := C.int (flags);
+ begin
@@ -1816,7 +1816,7 @@
#warning Sockets not supported on these platforms
#undef HAVE_SOCKETS
-@@ -198,8 +198,18 @@
+@@ -198,8 +198,19 @@
#include <netdb.h>
#endif
@@ -1831,13 +1831,14 @@
+ || defined (__DragonFly__) \
+ || defined (__NetBSD__) \
+ || defined (__OpenBSD__) \
++ || defined (__ANDROID__) \
+ || defined (__hpux__) \
+ || defined (_WIN32) \
+ || defined (__APPLE__)
# define HAVE_THREAD_SAFE_GETxxxBYyyy 1
#elif defined (linux) || defined (__GLIBC__) || \
-@@ -231,7 +241,13 @@
+@@ -231,7 +242,13 @@
# endif
#endif
@@ -7685,6 +7686,20 @@
/* To be called from an established signal handler. Setup the DWARF CFI
bits letting unwinders walk through the signal frame up into the
+--- gcc/ada/socket.c.orig
++++ gcc/ada/socket.c
+@@ -65,7 +65,10 @@
+ int s_port;
+ __netdb_char_ptr s_proto;
+ };
+-#elif defined(__FreeBSD__)
++#elif defined(__FreeBSD__) \
++ || defined(__DragonFly__) \
++ || defined(__OpenBSD__) \
++ || defined(__NetBSD__)
+ typedef unsigned int IOCTL_Req_T;
+ #else
+ typedef int IOCTL_Req_T;
--- gcc/ada/sysdep.c.orig
+++ gcc/ada/sysdep.c
@@ -263,6 +263,7 @@
@@ -8868,7 +8883,7 @@
TARGET_ADA_SRCS =
--- gcc/ada/gcc-interface/Makefile.in.orig
+++ gcc/ada/gcc-interface/Makefile.in
-@@ -1044,25 +1044,27 @@
+@@ -1044,25 +1044,24 @@
ifeq ($(strip $(filter-out arm% linux-androideabi,$(target_cpu) $(target_os))),)
LIBGNAT_TARGET_PAIRS = \
a-intnam.ads<a-intnam-linux.ads \
@@ -8878,7 +8893,6 @@
- s-linux.ads<s-linux.ads \
+ s-intman.adb<s-intman-android.adb \
+ s-linux.ads<s-linux-android.ads \
-+ s-mudido.adb<s-mudido-affinity.adb \
s-osinte.adb<s-osinte-android.adb \
s-osinte.ads<s-osinte-android.ads \
s-osprim.adb<s-osprim-posix.adb \
@@ -8887,15 +8901,15 @@
+ s-taspri.ads<s-taspri-posix.ads \
s-tpopsp.adb<s-tpopsp-posix-foreign.adb \
system.ads<system-linux-armel.ads \
+- $(DUMMY_SOCKETS_TARGET_PAIRS)
+ a-exexpr.adb<a-exexpr-gcc.adb \
-+ s-excmac.ads<s-excmac-arm.ads \
- $(DUMMY_SOCKETS_TARGET_PAIRS)
++ s-excmac.ads<s-excmac-arm.ads
- TOOLS_TARGET_PAIRS = \
- mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
- indepsw.adb<indepsw-gnu.adb
-
- GNATRTL_SOCKETS_OBJS =
+- GNATRTL_SOCKETS_OBJS =
EXTRA_GNATRTL_TASKING_OBJS=s-linux.o
- EH_MECHANISM=
+ EXTRA_LIBGNAT_OBJS+=raise-gcc.o sigtramp-armdroid.o
@@ -8904,7 +8918,7 @@
THREADSLIB =
GNATLIB_SHARED = gnatlib-shared-dual
LIBRARY_VERSION := $(LIB_VERSION)
-@@ -1072,6 +1074,7 @@
+@@ -1072,6 +1071,7 @@
ifeq ($(strip $(filter-out sparc% sun solaris%,$(target_cpu) $(target_vendor) $(target_os))),)
LIBGNAT_TARGET_PAIRS_COMMON = \
a-intnam.ads<a-intnam-solaris.ads \
@@ -8912,7 +8926,7 @@
s-inmaop.adb<s-inmaop-posix.adb \
s-intman.adb<s-intman-solaris.adb \
s-mudido.adb<s-mudido-affinity.adb \
-@@ -1114,6 +1117,8 @@
+@@ -1114,6 +1114,8 @@
TOOLS_TARGET_PAIRS=mlib-tgt-specific.adb<mlib-tgt-specific-solaris.adb
EH_MECHANISM=-gcc
@@ -8921,7 +8935,7 @@
THREADSLIB = -lposix4 -lthread
MISCLIB = -lposix4 -lnsl -lsocket
SO_OPTS = -Wl,-h,
-@@ -1325,12 +1330,17 @@
+@@ -1325,12 +1327,17 @@
# x86 FreeBSD
ifeq ($(strip $(filter-out %86 freebsd%,$(target_cpu) $(target_os))),)
LIBGNAT_TARGET_PAIRS = \
@@ -8941,7 +8955,7 @@
s-taprop.adb<s-taprop-posix.adb \
s-taspri.ads<s-taspri-posix.ads \
s-tpopsp.adb<s-tpopsp-posix.adb \
-@@ -1338,11 +1348,12 @@
+@@ -1338,11 +1345,12 @@
$(X86_TARGET_PAIRS) \
system.ads<system-freebsd-x86.ads
@@ -8956,7 +8970,7 @@
EH_MECHANISM=-gcc
THREADSLIB= -lpthread
-@@ -1354,12 +1365,17 @@
+@@ -1354,12 +1362,17 @@
# x86-64 FreeBSD
ifeq ($(strip $(filter-out %86_64 freebsd%,$(target_cpu) $(target_os))),)
LIBGNAT_TARGET_PAIRS = \
@@ -8976,7 +8990,7 @@
s-taprop.adb<s-taprop-posix.adb \
s-taspri.ads<s-taspri-posix.ads \
s-tpopsp.adb<s-tpopsp-posix.adb \
-@@ -1367,11 +1383,240 @@
+@@ -1367,11 +1380,240 @@
$(X86_64_TARGET_PAIRS) \
system.ads<system-freebsd-x86_64.ads
@@ -9219,7 +9233,7 @@
EH_MECHANISM=-gcc
THREADSLIB= -lpthread
-@@ -3063,6 +3308,7 @@
+@@ -3063,6 +3305,7 @@
socket.o : socket.c gsocket.h
sysdep.o : sysdep.c
raise.o : raise.c raise.h
diff --git a/lang/gcc-aux/files/diff-ada-testsuite b/lang/gcc-aux/files/diff-ada-testsuite
index 6ddaf4193ba3..d3e971b19aa4 100644
--- a/lang/gcc-aux/files/diff-ada-testsuite
+++ b/lang/gcc-aux/files/diff-ada-testsuite
@@ -109,6 +109,421 @@
egrep -e '(==== |\+\+\+\+ |\!\!\!\! )' ${i}.log > /dev/null 2>&1
if [ $? -ne 0 ]; then
grep 'tasking not implemented' ${i}.log > /dev/null 2>&1
+--- /dev/null
++++ gcc/testsuite/ada/acats/run_remote.sh
+@@ -0,0 +1,412 @@
++#!/bin/sh
++# Run ACATS with the GNU Ada compiler
++
++# The following functions are to be customized if you run in cross
++# environment or want to change compilation flags. Note that for
++# tests requiring checks not turned on by default, this script
++# automatically adds the needed flags to pass (ie: -gnato or -gnatE).
++
++# gccflags="-O3 -fomit-frame-pointer -funroll-all-loops -finline-functions"
++# gnatflags="-gnatN"
++
++gccflags="-O2"
++gnatflags="-gnatws"
++tabtarget="/data/local/testsuite"
++STRIP="arm-aux-linux-androideabi-strip"
++
++target_run () {
++ # Run on rooted tablet (port 22 vs port 2222)
++ BN=`basename $*`
++ $STRIP_FOR_TARGET $*
++ /usr/bin/scp -qp $* root@tablet:$tabtarget/
++ /usr/bin/ssh -q tablet $tabtarget/$BN
++}
++
++target_cmd () {
++ /usr/bin/ssh -q tablet "$1"
++}
++
++# End of customization section.
++
++display_noeol () {
++ printf "$@"
++ printf "$@" >> $dir/acats.sum
++ printf "$@" >> $dir/acats.log
++}
++
++display () {
++ echo "$@"
++ echo "$@" >> $dir/acats.sum
++ echo "$@" >> $dir/acats.log
++}
++
++log () {
++ echo "$@" >> $dir/acats.sum
++ echo "$@" >> $dir/acats.log
++}
++
++inform () {
++ printf "%04d %7s" $1 $2
++}
++
++disinform () {
++ printf "\r"
++}
++
++dir=`${PWDCMD-pwd}`
++
++if [ "$testdir" = "" ]; then
++ echo You must use make check or make check-ada
++ exit 1
++fi
++
++if [ "$dir" = "$testdir" ]; then
++ echo "error: srcdir must be different than objdir, exiting."
++ exit 1
++fi
++
++target_gnatmake () {
++ echo gnatmake-cross --GCC=\"$GCC\" $gnatflags $gccflags $* -largs $EXTERNAL_OBJECTS --GCC=\"$GCC\"
++ gnatmake-cross --GCC="$GCC" $gnatflags $gccflags $* -largs $EXTERNAL_OBJECTS --GCC="$GCC"
++}
++
++target_gcc () {
++ $GCC $gccflags $*
++}
++
++clean_dir () {
++ rm -f "$binmain" *.o *.ali > /dev/null 2>&1
++}
++
++find_main () {
++ ls ${i}?.adb > ${i}.lst 2> /dev/null
++ ls ${i}*m.adb >> ${i}.lst 2> /dev/null
++ ls ${i}.adb >> ${i}.lst 2> /dev/null
++ main=`tail -1 ${i}.lst`
++}
++
++split_testid () {
++ local mysplit=`echo $1 | awk -F/ '{print "section=" $1 "; TN=" $2 "; prog=" $3 ";"}'`
++ eval ${mysplit}
++}
++
++EXTERNAL_OBJECTS=""
++# Global variable to communicate external objects to link with.
++
++rm -f $dir/acats.sum $dir/acats.log $dir/transfer.lst
++
++display "Test Run By $USER on `date`"
++
++display " === acats configuration ==="
++
++target=`$GCC -dumpmachine`
++
++display target gcc is $GCC
++display `$GCC -v 2>&1`
++display host=`gcc -dumpmachine`
++display target=$target
++display `type gnatmake-cross`
++gnatls-cross -v >> $dir/acats.log
++display ""
++
++# Let's be tidy and clear off the remote device first
++target_cmd "cd ${tabtarget}; rm logs/*; rmdir logs; rm *"
++
++display " === acats support ==="
++display_noeol "Generating support files..."
++
++rm -rf $dir/support
++mkdir -p $dir/support
++cd $dir/support
++
++cp $testdir/support/*.ada $testdir/support/*.a $testdir/support/*.tst $dir/support
++
++# Find out the size in bit of an address on the target
++target_gnatmake $testdir/support/impbit.adb >> $dir/acats.log 2>&1
++target_run $dir/support/impbit > $dir/support/impbit.out 2>&1
++target_bit=`cat $dir/support/impbit.out`
++echo target_bit="$target_bit" >> $dir/acats.log
++
++# Find out a suitable asm statement
++# Adapted from configure.ac gcc_cv_as_dwarf2_debug_line
++case "$target" in
++ ia64*-*-* | s390*-*-*)
++ target_insn="nop 0"
++ ;;
++ mmix-*-*)
++ target_insn="swym 0"
++ ;;
++ *)
++ target_insn="nop"
++ ;;
++esac
++echo target_insn="$target_insn" >> $dir/acats.log
++
++sed -e "s,ACATS4GNATDIR,$dir,g" \
++ < $testdir/support/impdef.a > $dir/support/impdef.a
++sed -e "s,ACATS4GNATDIR,$dir,g" \
++ -e "s,ACATS4GNATBIT,$target_bit,g" \
++ -e "s,ACATS4GNATINSN,$target_insn,g" \
++ < $testdir/support/macro.dfs > $dir/support/MACRO.DFS
++sed -e "s,ACATS4GNATDIR,$dir,g" \
++ < $testdir/support/tsttests.dat > $dir/support/TSTTESTS.DAT
++
++cp $testdir/tests/cd/*.c $dir/support
++cp $testdir/tests/cxb/*.c $dir/support
++grep -v '^#' $testdir/norun.lst | sort > $dir/support/norun.lst
++
++rm -rf $dir/run
++mv $dir/tests $dir/tests.$$ 2> /dev/null
++rm -rf $dir/tests.$$ &
++mkdir -p $dir/run
++
++cp -pr $testdir/tests $dir/
++
++for i in $dir/support/*.ada $dir/support/*.a; do
++ host_gnatchop $i >> $dir/acats.log 2>&1
++done
++
++# These tools are used to preprocess some ACATS sources
++# they need to be compiled native on the host.
++
++host_gnatmake -q -gnatws macrosub.adb
++if [ $? -ne 0 ]; then
++ display "**** Failed to compile macrosub"
++ exit 1
++fi
++./macrosub > macrosub.out 2>&1
++
++gcc -c cd300051.c
++host_gnatmake -q -gnatws widechr.adb
++if [ $? -ne 0 ]; then
++ display "**** Failed to compile widechr"
++ exit 1
++fi
++./widechr > widechr.out 2>&1
++
++rm -f $dir/support/macrosub
++rm -f $dir/support/widechr
++rm -f $dir/support/*.ali
++rm -f $dir/support/*.o
++
++display " done."
++
++# From here, all compilations will be made by the target compiler
++
++display_noeol "Compiling support files..."
++
++target_gcc -c *.c
++if [ $? -ne 0 ]; then
++ display "**** Failed to compile C code"
++ exit 1
++fi
++
++host_gnatchop *.adt >> $dir/acats.log 2>&1
++
++target_gnatmake -c -gnato -gnatE *.ads >> $dir/acats.log 2>&1
++target_gnatmake -c -gnato -gnatE *.adb >> $dir/acats.log 2>&1
++
++display " done."
++display ""
++display " === acats tests ==="
++
++if [ $# -eq 0 ]; then
++ chapters=`cd $dir/tests; echo [a-z]*`
++else
++ chapters=$*
++fi
++
++glob_countn=0
++glob_countok=0
++glob_countu=0
++countdown=0
++
++for chapter in $chapters; do
++ if [ -d $dir/tests/$chapter ]; then
++ cd $dir/tests/$chapter
++ ls *.a *.ada *.adt *.am *.dep 2> /dev/null | sed -e 's/\(.*\)\..*/\1/g' | \
++ cut -c1-7 | sort | uniq | comm -23 - $dir/support/norun.lst \
++ > $dir/tests/$chapter/${chapter}.lst
++ countn=`wc -l < $dir/tests/$chapter/${chapter}.lst`
++ countdown=`expr $countdown + $countn`
++ fi
++done
++
++cat > $dir/execute.sh << EOF
++inform () {
++ printf "left: %04d" \$1
++}
++disinform () {
++ printf "\r"
++}
++cycle () {
++ local countx=0
++ local total=\$(echo \$testlist | awk '{print NF}')
++ mkdir -p logs
++ echo "Executing \$total tests on remote device"
++ inform \$total
++ for x in \$testlist; do
++ timeout -t 30 ./\${x} > logs/\${x}.log 2>&1
++ countx=\$(expr \$countx + 1)
++ if [ \$countx -eq 25 ]; then
++ total=\$(expr \$total - 25)
++ countx=0
++ disinform
++ inform \$total
++ fi
++ done
++ disinform
++ tar -czf remote.logs.tar.gz logs
++}
++testlist=" \\
++EOF
++
++display "All tests are being cross-compiled without execution first."
++
++for chapter in $chapters; do
++ if [ ! -d $dir/tests/$chapter ]; then
++ continue
++ fi
++
++ countn=`wc -l < $dir/tests/$chapter/${chapter}.lst`
++ glob_countn=`expr $glob_countn + $countn`
++ counti=0
++ for i in `cat $dir/tests/$chapter/${chapter}.lst`; do
++ counti=`expr $counti + 1`
++ extraflags="-gnat95"
++ grep $i $testdir/overflow.lst > /dev/null 2>&1
++ if [ $? -eq 0 ]; then
++ extraflags="$extraflags -gnato"
++ fi
++ grep $i $testdir/elabd.lst > /dev/null 2>&1
++ if [ $? -eq 0 ]; then
++ extraflags="$extraflags -gnatE"
++ fi
++ grep $i $testdir/floatstore.lst > /dev/null 2>&1
++ if [ $? -eq 0 ]; then
++ extraflags="$extraflags -ffloat-store"
++ fi
++ grep $i $testdir/stackcheck.lst > /dev/null 2>&1
++ if [ $? -eq 0 ]; then
++ extraflags="$extraflags -fstack-check"
++ fi
++ inform $countdown $i
++ countdown=`expr $countdown - 1`
++ test=$dir/tests/$chapter/$i
++ mkdir $test && cd $test >> $dir/acats.log 2>&1
++
++ if [ $? -ne 0 ]; then
++ disinform
++ display "FAIL: $i"
++ failed="${failed}${i} "
++ clean_dir
++ continue
++ fi
++
++ host_gnatchop -c -w `ls ${test}*.a ${test}*.ada ${test}*.adt ${test}*.am ${test}*.dep 2> /dev/null` >> $dir/acats.log 2>&1
++ find_main
++ if [ -z "$main" ]; then
++ sync
++ find_main
++ fi
++ binmain=`echo $main | sed -e 's/\(.*\)\..*/\1/g'`
++ echo "BUILD $main" >> $dir/acats.log
++ EXTERNAL_OBJECTS=""
++ case $i in
++ cxb30*) EXTERNAL_OBJECTS="$dir/support/cxb30040.o $dir/support/cxb30060.o $dir/support/cxb30130.o $dir/support/cxb30131.o";;
++ ca1020e) rm -f ca1020e_func1.adb ca1020e_func2.adb ca1020e_proc1.adb ca1020e_proc2.adb > /dev/null 2>&1;;
++ ca14028) rm -f ca14028_func2.ads ca14028_func3.ads ca14028_proc1.ads ca14028_proc3.ads > /dev/null 2>&1;;
++ cxh1001) extraflags="-a -f"; echo "pragma Normalize_Scalars;" > gnat.adc
++ esac
++ if [ "$main" = "" ]; then
++ disinform
++ display "FAIL: $i"
++ failed="${failed}${i} "
++ clean_dir
++ continue
++ fi
++
++ target_gnatmake $extraflags -I$dir/support $main >> $dir/acats.log 2>&1
++ if [ $? -ne 0 ]; then
++ disinform
++ display "FAIL: $i"
++ failed="${failed}${i} "
++ clean_dir
++ continue
++ fi
++ echo $chapter/$i/$binmain >> $dir/transfer.lst
++ echo "$binmain \\" >> $dir/execute.sh
++ $STRIP $binmain
++ disinform
++ done
++done
++echo '"' >> $dir/execute.sh
++echo "cycle" >> $dir/execute.sh
++
++sync
++display "Transfer files to remote device: root@tablet:$tabtarget/"
++cd $dir/tests
++cat $dir/transfer.lst | xargs tar --strip-components=2 -czf - | \
++ target_cmd "tar -C $tabtarget -xzf -"
++cd $dir
++tar -czf - execute.sh | target_cmd "tar -C $tabtarget -xzf -"
++target_cmd "cd $tabtarget; sh execute.sh"
++rm -rf $dir/logs $dir/remote.logs.tar.gz
++/usr/bin/scp -q root@tablet:$tabtarget/remote.logs.tar.gz $dir/
++tar -xzf $dir/remote.logs.tar.gz
++
++countdown=`wc -l < $dir/transfer.lst`
++glob_countn=${countdown}
++for i in `cat $dir/transfer.lst`; do
++ split_testid $i
++ if [ "$section" != "$savedsect" ]; then
++ display Running chapter $section ...
++ fi
++ savedsect=$section
++
++ #inform $countdown $TN
++ countdown=`expr $countdown - 1`
++ proglog="$dir/logs/${prog}.log"
++ echo "RUN $prog" >> $dir/acats.log
++ if [ ! -f $proglog ]; then
++ echo "LOG NOT FOUND!" >> $proglog
++ fi
++
++ cat $proglog >> $dir/acats.log
++
++ egrep -e '(==== |\+\+\+\+ |\!\!\!\! )' $proglog > /dev/null 2>&1
++ if [ $? -ne 0 ]; then
++ grep 'tasking not implemented' $proglog > /dev/null 2>&1
++
++ if [ $? -ne 0 ]; then
++ display "FAIL: ${TN}"
++ failed="${failed}${TN} "
++ else
++ log "UNSUPPORTED: ${TN}"
++ glob_countn=`expr $glob_countn - 1`
++ glob_countu=`expr $glob_countu + 1`
++ fi
++ else
++ log "PASS: ${TN}"
++ glob_countok=`expr $glob_countok + 1`
++ fi
++ cd $dir/tests/$section/$TN
++ clean_dir
++ #disinform
++done
++
++display " === acats Summary ==="
++display "# of expected passes $glob_countok"
++display "# of unexpected failures `expr $glob_countn - $glob_countok`"
++
++if [ $glob_countu -ne 0 ]; then
++ display "# of unsupported tests $glob_countu"
++fi
++
++if [ $glob_countok -ne $glob_countn ]; then
++ display "*** FAILURES: $failed"
++fi
++
++display "$0 completed at `date`"
++
++exit 0
--- gcc/testsuite/gnat.dg/test_raise_from_pure.adb.orig
+++ gcc/testsuite/gnat.dg/test_raise_from_pure.adb
@@ -1,4 +1,4 @@
diff --git a/lang/gcc-aux/files/gnatdroid.exp b/lang/gcc-aux/files/gnatdroid.exp
new file mode 100644
index 000000000000..978319f8a9b1
--- /dev/null
+++ b/lang/gcc-aux/files/gnatdroid.exp
@@ -0,0 +1,14 @@
+# gnatdroid testsuite running over ssh.
+
+load_generic_config "android"
+
+process_multilib_options ""
+
+# The default compiler for this target.
+set_board_info compiler "[find_gcc]"
+
+set_board_info rsh_prog /usr/bin/ssh
+set_board_info rcp_prog /usr/bin/scp
+set_board_info protocol standard
+set_board_info hostname tablet
+set_board_info username root
diff --git a/lang/gnatdroid-armv7/Makefile b/lang/gnatdroid-armv7/Makefile
index 0868aed0851e..f2b5f32d5383 100644
--- a/lang/gnatdroid-armv7/Makefile
+++ b/lang/gnatdroid-armv7/Makefile
@@ -109,6 +109,8 @@ post-extract:
@${ECHO} "Applying composite patch diff-${suffix}"
@${PATCH} -d ${WRKSRC} -s -E < ${PATCHDIR}/diff-${suffix}
.endfor
+ @(cd ${WRKSRC}/gcc/testsuite/ada/acats && \
+ ${CP} run_remote.sh run_all.sh)
do-configure:
${MKDIR} ${BUILD_WRKSRC}
@@ -145,4 +147,9 @@ acats: build
PATH=${LOCALBASE}/gcc-aux/bin:${PATH}:${PREFIX}/bin \
gmake -sk check-acats
+gnatdg: build
+ cd ${BUILD_WRKSRC}/gcc && ${SETENV} \
+ PATH=${LOCALBASE}/gcc-aux/bin:${PATH}:${PREFIX}/bin \
+ gmake -sk check-gnat RUNTESTFLAGS=--target_board=gnatdroid
+
.include <bsd.port.mk>
diff --git a/lang/gnatdroid-armv7/files/acats.diff b/lang/gnatdroid-armv7/files/acats.diff
index 8b97ffc497ed..631c077a6503 100644
--- a/lang/gnatdroid-armv7/files/acats.diff
+++ b/lang/gnatdroid-armv7/files/acats.diff
@@ -38,66 +38,3 @@ Before running the testsuite, define "tablet" in /etc/hosts
echo export PATH >> host_gnatmake
echo exec gnatmake '"$@"' >> host_gnatmake
---- gcc/testsuite/ada/acats/run_all.sh.orig 2011-08-18 12:31:42.000000000 -0500
-+++ gcc/testsuite/ada/acats/run_all.sh 2011-08-18 18:26:04.000000000 -0500
-@@ -11,9 +11,14 @@
-
- gccflags="-O2"
- gnatflags="-gnatws"
-+tabtarget="/data/local/testsuite"
-
- target_run () {
-- eval $EXPECT -f $testdir/run_test.exp $*
-+ # Run on rooted tablet (port 22 vs port 2222)
-+ BN=`basename $*`
-+ $STRIP_FOR_TARGET $*
-+ /usr/bin/scp -qp $* root@tablet:$tabtarget/
-+ /usr/bin/ssh -q tablet $tabtarget/$BN
- }
-
- # End of customization section.
-@@ -55,13 +60,9 @@
- exit 1
- fi
-
--target_gnatchop () {
-- gnatchop --GCC="$GCC_DRIVER" $*
--}
--
- target_gnatmake () {
-- echo gnatmake --GCC=\"$GCC\" $gnatflags $gccflags $* -largs $EXTERNAL_OBJECTS --GCC=\"$GCC\"
-- gnatmake --GCC="$GCC" $gnatflags $gccflags $* -largs $EXTERNAL_OBJECTS --GCC="$GCC"
-+ echo gnatmake-cross --GCC=\"$GCC\" $gnatflags $gccflags $* -largs $EXTERNAL_OBJECTS --GCC=\"$GCC\"
-+ gnatmake-cross --GCC="$GCC" $gnatflags $gccflags $* -largs $EXTERNAL_OBJECTS --GCC="$GCC"
- }
-
- target_gcc () {
-@@ -94,8 +95,8 @@
- display `$GCC -v 2>&1`
- display host=`gcc -dumpmachine`
- display target=$target
--display `type gnatmake`
--gnatls -v >> $dir/acats.log
-+display `type gnatmake-cross`
-+gnatls-cross -v >> $dir/acats.log
- display ""
-
- display " === acats support ==="
-@@ -187,7 +188,7 @@
- exit 1
- fi
-
--target_gnatchop *.adt >> $dir/acats.log 2>&1
-+host_gnatchop *.adt >> $dir/acats.log 2>&1
-
- target_gnatmake -c -gnato -gnatE *.ads >> $dir/acats.log 2>&1
- target_gnatmake -c -gnato -gnatE *.adb >> $dir/acats.log 2>&1
-@@ -262,7 +263,7 @@
- continue
- fi
-
-- target_gnatchop -c -w `ls ${test}*.a ${test}*.ada ${test}*.adt ${test}*.am ${test}*.dep 2> /dev/null` >> $dir/acats.log 2>&1
-+ host_gnatchop -c -w `ls ${test}*.a ${test}*.ada ${test}*.adt ${test}*.am ${test}*.dep 2> /dev/null` >> $dir/acats.log 2>&1
- main=""
- find_main
- if [ -z "$main" ]; then