URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
Compare Revisions
- This comparison shows the changes necessary to convert path
/openrisc/trunk/gnu-stable/gcc-4.5.1/libstdc++-v3/scripts
- from Rev 816 to Rev 826
- ↔ Reverse comparison
Rev 816 → Rev 826
/run_doxygen
0,0 → 1,402
#!/bin/bash |
|
# Runs doxygen and massages the output files. |
# Copyright (C) 2001, 2002, 2003, 2004, 2008, 2009, 2010 |
# Free Software Foundation, Inc. |
# |
# Synopsis: run_doxygen --mode=[html|latex|man|xml] --host_alias=<alias> \ |
# v3srcdir \ |
# v3builddir \ |
# shortname |
# |
# Originally hacked together by Phil Edwards <pme@gcc.gnu.org> |
|
|
# We can check now that the version of doxygen is >= this variable. |
DOXYVER=1.6.1 |
|
find_doxygen() { |
local -r v_required=`echo $DOXYVER | \ |
awk -F. '{if(NF<3)$3=0;print ($1*100+$2)*100+$3}'` |
local testing_version doxygen maybedoxy v_found |
# thank you goat book |
set `IFS=:; X="$PATH:/usr/local/bin:/bin:/usr/bin"; echo $X` |
for dir |
do |
# AC_EXEEXT could come in useful here |
maybedoxy="$dir/doxygen" |
test -f "$maybedoxy" && testing_version=`$maybedoxy --version` |
if test -n "$testing_version"; then |
v_found=`echo $testing_version | \ |
awk -F. '{if(NF<3)$3=0;print ($1*100+$2)*100+$3}'` |
if test $v_found -ge $v_required; then |
doxygen="$maybedoxy" |
break |
fi |
fi |
done |
if test -z "$doxygen"; then |
echo run_doxygen error: Could not find Doxygen $DOXYVER in path. 1>&2 |
print_usage |
fi |
# We need to use other tools from the same package/version. |
echo :: Using Doxygen tools from ${dir}. |
PATH=$dir:$PATH |
hash -r |
} |
|
print_usage() { |
cat 1>&2 <<EOF |
Usage: run_doxygen --mode=MODE --host_alias=BUILD_ALIAS [<options>] |
<v3-src-dir> <v3-build-dir> <shortnamesp> |
MODE is one of: |
html Generate user-level HTML library documentation. |
man Generate user-level man pages. |
xml Generate user-level XML pages. |
latex Generate user-level LaTeX pages. |
|
BUILD_ALIAS is the GCC build alias set at configure time. |
|
Note: Requires Doxygen ${DOXYVER} or later; get it at |
ftp://ftp.stack.nl/pub/users/dimitri/doxygen-${DOXYVER}.src.tar.gz |
|
EOF |
exit 1 |
} |
|
parse_options() { |
for o |
do |
# Blatantly ripped from autoconf, er, I mean, "gratefully standing |
# on the shoulders of those giants who have gone before us." |
case "$o" in |
-*=*) arg=`echo "$o" | sed 's/[-_a-zA-Z0-9]*=//'` ;; |
*) arg= ;; |
esac |
|
case "$o" in |
--mode=*) |
mode=$arg ;; |
--host_alias=*) |
host_alias=$arg ;; |
--mode | --host_alias | --help | -h) |
print_usage ;; |
*) |
# this turned out to be a mess, maybe change to --srcdir=, etc |
if test $srcdir = unset; then |
srcdir=$o |
elif test $outdir = unset; then |
builddir=${o} |
outdir=${o}/doc/doxygen |
elif test $shortname = unset; then |
shortname=$o |
else |
echo run_doxygen error: Too many arguments 1>&2 |
exit 1 |
fi |
;; |
esac |
done |
} |
|
|
# script begins here |
mode=unset |
host_alias=unset |
srcdir=unset |
outdir=unset |
shortname=unset |
do_html=false |
do_man=false |
do_xml=false |
do_latex=false |
enabled_sections= |
generate_tagfile= |
DATEtext=`date '+%Y-%m-%d'` |
|
# Show how this script is called. |
echo run_doxygen $* |
|
parse_options $* |
find_doxygen |
|
if test $srcdir = unset || test $outdir = unset || test $mode = unset || test $shortname = unset || test $host_alias = unset; then |
# this could be better |
echo run_doxygen error: You have not given enough information...! 1>&2 |
print_usage |
fi |
|
case x"$mode" in |
xhtml) |
do_html=true |
enabled_sections=maint |
generate_tagfile="$outdir/html/libstdc++.tag" |
;; |
xlatex) |
do_latex=true |
enabled_sections=maint |
;; |
xman) |
do_man=true |
;; |
xxml) |
do_xml=true |
enabled_sections=maint |
;; |
*) |
echo run_doxygen error: $mode is an invalid mode 1>&2 |
exit 1 ;; |
esac |
|
case x"$shortname" in |
xYES) |
;; |
xNO) |
;; |
*) |
echo run_doxygen error: $shortname is invalid 1>&2 |
exit 1 ;; |
esac |
|
|
mkdir -p $outdir |
chmod u+w $outdir |
|
# Run it |
( |
set -e |
cd $builddir |
sed -e "s=@outdir@=${outdir}=g" \ |
-e "s=@srcdir@=${srcdir}=g" \ |
-e "s=@shortname@=${shortname}=g" \ |
-e "s=@builddir@=${builddir}=g" \ |
-e "s=@host_alias@=${host_alias}=g" \ |
-e "s=@enabled_sections@=${enabled_sections}=" \ |
-e "s=@do_html@=${do_html}=" \ |
-e "s=@do_latex@=${do_latex}=" \ |
-e "s=@do_man@=${do_man}=" \ |
-e "s=@do_xml@=${do_xml}=" \ |
-e "s=@generate_tagfile@=${generate_tagfile}=" \ |
${srcdir}/doc/doxygen/user.cfg.in > ${outdir}/${mode}.cfg |
echo :: NOTE that this may take some time... |
echo doxygen ${outdir}/${mode}.cfg |
doxygen ${outdir}/${mode}.cfg |
) |
ret=$? |
test $ret -ne 0 && exit $ret |
|
if $do_xml; then |
echo :: |
echo :: XML pages begin with |
echo :: ${outdir}/xml/index.xml |
fi |
|
if $do_latex; then |
cd ${outdir}/${mode} |
|
# Also drop in the header file and style sheet |
doxygen -w latex header.tex doxygen.sty |
|
echo :: |
echo :: LaTeX pages begin with |
echo :: ${outdir}/latex/refman.tex |
fi |
|
if $do_html; then |
cd ${outdir}/${mode} |
|
#doxytag -t libstdc++.tag . > /dev/null 2>&1 |
sed -e '/<path>/d' libstdc++.tag > TEMP |
mv TEMP libstdc++.tag |
|
sed -e "s=@DATE@=${DATEtext}=" \ |
${srcdir}/doc/doxygen/mainpage.html > index.html |
|
# The following bit of line noise changes annoying |
# std::foo < typename _Ugly1, typename _Ugly2, .... _DefaultUgly17 > |
# to user-friendly |
# std::foo |
# in the major "Compound List" page. |
sed -e 's=\(::[[:alnum:]_]*\)< .* >=\1=' annotated.html > annstrip.html |
mv annstrip.html annotated.html |
|
cp ${srcdir}/doc/doxygen/tables.html tables.html |
|
echo :: |
echo :: HTML pages begin with |
echo :: ${outdir}/html/index.html |
fi |
|
# Mess with the man pages. We don't need documentation of the internal |
# headers, since the man pages for those contain nothing useful anyhow. The |
# man pages for doxygen modules need to be renamed (or deleted). And the |
# generated #include lines need to be changed from the internal names to the |
# standard ones (e.g., "#include <stl_tempbuf.h>" -> "#include <memory>"). |
if $do_man; then |
echo :: |
echo :: Fixing up the man pages... |
cd $outdir/man/man3 |
|
# File names with embedded spaces (EVIL!) need to be....? renamed or removed? |
find . -name "* *" -print0 | xargs -0r rm # requires GNU tools |
|
# man pages are for functions/types/other entities, not source files |
# directly. who the heck would type "man foo.h" anyhow? |
find . -name "[a-z]*" -a ! -name "std_*" -print | xargs rm |
rm -f *.h.3 *.hpp.3 *config* *.cc.3 *.tcc.3 *_t.3 |
#rm ext_*.3 tr1_*.3 debug_*.3 |
|
# this is used to examine what we would have deleted, for debugging |
#mkdir trash |
#find . -name "[a-z]*" -a ! -name "std_*" -print | xargs -i mv {} trash |
#mv *.h.3 *config* *.cc.3 *.tcc.3 *_t.3 trash |
|
# Standardize the displayed header names. If anyone who knows perl cares |
# enough to rewrite all this, feel free. This only gets run once a century, |
# and I'm off getting coffee then anyhow, so I didn't care enough to make |
# this super-fast. |
g++ ${srcdir}/doc/doxygen/stdheader.cc -o ./stdheader |
problematic=`egrep -l '#include <.*_.*>' [a-z]*.3` |
for f in $problematic; do |
# this is also slow, but safe and easy to debug |
oldh=`sed -n '/fC#include </s/.*<\(.*\)>.*/\1/p' $f` |
newh=`echo $oldh | ./stdheader` |
sed "s=${oldh}=${newh}=" $f > TEMP |
mv TEMP $f |
done |
rm stdheader |
|
# Some of the pages for generated modules have text that confuses certain |
# implementations of man(1), e.g., Linux's. We need to have another top-level |
# *roff tag to /stop/ the .SH NAME entry. |
problematic=`egrep --files-without-match '^\.SH SYNOPSIS' [A-Z]*.3` |
#problematic='Containers.3 Sequences.3 Assoc_containers.3 Iterator_types.3' |
|
for f in $problematic; do |
sed '/^\.SH NAME/{ |
n |
a\ |
\ |
.SH SYNOPSIS |
}' $f > TEMP |
mv TEMP $f |
done |
|
# Also, break this (generated) line up. It's ugly as sin. |
problematic=`grep -l '[^^]Definition at line' *.3` |
for f in $problematic; do |
sed 's/Definition at line/\ |
.PP\ |
&/' $f > TEMP |
mv TEMP $f |
done |
|
cp ${srcdir}/doc/doxygen/Intro.3 C++Intro.3 |
|
# Why didn't I do this at the start? Were rabid weasels eating my brain? |
# Who the fsck would "man std_vector" when the class isn't named that? |
|
# First, deal with nested namespaces. |
for f in *chrono_*; do |
newname=`echo $f | sed 's/chrono_/chrono::/'` |
mv $f $newname |
done |
for f in *__debug_*; do |
newname=`echo $f | sed 's/__debug_/__debug::/'` |
mv $f $newname |
done |
for f in *decimal_*; do |
newname=`echo $f | sed 's/decimal_/decimal::/'` |
mv $f $newname |
done |
for f in *__detail_*; do |
newname=`echo $f | sed 's/__detail_/__detail::/'` |
mv $f $newname |
done |
for f in *__parallel_*; do |
newname=`echo $f | sed 's/__parallel_/__parallel::/'` |
mv $f $newname |
done |
for f in *__profile_*; do |
newname=`echo $f | sed 's/__profile_/__profile::/'` |
mv $f $newname |
done |
for f in *__atomic0_*; do |
newname=`echo $f | sed 's/__atomic0_/__atomic0::/'` |
mv $f $newname |
done |
for f in *__atomic2_*; do |
newname=`echo $f | sed 's/__atomic2_/__atomic2::/'` |
mv $f $newname |
done |
|
# Then, clean up other top-level namespaces. |
for f in std_tr1_*; do |
newname=`echo $f | sed 's/^std_tr1_/std::tr1::/'` |
mv $f $newname |
done |
for f in std_*; do |
newname=`echo $f | sed 's/^std_/std::/'` |
mv $f $newname |
done |
for f in __gnu_cxx_*; do |
newname=`echo $f | sed 's/^__gnu_cxx_/__gnu_cxx::/'` |
mv $f $newname |
done |
for f in __gnu_debug_*; do |
newname=`echo $f | sed 's/^__gnu_debug_/__gnu_debug::/'` |
mv $f $newname |
done |
for f in __gnu_parallel_*; do |
newname=`echo $f | sed 's/^__gnu_parallel_/__gnu_parallel::/'` |
mv $f $newname |
done |
for f in __gnu_profile_*; do |
newname=`echo $f | sed 's/^__gnu_profile_/__gnu_profile::/'` |
mv $f $newname |
done |
for f in __gnu_pbds_*; do |
newname=`echo $f | sed 's/^__gnu_pbds_/__gnu_pbds::/'` |
mv $f $newname |
done |
for f in __cxxabiv1_*; do |
newname=`echo $f | sed 's/^__cxxabiv1_/abi::/'` |
mv $f $newname |
done |
|
# Then piecemeal nested classes |
for f in *__future_base_*; do |
newname=`echo $f | sed 's/__future_base_/__future_base::/'` |
mv $f $newname |
done |
|
|
|
# Generic removal bits, where there are things in the generated man |
# pages that need to be killed. |
for f in *_libstdc__-v3_*; do |
rm $f |
done |
|
for f in *_src_*; do |
rm $f |
done |
|
|
# Also, for some reason, typedefs don't get their own man pages. Sigh. |
for f in ios streambuf istream ostream iostream stringbuf \ |
istringstream ostringstream stringstream filebuf ifstream \ |
ofstream fstream string; |
do |
echo ".so man3/std::basic_${f}.3" > std::${f}.3 |
echo ".so man3/std::basic_${f}.3" > std::w${f}.3 |
done |
|
echo :: |
echo :: Man pages in ${outdir}/man |
fi |
|
# all done |
echo :: |
|
exit 0 |
/extract_symvers
0,0 → 1,59
#!/bin/sh |
|
# Copyright (C) 2002, 2003, 2009 Free Software Foundation, Inc. |
# |
# This file is part of the GNU ISO C++ Library. This library 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, or (at your option) |
# any later version. |
# |
# This library 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 library; see the file COPYING3. If not see |
# <http://www.gnu.org/licenses/>. |
|
|
if test ${#} -lt 2 || test $1 = '--help'; then |
echo "Usage: extract_symvers shared_lib output_file" 1>&2 |
exit 1 |
fi |
|
lib=$1 |
output=$2 |
|
# GNU binutils, somewhere after version 2.11.2, requires -W/--wide to avoid |
# default line truncation. -W is not supported and truncation did not occur |
# by default before that point. |
readelf="readelf --symbols" |
if readelf --help | grep -- --wide > /dev/null; then |
readelf="$readelf --wide" |
fi |
|
# This avoids weird sorting problems later. |
LC_ALL=C |
export LC_ALL |
LANG=C |
export LANG |
|
tmp=extract.$$ |
|
${readelf} ${lib} |\ |
sed -e 's/ \[<other>: [A-Fa-f0-9]*\] //' -e '/\.dynsym/,/^$/p;d' |\ |
egrep -v ' (LOCAL|UND) ' |\ |
awk '{ if ($4 == "FUNC" || $4 == "NOTYPE") |
printf "%s:%s\n", $4, $8; |
else if ($4 == "OBJECT") |
printf "%s:%s:%s\n", $4, $3, $8; |
}' | sort | uniq > $tmp 2>&1 |
# else printf "Huh? What is %s?\n", $8; |
|
|
# I think we'll be doing some more with this file, but for now, dump. |
mv $tmp $output |
|
exit 0 |
extract_symvers
Property changes :
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: check_compile
===================================================================
--- check_compile (nonexistent)
+++ check_compile (revision 826)
@@ -0,0 +1,56 @@
+#!/usr/bin/env bash
+
+# Script to do performance testing.
+
+# Invocation
+# check_performance SRC_DIR BUILD_DIR
+
+# 1: variables
+#
+SRC_DIR=$1
+BUILD_DIR=$2
+
+# Now that we've successfully translated the numerical option into
+# a symbolic one, we can safely ignore it.
+shift
+
+# This has been true all along. Found out about it the hard way...
+case $BASH_VERSION in
+ 1*)
+ echo 'You need bash 2.x to run check_performance. Exiting.';
+ exit 1 ;;
+ *) ;;
+esac
+
+flags_script=$BUILD_DIR/scripts/testsuite_flags
+INCLUDES=`$flags_script --build-includes`
+PCH_FLAGS=`$flags_script --cxxpchflags`
+FLAGS=`$flags_script --cxxflags`
+TEST_FLAGS="-S"
+COMPILER=`$flags_script --build-cxx`
+CXX="$COMPILER $INCLUDES $PCH_FLAGS $FLAGS -Wfatal-errors $TEST_FLAGS"
+
+echo "compile line is:"
+echo $CXX
+echo ""
+
+TESTS_FILE="testsuite_files"
+
+#mkdir binaries
+UNIQUE_ID=0
+
+for NAME in `cat $TESTS_FILE`
+do
+ if $RUN; then
+ echo $NAME
+ OUTPUT_NAME=$UNIQUE_ID
+ $CXX $SRC_DIR/testsuite/$NAME -o $OUTPUT_NAME
+ if [ -f $OUTPUT_NAME ]; then
+# mv $OUTPUT_NAME binaries
+ rm $OUTPUT_NAME
+ fi
+ let UNIQUE_ID+=1
+ fi
+done
+
+exit 0
check_compile
Property changes :
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: make_graph.py
===================================================================
--- make_graph.py (nonexistent)
+++ make_graph.py (revision 826)
@@ -0,0 +1,576 @@
+#!/usr/bin/python
+
+import string
+import sys
+import re
+import os
+import platform
+import commands
+from Numeric import *
+from pychart import *
+from xml.dom import minidom
+
+class exception:
+ pass
+
+
+def comp_platform_info(compiler):
+ ret = ' \n"
+ if len(sys.argv) != 6:
+ sys.stderr.write(usg)
+ raise exception
+ main(sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4], sys.argv[5])
- \n'
+ so = commands.getstatusoutput('cat /proc/cpuinfo | grep \'cpu MHz\'')
+ if so[0] == 0:
+ ret += '
- CPU speed - %s \n' % so[1] + so = commands.getstatusoutput('cat /proc/meminfo | grep \'MemTotal\'') + if so[0] == 0: + ret += '
- Memory - %s \n' % so[1] + ret += '
- Platform - %s \n' % platform.platform() + so = commands.getstatusoutput(compiler + ' --version') + if so[0] == 0: + ret += '
- Compiler - %s \n' % so[1] + ret += '
make_graph.py
Property changes :
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: gen_bind_includers.pl
===================================================================
--- gen_bind_includers.pl (nonexistent)
+++ gen_bind_includers.pl (revision 826)
@@ -0,0 +1,30 @@
+#!/usr/bin/perl -w
+use English;
+
+$max = shift @ARGV;
+
+$template_params = "typename _U1";
+$template_args = "_U1";
+$params = "_U1& __u1";
+$args = "__u1";
+
+for ($num_args = 2; $num_args <= $max; ++$num_args) {
+ $template_params .= ", typename _U$num_args";
+ $template_args .= ", _U$num_args";
+ $params .= ", _U$num_args& __u$num_args";
+ $args .= ", __u$num_args";
+ print "#define _GLIBCXX_BIND_NUM_ARGS $num_args\n";
+ print "#define _GLIBCXX_BIND_COMMA ,\n";
+ print "#define _GLIBCXX_BIND_TEMPLATE_PARAMS $template_params\n";
+ print "#define _GLIBCXX_BIND_TEMPLATE_ARGS $template_args\n";
+ print "#define _GLIBCXX_BIND_PARAMS $params\n";
+ print "#define _GLIBCXX_BIND_ARGS $args\n";
+ print "#include _GLIBCXX_BIND_REPEAT_HEADER\n";
+ print "#undef _GLIBCXX_BIND_ARGS\n";
+ print "#undef _GLIBCXX_BIND_PARAMS\n";
+ print "#undef _GLIBCXX_BIND_TEMPLATE_ARGS\n";
+ print "#undef _GLIBCXX_BIND_TEMPLATE_PARAMS\n";
+ print "#undef _GLIBCXX_BIND_COMMA\n";
+ print "#undef _GLIBCXX_BIND_NUM_ARGS\n";
+ print "\n";
+}
Index: make_graphs.py
===================================================================
--- make_graphs.py (nonexistent)
+++ make_graphs.py (revision 826)
@@ -0,0 +1,160 @@
+#!/usr/bin/python
+
+import sys
+import commands
+import re
+from xml.dom import minidom
+from BeautifulSoup import BeautifulSoup
+import make_graph
+
+class exception:
+ pass
+
+res_div_re = re.compile('(.*?)_res_div')
+settings_div_re = re.compile('(.*?)_settings_div')
+
+
+gray_border_div_str = '
%s'
+space_div_str = '
' % space_div_str
+ d.contents = info
+ elif res_m:
+ label = res_m.groups()[0]
+ d = d.divTag
+
+ build = d['id'].replace('%s_' % label, '')
+
+ if build == build_name:
+ logical_build_name = logical_build_from_build(build)
+ d = d.divTag
+ test_name = d['id'].replace('%s_' % label, '')
+ d = d.divTag
+ base_build_ref = d['id'].replace('%s_' % label, '')
+ d = d.divTag
+ title = d['id'].replace('%s_' % label, '')
+ img_title = img_title_from_origs(label, title, base_build_ref, build, logical_build_name)
+
+ make_png(src_dir, doc_dir, res_dir, tests_info_xml_f_name, build_name, test_name)
+ png_str = make_png_str(label, test_name, build)
+ content = gray_border_div_str
+ content += png_str
+ content += img_title
+# content += make_graph.legend(doc_dir, res_dir, tests_info_xml_f_name, test_name, build_name)
+ content += ''
+
+
+
+def logical_build_from_build(build):
+ if build == 'gcc':
+ return 'g++'
+ if build == 'msvc':
+ return 'msvc++'
+ if build == 'local':
+ return 'local'
+ sys.stderr.write(build)
+ raise exception
+
+
+def img_title_from_origs(label, title, base_build_ref, build_name, logical_build_name):
+ title = title.replace('_tt_', '')
+ title = title.replace('_455tt_', '')
+ title = title.replace('_b_', '')
+ title = title.replace('_455b_', '')
+ title = title.replace('_456', ',')
+ title = title.replace('_457', '[]')
+ title = title.replace('_', ' ')
+ return '%s: %s - %s' % (
+ label,
+ title,
+ base_build_ref,
+ build_name,
+ logical_build_name)
+
+
+def make_png(src_dir, doc_dir, res_dir, tests_info_xml_f_name, build_name, test_name):
+ cmd_str = '%s/scripts/make_graph.py %s %s %s %s %s' % (
+ src_dir, doc_dir,
+ res_dir,
+ tests_info_xml_f_name,
+ test_name,
+ build_name)
+ # Must start a new process for pychart - otherwise pngs overlap.
+ so = commands.getstatusoutput(cmd_str)
+ if(so[0] != 0):
+ sys.stderr.write(cmd_str + '\n')
+ sys.stderr.write(so[1] + '\n')
+ sys.exit(-1)
+
+
+def make_png_str(label, test_name, build):
+ ret = '
%s' + ret += '' % (label, label) + ret += '' + ret += '
' + return ret + +def process_html(html_f_name, src_dir, build_dir, htmls_xml_f_name, tests_info_xml_f_name, build_name, compiler_name): + doc_dir = src_dir + "/doc/html/ext/pb_ds" + res_dir = build_dir + html_f = open(doc_dir + '/' + html_f_name) + soup = BeautifulSoup(html_f.read()) + html_f.close() + platform_comp_re = re.compile('platform_comp_%s' % build_name) + for d in soup('div'): + try: + settings_m = settings_div_re.match(d['id']) + res_m = res_div_re.match(d['id']) + except: + settings_m = None + res_m = None + + if settings_m: + build = settings_m.groups()[0] + if build == build_name: + logical_build_name = logical_build_from_build(build) + info = gray_border_div_str + info += '%s
' % (build, logical_build_name) + info += make_graph.comp_platform_info(compiler_name) + info += '
make_graphs.py
Property changes :
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: testsuite_flags.in
===================================================================
--- testsuite_flags.in (nonexistent)
+++ testsuite_flags.in (revision 826)
@@ -0,0 +1,81 @@
+#!/bin/sh
+
+#
+# This script computes the various flags needed to run GNU C++ testsuites
+# (compiler specific as well as library specific).
+#
+# Written by Benjamin Kosnik
+# Gabriel Dos Reis
+#
+
+# Print a message saying how this script is intended to be invoked
+print_usage() {
+ cat <
testsuite_flags.in
Property changes :
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: gen_includers.pl
===================================================================
--- gen_includers.pl (nonexistent)
+++ gen_includers.pl (revision 826)
@@ -0,0 +1,126 @@
+#!/usr/bin/perl -w
+use English;
+
+$max = shift @ARGV;
+
+$template_params = "typename _T1";
+$template_params_unnamed = "typename";
+$template_args = "_T1";
+$params = "_T1 __a1";
+$ref_params = "_T1& __a1";
+$args = "__a1";
+$bind_members = "_T1 _M_arg1;";
+$bind_members_init = "_M_arg1(__a1)";
+$mu_get_tuple_args = "::std::tr1::get<0>(__tuple)";
+$bind_v_template_args = "typename result_of<_Mu<_T1> _CV(_T1, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type";
+$bind_v_args = "_Mu<_T1>()(_M_arg1, ::std::tr1::tie(_GLIBCXX_BIND_ARGS))";
+$tuple_add_cref = "typename __add_c_ref<_T1>::type __a1";
+$tuple_copy_init = "_M_arg1(__in._M_arg1)";
+$tuple_assign = "_M_arg1 = __in._M_arg1;";
+$template_params_null_class = "typename _T1 = _NullClass";
+$template_args_stripped = "typename __strip_reference_wrapper<_T1>::__type";
+$template_params_u = "typename _U1";
+$template_args_u = "_U1";
+$ref_wrap_params = "ref(__a1)";
+$ref_template_args = "_T1&";
+for ($num_args = 2; $num_args <= $max; ++$num_args) {
+ $prev_args = $num_args - 1;
+ $next_args = $num_args + 1;
+ $template_params_shifted = $template_params;
+ $template_args_shifted = $template_args;
+ $params_shifted = $params;
+ $args_shifted = $args;
+ $template_params .= ", typename _T$num_args";
+ $template_params_unnamed .= ", typename";
+ $template_args .= ", _T$num_args";
+ $params .= ", _T$num_args __a$num_args";
+ $ref_params .=", _T$num_args& __a$num_args";
+ $args .= ", __a$num_args";
+ $bind_members .= " _T$num_args _M_arg$num_args;";
+ $bind_members_init .= ", _M_arg$num_args(__a$num_args)";
+ $mu_get_tuple_args .= ", ::std::tr1::get<$prev_args>(__tuple)";
+ $bind_v_template_args .= ", typename result_of<_Mu<_T$num_args> _CV(_T$num_args, tuple<_GLIBCXX_BIND_TEMPLATE_ARGS>)>::type";
+ $bind_v_args .= ", _Mu<_T$num_args>()(_M_arg$num_args, ::std::tr1::tie(_GLIBCXX_BIND_ARGS))";
+ $tuple_add_cref .= ", typename __add_c_ref<_T$num_args>::type __a$num_args";
+ $tuple_copy_init .= ", _M_arg$num_args(__in._M_arg$num_args)";
+ $tuple_assign .= " _M_arg$num_args = __in._M_arg$num_args;";
+ $template_params_null_class .= ", typename _T$num_args = _NullClass";
+ $template_args_stripped .= ", typename __strip_reference_wrapper<_T$num_args>::__type";
+ $template_params_u .= ", typename _U$num_args";
+ $template_args_u .= ", _U$num_args";
+ $ref_wrap_params .= ", ref(__a$num_args)";
+ $ref_template_args .= ", _T$num_args&";
+
+ if ($num_args == $max) {
+ print "#define _GLIBCXX_LAST_INCLUDE\n"
+ }
+ print "#define _GLIBCXX_NUM_ARGS $num_args\n";
+ print "#define _GLIBCXX_COMMA ,\n";
+ print "#define _GLIBCXX_TEMPLATE_PARAMS $template_params\n";
+ print "#define _GLIBCXX_TEMPLATE_ARGS $template_args\n";
+ print "#define _GLIBCXX_PARAMS $params\n";
+ print "#define _GLIBCXX_REF_PARAMS $ref_params\n";
+ print "#define _GLIBCXX_ARGS $args\n";
+ print "#define _GLIBCXX_COMMA_SHIFTED ,\n";
+ print "#define _GLIBCXX_TEMPLATE_PARAMS_SHIFTED $template_params_shifted\n";
+ print "#define _GLIBCXX_TEMPLATE_ARGS_SHIFTED $template_args_shifted\n";
+ print "#define _GLIBCXX_PARAMS_SHIFTED $params_shifted\n";
+ print "#define _GLIBCXX_ARGS_SHIFTED $args_shifted\n";
+ print "#define _GLIBCXX_BIND_MEMBERS $bind_members\n";
+ print "#define _GLIBCXX_BIND_MEMBERS_INIT $bind_members_init\n";
+ print "#define _GLIBCXX_MU_GET_TUPLE_ARGS $mu_get_tuple_args\n";
+ print "#define _GLIBCXX_BIND_V_TEMPLATE_ARGS(_CV) $bind_v_template_args\n";
+ print "#define _GLIBCXX_BIND_V_ARGS $bind_v_args\n";
+ print "#define _GLIBCXX_TUPLE_ADD_CREF $tuple_add_cref\n";
+ print "#define _GLIBCXX_TUPLE_COPY_INIT $tuple_copy_init\n";
+ print "#define _GLIBCXX_TUPLE_ASSIGN $tuple_assign\n";
+ print "#define _GLIBCXX_TEMPLATE_PARAMS_NULL_CLASS $template_params_null_class\n";
+ print "#define _GLIBCXX_TEMPLATE_ARGS_STRIPPED $template_args_stripped\n";
+ print "#define _GLIBCXX_TEMPLATE_PARAMS_U $template_params_u\n";
+ print "#define _GLIBCXX_TEMPLATE_ARGS_U $template_args_u\n";
+ print "#define _GLIBCXX_REF_WRAP_PARAMS $ref_wrap_params\n";
+ print "#define _GLIBCXX_REF_TEMPLATE_ARGS $ref_template_args\n";
+ print "#define _GLIBCXX_NUM_ARGS_PLUS_1 $next_args\n";
+ print "#define _GLIBCXX_T_NUM_ARGS_PLUS_1 _T$next_args\n";
+ print "#include _GLIBCXX_REPEAT_HEADER\n";
+ print "#undef _GLIBCXX_T_NUM_ARGS_PLUS_1\n";
+ print "#undef _GLIBCXX_NUM_ARGS_PLUS_1\n";
+ print "#undef _GLIBCXX_REF_TEMPLATE_ARGS\n";
+ print "#undef _GLIBCXX_REF_WRAP_PARAMS\n";
+ print "#undef _GLIBCXX_TEMPLATE_ARGS_U\n";
+ print "#undef _GLIBCXX_TEMPLATE_PARAMS_U\n";
+ print "#undef _GLIBCXX_TEMPLATE_ARGS_STRIPPED\n";
+ print "#undef _GLIBCXX_TEMPLATE_PARAMS_NULL_CLASS\n";
+ print "#undef _GLIBCXX_TUPLE_ASSIGN\n";
+ print "#undef _GLIBCXX_TUPLE_COPY_INIT\n";
+ print "#undef _GLIBCXX_TUPLE_ADD_CREF\n";
+ print "#undef _GLIBCXX_BIND_V_ARGS\n";
+ print "#undef _GLIBCXX_BIND_V_TEMPLATE_ARGS\n";
+ print "#undef _GLIBCXX_MU_GET_TUPLE_ARGS\n";
+ print "#undef _GLIBCXX_BIND_MEMBERS_INIT\n";
+ print "#undef _GLIBCXX_BIND_MEMBERS\n";
+ print "#undef _GLIBCXX_ARGS_SHIFTED\n";
+ print "#undef _GLIBCXX_PARAMS_SHIFTED\n";
+ print "#undef _GLIBCXX_TEMPLATE_ARGS_SHIFTED\n";
+ print "#undef _GLIBCXX_TEMPLATE_PARAMS_SHIFTED\n";
+ print "#undef _GLIBCXX_COMMA_SHIFTED\n";
+ print "#undef _GLIBCXX_ARGS\n";
+ print "#undef _GLIBCXX_REF_PARAMS\n";
+ print "#undef _GLIBCXX_PARAMS\n";
+ print "#undef _GLIBCXX_TEMPLATE_ARGS\n";
+ print "#undef _GLIBCXX_TEMPLATE_PARAMS\n";
+ print "#undef _GLIBCXX_COMMA\n";
+ print "#undef _GLIBCXX_NUM_ARGS\n";
+ if ($num_args == $max) {
+ print "#undef _GLIBCXX_LAST_INCLUDE\n"
+ }
+}
+
+print "\n";
+print "#ifndef _GLIBCXX_TUPLE_ALL_TEMPLATE_PARAMS\n";
+print "# define _GLIBCXX_TUPLE_ALL_TEMPLATE_PARAMS $template_params\n";
+print "# define _GLIBCXX_TUPLE_ALL_TEMPLATE_PARAMS_UNNAMED $template_params_unnamed\n";
+print "# define _GLIBCXX_TUPLE_ALL_TEMPLATE_ARGS $template_args\n";
+print "#endif\n";
+print "\n";
+
Index: make_exports.pl
===================================================================
--- make_exports.pl (nonexistent)
+++ make_exports.pl (revision 826)
@@ -0,0 +1,144 @@
+#!/usr/bin/perl -w
+
+# This script takes two arguments, a version script and a dynamic library
+# (in that order), and prints a list of symbols to be exported from the
+# library.
+# It expects a 'nm' with the POSIX '-P' option, but everyone has one of
+# those, right? It also expects that symbol names have a leading underscore,
+# which is somewhat less likely.
+
+use File::Glob ':glob';
+use FileHandle;
+use IPC::Open2;
+
+# The glob patterns that are to be applied to the demangled name
+my @cxx_globs = ();
+# The glob patterns that apply directly to the name in the .o files
+my @globs = ();
+# The patterns for local variables (usually just '*').
+my @ignored = ();
+
+##########
+# Fill in the various glob arrays.
+
+# The next pattern will go into this array.
+my $glob = \@globs;
+my $symvers = shift;
+
+open F,$symvers or die $!;
+
+while () {
+ chomp;
+ # Lines of the form '} SOME_VERSION_NAME_1.0;'
+ if (/^[ \t]*\}[ \tA-Z0-9_.a-z]*;[ \t]*$/) {
+ $glob = \@globs;
+ next;
+ }
+ # Comment and blank lines
+ next if (/^[ \t]*\#/);
+ next if (/^[ \t]*$/);
+ # Lines of the form 'SOME_VERSION_NAME_1.1 {'
+ next if (/^[A-Z0-9_. \t]*{$/);
+ # Ignore 'global:'
+ next if (/^[ \t]*global:$/);
+ # After 'local:', globs should be ignored, they won't be exported.
+ if (/^[ \t]*local:$/) {
+ $glob = \@ignored;
+ next;
+ }
+ # After 'extern "C++"', globs are C++ patterns
+ if (/^[ \t]*extern \"C\+\+\"[ \t]*$/) {
+ $glob = \@cxx_globs;
+ next;
+ }
+ # Catch globs. Note that '{}' is not allowed in globs by this script,
+ # so only '*' and '[]' are available.
+ if (/^[ \t]*([^ \t;{}#]+);?[ \t]*$/) {
+ my $ptn = $1;
+ # Turn the glob into a regex by replacing '*' with '.*'.
+ $ptn =~ s/\*/\.\*/g;
+ push @$glob,$ptn;
+ next;
+ }
+ # Important sanity check. This script can't handle lots of formats
+ # that GNU ld can, so be sure to error out if one is seen!
+ die "strange line `$_'";
+}
+close F;
+
+# Make 'if (1)' for debugging.
+if (0) {
+ print "cxx:\n";
+ (printf "%s\n",$_) foreach (@cxx_globs);
+ print "globs:\n";
+ (printf "%s\n", $_) foreach (@globs);
+ print "ignored:\n";
+ (printf "%s\n", $_) foreach (@ignored);
+}
+
+##########
+# Combine the arrays into single regular expressions
+# This cuts the time required from about 30 seconds to about 0.5 seconds.
+
+my $glob_regex = '^_(' . (join '|',@globs) . ')$';
+my $cxx_regex = (join '|',@cxx_globs);
+
+##########
+# Get all the symbols from the library, match them, and add them to a hash.
+
+my %export_hash = ();
+my $nm = $ENV{'NM_FOR_TARGET'} || "nm";
+# Process each symbol.
+print STDERR $nm.' -P '.(join ' ',@ARGV).'|';
+open NM,$nm.' -P '.(join ' ',@ARGV).'|' or die $!;
+# Talk to c++filt through a pair of file descriptors.
+open2(*FILTIN, *FILTOUT, "c++filt -_") or die $!;
+NAME: while () {
+ my $i;
+ chomp;
+
+ # nm prints out stuff at the start, ignore it.
+ next if (/^$/);
+ next if (/:$/);
+ # Ignore undefined and local symbols.
+ next if (/^([^ ]+) [Ua-z] /);
+
+ # $sym is the name of the symbol, $noeh_sym is the same thing with
+ # any '.eh' suffix removed.
+ die "unknown nm output $_" if (! /^([^ ]+) [A-Z] /);
+ my $sym = $1;
+ my $noeh_sym = $sym;
+ $noeh_sym =~ s/\.eh$//;
+
+ # Maybe it matches one of the patterns based on the symbol in the .o file.
+ if ($noeh_sym =~ /$glob_regex/) {
+ $export_hash{$sym} = 1;
+ next NAME;
+ }
+
+ # No? Well, maybe its demangled form matches one of those patterns.
+ printf FILTOUT "%s\n",$noeh_sym;
+ my $dem = ;
+ chomp $dem;
+ if ($dem =~ /$cxx_regex/) {
+ $export_hash{$sym} = 2;
+ next NAME;
+ }
+
+ # No? Well, then ignore it.
+}
+close NM or die "nm error";
+close FILTOUT or die "c++filt error";
+close FILTIN or die "c++filt error";
+
+##########
+# Print out the export file
+
+# Print information about generating this file
+print "# This is a generated file.\n";
+print "# It was generated by:\n";
+printf "# %s %s %s\n", $0, $symvers, (join ' ',@ARGV);
+
+foreach my $i (keys %export_hash) {
+ printf "%s\n",$i or die;
+}
Index: gen_includers2.pl
===================================================================
--- gen_includers2.pl (nonexistent)
+++ gen_includers2.pl (revision 826)
@@ -0,0 +1,31 @@
+#!/usr/bin/perl -w
+use English;
+
+$max = shift @ARGV;
+
+$template_params = "typename _U1";
+$template_args = "_U1";
+$params = "_U1& __u1";
+$args = "__u1";
+
+for ($num_args = 2; $num_args <= $max; ++$num_args) {
+ $template_params .= ", typename _U$num_args";
+ $template_args .= ", _U$num_args";
+ $params .= ", _U$num_args& __u$num_args";
+ $args .= ", __u$num_args";
+ print "#define _GLIBCXX_BIND_NUM_ARGS $num_args\n";
+ print "#define _GLIBCXX_BIND_COMMA ,\n";
+ print "#define _GLIBCXX_BIND_TEMPLATE_PARAMS $template_params\n";
+ print "#define _GLIBCXX_BIND_TEMPLATE_ARGS $template_args\n";
+ print "#define _GLIBCXX_BIND_PARAMS $params\n";
+ print "#define _GLIBCXX_BIND_ARGS $args\n";
+ print "#include _GLIBCXX_BIND_REPEAT_HEADER\n";
+ print "#undef _GLIBCXX_BIND_ARGS\n";
+ print "#undef _GLIBCXX_BIND_PARAMS\n";
+ print "#undef _GLIBCXX_BIND_TEMPLATE_ARGS\n";
+ print "#undef _GLIBCXX_BIND_TEMPLATE_PARAMS\n";
+ print "#undef _GLIBCXX_BIND_COMMA\n";
+ print "#undef _GLIBCXX_BIND_NUM_ARGS\n";
+ print "\n";
+}
+
Index: check_performance
===================================================================
--- check_performance (nonexistent)
+++ check_performance (revision 826)
@@ -0,0 +1,95 @@
+#!/usr/bin/env bash
+
+# Script to do performance testing.
+
+# Invocation
+# check_performance SRC_DIR BUILD_DIR
+
+# 1: variables
+#
+SRC_DIR=$1
+BUILD_DIR=$2
+
+# Now that we've successfully translated the numerical option into
+# a symbolic one, we can safely ignore it.
+shift
+
+# This has been true all along. Found out about it the hard way...
+case $BASH_VERSION in
+ 1*)
+ echo 'You need bash 2.x to run check_performance. Exiting.';
+ exit 1 ;;
+ *) ;;
+esac
+
+flags_script=$BUILD_DIR/scripts/testsuite_flags
+INCLUDES=`$flags_script --build-includes`
+PCH_FLAGS=`$flags_script --cxxpchflags`
+FLAGS=`$flags_script --cxxflags`
+THREAD_FLAG='-pthread'
+COMPILER=`$flags_script --build-cxx`
+SH_FLAG="-Wl,--rpath -Wl,$BUILD_DIR/../../gcc \
+ -Wl,--rpath -Wl,$BUILD_DIR/src/.libs"
+ST_FLAG="-static"
+LINK=$SH_FLAG
+CXX="$COMPILER $INCLUDES $FLAGS -std=gnu++0x $CXXFLAGS $LINK"
+LIBS="./libtestc++.a"
+TESTS_FILE="testsuite_files_performance"
+
+echo CXX is $CXX
+
+for NAME in `cat $TESTS_FILE`
+do
+ RUN=true
+ TESTNAME=$SRC_DIR/testsuite/$NAME
+ FILE_NAME="`basename $NAME`"
+ FILE_NAME="`echo $FILE_NAME | sed 's/.cc//g'`"
+
+ # TEST_S == single thread
+ # TEST_B == do both single and multi-thread
+ # TEST_T == multi-thread
+ for CYCLE in `sed -n 's,.*\(TEST_[SB][0-9]*\)$,\1,p' $TESTNAME`
+ do
+ RUN=false
+ echo $NAME $CYCLE
+ EXE_NAME="`echo $FILE_NAME-$CYCLE.exe`"
+ $CXX -DNOTHREAD -D$CYCLE $TESTNAME $LIBS -o $EXE_NAME
+ if [ -f $EXE_NAME ]; then
+ ./$EXE_NAME
+ else
+ echo "compile error:"
+ echo "$CXX -DNOTHREAD -D$CYCLE $TESTNAME $LIBS -o $EXE_NAME"
+ fi
+ done
+
+ for CYCLE in `sed -n 's,.*\(TEST_[TB][0-9]*\)$,\1,p' $TESTNAME`
+ do
+ RUN=false
+ echo $NAME $CYCLE thread
+ EXE_NAME="`echo $FILE_NAME-$CYCLE.exe`"
+ $CXX $THREAD_FLAG -D$CYCLE $TESTNAME $LIBS -o $EXE_NAME
+ if [ -f $EXE_NAME ]; then
+ ./$EXE_NAME
+ else
+ echo "compile error:"
+ echo "$CXX $THREAD_FLAG -D$CYCLE $TESTNAME $LIBS -o $EXE_NAME"
+ fi
+ done
+
+ if $RUN; then
+ echo $NAME
+ EXE_NAME="`echo $FILE_NAME.exe`"
+ $CXX $TESTNAME $LIBS -o $EXE_NAME
+ if [ -f $EXE_NAME ]; then
+ ./$EXE_NAME >& tmp.$FILE_NAME
+ else
+ echo "compile error:"
+ echo "$CXX $TESTNAME $LIBS -o $EXE_NAME"
+ fi
+ if [ -s tmp.$FILE_NAME ]; then
+ mv tmp.$FILE_NAME $FILE_NAME.xml
+ fi
+ fi
+done
+
+exit 0
check_performance
Property changes :
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: create_testsuite_files
===================================================================
--- create_testsuite_files (nonexistent)
+++ create_testsuite_files (revision 826)
@@ -0,0 +1,54 @@
+#!/bin/sh
+
+# Constructs lists of source files (full pathnames) to test. Two
+# files are constructed: testsuite_files, which is used to test with
+# the default dg-runtest command, and testsuite_files_interactive,
+# which is used to test cases that require input to be entered. In
+# addition, both lists are pruned of wchar_t tests if the toolchain
+# under test does not support wchar_t functionality.
+#
+# We mimic the mkcheck script in that the first time this is run, all
+# existing files are listed in "testsuite_files" in the output
+# directory. Subsequent runs pull the list from that file, allowing
+# users to trim the list down to problematic tests, or just run
+# paticular directories or sub-directories of tests.
+#
+# Selecting individual tests can also be done with RUNTESTFLAGS, but
+# that doesn't really do all that we are trying to accomplish here.
+
+LC_ALL=C
+export LC_ALL
+
+# Both of these are in the appropriate testsuite subdirectories.
+srcdir="$1"
+outdir="$2"
+
+tmp="${TMPDIR:-/tmp}/ctt$$"
+tests_file_normal="$outdir/testsuite_files"
+tests_file_inter="$outdir/testsuite_files_interactive"
+tests_file_perf="$outdir/testsuite_files_performance"
+
+cd $srcdir
+# This is the ugly version of "everything but the current directory". It's
+# what has to happen when find(1) doesn't support -mindepth, or -xtype.
+dlist=`echo [0-9][0-9]*`
+dlist="$dlist abi backward ext performance tr1 decimal"
+find $dlist "(" -type f -o -type l ")" -name "*.cc" -print > $tmp.01
+find $dlist "(" -type f -o -type l ")" -name "*.c" -print > $tmp.02
+cat $tmp.01 $tmp.02 | sort > $tmp.1
+if test ! -s "$tmp.1"; then
+ exit 1
+fi
+
+# Now filter out classes of tests. These classes are run using special rules.
+grep _xin $tmp.1 > $tests_file_inter
+grep -v _xin $tmp.1 > $tmp.4
+
+grep performance $tmp.4 > $tests_file_perf
+grep -v performance $tmp.4 > $tmp.5
+
+# ...more filters go here.
+cp $tmp.5 $tests_file_normal
+
+rm $tmp*
+exit 0
create_testsuite_files
Property changes :
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property