[SCM] Samba Shared Repository - branch master updated - release-4-0-0alpha8-1300-gc7d9617
Michael Adam
obnox at samba.org
Sat Aug 29 16:52:55 MDT 2009
The branch, master has been updated
via c7d9617259bafddd1ce26a5c336885e2d3c6771a (commit)
via d9b193189afb83f02ba68e6360f34cd8c6f59873 (commit)
via fe0b5234ba8ea1cdf0657e8ef1fbe970f82df6cd (commit)
via 4e9a06d601a20fb714ffbf2ed6fd2b6f2d931b30 (commit)
via cbc75c11fd45174da90ec61f000228a39905b171 (commit)
via f1b386a894afd3917e7c0532918e27ad755c8d74 (commit)
via 4579c0546292e57d03cb925a83fab2363af42895 (commit)
via e896f9188d8c44a24dcc8961bafd2667080ffd37 (commit)
from 2774a02f64a57d981924e0fc65b23060803cc469 (commit)
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit c7d9617259bafddd1ce26a5c336885e2d3c6771a
Author: Michael Adam <obnox at samba.org>
Date: Fri Aug 28 16:04:47 2009 +0200
talloc: move the original abi_checks script to script/abi_checks_gcc.sh
Michael
commit d9b193189afb83f02ba68e6360f34cd8c6f59873
Author: Michael Adam <obnox at samba.org>
Date: Sun Aug 30 00:06:58 2009 +0200
talloc: remove talloc_free from the exports
Michael
commit fe0b5234ba8ea1cdf0657e8ef1fbe970f82df6cd
Author: Michael Adam <obnox at samba.org>
Date: Sun Aug 30 00:16:36 2009 +0200
talloc: run abi_checks as part of "make test"
Michael
commit 4e9a06d601a20fb714ffbf2ed6fd2b6f2d931b30
Author: Michael Adam <obnox at samba.org>
Date: Sun Aug 30 00:25:24 2009 +0200
talloc: remove files generated by "make abi_check" in "make clean"
Michael
commit cbc75c11fd45174da90ec61f000228a39905b171
Author: Michael Adam <obnox at samba.org>
Date: Fri Aug 28 16:03:06 2009 +0200
talloc: add a target "abi_checks" to talloc.
Simply run "make abi_checks" to call the abi check script appropriately.
Michael
commit f1b386a894afd3917e7c0532918e27ad755c8d74
Author: Michael Adam <obnox at samba.org>
Date: Fri Aug 28 15:53:12 2009 +0200
talloc: add script/abi_checks.sh. check for abi changes without gcc magic.
USAGE: abi_checks.sh LIBRARY_NAME header1 [header2 ...]
This creates symbol signature lists using the mksyms and mksigs scripts
and compares them with the checked in lists.
Michael
commit 4579c0546292e57d03cb925a83fab2363af42895
Author: Michael Adam <obnox at samba.org>
Date: Fri Aug 28 15:08:19 2009 +0200
talloc: add script to extract signatures from header files.
This produces output like the output gcc produces when
invoked with the -aux-info switch.
Run like this: cat talloc.h | ./script/mksigs.pl
This simple parser is probably too coarse to handle all possible
header files, but it does treat talloc.h correctly.
Michael
commit e896f9188d8c44a24dcc8961bafd2667080ffd37
Author: Michael Adam <obnox at samba.org>
Date: Fri Aug 28 15:01:17 2009 +0200
talloc: add scripts to extract library symbols (exports file) from headers
Michael
-----------------------------------------------------------------------
Summary of changes:
lib/talloc/script/abi_checks.sh | 91 ++++++++++
.../{abi_checks.sh => script/abi_checks_gcc.sh} | 0
lib/talloc/script/mksigs.pl | 178 ++++++++++++++++++++
{source3 => lib/talloc}/script/mksyms.awk | 0
{source3 => lib/talloc}/script/mksyms.sh | 0
lib/talloc/talloc.exports | 1 -
lib/talloc/talloc.mk | 8 +
7 files changed, 277 insertions(+), 1 deletions(-)
create mode 100755 lib/talloc/script/abi_checks.sh
rename lib/talloc/{abi_checks.sh => script/abi_checks_gcc.sh} (100%)
create mode 100755 lib/talloc/script/mksigs.pl
copy {source3 => lib/talloc}/script/mksyms.awk (100%)
copy {source3 => lib/talloc}/script/mksyms.sh (100%)
Changeset truncated at 500 lines:
diff --git a/lib/talloc/script/abi_checks.sh b/lib/talloc/script/abi_checks.sh
new file mode 100755
index 0000000..c34a659
--- /dev/null
+++ b/lib/talloc/script/abi_checks.sh
@@ -0,0 +1,91 @@
+#!/bin/sh
+
+#
+# abi_checks.sh - check for possible abi changes
+#
+# Copyright (C) 2009 Micheal Adam <obnox at samba.org>
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the Free
+# Software Foundation; either version 3 of the License, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+# more details.
+#
+# You should have received a copy of the GNU General Public License along with
+# this program; if not, see <http://www.gnu.org/licenses/>.
+#
+
+#
+# USAGE: abi_checks.sh LIBNAME header1 [header2 ...]
+#
+# This script creates symbol and signature lists from the provided header
+# files with the aid of the mksyms.sh and mksigs.pl scripts (saved as
+# $LIBNAME.exports.check and $LIBNAME.sigatures.check). It then compares
+# the resulting files with the files $LIBNAME.exports and $LIBNME.signatures
+# which it expects to find in the current directory.
+#
+
+LANG=C; export LANG
+LC_ALL=C; export LC_ALL
+LC_COLLATE=C; export LC_COLLATE
+
+script=$0
+dir_name=$(dirname ${script})
+
+if test x"$1" = "x" ; then
+ echo "USAGE: ${script} libname header [header ...]"
+ exit 1
+fi
+
+libname="$1"
+shift
+
+if test x"$1" = "x" ; then
+ echo "USAGE: ${script} libname header [header ...]"
+ exit 1
+fi
+
+headers="$*"
+
+exports_file=${libname}.exports
+exports_file_check=${exports_file}.check
+signatures_file=${libname}.signatures
+signatures_file_check=${signatures_file}.check
+
+
+${dir_name}/mksyms.sh awk ${exports_file_check} ${headers} 2>&1 > /dev/null
+
+cat ${headers} | ${dir_name}/mksigs.pl > ${signatures_file_check} 2> /dev/null
+
+normalize_exports_file() {
+ filename=$1
+ cat ${filename} \
+ | sed -e 's/^[ \t]*//g' \
+ | sed -e 's/^$//g' \
+ | sed -e 's/^#.*$//g' \
+ | sort | uniq > ${filename}.sort
+}
+
+normalize_exports_file ${exports_file}
+normalize_exports_file ${exports_file_check}
+
+normalize_exports_file ${signatures_file}
+normalize_exports_file ${signatures_file_check}
+
+diff -u ${exports_file}.sort ${exports_file_check}.sort
+if test "x$?" != "x0" ; then
+ echo "WARNING: possible ABI change detected in exports!"
+else
+ echo "exports check: OK"
+fi
+
+diff -u ${signatures_file}.sort ${signatures_file_check}.sort
+if test "x$?" != "x0" ; then
+ echo "WARNING: possible ABI change detected in signatures!"
+else
+ echo "signatures check: OK"
+fi
diff --git a/lib/talloc/abi_checks.sh b/lib/talloc/script/abi_checks_gcc.sh
similarity index 100%
rename from lib/talloc/abi_checks.sh
rename to lib/talloc/script/abi_checks_gcc.sh
diff --git a/lib/talloc/script/mksigs.pl b/lib/talloc/script/mksigs.pl
new file mode 100755
index 0000000..28a2e74
--- /dev/null
+++ b/lib/talloc/script/mksigs.pl
@@ -0,0 +1,178 @@
+#!/usr/bin/perl
+
+# mksigs.pl - extract signatures from C headers
+#
+# Copyright (C) Michael Adam 2009
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the Free
+# Software Foundation; either version 3 of the License, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+# more details.
+#
+# You should have received a copy of the GNU General Public License along with
+# this program; if not, see <http://www.gnu.org/licenses/>.
+
+# USAGE: cat $header_files | mksigs.pl > $signature_file
+#
+# The header files to parse are read from stdin.
+# The output is in a form as produced by gcc with the -aux-info switch
+# and printed to stdout.
+
+use strict;
+use warnings;
+
+my $in_comment = 0;
+my $extern_C_block = 0;
+
+while (my $LINE = <>) {
+ # find end of started multi-line-comment
+ if ($in_comment) {
+ if ($LINE =~ /^.*?\*\/(.*)$/) {
+ $LINE = $1;
+ $in_comment = 0;
+ } else {
+ # whole line within comment
+ next;
+ }
+ }
+
+ # strip C++-style comments
+ $LINE =~ s/^(.*?)\/\/.*$/$1/;
+
+ # strip in-line-comments:
+ while ($LINE =~ /\/\*.*?\*\//) {
+ $LINE =~ s/\/\*.*?\*\///;
+ }
+
+ # find starts of multi-line-comments
+ if ($LINE =~ /^(.*)\/\*/) {
+ $in_comment = 1;
+ $LINE = $1;
+ }
+
+ # skip empty lines
+ next if $LINE =~ /^\s*$/;
+
+ # remove leading spaces
+ $LINE =~ s/^\s*(.*)$/$1/;
+
+ # concatenate lines split with "\" (usually macro defines)
+ while ($LINE =~ /^(.*?)\s+\\$/) {
+ my $LINE2 = <>;
+ $LINE = $1;
+ $LINE2 =~ s/^\s*(.*)$/$1/;
+ $LINE .= " " . $LINE2;
+ }
+
+ # remove all preprocessor directives
+ next if ($LINE =~ /^#/);
+
+ if ($LINE =~ /^extern\s+"C"\s+\{/) {
+ $extern_C_block = 1;
+ next;
+ }
+
+ if (($LINE =~ /^[^\{]*\}/) and $extern_C_block) {
+ $extern_C_block = 0;
+ next;
+ }
+
+ $LINE =~ s/^extern\s//;
+
+ # concatenate braces stretched over multiple lines
+ # (from structs or enums)
+ my $REST = $LINE;
+ my $braces = 0;
+ while (($REST =~ /[\{\}]/) or ($braces)) {
+ while ($REST =~ /[\{\}]/) {
+ # collect opening
+ while ($REST =~ /^[^\{\}]*\{(.*)$/) {
+ $braces++;
+ $REST = $1;
+ }
+
+ # collect closing
+ while ($REST =~ /^[^\{\}]*\}(.*)$/) {
+ $braces--;
+ $REST = $1;
+ }
+ }
+
+ # concatenate if not balanced
+ if ($braces) {
+ if (my $LINE2 = <>) {
+ $LINE2 =~ s/^\s*(.*)$/$1/;
+ chomp($LINE);
+ $LINE .= " " . $LINE2;
+ chomp $REST;
+ $REST .= " " . $LINE2;
+ } else {
+ print "ERROR: unbalanced braces ($braces)\n";
+ last;
+ }
+ }
+ }
+
+ next if ($LINE =~ /^typedef\s/);
+ next if ($LINE =~ /^enum\s+[^\{\(]+\s+\{/);
+ next if ($LINE =~ /^struct\s+[^\{\(]+\s+\{.*\}\s*;/);
+
+ # concetenate function prototypes that stretch over multiple lines
+ $REST = $LINE;
+ my $parenthesis = 0;
+ while (($REST =~ /[\(\)]/) or ($parenthesis)) {
+ while ($REST =~ /[\(\)]/) {
+ # collect opening
+ while ($REST =~ /^[^\(\)]*\((.*)$/) {
+ $parenthesis++;
+ $REST = $1;
+ }
+
+ # collect closing
+ while ($REST =~ /^[^\(\)]*\)(.*)$/) {
+ $parenthesis--;
+ $REST = $1;
+ }
+ }
+
+ # concatenate if not balanced
+ if ($parenthesis) {
+ if (my $LINE2 = <>) {
+ $LINE2 =~ s/^\s*(.*)$/$1/;
+ chomp($LINE);
+ $LINE .= " " . $LINE2;
+ chomp($REST);
+ $REST .= " " . $LINE2;
+ } else {
+ print "ERROR: unbalanced parantheses ($parenthesis)\n";
+ last;
+ }
+ }
+ }
+
+ # remove trailing spaces
+ $LINE =~ s/(.*?)\s*$/$1/;
+
+ $LINE =~ s/^(.*\))\s+PRINTF_ATTRIBUTE\(.*\);$/$1;/;
+
+ # remove parameter names - slightly too coarse probably
+ $LINE =~ s/([\s\(]\*?)[_0-9a-zA-Z]+\s*([,\)])/$1$2/g;
+
+ # remedy (void) from last line
+ $LINE =~ s/\(\)/(void)/g;
+
+ # normalize spaces
+ $LINE =~ s/\s*\)\s*/)/g;
+ $LINE =~ s/\s*\(\s*/ (/g;
+ $LINE =~ s/\s*,\s*/, /g;
+
+ # normalize unsigned
+ $LINE =~ s/([\s,\(])unsigned([,\)])/$1unsigned int$2/g;
+
+ print $LINE . "\n";
+}
diff --git a/source3/script/mksyms.awk b/lib/talloc/script/mksyms.awk
similarity index 100%
copy from source3/script/mksyms.awk
copy to lib/talloc/script/mksyms.awk
diff --git a/source3/script/mksyms.sh b/lib/talloc/script/mksyms.sh
similarity index 100%
copy from source3/script/mksyms.sh
copy to lib/talloc/script/mksyms.sh
diff --git a/lib/talloc/talloc.exports b/lib/talloc/talloc.exports
index c1db67b..75134c0 100644
--- a/lib/talloc/talloc.exports
+++ b/lib/talloc/talloc.exports
@@ -61,7 +61,6 @@
talloc_version_minor;
_talloc_zero;
_talloc_zero_array;
- talloc_free;
local: *;
};
diff --git a/lib/talloc/talloc.mk b/lib/talloc/talloc.mk
index 2a2e110..a563d61 100644
--- a/lib/talloc/talloc.mk
+++ b/lib/talloc/talloc.mk
@@ -31,9 +31,17 @@ doc:: talloc.3 talloc.3.html
clean::
rm -f *~ $(LIBOBJ) $(TALLOC_SOLIB) $(TALLOC_STLIB) testsuite testsuite.o testsuite_main.o *.gc?? talloc.3 talloc.3.html
rm -fr abi
+ rm -f talloc.exports.sort talloc.exports.check talloc.exports.check.sort
+ rm -f talloc.signatures.sort talloc.signatures.check talloc.signatures.check.sort
test:: testsuite
./testsuite
+abi_checks::
+ @echo ABI checks:
+ @./script/abi_checks.sh talloc talloc.h
+
+test:: abi_checks
+
gcov::
gcov talloc.c
--
Samba Shared Repository
More information about the samba-cvs
mailing list