# Copyright (C) 2002-2016 Free Software Foundation, Inc.

# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.

if {![istarget "i*86-*-*"]
    && ![istarget "x86_64-*-mingw*"]
    && ![istarget "arm-*-pe*"]} {
    return
}

if {![istarget "i*86-*-*pe*"] \
    && ![istarget "i*86-*-cygwin*"] \
    && ![istarget "i*86-*-mingw32*"] \
    && ![istarget "arm-*-pe*"] \
    && ![istarget "x86_64-*-mingw*"] } {
    set target_xfail "yes"
} else {
    set target_xfail "no"
}

# PR 19459: The ARM does not support inserting a leading underscore.
if { [istarget "arm-*-pe*"] } {
    set target_no_leading_underscore "yes"
} else {
    set target_no_leading_underscore "no"
}

if {![info exists DLLTOOL]} then {
    return
}

if {[which $DLLTOOL] == 0} then {
    return
}

verbose "$DLLTOOL --leading-underscore -d $srcdir/$subdir/fastcall.def" 1
catch "exec $DLLTOOL --leading-underscore -d $srcdir/$subdir/fastcall.def" err

if ![string match "" $err] then {
    send_log "$err\n"
    verbose "$err" 1
    fail "dlltool (fastcall export)"
} else {
    pass "dlltool (fastcall export)"
}

if { "$target_xfail" == "yes" } {
    setup_xfail *-*
}

verbose "$DLLTOOL -l libversion.a --def $srcdir/$subdir/version.def $dlltool_gas_flag" 1
catch "exec $DLLTOOL -l libersion.a --def $srcdir/$subdir/version.def $dlltool_gas_flag" err

if ![string match "" $err] then {
    send_log "$err\n"
    verbose "$err" 1
    fail "dlltool (version.dll)"
} else {
    pass "dlltool (version.dll)"
}

if { "$target_xfail" == "yes" } {
    setup_xfail *-*
}

verbose "$DLLTOOL -p prefix --leading-underscore -l tmpdir/libalias.a -d $srcdir/$subdir/alias.def $dlltool_gas_flag" 1
catch "exec $DLLTOOL -p prefix --leading-underscore -l tmpdir/libalias.a -d $srcdir/$subdir/alias.def $dlltool_gas_flag" err

if ![string match "" $err] then {
    send_log "$err\n"
    verbose "$err" 1
    fail "dlltool -p (execution)"
    continue
}

pass "dlltool -p (execution)"

set got [binutils_run $NM "tmpdir/libalias.a"]
if { "$target_no_leading_underscore" == "yes" } {
    set want "00000000 I __imp_prefixsymbol.*00000000 T prefixsymbol.*00000000 I __imp_symbol.*00000000 T symbol"
} else {
    set want "00000000 I __imp__prefix_symbol.*00000000 T _prefix_symbol.*00000000 I __imp__symbol.*00000000 T _symbol"
}

if [regexp $want $got] then {
    pass "dlltool -p (symbol names)"
} else {
    fail "dlltool -p (symbol names)"
}

set got [binutils_run $OBJDUMP "-s -j .idata\$6 tmpdir/libalias.a"]
set want "(Contents of section .idata\\\$6:.*\\.\\.symbol\\.\\..*){2,2}"

if [regexp $want $got] then {
    pass "dlltool -p (import name)"
} else {
    fail "dlltool -p (import name)"
}

verbose "$DLLTOOL -p prefix --leading-underscore -l tmpdir/libalias2.a -d $srcdir/$subdir/alias-2.def $dlltool_gas_flag" 1
catch "exec $DLLTOOL -p prefix --leading-underscore -l tmpdir/libalias2.a -d $srcdir/$subdir/alias-2.def $dlltool_gas_flag" err

if ![string match "" $err] then {
    send_log "$err\n"
    verbose "$err" 1
    fail "dlltool -p (execution) alias-2.def"
    continue
}

pass "dlltool -p (execution) alias-2.def"

set got [binutils_run $NM "tmpdir/libalias2.a"]
if { "$target_no_leading_underscore" == "yes" } {
    set want "00000000 I __imp_prefixsymbol.*00000000 T prefixsymbol.*00000000 I __imp_symbol.*00000000 T symbol"
} else {
    set want "00000000 I __imp__prefix_symbol.*00000000 T _prefix_symbol.*00000000 I __imp__symbol.*00000000 T _symbol"
}

if [regexp $want $got] then {
    pass "dlltool -p (symbol names) alias-2.def"
} else {
    fail "dlltool -p (symbol names) alias-2.def"
}

set got [binutils_run $OBJDUMP "-s -j .idata\$6 tmpdir/libalias2.a"]
set want "(Contents of section .idata\\\$6:.*\\.\\.something\\..*){2,2}"

if [regexp $want $got] then {
    pass "dlltool -p (import name) alias-2.def"
} else {
    fail "dlltool -p (import name) alias-2.def"
}

# Here we test explicit without leading underscore

verbose "$DLLTOOL --no-leading-underscore -d $srcdir/$subdir/fastcall.def" 1
catch "exec $DLLTOOL --no-leading-underscore -d $srcdir/$subdir/fastcall.def" err

if ![string match "" $err] then {
    send_log "$err\n"
    verbose "$err" 1
    fail "dlltool (fastcall export no leading underscore)"
} else {
    pass "dlltool (fastcall export no leading underscore)"
}

verbose "$DLLTOOL --no-leading-underscore -p prefix -l tmpdir/libalias_nu.a -d $srcdir/$subdir/alias.def $dlltool_gas_flag" 1
catch "exec $DLLTOOL --no-leading-underscore -p prefix -l tmpdir/libalias_nu.a -d $srcdir/$subdir/alias.def $dlltool_gas_flag" err

if ![string match "" $err] then {
    send_log "$err\n"
    verbose "$err" 1
    fail "dlltool -p (execution no leading underscore)"
    continue
}

pass "dlltool -p (execution no leading underscore)"

set got [binutils_run $NM "tmpdir/libalias_nu.a"]
set want "00000000 I __imp_prefixsymbol.*00000000 T prefixsymbol.*00000000 I __imp_symbol.*00000000 T symbol"

if [regexp $want $got] then {
    pass "dlltool -p (symbol names no leading underscore)"
} else {
    fail "dlltool -p (symbol names no leading underscore)"
}

set got [binutils_run $OBJDUMP "-s -j .idata\$6 tmpdir/libalias_nu.a"]
set want "(Contents of section .idata\\\$6:.*\\.\\.symbol\\.\\..*){2,2}"

if [regexp $want $got] then {
    pass "dlltool -p (import name no leading underscore)"
} else {
    fail "dlltool -p (import name no leading underscore)"
}

verbose "$DLLTOOL --no-leading-underscore -p prefix -l tmpdir/libalias_nu2.a -d $srcdir/$subdir/alias-2.def $dlltool_gas_flag" 1
catch "exec $DLLTOOL --no-leading-underscore -p prefix -l tmpdir/libalias_nu2.a -d $srcdir/$subdir/alias-2.def $dlltool_gas_flag" err

if ![string match "" $err] then {
    send_log "$err\n"
    verbose "$err" 1
    fail "dlltool -p (execution no leading underscore) alias-2.def"
    continue
}

pass "dlltool -p (execution no leading underscore) alias-2.def"

set got [binutils_run $NM "tmpdir/libalias_nu2.a"]
set want "00000000 I __imp_prefixsymbol.*00000000 T prefixsymbol.*00000000 I __imp_symbol.*00000000 T symbol"

if [regexp $want $got] then {
    pass "dlltool -p (symbol names no leading underscore) alias-2.def"
} else {
    fail "dlltool -p (symbol names no leading underscore) alias-2.def"
}

set got [binutils_run $OBJDUMP "-s -j .idata\$6 tmpdir/libalias_nu2.a"]
set want "(Contents of section .idata\\\$6:.*\\.\\.something\\..*){2,2}"

if [regexp $want $got] then {
    pass "dlltool -p (import name no leading underscore) alias-2.def"
} else {
    fail "dlltool -p (import name no leading underscore) alias-2.def"
}

# Now we test with leading underscore
verbose "$DLLTOOL --leading-underscore -d $srcdir/$subdir/fastcall.def" 1
catch "exec $DLLTOOL --leading-underscore -d $srcdir/$subdir/fastcall.def" err

if ![string match "" $err] then {
    send_log "$err\n"
    verbose "$err" 1
    fail "dlltool (fastcall export leading underscore)"
} else {
    pass "dlltool (fastcall export leading underscore)"
}

verbose "$DLLTOOL --leading-underscore -p prefix -l tmpdir/libalias_u.a -d $srcdir/$subdir/alias.def $dlltool_gas_flag" 1
catch "exec $DLLTOOL --leading-underscore -p prefix -l tmpdir/libalias_u.a -d $srcdir/$subdir/alias.def $dlltool_gas_flag" err

if ![string match "" $err] then {
    send_log "$err\n"
    verbose "$err" 1
    fail "dlltool -p (execution leading underscore)"
    continue
}

pass "dlltool -p (execution leading-underscore)"

set got [binutils_run $NM "tmpdir/libalias_u.a"]
if { "$target_no_leading_underscore" == "yes" } {
    set want "00000000 I __imp_prefixsymbol.*00000000 T prefixsymbol.*00000000 I __imp_symbol.*00000000 T symbol"
} else {
    set want "00000000 I __imp__prefix_symbol.*00000000 T _prefix_symbol.*00000000 I __imp__symbol.*00000000 T _symbol"
}

if { "$target_xfail" == "yes" } {
    setup_xfail *-*
}

if [regexp $want $got] then {
    pass "dlltool -p (symbol names leading underscore)"
} else {
    fail "dlltool -p (symbol names leading underscore)"
}

set got [binutils_run $OBJDUMP "-s -j .idata\$6 tmpdir/libalias_u.a"]
set want "(Contents of section .idata\\\$6:.*\\.\\.symbol\\..*){2,2}"

if [regexp $want $got] then {
    pass "dlltool -p (import name leading underscore)"
} else {
    fail "dlltool -p (import name leading underscore)"
}

verbose "$DLLTOOL --leading-underscore -p prefix -l tmpdir/libalias_u2.a -d $srcdir/$subdir/alias-2.def $dlltool_gas_flag" 1
catch "exec $DLLTOOL --leading-underscore -p prefix -l tmpdir/libalias_u2.a -d $srcdir/$subdir/alias-2.def $dlltool_gas_flag" err

if ![string match "" $err] then {
    send_log "$err\n"
    verbose "$err" 1
    fail "dlltool -p (execution) alias-2.def"
    continue
}

pass "dlltool -p (execution leading underscore) alias-2.def"

set got [binutils_run $NM "tmpdir/libalias_u2.a"]
if { "$target_no_leading_underscore" == "yes" } {
    set want "00000000 I __imp_prefixsymbol.*00000000 T prefixsymbol.*00000000 I __imp_symbol.*00000000 T symbol"
} else {
    set want "00000000 I __imp__prefix_symbol.*00000000 T _prefix_symbol.*00000000 I __imp__symbol.*00000000 T _symbol"
}

if [regexp $want $got] then {
    pass "dlltool -p (symbol names leading underscore) alias-2.def"
} else {
    fail "dlltool -p (symbol names leading underscore) alias-2.def"
}

set got [binutils_run $OBJDUMP "-s -j .idata\$6 tmpdir/libalias_u2.a"]
set want "(Contents of section .idata\\\$6:.*\\.\\.something\\..*){2,2}"

if [regexp $want $got] then {
    pass "dlltool -p (import name leading underscore) alias-2.def"
} else {
    fail "dlltool -p (import name leading underscore) alias-2.def"
}
