[GRASS-SVN] r56911 - grass/trunk/tools
svn_grass at osgeo.org
svn_grass at osgeo.org
Mon Jun 24 16:21:20 PDT 2013
Author: hamish
Date: 2013-06-24 16:21:20 -0700 (Mon, 24 Jun 2013)
New Revision: 56911
Added:
grass/trunk/tools/dep_tree2sql.sh
Removed:
grass/trunk/tools/sql.sh
Log:
rename script to something less generic
Copied: grass/trunk/tools/dep_tree2sql.sh (from rev 56909, grass/trunk/tools/sql.sh)
===================================================================
--- grass/trunk/tools/dep_tree2sql.sh (rev 0)
+++ grass/trunk/tools/dep_tree2sql.sh 2013-06-24 23:21:20 UTC (rev 56911)
@@ -0,0 +1,585 @@
+#!/bin/bash
+
+############################################################################
+#
+# MODULE: dep_tree2sql.sh
+# AUTHOR(S): Glynn Clements
+# PURPOSE: run "nm" on every object file, library and executable to
+# find dependencies, stored in PostgreSQL database
+# COPYRIGHT: (C) 2006 by the GRASS Development Team
+#
+# This program is free software under the GNU General Public
+# License (>=v2). Read the file COPYING that comes with GRASS
+# for details.
+#
+#############################################################################
+#
+# From: Glynn Clements <glynn at gclements.plus.com>
+# Date: Mon, 12 Jun 2006 13:00:25 +0100
+#
+# Usage: after having compiled GRASS, run "tools/dep_tree2sql.sh `pwd`" from the
+# top of the GRASS source tree.
+#
+# Essentially, the script runs "nm" on every object file, library and
+# executable it finds (and "ldd" on all of the executables), processes
+# the output with egrep/sed/awk, then imports the results into a
+# PostgreSQL database.
+#
+# "nm" lists the symbol table of an object file, library, or executable,
+# indicating whether each symbol is imported into, defined in and/or
+# exported from the file.
+#
+# Most of the database tables record which symbols are imported into or
+# exported from which object files, libraries or executables. E.g. the
+# "obj_imp" table lists which symbols are imported into which object
+# files.
+#
+# You can then use simple queries such as:
+#
+# grass=> SELECT object FROM obj_imp WHERE symbol = 'I_get_target' ;
+# object
+# --------------------------------------------------------------------
+# imagery/i.ortho.photo/photo.2image/OBJ.i686-pc-linux-gnu/target.o
+# imagery/i.ortho.photo/photo.2target/OBJ.i686-pc-linux-gnu/target.o
+# imagery/i.ortho.photo/photo.elev/OBJ.i686-pc-linux-gnu/main.o
+# imagery/i.ortho.photo/photo.rectify/OBJ.i686-pc-linux-gnu/target.o
+# imagery/i.ortho.photo/photo.target/OBJ.i686-pc-linux-gnu/main.o
+# imagery/i.points/OBJ.i686-pc-linux-gnu/target.o
+# imagery/i.rectify/OBJ.i686-pc-linux-gnu/target.o
+# imagery/i.vpoints/OBJ.i686-pc-linux-gnu/target.o
+#
+# to discover which files import a given symbol, or more complex queries
+# such as:
+#
+# grass=> SELECT DISTINCT b.object FROM lib_exp a, obj_imp b
+# grass-> WHERE a.library = 'libgrass_form.6.1.cvs.so' AND a.symbol = b.symbol ;
+# object
+# -----------------------------------------------------------
+# display/d.what.vect/OBJ.i686-pc-linux-gnu/what.o
+# vector/v.digit/OBJ.i686-pc-linux-gnu/attr.o
+# vector/v.digit/OBJ.i686-pc-linux-gnu/line.o
+# vector/v.what/OBJ.i686-pc-linux-gnu/what.o
+# visualization/nviz/src/OBJ.i686-pc-linux-gnu/query_vect.o
+# (5 rows)
+#
+# to discover which files import any symbol defined in a specific
+# library. And so on.
+#
+# For simple "which files use this function" queries, a database lookup
+# is quicker and more reliable than grep-ing the source tree.
+#
+# Assuming that the dep_tree2sql.sh script runs successfully (some of it is
+# Linux-specific, other bits are PostgreSQL-specific, but the changes
+# required for a different OS or RDBMS should be quite minor), the
+# easiest way to figure out what is in a given table (apart from looking
+# at the name) is to just sample it, e.g.:
+#
+# grass=> SELECT * FROM stlib_exp LIMIT 5 ;
+# library | object | symbol
+# -------------------+------------+---------------
+# libgrass_manage.a | add_elem.o | add_element
+# libgrass_manage.a | ask.o | ask_in_mapset
+# libgrass_manage.a | ask.o | ask_new
+# libgrass_manage.a | ask.o | ask_old
+# libgrass_manage.a | copyfile.o | copyfile
+# (5 rows)
+#
+
+
+tmpdir=/tmp/sql-grass
+dbname=grass
+
+if [ -n "$1" ] ; then
+ builddir="$1"
+else
+ echo "Usage: del_tree2sql.sh <source directory>" >&2
+ exit 1
+fi
+
+rm -rf "$tmpdir"
+mkdir -m 711 "$tmpdir" || exit 1
+
+cd $builddir
+
+( cd dist.*
+
+#LD_LIBRARY_PATH=`pwd`/lib
+#export LD_LIBRARY_PATH
+
+find . -type f -perm +111 \! -name '*.so.*' \
+ | while read file ; do ldd $file | sed 's!^!'$file'!' ; done 2>/dev/null \
+ | sed -e 's/^\.\///' -e 's/ (0x.*)$//' -e 's/ => \(.*\)$/ \1/' -e 's/ => .*$//' \
+ | fgrep -v 'not a dynamic executable' \
+ | awk -vOFS='\t' '{print $1,$2,$3 ? $3 : $2}' \
+ > "$tmpdir/ldd.lst"
+
+find . -type f -perm +111 \! -name '*.so' \
+ | xargs nm -AD 2>/dev/null \
+ | egrep ': {8}{1,2} U ' \
+ | sed -e 's/:/ /g' -e 's/\.\///' \
+ | awk -vOFS='\t' '{print $1,$3}' \
+ > "$tmpdir/prog_imp.lst"
+
+find . -type f -perm +111 \! -name '*.so' \
+ | xargs nm -AD 2>/dev/null \
+ | egrep ':[0-9a-f]{8}{1,2} [BCDGRSTW] ' \
+ | sed -e 's/:/ /g' -e 's/\.\///' \
+ | awk -vOFS='\t' '{print $1,$4}' \
+ > "$tmpdir/prog_exp.lst"
+
+)
+
+find * -type f -name 'lib?*.a' \
+ | xargs nm -A \
+ | egrep ':[0-9a-f]{8}{1,2} [BCDGRSTW] ' \
+ | sed 's/:/ /g' \
+ | awk -vOFS='\t' '{print gensub("^[^ ]*/","",1,$1),$2,$5}' \
+ > "$tmpdir/stlib_exp.lst"
+
+find * -type f -name 'lib?*.so' \
+ | xargs nm -AD \
+ | egrep ':[0-9a-f]{8}{1,2} [BCDGRSTW] ' \
+ | sed 's/:/ /g' \
+ | awk -vOFS='\t' '{print gensub("^[^ ]*/","",1,$1),$4}' \
+ > "$tmpdir/shlib_exp.lst"
+
+find * -type f -name '*.o' \
+ | xargs nm -A \
+ | egrep ':[0-9a-f]{8}{1,2} [BCDGRSTW] ' \
+ | sed 's/:/ /g' \
+ | awk -vOFS='\t' '{print $1,$4}' \
+ > "$tmpdir/obj_exp.lst"
+
+find * -type f -name 'lib?*.a' \
+ | xargs nm -A \
+ | egrep ': {8}{1,2} U ' \
+ | sed 's/:/ /g' \
+ | awk -vOFS='\t' '{print gensub("^[^ ]*/","",1,$1),$2,$4}' \
+ > "$tmpdir/stlib_imp.lst"
+
+find * -type f -name 'lib?*.so' \
+ | xargs nm -AD \
+ | egrep ': {8}{1,2} U ' \
+ | sed 's/:/ /g' \
+ | awk -vOFS='\t' '{print gensub("^[^ ]*/","",1,$1),$3}' \
+ > "$tmpdir/shlib_imp.lst"
+
+find * -type f -name '*.o' \
+ | xargs nm -A \
+ | egrep ': {8}{1,2} U ' \
+ | sed 's/:/ /g' \
+ | awk -vOFS='\t' '{print $1,$3}' \
+ > "$tmpdir/obj_imp.lst"
+
+libs=`awk '{print $3}' "$tmpdir/ldd.lst" | uniq | sort | uniq`
+
+nm -AD $libs \
+ | egrep ':[0-9a-f]{8}{1,2} [TWDRC] ' \
+ | sed 's/:/ /g' \
+ | awk -vOFS='\t' '{print gensub("^[^ ]*/","",1,$1),$4}' \
+ > "$tmpdir/libs.lst"
+
+cat > "$tmpdir/ansi.lst" <<EOF
+abort
+asctime
+atexit
+atof
+atoi
+atol
+bsearch
+calloc
+clearerr
+ctime
+exit
+fclose
+feof
+ferror
+fflush
+fgetc
+fgetpos
+fgets
+fopen
+fprintf
+fputc
+fputs
+fread
+free
+freopen
+fscanf
+fseek
+fsetpos
+ftell
+fwrite
+getc
+getchar
+getenv
+gets
+isalnum
+isalpha
+isdigit
+islower
+isspace
+ldiv
+localtime
+longjmp
+malloc
+memcmp
+memcpy
+memmove
+memset
+perror
+printf
+putc
+putchar
+puts
+qsort
+rand
+realloc
+remove
+rename
+rewind
+scanf
+setbuf
+setjmp
+setvbuf
+signal
+sprintf
+srand
+sscanf
+stderr
+stdin
+stdout
+strcat
+strchr
+strcmp
+strcpy
+strcspn
+strerror
+strftime
+strlen
+strncat
+strncmp
+strncpy
+strpbrk
+strrchr
+strspn
+strstr
+strtod
+strtok
+strtol
+time
+tmpfile
+tmpnam
+tolower
+toupper
+ungetc
+vfprintf
+vsprintf
+fgetpos64
+fopen64
+freopen64
+fsetpos64
+tmpfile64
+EOF
+
+dropdb "$dbname"
+createdb "$dbname"
+
+psql -n -q -d "$dbname" << EOF
+
+-- ----------------------------------------------------------------------
+
+CREATE TABLE stlib_exp (
+ library VARCHAR(80) NOT NULL,
+ object VARCHAR(40) NOT NULL,
+ symbol VARCHAR(256) NOT NULL
+ ) ;
+
+\copy stlib_exp FROM '$tmpdir/stlib_exp.lst'
+
+CREATE TABLE shlib_exp (
+ library VARCHAR(80) NOT NULL,
+ symbol VARCHAR(256) NOT NULL
+ ) ;
+
+\copy shlib_exp FROM '$tmpdir/shlib_exp.lst'
+
+CREATE TABLE obj_exp (
+ object VARCHAR(100) NOT NULL,
+ symbol VARCHAR(256) NOT NULL
+ ) ;
+
+\copy obj_exp FROM '$tmpdir/obj_exp.lst'
+
+CREATE TABLE stlib_imp (
+ library VARCHAR(80) NOT NULL,
+ object VARCHAR(40) NOT NULL,
+ symbol VARCHAR(256) NOT NULL
+ ) ;
+
+\copy stlib_imp FROM '$tmpdir/stlib_imp.lst'
+
+CREATE TABLE shlib_imp (
+ library VARCHAR(80) NOT NULL,
+ symbol VARCHAR(256) NOT NULL
+ ) ;
+
+\copy shlib_imp FROM '$tmpdir/shlib_imp.lst'
+
+CREATE TABLE obj_imp (
+ object VARCHAR(100) NOT NULL,
+ symbol VARCHAR(256) NOT NULL
+ ) ;
+
+\copy obj_imp FROM '$tmpdir/obj_imp.lst'
+
+CREATE TABLE prog_imp (
+ program VARCHAR(80) NOT NULL,
+ symbol VARCHAR(256) NOT NULL
+ ) ;
+
+\copy prog_imp FROM '$tmpdir/prog_imp.lst'
+
+CREATE TABLE prog_exp (
+ program VARCHAR(80) NOT NULL,
+ symbol VARCHAR(256) NOT NULL
+ ) ;
+
+\copy prog_exp FROM '$tmpdir/prog_exp.lst'
+
+CREATE TABLE libs (
+ library VARCHAR(80) NOT NULL,
+ symbol VARCHAR(1000) NOT NULL
+ ) ;
+
+\copy libs FROM '$tmpdir/libs.lst'
+
+CREATE TABLE ldd (
+ program VARCHAR(80) NOT NULL,
+ library VARCHAR(256) NOT NULL,
+ path VARCHAR(256)
+ ) ;
+
+\copy ldd FROM '$tmpdir/ldd.lst'
+
+CREATE TABLE ansi (
+ symbol VARCHAR(256) NOT NULL
+ ) ;
+
+\copy ansi FROM '$tmpdir/ansi.lst'
+
+-- ----------------------------------------------------------------------
+
+SELECT DISTINCT library, symbol
+ INTO TABLE lib_exp
+ FROM stlib_exp
+UNION
+SELECT DISTINCT library, symbol
+ FROM shlib_exp ;
+
+CREATE TABLE duplicates AS
+ SELECT DISTINCT symbol
+ FROM lib_exp
+ GROUP BY symbol
+ HAVING COUNT(*) > 1 ;
+
+CREATE TABLE duplicates2 AS
+ SELECT *
+ FROM lib_exp
+ WHERE symbol IN (
+ SELECT symbol
+ FROM duplicates
+ ) ;
+
+SELECT DISTINCT library, symbol
+ INTO TABLE lib_imp
+ FROM stlib_imp
+UNION
+SELECT DISTINCT library, symbol
+ FROM shlib_imp ;
+
+CREATE TABLE imports AS
+ SELECT a.library, a.symbol
+ FROM lib_imp a
+ WHERE NOT EXISTS (
+ SELECT b.library, b.symbol
+ FROM lib_exp b
+ WHERE b.symbol = a.symbol
+ AND b.library = a.library
+ ) ;
+
+CREATE TABLE defined AS
+ SELECT DISTINCT symbol
+ FROM lib_exp ;
+
+CREATE TABLE used AS
+ SELECT DISTINCT symbol
+ FROM imports ;
+
+CREATE TABLE undefined AS
+ SELECT symbol
+ FROM used u
+ WHERE NOT EXISTS (
+ SELECT *
+ FROM defined d
+ WHERE d.symbol = u.symbol
+ ) ;
+
+SELECT symbol
+INTO TABLE undefined_1
+ FROM undefined
+EXCEPT
+SELECT b.symbol
+ FROM undefined a, libs b
+ WHERE a.symbol = b.symbol ;
+
+CREATE TABLE undefined_2 AS
+ SELECT i.symbol, i.object, i.library
+ FROM stlib_imp i, undefined_1 u
+ WHERE i.symbol = u.symbol ;
+
+CREATE TABLE depends AS
+ SELECT i.library AS im_lib,
+ i.symbol AS symbol,
+ e.library AS ex_lib
+ FROM imports i, lib_exp e
+ WHERE i.symbol = e.symbol ;
+
+CREATE TABLE lib_deps AS
+ SELECT DISTINCT im_lib, ex_lib
+ FROM depends
+ WHERE im_lib <> ex_lib ;
+
+CREATE TABLE lib_deps_1 AS
+ SELECT a.im_lib,
+ a.ex_lib AS in_lib,
+ b.ex_lib
+ FROM lib_deps a, lib_deps b
+ WHERE a.ex_lib = b.im_lib ;
+
+CREATE TABLE lib_deps_2 AS
+ SELECT a.im_lib,
+ a.in_lib AS in1_lib,
+ a.ex_lib AS in2_lib,
+ b.ex_lib
+ FROM lib_deps_1 a, lib_deps b
+ WHERE a.ex_lib = b.im_lib
+ AND a.im_lib <> a.ex_lib ;
+
+SELECT im_lib, ex_lib
+INTO TABLE lib_deps_trans
+ FROM lib_deps
+UNION
+SELECT im_lib, ex_lib
+ FROM lib_deps_1
+UNION
+SELECT im_lib, ex_lib
+ FROM lib_deps_2 ;
+
+CREATE TABLE prog_libs AS
+SELECT DISTINCT a.program, b.library
+FROM prog_imp a, lib_exp b
+WHERE a.symbol = b.symbol ;
+
+SELECT DISTINCT a.symbol
+INTO TABLE libc
+ FROM prog_imp a, libs b
+ WHERE a.symbol = b.symbol
+ AND b.library = 'libc.so.6'
+UNION
+ SELECT DISTINCT a.symbol
+ FROM imports a, libs b
+ WHERE a.symbol = b.symbol
+ AND b.library = 'libc.so.6' ;
+
+SELECT symbol
+INTO nonansi
+ FROM libc
+ WHERE symbol !~ '_.*'
+EXCEPT
+SELECT symbol
+ FROM ansi ;
+
+CREATE TABLE nonansi_progs AS
+ SELECT a.program, a.symbol
+ FROM prog_imp a, nonansi b
+ WHERE a.symbol = b.symbol ;
+
+CREATE TABLE nonansi_libs AS
+ SELECT a.library, a.symbol
+ FROM imports a, nonansi b
+ WHERE a.symbol = b.symbol ;
+
+CREATE TABLE nonansi_prog_counts AS
+ SELECT symbol, COUNT(*)
+ FROM nonansi_progs
+ GROUP BY symbol ;
+
+CREATE TABLE nonansi_lib_counts AS
+ SELECT symbol, COUNT(*)
+ FROM nonansi_libs
+ GROUP BY symbol ;
+
+SELECT symbol
+INTO TABLE nonansi_counts
+ FROM nonansi_prog_counts
+UNION
+SELECT symbol
+ FROM nonansi_lib_counts ;
+
+ALTER TABLE nonansi_counts
+ ADD COLUMN progs INTEGER ;
+
+ALTER TABLE nonansi_counts
+ ADD COLUMN libs INTEGER ;
+
+UPDATE nonansi_counts
+ SET progs = 0, libs = 0 ;
+
+UPDATE nonansi_counts
+ SET progs = b.count
+ FROM nonansi_prog_counts b
+ WHERE nonansi_counts.symbol = b.symbol ;
+
+UPDATE nonansi_counts
+ SET libs = c.count
+ FROM nonansi_lib_counts c
+ WHERE nonansi_counts.symbol = c.symbol;
+
+-- SELECT a.symbol, a.program
+-- FROM prog_imp a, nonansi_prog_counts b
+-- WHERE a.symbol = b.symbol
+-- AND a.program NOT LIKE 'bin/%'
+-- ORDER BY b.count DESC, b.symbol ;
+
+-- SELECT symbol, library
+-- FROM duplicates2
+-- ORDER BY symbol ;
+
+-- SELECT a.im_lib, a.ex_lib
+-- FROM lib_deps a, lib_deps b
+-- WHERE a.ex_lib = b.im_lib
+-- AND b.ex_lib = a.im_lib ;
+
+-- SELECT * FROM lib_deps_2
+-- WHERE im_lib = ex_lib ;
+
+-- SELECT * FROM lib_deps_1
+-- WHERE im_lib = ex_lib ;
+
+-- SELECT im_lib FROM lib_deps_trans
+-- WHERE im_lib = ex_lib ;
+
+-- SELECT a.program, a.library
+-- FROM ldd a
+-- WHERE a.library LIKE 'libgrass_%.so'
+-- AND a.library NOT IN (
+-- SELECT b.library
+-- FROM prog_libs b
+-- WHERE b.program = a.program
+-- ) ;
+
+-- ----------------------------------------------------------------------
+
+EOF
+
Deleted: grass/trunk/tools/sql.sh
===================================================================
--- grass/trunk/tools/sql.sh 2013-06-24 23:18:13 UTC (rev 56910)
+++ grass/trunk/tools/sql.sh 2013-06-24 23:21:20 UTC (rev 56911)
@@ -1,585 +0,0 @@
-#!/bin/bash
-
-############################################################################
-#
-# MODULE: sql.sh
-# AUTHOR(S): Glynn Clements
-# PURPOSE: run "nm" on every object file, library and executable to
-# find dependencies, stored in PostgreSQL database
-# COPYRIGHT: (C) 2006 by the GRASS Development Team
-#
-# This program is free software under the GNU General Public
-# License (>=v2). Read the file COPYING that comes with GRASS
-# for details.
-#
-#############################################################################
-#
-# From: Glynn Clements <glynn at gclements.plus.com>
-# Date: Mon, 12 Jun 2006 13:00:25 +0100
-#
-# Usage: after having compiled GRASS, run "tools/sql.sh `pwd`" from the
-# top of the GRASS source tree.
-#
-# Essentially, the script runs "nm" on every object file, library and
-# executable it finds (and "ldd" on all of the executables), processes
-# the output with egrep/sed/awk, then imports the results into a
-# PostgreSQL database.
-#
-# "nm" lists the symbol table of an object file, library, or executable,
-# indicating whether each symbol is imported into, defined in and/or
-# exported from the file.
-#
-# Most of the database tables record which symbols are imported into or
-# exported from which object files, libraries or executables. E.g. the
-# "obj_imp" table lists which symbols are imported into which object
-# files.
-#
-# You can then use simple queries such as:
-#
-# grass=> SELECT object FROM obj_imp WHERE symbol = 'I_get_target' ;
-# object
-# --------------------------------------------------------------------
-# imagery/i.ortho.photo/photo.2image/OBJ.i686-pc-linux-gnu/target.o
-# imagery/i.ortho.photo/photo.2target/OBJ.i686-pc-linux-gnu/target.o
-# imagery/i.ortho.photo/photo.elev/OBJ.i686-pc-linux-gnu/main.o
-# imagery/i.ortho.photo/photo.rectify/OBJ.i686-pc-linux-gnu/target.o
-# imagery/i.ortho.photo/photo.target/OBJ.i686-pc-linux-gnu/main.o
-# imagery/i.points/OBJ.i686-pc-linux-gnu/target.o
-# imagery/i.rectify/OBJ.i686-pc-linux-gnu/target.o
-# imagery/i.vpoints/OBJ.i686-pc-linux-gnu/target.o
-#
-# to discover which files import a given symbol, or more complex queries
-# such as:
-#
-# grass=> SELECT DISTINCT b.object FROM lib_exp a, obj_imp b
-# grass-> WHERE a.library = 'libgrass_form.6.1.cvs.so' AND a.symbol = b.symbol ;
-# object
-# -----------------------------------------------------------
-# display/d.what.vect/OBJ.i686-pc-linux-gnu/what.o
-# vector/v.digit/OBJ.i686-pc-linux-gnu/attr.o
-# vector/v.digit/OBJ.i686-pc-linux-gnu/line.o
-# vector/v.what/OBJ.i686-pc-linux-gnu/what.o
-# visualization/nviz/src/OBJ.i686-pc-linux-gnu/query_vect.o
-# (5 rows)
-#
-# to discover which files import any symbol defined in a specific
-# library. And so on.
-#
-# For simple "which files use this function" queries, a database lookup
-# is quicker and more reliable than grep-ing the source tree.
-#
-# Assuming that the sql.sh script runs successfully (some of it is
-# Linux-specific, other bits are PostgreSQL-specific, but the changes
-# required for a different OS or RDBMS should be quite minor), the
-# easiest way to figure out what is in a given table (apart from looking
-# at the name) is to just sample it, e.g.:
-#
-# grass=> SELECT * FROM stlib_exp LIMIT 5 ;
-# library | object | symbol
-# -------------------+------------+---------------
-# libgrass_manage.a | add_elem.o | add_element
-# libgrass_manage.a | ask.o | ask_in_mapset
-# libgrass_manage.a | ask.o | ask_new
-# libgrass_manage.a | ask.o | ask_old
-# libgrass_manage.a | copyfile.o | copyfile
-# (5 rows)
-#
-
-
-tmpdir=/tmp/sql-grass
-dbname=grass
-
-if [ -n "$1" ] ; then
- builddir="$1"
-else
- echo "Usage: sql.sh <source directory>" >&2
- exit 1
-fi
-
-rm -rf "$tmpdir"
-mkdir -m 711 "$tmpdir" || exit 1
-
-cd $builddir
-
-( cd dist.*
-
-#LD_LIBRARY_PATH=`pwd`/lib
-#export LD_LIBRARY_PATH
-
-find . -type f -perm +111 \! -name '*.so.*' \
- | while read file ; do ldd $file | sed 's!^!'$file'!' ; done 2>/dev/null \
- | sed -e 's/^\.\///' -e 's/ (0x.*)$//' -e 's/ => \(.*\)$/ \1/' -e 's/ => .*$//' \
- | fgrep -v 'not a dynamic executable' \
- | awk -vOFS='\t' '{print $1,$2,$3 ? $3 : $2}' \
- > "$tmpdir/ldd.lst"
-
-find . -type f -perm +111 \! -name '*.so' \
- | xargs nm -AD 2>/dev/null \
- | egrep ': {8}{1,2} U ' \
- | sed -e 's/:/ /g' -e 's/\.\///' \
- | awk -vOFS='\t' '{print $1,$3}' \
- > "$tmpdir/prog_imp.lst"
-
-find . -type f -perm +111 \! -name '*.so' \
- | xargs nm -AD 2>/dev/null \
- | egrep ':[0-9a-f]{8}{1,2} [BCDGRSTW] ' \
- | sed -e 's/:/ /g' -e 's/\.\///' \
- | awk -vOFS='\t' '{print $1,$4}' \
- > "$tmpdir/prog_exp.lst"
-
-)
-
-find * -type f -name 'lib?*.a' \
- | xargs nm -A \
- | egrep ':[0-9a-f]{8}{1,2} [BCDGRSTW] ' \
- | sed 's/:/ /g' \
- | awk -vOFS='\t' '{print gensub("^[^ ]*/","",1,$1),$2,$5}' \
- > "$tmpdir/stlib_exp.lst"
-
-find * -type f -name 'lib?*.so' \
- | xargs nm -AD \
- | egrep ':[0-9a-f]{8}{1,2} [BCDGRSTW] ' \
- | sed 's/:/ /g' \
- | awk -vOFS='\t' '{print gensub("^[^ ]*/","",1,$1),$4}' \
- > "$tmpdir/shlib_exp.lst"
-
-find * -type f -name '*.o' \
- | xargs nm -A \
- | egrep ':[0-9a-f]{8}{1,2} [BCDGRSTW] ' \
- | sed 's/:/ /g' \
- | awk -vOFS='\t' '{print $1,$4}' \
- > "$tmpdir/obj_exp.lst"
-
-find * -type f -name 'lib?*.a' \
- | xargs nm -A \
- | egrep ': {8}{1,2} U ' \
- | sed 's/:/ /g' \
- | awk -vOFS='\t' '{print gensub("^[^ ]*/","",1,$1),$2,$4}' \
- > "$tmpdir/stlib_imp.lst"
-
-find * -type f -name 'lib?*.so' \
- | xargs nm -AD \
- | egrep ': {8}{1,2} U ' \
- | sed 's/:/ /g' \
- | awk -vOFS='\t' '{print gensub("^[^ ]*/","",1,$1),$3}' \
- > "$tmpdir/shlib_imp.lst"
-
-find * -type f -name '*.o' \
- | xargs nm -A \
- | egrep ': {8}{1,2} U ' \
- | sed 's/:/ /g' \
- | awk -vOFS='\t' '{print $1,$3}' \
- > "$tmpdir/obj_imp.lst"
-
-libs=`awk '{print $3}' "$tmpdir/ldd.lst" | uniq | sort | uniq`
-
-nm -AD $libs \
- | egrep ':[0-9a-f]{8}{1,2} [TWDRC] ' \
- | sed 's/:/ /g' \
- | awk -vOFS='\t' '{print gensub("^[^ ]*/","",1,$1),$4}' \
- > "$tmpdir/libs.lst"
-
-cat > "$tmpdir/ansi.lst" <<EOF
-abort
-asctime
-atexit
-atof
-atoi
-atol
-bsearch
-calloc
-clearerr
-ctime
-exit
-fclose
-feof
-ferror
-fflush
-fgetc
-fgetpos
-fgets
-fopen
-fprintf
-fputc
-fputs
-fread
-free
-freopen
-fscanf
-fseek
-fsetpos
-ftell
-fwrite
-getc
-getchar
-getenv
-gets
-isalnum
-isalpha
-isdigit
-islower
-isspace
-ldiv
-localtime
-longjmp
-malloc
-memcmp
-memcpy
-memmove
-memset
-perror
-printf
-putc
-putchar
-puts
-qsort
-rand
-realloc
-remove
-rename
-rewind
-scanf
-setbuf
-setjmp
-setvbuf
-signal
-sprintf
-srand
-sscanf
-stderr
-stdin
-stdout
-strcat
-strchr
-strcmp
-strcpy
-strcspn
-strerror
-strftime
-strlen
-strncat
-strncmp
-strncpy
-strpbrk
-strrchr
-strspn
-strstr
-strtod
-strtok
-strtol
-time
-tmpfile
-tmpnam
-tolower
-toupper
-ungetc
-vfprintf
-vsprintf
-fgetpos64
-fopen64
-freopen64
-fsetpos64
-tmpfile64
-EOF
-
-dropdb "$dbname"
-createdb "$dbname"
-
-psql -n -q -d "$dbname" << EOF
-
--- ----------------------------------------------------------------------
-
-CREATE TABLE stlib_exp (
- library VARCHAR(80) NOT NULL,
- object VARCHAR(40) NOT NULL,
- symbol VARCHAR(256) NOT NULL
- ) ;
-
-\copy stlib_exp FROM '$tmpdir/stlib_exp.lst'
-
-CREATE TABLE shlib_exp (
- library VARCHAR(80) NOT NULL,
- symbol VARCHAR(256) NOT NULL
- ) ;
-
-\copy shlib_exp FROM '$tmpdir/shlib_exp.lst'
-
-CREATE TABLE obj_exp (
- object VARCHAR(100) NOT NULL,
- symbol VARCHAR(256) NOT NULL
- ) ;
-
-\copy obj_exp FROM '$tmpdir/obj_exp.lst'
-
-CREATE TABLE stlib_imp (
- library VARCHAR(80) NOT NULL,
- object VARCHAR(40) NOT NULL,
- symbol VARCHAR(256) NOT NULL
- ) ;
-
-\copy stlib_imp FROM '$tmpdir/stlib_imp.lst'
-
-CREATE TABLE shlib_imp (
- library VARCHAR(80) NOT NULL,
- symbol VARCHAR(256) NOT NULL
- ) ;
-
-\copy shlib_imp FROM '$tmpdir/shlib_imp.lst'
-
-CREATE TABLE obj_imp (
- object VARCHAR(100) NOT NULL,
- symbol VARCHAR(256) NOT NULL
- ) ;
-
-\copy obj_imp FROM '$tmpdir/obj_imp.lst'
-
-CREATE TABLE prog_imp (
- program VARCHAR(80) NOT NULL,
- symbol VARCHAR(256) NOT NULL
- ) ;
-
-\copy prog_imp FROM '$tmpdir/prog_imp.lst'
-
-CREATE TABLE prog_exp (
- program VARCHAR(80) NOT NULL,
- symbol VARCHAR(256) NOT NULL
- ) ;
-
-\copy prog_exp FROM '$tmpdir/prog_exp.lst'
-
-CREATE TABLE libs (
- library VARCHAR(80) NOT NULL,
- symbol VARCHAR(1000) NOT NULL
- ) ;
-
-\copy libs FROM '$tmpdir/libs.lst'
-
-CREATE TABLE ldd (
- program VARCHAR(80) NOT NULL,
- library VARCHAR(256) NOT NULL,
- path VARCHAR(256)
- ) ;
-
-\copy ldd FROM '$tmpdir/ldd.lst'
-
-CREATE TABLE ansi (
- symbol VARCHAR(256) NOT NULL
- ) ;
-
-\copy ansi FROM '$tmpdir/ansi.lst'
-
--- ----------------------------------------------------------------------
-
-SELECT DISTINCT library, symbol
- INTO TABLE lib_exp
- FROM stlib_exp
-UNION
-SELECT DISTINCT library, symbol
- FROM shlib_exp ;
-
-CREATE TABLE duplicates AS
- SELECT DISTINCT symbol
- FROM lib_exp
- GROUP BY symbol
- HAVING COUNT(*) > 1 ;
-
-CREATE TABLE duplicates2 AS
- SELECT *
- FROM lib_exp
- WHERE symbol IN (
- SELECT symbol
- FROM duplicates
- ) ;
-
-SELECT DISTINCT library, symbol
- INTO TABLE lib_imp
- FROM stlib_imp
-UNION
-SELECT DISTINCT library, symbol
- FROM shlib_imp ;
-
-CREATE TABLE imports AS
- SELECT a.library, a.symbol
- FROM lib_imp a
- WHERE NOT EXISTS (
- SELECT b.library, b.symbol
- FROM lib_exp b
- WHERE b.symbol = a.symbol
- AND b.library = a.library
- ) ;
-
-CREATE TABLE defined AS
- SELECT DISTINCT symbol
- FROM lib_exp ;
-
-CREATE TABLE used AS
- SELECT DISTINCT symbol
- FROM imports ;
-
-CREATE TABLE undefined AS
- SELECT symbol
- FROM used u
- WHERE NOT EXISTS (
- SELECT *
- FROM defined d
- WHERE d.symbol = u.symbol
- ) ;
-
-SELECT symbol
-INTO TABLE undefined_1
- FROM undefined
-EXCEPT
-SELECT b.symbol
- FROM undefined a, libs b
- WHERE a.symbol = b.symbol ;
-
-CREATE TABLE undefined_2 AS
- SELECT i.symbol, i.object, i.library
- FROM stlib_imp i, undefined_1 u
- WHERE i.symbol = u.symbol ;
-
-CREATE TABLE depends AS
- SELECT i.library AS im_lib,
- i.symbol AS symbol,
- e.library AS ex_lib
- FROM imports i, lib_exp e
- WHERE i.symbol = e.symbol ;
-
-CREATE TABLE lib_deps AS
- SELECT DISTINCT im_lib, ex_lib
- FROM depends
- WHERE im_lib <> ex_lib ;
-
-CREATE TABLE lib_deps_1 AS
- SELECT a.im_lib,
- a.ex_lib AS in_lib,
- b.ex_lib
- FROM lib_deps a, lib_deps b
- WHERE a.ex_lib = b.im_lib ;
-
-CREATE TABLE lib_deps_2 AS
- SELECT a.im_lib,
- a.in_lib AS in1_lib,
- a.ex_lib AS in2_lib,
- b.ex_lib
- FROM lib_deps_1 a, lib_deps b
- WHERE a.ex_lib = b.im_lib
- AND a.im_lib <> a.ex_lib ;
-
-SELECT im_lib, ex_lib
-INTO TABLE lib_deps_trans
- FROM lib_deps
-UNION
-SELECT im_lib, ex_lib
- FROM lib_deps_1
-UNION
-SELECT im_lib, ex_lib
- FROM lib_deps_2 ;
-
-CREATE TABLE prog_libs AS
-SELECT DISTINCT a.program, b.library
-FROM prog_imp a, lib_exp b
-WHERE a.symbol = b.symbol ;
-
-SELECT DISTINCT a.symbol
-INTO TABLE libc
- FROM prog_imp a, libs b
- WHERE a.symbol = b.symbol
- AND b.library = 'libc.so.6'
-UNION
- SELECT DISTINCT a.symbol
- FROM imports a, libs b
- WHERE a.symbol = b.symbol
- AND b.library = 'libc.so.6' ;
-
-SELECT symbol
-INTO nonansi
- FROM libc
- WHERE symbol !~ '_.*'
-EXCEPT
-SELECT symbol
- FROM ansi ;
-
-CREATE TABLE nonansi_progs AS
- SELECT a.program, a.symbol
- FROM prog_imp a, nonansi b
- WHERE a.symbol = b.symbol ;
-
-CREATE TABLE nonansi_libs AS
- SELECT a.library, a.symbol
- FROM imports a, nonansi b
- WHERE a.symbol = b.symbol ;
-
-CREATE TABLE nonansi_prog_counts AS
- SELECT symbol, COUNT(*)
- FROM nonansi_progs
- GROUP BY symbol ;
-
-CREATE TABLE nonansi_lib_counts AS
- SELECT symbol, COUNT(*)
- FROM nonansi_libs
- GROUP BY symbol ;
-
-SELECT symbol
-INTO TABLE nonansi_counts
- FROM nonansi_prog_counts
-UNION
-SELECT symbol
- FROM nonansi_lib_counts ;
-
-ALTER TABLE nonansi_counts
- ADD COLUMN progs INTEGER ;
-
-ALTER TABLE nonansi_counts
- ADD COLUMN libs INTEGER ;
-
-UPDATE nonansi_counts
- SET progs = 0, libs = 0 ;
-
-UPDATE nonansi_counts
- SET progs = b.count
- FROM nonansi_prog_counts b
- WHERE nonansi_counts.symbol = b.symbol ;
-
-UPDATE nonansi_counts
- SET libs = c.count
- FROM nonansi_lib_counts c
- WHERE nonansi_counts.symbol = c.symbol;
-
--- SELECT a.symbol, a.program
--- FROM prog_imp a, nonansi_prog_counts b
--- WHERE a.symbol = b.symbol
--- AND a.program NOT LIKE 'bin/%'
--- ORDER BY b.count DESC, b.symbol ;
-
--- SELECT symbol, library
--- FROM duplicates2
--- ORDER BY symbol ;
-
--- SELECT a.im_lib, a.ex_lib
--- FROM lib_deps a, lib_deps b
--- WHERE a.ex_lib = b.im_lib
--- AND b.ex_lib = a.im_lib ;
-
--- SELECT * FROM lib_deps_2
--- WHERE im_lib = ex_lib ;
-
--- SELECT * FROM lib_deps_1
--- WHERE im_lib = ex_lib ;
-
--- SELECT im_lib FROM lib_deps_trans
--- WHERE im_lib = ex_lib ;
-
--- SELECT a.program, a.library
--- FROM ldd a
--- WHERE a.library LIKE 'libgrass_%.so'
--- AND a.library NOT IN (
--- SELECT b.library
--- FROM prog_libs b
--- WHERE b.program = a.program
--- ) ;
-
--- ----------------------------------------------------------------------
-
-EOF
-
More information about the grass-commit
mailing list