mirror of
https://github.com/OlafvdSpek/ctemplate.git
synced 2025-09-28 19:05:49 +08:00
Mon Jan 24 15:38:31 2011 Google Inc. <opensource@google.com>
* ctemplate: version 0.99 release * Accept . as part of tag/attr names when autoescaping (falmeida) * Optimize javascript template escaping (blount) * Allow <span dir=...> inside :H=snippet modifiers (jdtang) * make_tpl_varnames can write multiple tpls to one file (jad) * Add a few escaping modifier equivalences (jad) * BUGFIX: Fix ReloadAllIfChanged() with path (panicker) * PORTING: Relace tr with more portable sed, in tests (csilvers) * Updated from autoconf 2.64 to autoconf 2.65
This commit is contained in:
parent
602a5c132d
commit
98bea48e37
14
ChangeLog
14
ChangeLog
|
@ -1,4 +1,16 @@
|
||||||
Fri Sep 24 11:38:27 PDT 2010 Google Inc. <opensource@google.com>
|
Mon Jan 24 15:38:31 2011 Google Inc. <opensource@google.com>
|
||||||
|
|
||||||
|
* ctemplate: version 0.99 release
|
||||||
|
* Accept . as part of tag/attr names when autoescaping (falmeida)
|
||||||
|
* Optimize javascript template escaping (blount)
|
||||||
|
* Allow <span dir=...> inside :H=snippet modifiers (jdtang)
|
||||||
|
* make_tpl_varnames can write multiple tpls to one file (jad)
|
||||||
|
* Add a few escaping modifier equivalences (jad)
|
||||||
|
* BUGFIX: Fix ReloadAllIfChanged() with path (panicker)
|
||||||
|
* PORTING: Relace tr with more portable sed, in tests (csilvers)
|
||||||
|
* Updated from autoconf 2.64 to autoconf 2.65
|
||||||
|
|
||||||
|
Fri Sep 24 11:38:27 2010 Google Inc. <opensource@google.com>
|
||||||
|
|
||||||
* ctemplate: version 0.98 release
|
* ctemplate: version 0.98 release
|
||||||
* Add new image URL modifier: :I=html, :I=css, etc (jshneier, dougy)
|
* Add new image URL modifier: :I=html, :I=css, etc (jshneier, dougy)
|
||||||
|
|
35
INSTALL
35
INSTALL
|
@ -1,38 +1,3 @@
|
||||||
Ctemplate-Specific Install Notes
|
|
||||||
================================
|
|
||||||
|
|
||||||
This code should work on any modern C++ system. It has been tested on
|
|
||||||
the following systems:
|
|
||||||
FreeBSD 6.0
|
|
||||||
Linux Fedora Core 3
|
|
||||||
Linux Fedora Core 4
|
|
||||||
Linux Fedora Core 5
|
|
||||||
Linux Fedora Core 6
|
|
||||||
Linux RedHat 9
|
|
||||||
Linux Ubuntu 6.06.1
|
|
||||||
Mac OS X 10.3.9 (Panther)
|
|
||||||
Mac OS X 10.4.8 (Tiger)
|
|
||||||
Solaris 10 (x86)
|
|
||||||
Windows XP, Visual Studio 2003 (VC++7.1)
|
|
||||||
Windows XP, Visual Studio 2005 (VC++8)
|
|
||||||
|
|
||||||
The only known problem is with Mac OS X 10.3.9 (Panther), which may
|
|
||||||
have problems with the export-symbols optimization this library does
|
|
||||||
to limit its exposed API. If you have problems compiling that seem to
|
|
||||||
involve nmedit, the solution is to edit the Makefile and remove all
|
|
||||||
instances of
|
|
||||||
-export-symbols-regex $(CTEMPLATE_TESTING_SYMBOLS)
|
|
||||||
Just remove that string exactly. After that, code should build.
|
|
||||||
|
|
||||||
For Solaris 10 6/06, we have tested only with gcc (not the Sun
|
|
||||||
compiler). To get this to work, and to work around a bug in Solaris,
|
|
||||||
install as follows:
|
|
||||||
% PATH=${PATH}:/usr/sfw/bin/:/usr/ccs/bin ./configure LDFLAGS="-Lsrc/solaris -lrt"
|
|
||||||
% PATH=${PATH}:/usr/sfw/bin/:/usr/ccs/bin make
|
|
||||||
|
|
||||||
See README.windows for installation instructions for Windows.
|
|
||||||
|
|
||||||
|
|
||||||
Installation Instructions
|
Installation Instructions
|
||||||
*************************
|
*************************
|
||||||
|
|
||||||
|
|
16
NEWS
16
NEWS
|
@ -1,3 +1,16 @@
|
||||||
|
== 24 January 2011 ==
|
||||||
|
|
||||||
|
I've just released ctemplate 0.99. I expect this to be the last
|
||||||
|
release before ctemplate 1.0. Code has settled down; the big change
|
||||||
|
here is some efficiency improvements to javascript template escaping.
|
||||||
|
There is also a bugfix for an obscure case where ReloadAllIfChanged()
|
||||||
|
is used with multiple ctemplate search paths, where files are deleted
|
||||||
|
in one part of the search path between reloads. Unless you need
|
||||||
|
either of the above, there's no particular reason to upgrade.
|
||||||
|
|
||||||
|
A full list of changes is available in the
|
||||||
|
[http://google-ctemplate.googlecode.com/svn/tags/ctemplate-0.99/ChangeLog ChangeLog].
|
||||||
|
|
||||||
=== 23 September 2010 ===
|
=== 23 September 2010 ===
|
||||||
|
|
||||||
I've just released ctemplate 0.98. The changes are settling down as
|
I've just released ctemplate 0.98. The changes are settling down as
|
||||||
|
@ -56,8 +69,7 @@ There are some more minor changes as well, such as the addition of
|
||||||
multiply-include them. I've also been continuing the portability
|
multiply-include them. I've also been continuing the portability
|
||||||
work: ctemplate should now work under Cygwin and MinGW. A full list
|
work: ctemplate should now work under Cygwin and MinGW. A full list
|
||||||
of changes is available in the
|
of changes is available in the
|
||||||
[http://google-ctemplate.googlecode.com/svn/tags/ctemplate-0.97/ChangeLog
|
[http://google-ctemplate.googlecode.com/svn/tags/ctemplate-0.97/ChangeLog ChangeLog].
|
||||||
ChangeLog].
|
|
||||||
|
|
||||||
I know I've said this before, but I don't expect major API changes
|
I know I've said this before, but I don't expect major API changes
|
||||||
before the 1.0 release. The most significant changes I expect to see
|
before the 1.0 release. The most significant changes I expect to see
|
||||||
|
|
147
compile
147
compile
|
@ -1,8 +1,9 @@
|
||||||
#! /bin/sh
|
#! /bin/sh
|
||||||
|
|
||||||
# Wrapper for compilers which do not understand `-c -o'.
|
# Wrapper for compilers which do not understand `-c -o'.
|
||||||
|
|
||||||
# Copyright 1999, 2000 Free Software Foundation, Inc.
|
scriptversion=2005-05-14.22
|
||||||
|
|
||||||
|
# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||||
# Written by Tom Tromey <tromey@cygnus.com>.
|
# Written by Tom Tromey <tromey@cygnus.com>.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
@ -17,83 +18,125 @@
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program; if not, write to the Free Software
|
# along with this program; if not, write to the Free Software
|
||||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
# As a special exception to the GNU General Public License, if you
|
# As a special exception to the GNU General Public License, if you
|
||||||
# distribute this file as part of a program that contains a
|
# distribute this file as part of a program that contains a
|
||||||
# configuration script generated by Autoconf, you may include it under
|
# configuration script generated by Autoconf, you may include it under
|
||||||
# the same distribution terms that you use for the rest of that program.
|
# the same distribution terms that you use for the rest of that program.
|
||||||
|
|
||||||
# Usage:
|
# This file is maintained in Automake, please report
|
||||||
# compile PROGRAM [ARGS]...
|
# bugs to <bug-automake@gnu.org> or send patches to
|
||||||
# `-o FOO.o' is removed from the args passed to the actual compile.
|
# <automake-patches@gnu.org>.
|
||||||
|
|
||||||
prog=$1
|
case $1 in
|
||||||
shift
|
'')
|
||||||
|
echo "$0: No command. Try \`$0 --help' for more information." 1>&2
|
||||||
|
exit 1;
|
||||||
|
;;
|
||||||
|
-h | --h*)
|
||||||
|
cat <<\EOF
|
||||||
|
Usage: compile [--help] [--version] PROGRAM [ARGS]
|
||||||
|
|
||||||
|
Wrapper for compilers which do not understand `-c -o'.
|
||||||
|
Remove `-o dest.o' from ARGS, run PROGRAM with the remaining
|
||||||
|
arguments, and rename the output as expected.
|
||||||
|
|
||||||
|
If you are trying to build a whole package this is not the
|
||||||
|
right script to run: please start by reading the file `INSTALL'.
|
||||||
|
|
||||||
|
Report bugs to <bug-automake@gnu.org>.
|
||||||
|
EOF
|
||||||
|
exit $?
|
||||||
|
;;
|
||||||
|
-v | --v*)
|
||||||
|
echo "compile $scriptversion"
|
||||||
|
exit $?
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
ofile=
|
ofile=
|
||||||
cfile=
|
cfile=
|
||||||
args=
|
eat=
|
||||||
while test $# -gt 0; do
|
|
||||||
case "$1" in
|
for arg
|
||||||
-o)
|
do
|
||||||
# configure might choose to run compile as `compile cc -o foo foo.c'.
|
if test -n "$eat"; then
|
||||||
# So we do something ugly here.
|
eat=
|
||||||
ofile=$2
|
else
|
||||||
shift
|
case $1 in
|
||||||
case "$ofile" in
|
-o)
|
||||||
*.o | *.obj)
|
# configure might choose to run compile as `compile cc -o foo foo.c'.
|
||||||
;;
|
# So we strip `-o arg' only if arg is an object.
|
||||||
*)
|
eat=1
|
||||||
args="$args -o $ofile"
|
case $2 in
|
||||||
ofile=
|
*.o | *.obj)
|
||||||
;;
|
ofile=$2
|
||||||
esac
|
;;
|
||||||
;;
|
*)
|
||||||
*.c)
|
set x "$@" -o "$2"
|
||||||
cfile=$1
|
shift
|
||||||
args="$args $1"
|
;;
|
||||||
;;
|
esac
|
||||||
*)
|
;;
|
||||||
args="$args $1"
|
*.c)
|
||||||
;;
|
cfile=$1
|
||||||
esac
|
set x "$@" "$1"
|
||||||
shift
|
shift
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
set x "$@" "$1"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
shift
|
||||||
done
|
done
|
||||||
|
|
||||||
if test -z "$ofile" || test -z "$cfile"; then
|
if test -z "$ofile" || test -z "$cfile"; then
|
||||||
# If no `-o' option was seen then we might have been invoked from a
|
# If no `-o' option was seen then we might have been invoked from a
|
||||||
# pattern rule where we don't need one. That is ok -- this is a
|
# pattern rule where we don't need one. That is ok -- this is a
|
||||||
# normal compilation that the losing compiler can handle. If no
|
# normal compilation that the losing compiler can handle. If no
|
||||||
# `.c' file was seen then we are probably linking. That is also
|
# `.c' file was seen then we are probably linking. That is also
|
||||||
# ok.
|
# ok.
|
||||||
exec "$prog" $args
|
exec "$@"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Name of file we expect compiler to create.
|
# Name of file we expect compiler to create.
|
||||||
cofile=`echo $cfile | sed -e 's|^.*/||' -e 's/\.c$/.o/'`
|
cofile=`echo "$cfile" | sed -e 's|^.*/||' -e 's/\.c$/.o/'`
|
||||||
|
|
||||||
# Create the lock directory.
|
# Create the lock directory.
|
||||||
# Note: use `[/.-]' here to ensure that we don't use the same name
|
# Note: use `[/.-]' here to ensure that we don't use the same name
|
||||||
# that we are using for the .o file. Also, base the name on the expected
|
# that we are using for the .o file. Also, base the name on the expected
|
||||||
# object file name, since that is what matters with a parallel build.
|
# object file name, since that is what matters with a parallel build.
|
||||||
lockdir=`echo $cofile | sed -e 's|[/.-]|_|g'`.d
|
lockdir=`echo "$cofile" | sed -e 's|[/.-]|_|g'`.d
|
||||||
while true; do
|
while true; do
|
||||||
if mkdir $lockdir > /dev/null 2>&1; then
|
if mkdir "$lockdir" >/dev/null 2>&1; then
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
sleep 1
|
sleep 1
|
||||||
done
|
done
|
||||||
# FIXME: race condition here if user kills between mkdir and trap.
|
# FIXME: race condition here if user kills between mkdir and trap.
|
||||||
trap "rmdir $lockdir; exit 1" 1 2 15
|
trap "rmdir '$lockdir'; exit 1" 1 2 15
|
||||||
|
|
||||||
# Run the compile.
|
# Run the compile.
|
||||||
"$prog" $args
|
"$@"
|
||||||
status=$?
|
ret=$?
|
||||||
|
|
||||||
if test -f "$cofile"; then
|
if test -f "$cofile"; then
|
||||||
mv "$cofile" "$ofile"
|
mv "$cofile" "$ofile"
|
||||||
|
elif test -f "${cofile}bj"; then
|
||||||
|
mv "${cofile}bj" "$ofile"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
rmdir $lockdir
|
rmdir "$lockdir"
|
||||||
exit $status
|
exit $ret
|
||||||
|
|
||||||
|
# Local Variables:
|
||||||
|
# mode: shell-script
|
||||||
|
# sh-indentation: 2
|
||||||
|
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||||
|
# time-stamp-start: "scriptversion="
|
||||||
|
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||||
|
# time-stamp-end: "$"
|
||||||
|
# End:
|
||||||
|
|
135
config.guess
vendored
135
config.guess
vendored
|
@ -1,10 +1,10 @@
|
||||||
#! /bin/sh
|
#! /bin/sh
|
||||||
# Attempt to guess a canonical system name.
|
# Attempt to guess a canonical system name.
|
||||||
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
|
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
|
||||||
# 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation,
|
# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
|
||||||
# Inc.
|
# Free Software Foundation, Inc.
|
||||||
|
|
||||||
timestamp='2007-07-22'
|
timestamp='2009-06-10'
|
||||||
|
|
||||||
# This file is free software; you can redistribute it and/or modify it
|
# This file is free software; you can redistribute it and/or modify it
|
||||||
# under the terms of the GNU General Public License as published by
|
# under the terms of the GNU General Public License as published by
|
||||||
|
@ -56,8 +56,8 @@ version="\
|
||||||
GNU config.guess ($timestamp)
|
GNU config.guess ($timestamp)
|
||||||
|
|
||||||
Originally written by Per Bothner.
|
Originally written by Per Bothner.
|
||||||
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
|
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
|
||||||
Free Software Foundation, Inc.
|
2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This is free software; see the source for copying conditions. There is NO
|
This is free software; see the source for copying conditions. There is NO
|
||||||
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
|
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
|
||||||
|
@ -170,7 +170,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
||||||
arm*|i386|m68k|ns32k|sh3*|sparc|vax)
|
arm*|i386|m68k|ns32k|sh3*|sparc|vax)
|
||||||
eval $set_cc_for_build
|
eval $set_cc_for_build
|
||||||
if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
|
if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
|
||||||
| grep __ELF__ >/dev/null
|
| grep -q __ELF__
|
||||||
then
|
then
|
||||||
# Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
|
# Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
|
||||||
# Return netbsd for either. FIX?
|
# Return netbsd for either. FIX?
|
||||||
|
@ -324,6 +324,9 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
||||||
case `/usr/bin/uname -p` in
|
case `/usr/bin/uname -p` in
|
||||||
sparc) echo sparc-icl-nx7; exit ;;
|
sparc) echo sparc-icl-nx7; exit ;;
|
||||||
esac ;;
|
esac ;;
|
||||||
|
s390x:SunOS:*:*)
|
||||||
|
echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
||||||
|
exit ;;
|
||||||
sun4H:SunOS:5.*:*)
|
sun4H:SunOS:5.*:*)
|
||||||
echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
||||||
exit ;;
|
exit ;;
|
||||||
|
@ -331,7 +334,20 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
||||||
echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
||||||
exit ;;
|
exit ;;
|
||||||
i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
|
i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
|
||||||
echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
eval $set_cc_for_build
|
||||||
|
SUN_ARCH="i386"
|
||||||
|
# If there is a compiler, see if it is configured for 64-bit objects.
|
||||||
|
# Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
|
||||||
|
# This test works for both compilers.
|
||||||
|
if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
|
||||||
|
if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
|
||||||
|
(CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
|
||||||
|
grep IS_64BIT_ARCH >/dev/null
|
||||||
|
then
|
||||||
|
SUN_ARCH="x86_64"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
||||||
exit ;;
|
exit ;;
|
||||||
sun4*:SunOS:6*:*)
|
sun4*:SunOS:6*:*)
|
||||||
# According to config.sub, this is the proper way to canonicalize
|
# According to config.sub, this is the proper way to canonicalize
|
||||||
|
@ -532,7 +548,7 @@ EOF
|
||||||
echo rs6000-ibm-aix3.2
|
echo rs6000-ibm-aix3.2
|
||||||
fi
|
fi
|
||||||
exit ;;
|
exit ;;
|
||||||
*:AIX:*:[45])
|
*:AIX:*:[456])
|
||||||
IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
|
IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
|
||||||
if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
|
if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
|
||||||
IBM_ARCH=rs6000
|
IBM_ARCH=rs6000
|
||||||
|
@ -640,7 +656,7 @@ EOF
|
||||||
# => hppa64-hp-hpux11.23
|
# => hppa64-hp-hpux11.23
|
||||||
|
|
||||||
if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
|
if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
|
||||||
grep __LP64__ >/dev/null
|
grep -q __LP64__
|
||||||
then
|
then
|
||||||
HP_ARCH="hppa2.0w"
|
HP_ARCH="hppa2.0w"
|
||||||
else
|
else
|
||||||
|
@ -796,13 +812,19 @@ EOF
|
||||||
x86)
|
x86)
|
||||||
echo i586-pc-interix${UNAME_RELEASE}
|
echo i586-pc-interix${UNAME_RELEASE}
|
||||||
exit ;;
|
exit ;;
|
||||||
EM64T | authenticamd)
|
EM64T | authenticamd | genuineintel)
|
||||||
echo x86_64-unknown-interix${UNAME_RELEASE}
|
echo x86_64-unknown-interix${UNAME_RELEASE}
|
||||||
exit ;;
|
exit ;;
|
||||||
|
IA64)
|
||||||
|
echo ia64-unknown-interix${UNAME_RELEASE}
|
||||||
|
exit ;;
|
||||||
esac ;;
|
esac ;;
|
||||||
[345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
|
[345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
|
||||||
echo i${UNAME_MACHINE}-pc-mks
|
echo i${UNAME_MACHINE}-pc-mks
|
||||||
exit ;;
|
exit ;;
|
||||||
|
8664:Windows_NT:*)
|
||||||
|
echo x86_64-pc-mks
|
||||||
|
exit ;;
|
||||||
i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
|
i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
|
||||||
# How do we know it's Interix rather than the generic POSIX subsystem?
|
# How do we know it's Interix rather than the generic POSIX subsystem?
|
||||||
# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
|
# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
|
||||||
|
@ -833,7 +855,14 @@ EOF
|
||||||
echo ${UNAME_MACHINE}-pc-minix
|
echo ${UNAME_MACHINE}-pc-minix
|
||||||
exit ;;
|
exit ;;
|
||||||
arm*:Linux:*:*)
|
arm*:Linux:*:*)
|
||||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
eval $set_cc_for_build
|
||||||
|
if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
|
||||||
|
| grep -q __ARM_EABI__
|
||||||
|
then
|
||||||
|
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||||
|
else
|
||||||
|
echo ${UNAME_MACHINE}-unknown-linux-gnueabi
|
||||||
|
fi
|
||||||
exit ;;
|
exit ;;
|
||||||
avr32*:Linux:*:*)
|
avr32*:Linux:*:*)
|
||||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||||
|
@ -856,40 +885,17 @@ EOF
|
||||||
m68*:Linux:*:*)
|
m68*:Linux:*:*)
|
||||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||||
exit ;;
|
exit ;;
|
||||||
mips:Linux:*:*)
|
mips:Linux:*:* | mips64:Linux:*:*)
|
||||||
eval $set_cc_for_build
|
eval $set_cc_for_build
|
||||||
sed 's/^ //' << EOF >$dummy.c
|
sed 's/^ //' << EOF >$dummy.c
|
||||||
#undef CPU
|
#undef CPU
|
||||||
#undef mips
|
#undef ${UNAME_MACHINE}
|
||||||
#undef mipsel
|
#undef ${UNAME_MACHINE}el
|
||||||
#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
|
#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
|
||||||
CPU=mipsel
|
CPU=${UNAME_MACHINE}el
|
||||||
#else
|
#else
|
||||||
#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
|
#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
|
||||||
CPU=mips
|
CPU=${UNAME_MACHINE}
|
||||||
#else
|
|
||||||
CPU=
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
EOF
|
|
||||||
eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
|
|
||||||
/^CPU/{
|
|
||||||
s: ::g
|
|
||||||
p
|
|
||||||
}'`"
|
|
||||||
test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
|
|
||||||
;;
|
|
||||||
mips64:Linux:*:*)
|
|
||||||
eval $set_cc_for_build
|
|
||||||
sed 's/^ //' << EOF >$dummy.c
|
|
||||||
#undef CPU
|
|
||||||
#undef mips64
|
|
||||||
#undef mips64el
|
|
||||||
#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
|
|
||||||
CPU=mips64el
|
|
||||||
#else
|
|
||||||
#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
|
|
||||||
CPU=mips64
|
|
||||||
#else
|
#else
|
||||||
CPU=
|
CPU=
|
||||||
#endif
|
#endif
|
||||||
|
@ -921,10 +927,13 @@ EOF
|
||||||
EV67) UNAME_MACHINE=alphaev67 ;;
|
EV67) UNAME_MACHINE=alphaev67 ;;
|
||||||
EV68*) UNAME_MACHINE=alphaev68 ;;
|
EV68*) UNAME_MACHINE=alphaev68 ;;
|
||||||
esac
|
esac
|
||||||
objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
|
objdump --private-headers /bin/sh | grep -q ld.so.1
|
||||||
if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
|
if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
|
||||||
echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
|
echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
|
||||||
exit ;;
|
exit ;;
|
||||||
|
padre:Linux:*:*)
|
||||||
|
echo sparc-unknown-linux-gnu
|
||||||
|
exit ;;
|
||||||
parisc:Linux:*:* | hppa:Linux:*:*)
|
parisc:Linux:*:* | hppa:Linux:*:*)
|
||||||
# Look for CPU level
|
# Look for CPU level
|
||||||
case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
|
case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
|
||||||
|
@ -954,8 +963,8 @@ EOF
|
||||||
x86_64:Linux:*:*)
|
x86_64:Linux:*:*)
|
||||||
echo x86_64-unknown-linux-gnu
|
echo x86_64-unknown-linux-gnu
|
||||||
exit ;;
|
exit ;;
|
||||||
xtensa:Linux:*:*)
|
xtensa*:Linux:*:*)
|
||||||
echo xtensa-unknown-linux-gnu
|
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||||
exit ;;
|
exit ;;
|
||||||
i*86:Linux:*:*)
|
i*86:Linux:*:*)
|
||||||
# The BFD linker knows what the default object file format is, so
|
# The BFD linker knows what the default object file format is, so
|
||||||
|
@ -972,17 +981,6 @@ EOF
|
||||||
elf32-i386)
|
elf32-i386)
|
||||||
TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
|
TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
|
||||||
;;
|
;;
|
||||||
a.out-i386-linux)
|
|
||||||
echo "${UNAME_MACHINE}-pc-linux-gnuaout"
|
|
||||||
exit ;;
|
|
||||||
coff-i386)
|
|
||||||
echo "${UNAME_MACHINE}-pc-linux-gnucoff"
|
|
||||||
exit ;;
|
|
||||||
"")
|
|
||||||
# Either a pre-BFD a.out linker (linux-gnuoldld) or
|
|
||||||
# one that does not give us useful --help.
|
|
||||||
echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
|
|
||||||
exit ;;
|
|
||||||
esac
|
esac
|
||||||
# Determine whether the default compiler is a.out or elf
|
# Determine whether the default compiler is a.out or elf
|
||||||
eval $set_cc_for_build
|
eval $set_cc_for_build
|
||||||
|
@ -1048,7 +1046,7 @@ EOF
|
||||||
i*86:syllable:*:*)
|
i*86:syllable:*:*)
|
||||||
echo ${UNAME_MACHINE}-pc-syllable
|
echo ${UNAME_MACHINE}-pc-syllable
|
||||||
exit ;;
|
exit ;;
|
||||||
i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
|
i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
|
||||||
echo i386-unknown-lynxos${UNAME_RELEASE}
|
echo i386-unknown-lynxos${UNAME_RELEASE}
|
||||||
exit ;;
|
exit ;;
|
||||||
i*86:*DOS:*:*)
|
i*86:*DOS:*:*)
|
||||||
|
@ -1092,8 +1090,11 @@ EOF
|
||||||
pc:*:*:*)
|
pc:*:*:*)
|
||||||
# Left here for compatibility:
|
# Left here for compatibility:
|
||||||
# uname -m prints for DJGPP always 'pc', but it prints nothing about
|
# uname -m prints for DJGPP always 'pc', but it prints nothing about
|
||||||
# the processor, so we play safe by assuming i386.
|
# the processor, so we play safe by assuming i586.
|
||||||
echo i386-pc-msdosdjgpp
|
# Note: whatever this is, it MUST be the same as what config.sub
|
||||||
|
# prints for the "djgpp" host, or else GDB configury will decide that
|
||||||
|
# this is a cross-build.
|
||||||
|
echo i586-pc-msdosdjgpp
|
||||||
exit ;;
|
exit ;;
|
||||||
Intel:Mach:3*:*)
|
Intel:Mach:3*:*)
|
||||||
echo i386-pc-mach3
|
echo i386-pc-mach3
|
||||||
|
@ -1131,6 +1132,16 @@ EOF
|
||||||
3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
|
3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
|
||||||
/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
|
/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
|
||||||
&& { echo i486-ncr-sysv4; exit; } ;;
|
&& { echo i486-ncr-sysv4; exit; } ;;
|
||||||
|
NCR*:*:4.2:* | MPRAS*:*:4.2:*)
|
||||||
|
OS_REL='.3'
|
||||||
|
test -r /etc/.relid \
|
||||||
|
&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
|
||||||
|
/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
|
||||||
|
&& { echo i486-ncr-sysv4.3${OS_REL}; exit; }
|
||||||
|
/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
|
||||||
|
&& { echo i586-ncr-sysv4.3${OS_REL}; exit; }
|
||||||
|
/bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
|
||||||
|
&& { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
|
||||||
m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
|
m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
|
||||||
echo m68k-unknown-lynxos${UNAME_RELEASE}
|
echo m68k-unknown-lynxos${UNAME_RELEASE}
|
||||||
exit ;;
|
exit ;;
|
||||||
|
@ -1143,7 +1154,7 @@ EOF
|
||||||
rs6000:LynxOS:2.*:*)
|
rs6000:LynxOS:2.*:*)
|
||||||
echo rs6000-unknown-lynxos${UNAME_RELEASE}
|
echo rs6000-unknown-lynxos${UNAME_RELEASE}
|
||||||
exit ;;
|
exit ;;
|
||||||
PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
|
PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
|
||||||
echo powerpc-unknown-lynxos${UNAME_RELEASE}
|
echo powerpc-unknown-lynxos${UNAME_RELEASE}
|
||||||
exit ;;
|
exit ;;
|
||||||
SM[BE]S:UNIX_SV:*:*)
|
SM[BE]S:UNIX_SV:*:*)
|
||||||
|
@ -1206,6 +1217,9 @@ EOF
|
||||||
BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
|
BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
|
||||||
echo i586-pc-beos
|
echo i586-pc-beos
|
||||||
exit ;;
|
exit ;;
|
||||||
|
BePC:Haiku:*:*) # Haiku running on Intel PC compatible.
|
||||||
|
echo i586-pc-haiku
|
||||||
|
exit ;;
|
||||||
SX-4:SUPER-UX:*:*)
|
SX-4:SUPER-UX:*:*)
|
||||||
echo sx4-nec-superux${UNAME_RELEASE}
|
echo sx4-nec-superux${UNAME_RELEASE}
|
||||||
exit ;;
|
exit ;;
|
||||||
|
@ -1314,6 +1328,9 @@ EOF
|
||||||
i*86:rdos:*:*)
|
i*86:rdos:*:*)
|
||||||
echo ${UNAME_MACHINE}-pc-rdos
|
echo ${UNAME_MACHINE}-pc-rdos
|
||||||
exit ;;
|
exit ;;
|
||||||
|
i*86:AROS:*:*)
|
||||||
|
echo ${UNAME_MACHINE}-pc-aros
|
||||||
|
exit ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
#echo '(No uname command or uname output not recognized.)' 1>&2
|
#echo '(No uname command or uname output not recognized.)' 1>&2
|
||||||
|
@ -1474,9 +1491,9 @@ This script, last modified $timestamp, has failed to recognize
|
||||||
the operating system you are using. It is advised that you
|
the operating system you are using. It is advised that you
|
||||||
download the most up to date version of the config scripts from
|
download the most up to date version of the config scripts from
|
||||||
|
|
||||||
http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.guess
|
http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
|
||||||
and
|
and
|
||||||
http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.sub
|
http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
|
||||||
|
|
||||||
If the version you run ($0) is already up to date, please
|
If the version you run ($0) is already up to date, please
|
||||||
send the following data and any information you think might be
|
send the following data and any information you think might be
|
||||||
|
|
107
config.sub
vendored
107
config.sub
vendored
|
@ -1,10 +1,10 @@
|
||||||
#! /bin/sh
|
#! /bin/sh
|
||||||
# Configuration validation subroutine script.
|
# Configuration validation subroutine script.
|
||||||
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
|
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
|
||||||
# 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation,
|
# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
|
||||||
# Inc.
|
# Free Software Foundation, Inc.
|
||||||
|
|
||||||
timestamp='2007-06-28'
|
timestamp='2009-06-11'
|
||||||
|
|
||||||
# This file is (in principle) common to ALL GNU software.
|
# This file is (in principle) common to ALL GNU software.
|
||||||
# The presence of a machine in this file suggests that SOME GNU software
|
# The presence of a machine in this file suggests that SOME GNU software
|
||||||
|
@ -72,8 +72,8 @@ Report bugs and patches to <config-patches@gnu.org>."
|
||||||
version="\
|
version="\
|
||||||
GNU config.sub ($timestamp)
|
GNU config.sub ($timestamp)
|
||||||
|
|
||||||
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
|
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
|
||||||
Free Software Foundation, Inc.
|
2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This is free software; see the source for copying conditions. There is NO
|
This is free software; see the source for copying conditions. There is NO
|
||||||
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
|
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
|
||||||
|
@ -122,6 +122,7 @@ maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
|
||||||
case $maybe_os in
|
case $maybe_os in
|
||||||
nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
|
nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
|
||||||
uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
|
uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
|
||||||
|
kopensolaris*-gnu* | \
|
||||||
storm-chaos* | os2-emx* | rtmk-nova*)
|
storm-chaos* | os2-emx* | rtmk-nova*)
|
||||||
os=-$maybe_os
|
os=-$maybe_os
|
||||||
basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
|
basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
|
||||||
|
@ -152,6 +153,9 @@ case $os in
|
||||||
os=
|
os=
|
||||||
basic_machine=$1
|
basic_machine=$1
|
||||||
;;
|
;;
|
||||||
|
-bluegene*)
|
||||||
|
os=-cnk
|
||||||
|
;;
|
||||||
-sim | -cisco | -oki | -wec | -winbond)
|
-sim | -cisco | -oki | -wec | -winbond)
|
||||||
os=
|
os=
|
||||||
basic_machine=$1
|
basic_machine=$1
|
||||||
|
@ -249,13 +253,16 @@ case $basic_machine in
|
||||||
| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
|
| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
|
||||||
| i370 | i860 | i960 | ia64 \
|
| i370 | i860 | i960 | ia64 \
|
||||||
| ip2k | iq2000 \
|
| ip2k | iq2000 \
|
||||||
|
| lm32 \
|
||||||
| m32c | m32r | m32rle | m68000 | m68k | m88k \
|
| m32c | m32r | m32rle | m68000 | m68k | m88k \
|
||||||
| maxq | mb | microblaze | mcore | mep \
|
| maxq | mb | microblaze | mcore | mep | metag \
|
||||||
| mips | mipsbe | mipseb | mipsel | mipsle \
|
| mips | mipsbe | mipseb | mipsel | mipsle \
|
||||||
| mips16 \
|
| mips16 \
|
||||||
| mips64 | mips64el \
|
| mips64 | mips64el \
|
||||||
| mips64vr | mips64vrel \
|
| mips64octeon | mips64octeonel \
|
||||||
| mips64orion | mips64orionel \
|
| mips64orion | mips64orionel \
|
||||||
|
| mips64r5900 | mips64r5900el \
|
||||||
|
| mips64vr | mips64vrel \
|
||||||
| mips64vr4100 | mips64vr4100el \
|
| mips64vr4100 | mips64vr4100el \
|
||||||
| mips64vr4300 | mips64vr4300el \
|
| mips64vr4300 | mips64vr4300el \
|
||||||
| mips64vr5000 | mips64vr5000el \
|
| mips64vr5000 | mips64vr5000el \
|
||||||
|
@ -268,6 +275,7 @@ case $basic_machine in
|
||||||
| mipsisa64sr71k | mipsisa64sr71kel \
|
| mipsisa64sr71k | mipsisa64sr71kel \
|
||||||
| mipstx39 | mipstx39el \
|
| mipstx39 | mipstx39el \
|
||||||
| mn10200 | mn10300 \
|
| mn10200 | mn10300 \
|
||||||
|
| moxie \
|
||||||
| mt \
|
| mt \
|
||||||
| msp430 \
|
| msp430 \
|
||||||
| nios | nios2 \
|
| nios | nios2 \
|
||||||
|
@ -277,7 +285,7 @@ case $basic_machine in
|
||||||
| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
|
| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
|
||||||
| pyramid \
|
| pyramid \
|
||||||
| score \
|
| score \
|
||||||
| sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
|
| sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
|
||||||
| sh64 | sh64le \
|
| sh64 | sh64le \
|
||||||
| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
|
| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
|
||||||
| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
|
| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
|
||||||
|
@ -286,7 +294,7 @@ case $basic_machine in
|
||||||
| v850 | v850e \
|
| v850 | v850e \
|
||||||
| we32k \
|
| we32k \
|
||||||
| x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
|
| x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
|
||||||
| z8k)
|
| z8k | z80)
|
||||||
basic_machine=$basic_machine-unknown
|
basic_machine=$basic_machine-unknown
|
||||||
;;
|
;;
|
||||||
m6811 | m68hc11 | m6812 | m68hc12)
|
m6811 | m68hc11 | m6812 | m68hc12)
|
||||||
|
@ -329,14 +337,17 @@ case $basic_machine in
|
||||||
| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
|
| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
|
||||||
| i*86-* | i860-* | i960-* | ia64-* \
|
| i*86-* | i860-* | i960-* | ia64-* \
|
||||||
| ip2k-* | iq2000-* \
|
| ip2k-* | iq2000-* \
|
||||||
|
| lm32-* \
|
||||||
| m32c-* | m32r-* | m32rle-* \
|
| m32c-* | m32r-* | m32rle-* \
|
||||||
| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
|
| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
|
||||||
| m88110-* | m88k-* | maxq-* | mcore-* \
|
| m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
|
||||||
| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
|
| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
|
||||||
| mips16-* \
|
| mips16-* \
|
||||||
| mips64-* | mips64el-* \
|
| mips64-* | mips64el-* \
|
||||||
| mips64vr-* | mips64vrel-* \
|
| mips64octeon-* | mips64octeonel-* \
|
||||||
| mips64orion-* | mips64orionel-* \
|
| mips64orion-* | mips64orionel-* \
|
||||||
|
| mips64r5900-* | mips64r5900el-* \
|
||||||
|
| mips64vr-* | mips64vrel-* \
|
||||||
| mips64vr4100-* | mips64vr4100el-* \
|
| mips64vr4100-* | mips64vr4100el-* \
|
||||||
| mips64vr4300-* | mips64vr4300el-* \
|
| mips64vr4300-* | mips64vr4300el-* \
|
||||||
| mips64vr5000-* | mips64vr5000el-* \
|
| mips64vr5000-* | mips64vr5000el-* \
|
||||||
|
@ -358,20 +369,24 @@ case $basic_machine in
|
||||||
| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
|
| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
|
||||||
| pyramid-* \
|
| pyramid-* \
|
||||||
| romp-* | rs6000-* \
|
| romp-* | rs6000-* \
|
||||||
| sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
|
| sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
|
||||||
| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
|
| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
|
||||||
| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
|
| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
|
||||||
| sparclite-* \
|
| sparclite-* \
|
||||||
| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
|
| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
|
||||||
| tahoe-* | thumb-* \
|
| tahoe-* | thumb-* \
|
||||||
| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
|
| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \
|
||||||
| tron-* \
|
| tron-* \
|
||||||
| v850-* | v850e-* | vax-* \
|
| v850-* | v850e-* | vax-* \
|
||||||
| we32k-* \
|
| we32k-* \
|
||||||
| x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
|
| x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
|
||||||
| xstormy16-* | xtensa-* \
|
| xstormy16-* | xtensa*-* \
|
||||||
| ymp-* \
|
| ymp-* \
|
||||||
| z8k-*)
|
| z8k-* | z80-*)
|
||||||
|
;;
|
||||||
|
# Recognize the basic CPU types without company name, with glob match.
|
||||||
|
xtensa*)
|
||||||
|
basic_machine=$basic_machine-unknown
|
||||||
;;
|
;;
|
||||||
# Recognize the various machine names and aliases which stand
|
# Recognize the various machine names and aliases which stand
|
||||||
# for a CPU type and a company and sometimes even an OS.
|
# for a CPU type and a company and sometimes even an OS.
|
||||||
|
@ -435,6 +450,10 @@ case $basic_machine in
|
||||||
basic_machine=m68k-apollo
|
basic_machine=m68k-apollo
|
||||||
os=-bsd
|
os=-bsd
|
||||||
;;
|
;;
|
||||||
|
aros)
|
||||||
|
basic_machine=i386-pc
|
||||||
|
os=-aros
|
||||||
|
;;
|
||||||
aux)
|
aux)
|
||||||
basic_machine=m68k-apple
|
basic_machine=m68k-apple
|
||||||
os=-aux
|
os=-aux
|
||||||
|
@ -443,10 +462,26 @@ case $basic_machine in
|
||||||
basic_machine=ns32k-sequent
|
basic_machine=ns32k-sequent
|
||||||
os=-dynix
|
os=-dynix
|
||||||
;;
|
;;
|
||||||
|
blackfin)
|
||||||
|
basic_machine=bfin-unknown
|
||||||
|
os=-linux
|
||||||
|
;;
|
||||||
|
blackfin-*)
|
||||||
|
basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||||
|
os=-linux
|
||||||
|
;;
|
||||||
|
bluegene*)
|
||||||
|
basic_machine=powerpc-ibm
|
||||||
|
os=-cnk
|
||||||
|
;;
|
||||||
c90)
|
c90)
|
||||||
basic_machine=c90-cray
|
basic_machine=c90-cray
|
||||||
os=-unicos
|
os=-unicos
|
||||||
;;
|
;;
|
||||||
|
cegcc)
|
||||||
|
basic_machine=arm-unknown
|
||||||
|
os=-cegcc
|
||||||
|
;;
|
||||||
convex-c1)
|
convex-c1)
|
||||||
basic_machine=c1-convex
|
basic_machine=c1-convex
|
||||||
os=-bsd
|
os=-bsd
|
||||||
|
@ -514,6 +549,10 @@ case $basic_machine in
|
||||||
basic_machine=m88k-motorola
|
basic_machine=m88k-motorola
|
||||||
os=-sysv3
|
os=-sysv3
|
||||||
;;
|
;;
|
||||||
|
dicos)
|
||||||
|
basic_machine=i686-pc
|
||||||
|
os=-dicos
|
||||||
|
;;
|
||||||
djgpp)
|
djgpp)
|
||||||
basic_machine=i586-pc
|
basic_machine=i586-pc
|
||||||
os=-msdosdjgpp
|
os=-msdosdjgpp
|
||||||
|
@ -668,6 +707,14 @@ case $basic_machine in
|
||||||
basic_machine=m68k-isi
|
basic_machine=m68k-isi
|
||||||
os=-sysv
|
os=-sysv
|
||||||
;;
|
;;
|
||||||
|
m68knommu)
|
||||||
|
basic_machine=m68k-unknown
|
||||||
|
os=-linux
|
||||||
|
;;
|
||||||
|
m68knommu-*)
|
||||||
|
basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||||
|
os=-linux
|
||||||
|
;;
|
||||||
m88k-omron*)
|
m88k-omron*)
|
||||||
basic_machine=m88k-omron
|
basic_machine=m88k-omron
|
||||||
;;
|
;;
|
||||||
|
@ -813,6 +860,14 @@ case $basic_machine in
|
||||||
basic_machine=i860-intel
|
basic_machine=i860-intel
|
||||||
os=-osf
|
os=-osf
|
||||||
;;
|
;;
|
||||||
|
parisc)
|
||||||
|
basic_machine=hppa-unknown
|
||||||
|
os=-linux
|
||||||
|
;;
|
||||||
|
parisc-*)
|
||||||
|
basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||||
|
os=-linux
|
||||||
|
;;
|
||||||
pbd)
|
pbd)
|
||||||
basic_machine=sparc-tti
|
basic_machine=sparc-tti
|
||||||
;;
|
;;
|
||||||
|
@ -1021,6 +1076,10 @@ case $basic_machine in
|
||||||
basic_machine=tic6x-unknown
|
basic_machine=tic6x-unknown
|
||||||
os=-coff
|
os=-coff
|
||||||
;;
|
;;
|
||||||
|
tile*)
|
||||||
|
basic_machine=tile-unknown
|
||||||
|
os=-linux-gnu
|
||||||
|
;;
|
||||||
tx39)
|
tx39)
|
||||||
basic_machine=mipstx39-unknown
|
basic_machine=mipstx39-unknown
|
||||||
;;
|
;;
|
||||||
|
@ -1096,6 +1155,10 @@ case $basic_machine in
|
||||||
basic_machine=z8k-unknown
|
basic_machine=z8k-unknown
|
||||||
os=-sim
|
os=-sim
|
||||||
;;
|
;;
|
||||||
|
z80-*-coff)
|
||||||
|
basic_machine=z80-unknown
|
||||||
|
os=-sim
|
||||||
|
;;
|
||||||
none)
|
none)
|
||||||
basic_machine=none-none
|
basic_machine=none-none
|
||||||
os=-none
|
os=-none
|
||||||
|
@ -1134,7 +1197,7 @@ case $basic_machine in
|
||||||
we32k)
|
we32k)
|
||||||
basic_machine=we32k-att
|
basic_machine=we32k-att
|
||||||
;;
|
;;
|
||||||
sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele)
|
sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
|
||||||
basic_machine=sh-unknown
|
basic_machine=sh-unknown
|
||||||
;;
|
;;
|
||||||
sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
|
sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
|
||||||
|
@ -1204,10 +1267,11 @@ case $os in
|
||||||
# Each alternative MUST END IN A *, to match a version number.
|
# Each alternative MUST END IN A *, to match a version number.
|
||||||
# -sysv* is not here because it comes later, after sysvr4.
|
# -sysv* is not here because it comes later, after sysvr4.
|
||||||
-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
|
-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
|
||||||
| -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
|
| -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
|
||||||
| -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
|
| -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
|
||||||
|
| -kopensolaris* \
|
||||||
| -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
|
| -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
|
||||||
| -aos* \
|
| -aos* | -aros* \
|
||||||
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
|
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
|
||||||
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
|
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
|
||||||
| -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
|
| -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
|
||||||
|
@ -1216,7 +1280,7 @@ case $os in
|
||||||
| -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
|
| -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
|
||||||
| -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
|
| -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
|
||||||
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
|
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
|
||||||
| -chorusos* | -chorusrdb* \
|
| -chorusos* | -chorusrdb* | -cegcc* \
|
||||||
| -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
|
| -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
|
||||||
| -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
|
| -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
|
||||||
| -uxpv* | -beos* | -mpeix* | -udk* \
|
| -uxpv* | -beos* | -mpeix* | -udk* \
|
||||||
|
@ -1356,6 +1420,9 @@ case $os in
|
||||||
-zvmoe)
|
-zvmoe)
|
||||||
os=-zvmoe
|
os=-zvmoe
|
||||||
;;
|
;;
|
||||||
|
-dicos*)
|
||||||
|
os=-dicos
|
||||||
|
;;
|
||||||
-none)
|
-none)
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
|
@ -1553,7 +1620,7 @@ case $basic_machine in
|
||||||
-sunos*)
|
-sunos*)
|
||||||
vendor=sun
|
vendor=sun
|
||||||
;;
|
;;
|
||||||
-aix*)
|
-cnk*|-aix*)
|
||||||
vendor=ibm
|
vendor=ibm
|
||||||
;;
|
;;
|
||||||
-beos*)
|
-beos*)
|
||||||
|
|
22
configure
vendored
22
configure
vendored
|
@ -1,6 +1,6 @@
|
||||||
#! /bin/sh
|
#! /bin/sh
|
||||||
# Guess values for system-dependent variables and create Makefiles.
|
# Guess values for system-dependent variables and create Makefiles.
|
||||||
# Generated by GNU Autoconf 2.65 for ctemplate 0.98.
|
# Generated by GNU Autoconf 2.65 for ctemplate 0.99.
|
||||||
#
|
#
|
||||||
# Report bugs to <opensource@google.com>.
|
# Report bugs to <opensource@google.com>.
|
||||||
#
|
#
|
||||||
|
@ -701,8 +701,8 @@ MAKEFLAGS=
|
||||||
# Identity of this package.
|
# Identity of this package.
|
||||||
PACKAGE_NAME='ctemplate'
|
PACKAGE_NAME='ctemplate'
|
||||||
PACKAGE_TARNAME='ctemplate'
|
PACKAGE_TARNAME='ctemplate'
|
||||||
PACKAGE_VERSION='0.98'
|
PACKAGE_VERSION='0.99'
|
||||||
PACKAGE_STRING='ctemplate 0.98'
|
PACKAGE_STRING='ctemplate 0.99'
|
||||||
PACKAGE_BUGREPORT='opensource@google.com'
|
PACKAGE_BUGREPORT='opensource@google.com'
|
||||||
PACKAGE_URL=''
|
PACKAGE_URL=''
|
||||||
|
|
||||||
|
@ -1446,7 +1446,7 @@ if test "$ac_init_help" = "long"; then
|
||||||
# Omit some internal or obsolete options to make the list less imposing.
|
# Omit some internal or obsolete options to make the list less imposing.
|
||||||
# This message is too long to be a string in the A/UX 3.1 sh.
|
# This message is too long to be a string in the A/UX 3.1 sh.
|
||||||
cat <<_ACEOF
|
cat <<_ACEOF
|
||||||
\`configure' configures ctemplate 0.98 to adapt to many kinds of systems.
|
\`configure' configures ctemplate 0.99 to adapt to many kinds of systems.
|
||||||
|
|
||||||
Usage: $0 [OPTION]... [VAR=VALUE]...
|
Usage: $0 [OPTION]... [VAR=VALUE]...
|
||||||
|
|
||||||
|
@ -1516,7 +1516,7 @@ fi
|
||||||
|
|
||||||
if test -n "$ac_init_help"; then
|
if test -n "$ac_init_help"; then
|
||||||
case $ac_init_help in
|
case $ac_init_help in
|
||||||
short | recursive ) echo "Configuration of ctemplate 0.98:";;
|
short | recursive ) echo "Configuration of ctemplate 0.99:";;
|
||||||
esac
|
esac
|
||||||
cat <<\_ACEOF
|
cat <<\_ACEOF
|
||||||
|
|
||||||
|
@ -1622,7 +1622,7 @@ fi
|
||||||
test -n "$ac_init_help" && exit $ac_status
|
test -n "$ac_init_help" && exit $ac_status
|
||||||
if $ac_init_version; then
|
if $ac_init_version; then
|
||||||
cat <<\_ACEOF
|
cat <<\_ACEOF
|
||||||
ctemplate configure 0.98
|
ctemplate configure 0.99
|
||||||
generated by GNU Autoconf 2.65
|
generated by GNU Autoconf 2.65
|
||||||
|
|
||||||
Copyright (C) 2009 Free Software Foundation, Inc.
|
Copyright (C) 2009 Free Software Foundation, Inc.
|
||||||
|
@ -2168,7 +2168,7 @@ cat >config.log <<_ACEOF
|
||||||
This file contains any messages produced by compilers while
|
This file contains any messages produced by compilers while
|
||||||
running configure, to aid debugging if configure makes a mistake.
|
running configure, to aid debugging if configure makes a mistake.
|
||||||
|
|
||||||
It was created by ctemplate $as_me 0.98, which was
|
It was created by ctemplate $as_me 0.99, which was
|
||||||
generated by GNU Autoconf 2.65. Invocation command line was
|
generated by GNU Autoconf 2.65. Invocation command line was
|
||||||
|
|
||||||
$ $0 $@
|
$ $0 $@
|
||||||
|
@ -2517,7 +2517,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
||||||
|
|
||||||
# Update this value for every release! (A:B:C will map to foo.so.(A-C).C.B)
|
# Update this value for every release! (A:B:C will map to foo.so.(A-C).C.B)
|
||||||
# http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
|
# http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
|
||||||
SO_VERSION=0:1:0
|
SO_VERSION=1:0:1
|
||||||
|
|
||||||
# The argument here is just something that should be in the current directory
|
# The argument here is just something that should be in the current directory
|
||||||
# (for sanity checking)
|
# (for sanity checking)
|
||||||
|
@ -2906,7 +2906,7 @@ fi
|
||||||
|
|
||||||
# Define the identity of the package.
|
# Define the identity of the package.
|
||||||
PACKAGE='ctemplate'
|
PACKAGE='ctemplate'
|
||||||
VERSION='0.98'
|
VERSION='0.99'
|
||||||
|
|
||||||
|
|
||||||
cat >>confdefs.h <<_ACEOF
|
cat >>confdefs.h <<_ACEOF
|
||||||
|
@ -16487,7 +16487,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
|
||||||
# report actual input values of CONFIG_FILES etc. instead of their
|
# report actual input values of CONFIG_FILES etc. instead of their
|
||||||
# values after options handling.
|
# values after options handling.
|
||||||
ac_log="
|
ac_log="
|
||||||
This file was extended by ctemplate $as_me 0.98, which was
|
This file was extended by ctemplate $as_me 0.99, which was
|
||||||
generated by GNU Autoconf 2.65. Invocation command line was
|
generated by GNU Autoconf 2.65. Invocation command line was
|
||||||
|
|
||||||
CONFIG_FILES = $CONFIG_FILES
|
CONFIG_FILES = $CONFIG_FILES
|
||||||
|
@ -16553,7 +16553,7 @@ _ACEOF
|
||||||
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
||||||
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
|
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
|
||||||
ac_cs_version="\\
|
ac_cs_version="\\
|
||||||
ctemplate config.status 0.98
|
ctemplate config.status 0.99
|
||||||
configured by $0, generated by GNU Autoconf 2.65,
|
configured by $0, generated by GNU Autoconf 2.65,
|
||||||
with options \\"\$ac_cs_config\\"
|
with options \\"\$ac_cs_config\\"
|
||||||
|
|
||||||
|
|
|
@ -4,10 +4,10 @@
|
||||||
# make sure we're interpreted by some minimal autoconf
|
# make sure we're interpreted by some minimal autoconf
|
||||||
AC_PREREQ(2.57)
|
AC_PREREQ(2.57)
|
||||||
|
|
||||||
AC_INIT(ctemplate, 0.98, opensource@google.com)
|
AC_INIT(ctemplate, 0.99, opensource@google.com)
|
||||||
# Update this value for every release! (A:B:C will map to foo.so.(A-C).C.B)
|
# Update this value for every release! (A:B:C will map to foo.so.(A-C).C.B)
|
||||||
# http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
|
# http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
|
||||||
SO_VERSION=0:1:0
|
SO_VERSION=1:0:1
|
||||||
|
|
||||||
# The argument here is just something that should be in the current directory
|
# The argument here is just something that should be in the current directory
|
||||||
# (for sanity checking)
|
# (for sanity checking)
|
||||||
|
|
|
@ -130,6 +130,15 @@ the appropriate escaping modifiers after your own.</p>
|
||||||
</ul></td>
|
</ul></td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td><code>TC_JS</code></td>
|
||||||
|
<td><code>:javascript_escape</code></td>
|
||||||
|
<td><ul>
|
||||||
|
<li><code>:url_escape_with_arg=javascript</code></li>
|
||||||
|
<li><code>:img_src_url_escape_with_arg=javascript</code></li>
|
||||||
|
</ul></td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td><code>TC_JSON</code></td>
|
<td><code>TC_JSON</code></td>
|
||||||
<td><code>:javascript_escape</code></td>
|
<td><code>:javascript_escape</code></td>
|
||||||
|
|
|
@ -1,3 +1,9 @@
|
||||||
|
ctemplate (0.99-1) unstable; urgency=low
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
|
||||||
|
-- Google Inc. <opensource@google.com> Mon, 24 Jan 2011 15:38:31 -0800
|
||||||
|
|
||||||
ctemplate (0.98-1) unstable; urgency=low
|
ctemplate (0.98-1) unstable; urgency=low
|
||||||
|
|
||||||
* New upstream release.
|
* New upstream release.
|
||||||
|
|
132
src/base/thread_annotations.h
Normal file
132
src/base/thread_annotations.h
Normal file
|
@ -0,0 +1,132 @@
|
||||||
|
// Copyright (c) 2008, Google Inc.
|
||||||
|
// All rights reserved.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without
|
||||||
|
// modification, are permitted provided that the following conditions are
|
||||||
|
// met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright
|
||||||
|
// notice, this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above
|
||||||
|
// copyright notice, this list of conditions and the following disclaimer
|
||||||
|
// in the documentation and/or other materials provided with the
|
||||||
|
// distribution.
|
||||||
|
// * Neither the name of Google Inc. nor the names of its
|
||||||
|
// contributors may be used to endorse or promote products derived from
|
||||||
|
// this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
// ---
|
||||||
|
// Author: Le-Chun Wu
|
||||||
|
//
|
||||||
|
// This header file contains the macro definitions for thread safety
|
||||||
|
// annotations that allow the developers to document the locking policies
|
||||||
|
// of their multi-threaded code. The annotations can also help program
|
||||||
|
// analysis tools to identify potential thread safety issues.
|
||||||
|
//
|
||||||
|
// The annotations are implemented using GCC's "attributes" extension.
|
||||||
|
// Using the macros defined here instead of the raw GCC attributes allows
|
||||||
|
// for portability and future compatibility.
|
||||||
|
//
|
||||||
|
// This functionality is not yet fully implemented in perftools,
|
||||||
|
// but may be one day.
|
||||||
|
|
||||||
|
#ifndef BASE_THREAD_ANNOTATIONS_H_
|
||||||
|
#define BASE_THREAD_ANNOTATIONS_H_
|
||||||
|
|
||||||
|
|
||||||
|
#if defined(__GNUC__) && defined(__SUPPORT_TS_ANNOTATION__) && (!defined(SWIG))
|
||||||
|
#define THREAD_ANNOTATION_ATTRIBUTE__(x) __attribute__((x))
|
||||||
|
#else
|
||||||
|
#define THREAD_ANNOTATION_ATTRIBUTE__(x) // no-op
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
// Document if a shared variable/field needs to be protected by a lock.
|
||||||
|
// GUARDED_BY allows the user to specify a particular lock that should be
|
||||||
|
// held when accessing the annotated variable, while GUARDED_VAR only
|
||||||
|
// indicates a shared variable should be guarded (by any lock). GUARDED_VAR
|
||||||
|
// is primarily used when the client cannot express the name of the lock.
|
||||||
|
#define GUARDED_BY(x) THREAD_ANNOTATION_ATTRIBUTE__(guarded_by(x))
|
||||||
|
#define GUARDED_VAR THREAD_ANNOTATION_ATTRIBUTE__(guarded)
|
||||||
|
|
||||||
|
// Document if the memory location pointed to by a pointer should be guarded
|
||||||
|
// by a lock when dereferencing the pointer. Similar to GUARDED_VAR,
|
||||||
|
// PT_GUARDED_VAR is primarily used when the client cannot express the name
|
||||||
|
// of the lock. Note that a pointer variable to a shared memory location
|
||||||
|
// could itself be a shared variable. For example, if a shared global pointer
|
||||||
|
// q, which is guarded by mu1, points to a shared memory location that is
|
||||||
|
// guarded by mu2, q should be annotated as follows:
|
||||||
|
// int *q GUARDED_BY(mu1) PT_GUARDED_BY(mu2);
|
||||||
|
#define PT_GUARDED_BY(x) \
|
||||||
|
THREAD_ANNOTATION_ATTRIBUTE__(point_to_guarded_by(x))
|
||||||
|
#define PT_GUARDED_VAR \
|
||||||
|
THREAD_ANNOTATION_ATTRIBUTE__(point_to_guarded)
|
||||||
|
|
||||||
|
// Document the acquisition order between locks that can be held
|
||||||
|
// simultaneously by a thread. For any two locks that need to be annotated
|
||||||
|
// to establish an acquisition order, only one of them needs the annotation.
|
||||||
|
// (i.e. You don't have to annotate both locks with both ACQUIRED_AFTER
|
||||||
|
// and ACQUIRED_BEFORE.)
|
||||||
|
#define ACQUIRED_AFTER(x) \
|
||||||
|
THREAD_ANNOTATION_ATTRIBUTE__(acquired_after(x))
|
||||||
|
#define ACQUIRED_BEFORE(x) \
|
||||||
|
THREAD_ANNOTATION_ATTRIBUTE__(acquired_before(x))
|
||||||
|
|
||||||
|
// The following three annotations document the lock requirements for
|
||||||
|
// functions/methods.
|
||||||
|
|
||||||
|
// Document if a function expects certain locks to be held before it is called
|
||||||
|
#define EXCLUSIVE_LOCKS_REQUIRED(x) \
|
||||||
|
THREAD_ANNOTATION_ATTRIBUTE__(exclusive_locks_required(x))
|
||||||
|
|
||||||
|
#define SHARED_LOCKS_REQUIRED(x) \
|
||||||
|
THREAD_ANNOTATION_ATTRIBUTE__(shared_locks_required(x))
|
||||||
|
|
||||||
|
// Document the locks acquired in the body of the function. These locks
|
||||||
|
// cannot be held when calling this function (as google3's Mutex locks are
|
||||||
|
// non-reentrant).
|
||||||
|
#define LOCKS_EXCLUDED(x) \
|
||||||
|
THREAD_ANNOTATION_ATTRIBUTE__(locks_excluded(x))
|
||||||
|
|
||||||
|
// Document the lock the annotated function returns without acquiring it.
|
||||||
|
#define LOCK_RETURNED(x) THREAD_ANNOTATION_ATTRIBUTE__(lock_returned(x))
|
||||||
|
|
||||||
|
// Document if a class/type is a lockable type (such as the Mutex class).
|
||||||
|
#define LOCKABLE THREAD_ANNOTATION_ATTRIBUTE__(lockable)
|
||||||
|
|
||||||
|
// Document if a class is a scoped lockable type (such as the MutexLock class).
|
||||||
|
#define SCOPED_LOCKABLE THREAD_ANNOTATION_ATTRIBUTE__(scoped_lockable)
|
||||||
|
|
||||||
|
// The following annotations specify lock and unlock primitives.
|
||||||
|
#define EXCLUSIVE_LOCK_FUNCTION(x) \
|
||||||
|
THREAD_ANNOTATION_ATTRIBUTE__(exclusive_lock(x))
|
||||||
|
|
||||||
|
#define SHARED_LOCK_FUNCTION(x) \
|
||||||
|
THREAD_ANNOTATION_ATTRIBUTE__(shared_lock(x))
|
||||||
|
|
||||||
|
#define EXCLUSIVE_TRYLOCK_FUNCTION(x) \
|
||||||
|
THREAD_ANNOTATION_ATTRIBUTE__(exclusive_trylock(x))
|
||||||
|
|
||||||
|
#define SHARED_TRYLOCK_FUNCTION(x) \
|
||||||
|
THREAD_ANNOTATION_ATTRIBUTE__(shared_trylock(x))
|
||||||
|
|
||||||
|
#define UNLOCK_FUNCTION(x) \
|
||||||
|
THREAD_ANNOTATION_ATTRIBUTE__(unlock(x))
|
||||||
|
|
||||||
|
// An escape hatch for thread safety analysis to ignore the annotated function.
|
||||||
|
#define NO_THREAD_SAFETY_ANALYSIS \
|
||||||
|
THREAD_ANNOTATION_ATTRIBUTE__(no_thread_safety_analysis)
|
||||||
|
|
||||||
|
#endif // BASE_THREAD_ANNOTATIONS_H_
|
|
@ -187,7 +187,7 @@ static string Boilerplate(const string& progname,
|
||||||
else
|
else
|
||||||
out.append("// This header file auto-generated for the template\n");
|
out.append("// This header file auto-generated for the template\n");
|
||||||
|
|
||||||
for (int i = 0; i < filenames.size(); ++i)
|
for (vector<string>::size_type i = 0; i < filenames.size(); ++i)
|
||||||
out.append("// " + filenames[i] + "\n");
|
out.append("// " + filenames[i] + "\n");
|
||||||
|
|
||||||
out.append("// by " + progname + "\n" +
|
out.append("// by " + progname + "\n" +
|
||||||
|
@ -374,8 +374,9 @@ int main(int argc, char **argv) {
|
||||||
// Iterate through each template and (unless -n is given), write
|
// Iterate through each template and (unless -n is given), write
|
||||||
// its header entries into the headers array.
|
// its header entries into the headers array.
|
||||||
int num_errors = 0;
|
int num_errors = 0;
|
||||||
for (int i = 0; i < template_records.size(); ++i) {
|
for (vector<TemplateRecord*>::iterator it = template_records.begin();
|
||||||
const char* tplname = template_records[i]->name.c_str();
|
it != template_records.end(); ++it) {
|
||||||
|
const char* tplname = (*it)->name.c_str();
|
||||||
LogPrintf(LOG_INFO, FLAG_log_info, "\n------ Checking %s ------", tplname);
|
LogPrintf(LOG_INFO, FLAG_log_info, "\n------ Checking %s ------", tplname);
|
||||||
|
|
||||||
// The last two arguments in the following call do not matter
|
// The last two arguments in the following call do not matter
|
||||||
|
@ -398,7 +399,7 @@ int main(int argc, char **argv) {
|
||||||
if (!tpl) {
|
if (!tpl) {
|
||||||
LogPrintf(LOG_ERROR, FLAG_log_info, "Could not load file: %s", tplname);
|
LogPrintf(LOG_ERROR, FLAG_log_info, "Could not load file: %s", tplname);
|
||||||
num_errors++;
|
num_errors++;
|
||||||
template_records[i]->error = true;
|
(*it)->error = true;
|
||||||
continue;
|
continue;
|
||||||
} else {
|
} else {
|
||||||
LogPrintf(LOG_INFO, FLAG_log_info, "No syntax errors detected in %s",
|
LogPrintf(LOG_INFO, FLAG_log_info, "No syntax errors detected in %s",
|
||||||
|
@ -411,7 +412,7 @@ int main(int argc, char **argv) {
|
||||||
if (!FLAG_header)
|
if (!FLAG_header)
|
||||||
continue; // They don't want header files
|
continue; // They don't want header files
|
||||||
|
|
||||||
tpl->WriteHeaderEntries(&template_records[i]->header_entries);
|
tpl->WriteHeaderEntries(&((*it)->header_entries));
|
||||||
}
|
}
|
||||||
|
|
||||||
// We have headers to emit:
|
// We have headers to emit:
|
||||||
|
@ -428,9 +429,10 @@ int main(int argc, char **argv) {
|
||||||
if (num_errors == 0) {
|
if (num_errors == 0) {
|
||||||
vector<string> template_filenames;
|
vector<string> template_filenames;
|
||||||
string all_header_entries;
|
string all_header_entries;
|
||||||
for (int i = 0; i < template_records.size(); ++i) {
|
for (vector<TemplateRecord*>::const_iterator
|
||||||
all_header_entries.append(template_records[i]->header_entries);
|
it = template_records.begin(); it != template_records.end(); ++it) {
|
||||||
template_filenames.push_back(template_records[i]->name);
|
all_header_entries.append((*it)->header_entries);
|
||||||
|
template_filenames.push_back((*it)->name);
|
||||||
}
|
}
|
||||||
string output = Boilerplate(progname, template_filenames);
|
string output = Boilerplate(progname, template_filenames);
|
||||||
const string cleantext =
|
const string cleantext =
|
||||||
|
@ -441,18 +443,18 @@ int main(int argc, char **argv) {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Each template will have its own output file. Skip any that had errors.
|
// Each template will have its own output file. Skip any that had errors.
|
||||||
for (int i = 0; i < template_records.size(); ++i) {
|
for (vector<TemplateRecord*>::const_iterator
|
||||||
if (template_records[i]->error)
|
it = template_records.begin(); it != template_records.end(); ++it) {
|
||||||
|
if ((*it)->error)
|
||||||
continue;
|
continue;
|
||||||
string basename = GOOGLE_NAMESPACE::Basename(template_records[i]->name);
|
string basename = GOOGLE_NAMESPACE::Basename((*it)->name);
|
||||||
string output_file =
|
string output_file =
|
||||||
GOOGLE_NAMESPACE::PathJoin(FLAG_header_dir,
|
GOOGLE_NAMESPACE::PathJoin(FLAG_header_dir,
|
||||||
basename + FLAG_outputfile_suffix);
|
basename + FLAG_outputfile_suffix);
|
||||||
vector<string> template_filenames; // Contains one template filename.
|
vector<string> template_filenames; // Contains one template filename.
|
||||||
template_filenames.push_back(template_records[i]->name);
|
template_filenames.push_back((*it)->name);
|
||||||
string output = Boilerplate(progname, template_filenames);
|
string output = Boilerplate(progname, template_filenames);
|
||||||
output.append(WrapWithGuard(output_file,
|
output.append(WrapWithGuard(output_file, (*it)->header_entries));
|
||||||
template_records[i]->header_entries));
|
|
||||||
if (!WriteToDisk(FLAG_log_info, output_file, output))
|
if (!WriteToDisk(FLAG_log_info, output_file, output))
|
||||||
num_errors++;
|
num_errors++;
|
||||||
}
|
}
|
||||||
|
@ -460,8 +462,9 @@ int main(int argc, char **argv) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Free dynamic memory
|
// Free dynamic memory
|
||||||
for (int i = 0; i < template_records.size(); ++i) {
|
for (vector<TemplateRecord*>::iterator it = template_records.begin();
|
||||||
delete template_records[i];
|
it != template_records.end(); ++it) {
|
||||||
|
delete *it;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Cap at 127 to avoid causing problems with return code
|
// Cap at 127 to avoid causing problems with return code
|
||||||
|
|
|
@ -1292,7 +1292,7 @@ class TemplateUnittest {
|
||||||
|
|
||||||
string filename = StringToTemplateFile("{valid template}");
|
string filename = StringToTemplateFile("{valid template}");
|
||||||
string nonexistent = StringToTemplateFile("dummy");
|
string nonexistent = StringToTemplateFile("dummy");
|
||||||
unlink(nonexistent.c_str());
|
ASSERT(unlink(nonexistent.c_str()) == 0);
|
||||||
|
|
||||||
Template* tpl = Template::GetTemplate(filename, STRIP_WHITESPACE);
|
Template* tpl = Template::GetTemplate(filename, STRIP_WHITESPACE);
|
||||||
assert(tpl);
|
assert(tpl);
|
||||||
|
@ -1317,7 +1317,7 @@ class TemplateUnittest {
|
||||||
ASSERT(!tpl2->ReloadIfChanged()); // false: file hasn't changed
|
ASSERT(!tpl2->ReloadIfChanged()); // false: file hasn't changed
|
||||||
ASSERT(!tpl2->ReloadIfChanged()); // false: file *still* hasn't changed
|
ASSERT(!tpl2->ReloadIfChanged()); // false: file *still* hasn't changed
|
||||||
|
|
||||||
unlink(nonexistent.c_str()); // here today...
|
ASSERT(unlink(nonexistent.c_str()) == 0); // here today...
|
||||||
ASSERT(!tpl2->ReloadIfChanged()); // false: file has disappeared
|
ASSERT(!tpl2->ReloadIfChanged()); // false: file has disappeared
|
||||||
// The old template content should be forgotten
|
// The old template content should be forgotten
|
||||||
ASSERT(NULL == Template::GetTemplate(nonexistent, STRIP_WHITESPACE));
|
ASSERT(NULL == Template::GetTemplate(nonexistent, STRIP_WHITESPACE));
|
||||||
|
@ -1522,9 +1522,9 @@ class TemplateUnittest {
|
||||||
ASSERT(TemplateNamelist::IsAllSyntaxOkay(DO_NOT_STRIP));
|
ASSERT(TemplateNamelist::IsAllSyntaxOkay(DO_NOT_STRIP));
|
||||||
|
|
||||||
// Now create those files
|
// Now create those files
|
||||||
link(f1.c_str(), f1_copy.c_str());
|
ASSERT(link(f1.c_str(), f1_copy.c_str()) == 0);
|
||||||
link(f2.c_str(), f2_copy.c_str());
|
ASSERT(link(f2.c_str(), f2_copy.c_str()) == 0);
|
||||||
link(f3.c_str(), f3_copy.c_str());
|
ASSERT(link(f3.c_str(), f3_copy.c_str()) == 0);
|
||||||
// We also have to clear the template cache, since we created a new file.
|
// We also have to clear the template cache, since we created a new file.
|
||||||
// ReloadAllIfChanged() would probably work, too.
|
// ReloadAllIfChanged() would probably work, too.
|
||||||
Template::ClearCache();
|
Template::ClearCache();
|
||||||
|
|
|
@ -89,7 +89,7 @@
|
||||||
#define utimbuf _utimbuf
|
#define utimbuf _utimbuf
|
||||||
|
|
||||||
/* Not quite as lightweight as a hard-link, but more than good enough for us. */
|
/* Not quite as lightweight as a hard-link, but more than good enough for us. */
|
||||||
#define link(oldpath, newpath) CopyFileA(oldpath, newpath, false)
|
#define link(oldpath, newpath) (!CopyFileA(oldpath, newpath, false))
|
||||||
|
|
||||||
#define strcasecmp _stricmp
|
#define strcasecmp _stricmp
|
||||||
#define strncasecmp _strnicmp
|
#define strncasecmp _strnicmp
|
||||||
|
|
Loading…
Reference in New Issue
Block a user