changeset 95:ff1743cbe4aa

initial attempt at building a shared library
author Carl Byington <carl@five-ten-sg.com>
date Sat, 13 Sep 2008 20:15:40 -0700
parents 997cf1373f9e
children 2e3ec9511166
files Makefile.am compile configure.in libpst.pc.in src/Makefile.am
diffstat 5 files changed, 215 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/Makefile.am	Tue Sep 09 11:11:56 2008 -0700
+++ b/Makefile.am	Sat Sep 13 20:15:40 2008 -0700
@@ -2,5 +2,9 @@
 htmldir = ${datadir}/doc/@PACKAGE@-@VERSION@
 html_DATA = AUTHORS COPYING ChangeLog NEWS README
 CLEANFILES = xml/libpst xml/Makefile
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = libpst.pc
+
 EXTRA_DIST = Doxyfile libpst.html.tar.gz libpst.spec $(wildcard xml/M*) $(wildcard xml/h*) $(wildcard xml/lib*)
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/compile	Sat Sep 13 20:15:40 2008 -0700
@@ -0,0 +1,140 @@
+#! /bin/sh
+# Wrapper for compilers which do not understand `-c -o'.
+
+scriptversion=2004-09-10.20
+
+# Copyright (C) 1999, 2000, 2003, 2004 Free Software Foundation, Inc.
+# Written by Tom Tromey <tromey@cygnus.com>.
+#
+# 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 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+case $1 in
+  '')
+     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 0
+    ;;
+  -v | --v*)
+    echo "compile $scriptversion"
+    exit 0
+    ;;
+esac
+
+ofile=
+cfile=
+eat=
+
+for arg
+do
+  if test -n "$eat"; then
+    eat=
+  else
+    case $1 in
+      -o)
+	# 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
+	case $2 in
+	  *.o | *.obj)
+	    ofile=$2
+	    ;;
+	  *)
+	    set x "$@" -o "$2"
+	    shift
+	    ;;
+	esac
+	;;
+      *.c)
+	cfile=$1
+	set x "$@" "$1"
+	shift
+	;;
+      *)
+	set x "$@" "$1"
+	shift
+	;;
+    esac
+  fi
+  shift
+done
+
+if test -z "$ofile" || test -z "$cfile"; then
+  # 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
+  # normal compilation that the losing compiler can handle.  If no
+  # `.c' file was seen then we are probably linking.  That is also
+  # ok.
+  exec "$@"
+fi
+
+# Name of file we expect compiler to create.
+cofile=`echo "$cfile" | sed -e 's|^.*/||' -e 's/\.c$/.o/'`
+
+# Create the lock directory.
+# 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
+# object file name, since that is what matters with a parallel build.
+lockdir=`echo "$cofile" | sed -e 's|[/.-]|_|g'`.d
+while true; do
+  if mkdir "$lockdir" >/dev/null 2>&1; then
+    break
+  fi
+  sleep 1
+done
+# FIXME: race condition here if user kills between mkdir and trap.
+trap "rmdir '$lockdir'; exit 1" 1 2 15
+
+# Run the compile.
+"$@"
+ret=$?
+
+if test -f "$cofile"; then
+  mv "$cofile" "$ofile"
+fi
+
+rmdir "$lockdir"
+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:
--- a/configure.in	Tue Sep 09 11:11:56 2008 -0700
+++ b/configure.in	Sat Sep 13 20:15:40 2008 -0700
@@ -20,6 +20,7 @@
 AC_PROG_CPP
 AC_PROG_INSTALL
 AC_PROG_LN_S
+AC_PROG_LIBTOOL
 AC_PROG_MAKE_SET
 AC_PROG_RANLIB
 
@@ -80,17 +81,41 @@
       )
 
 
+# The following lines adds the --enable-libpst-shared option to configure:
+#
+# Give the user the choice to enter one of these:
+# --enable-libpst-shared
+# --enable-libpst-shared=yes
+# --enable-libpst-shared=no
+#
+AC_MSG_CHECKING([whether we are building libpst shared object])
+AC_ARG_ENABLE(libpst-shared,
+      AC_HELP_STRING([--enable-libpst-shared], [build libpst shared object]),
+      [if test "${enable_libpst_shared}" = "no" ; then
+          AC_MSG_RESULT([no])
+          AM_CONDITIONAL(BUILD_LIBPST_SHARED, test 0 = 1)
+      else
+          AC_MSG_RESULT([yes])
+          AM_CONDITIONAL(BUILD_LIBPST_SHARED, test 1 = 1)
+      fi],
+      # Default value for configure
+      [AC_MSG_RESULT([no])
+       AM_CONDITIONAL(BUILD_LIBPST_SHARED, test 0 = 1)]
+      )
+
+
 AC_OUTPUT(                  \
     Makefile                \
     debian/changelog        \
     debian/Makefile         \
     libpst.spec             \
+    libpst.pc               \
     html/Makefile           \
     info/Makefile           \
     man/Makefile            \
     src/Makefile            \
     src/version.h           \
-    src/pst2dii.cpp 	    \
+    src/pst2dii.cpp         \
     xml/Makefile            \
     xml/libpst              \
     )
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpst.pc.in	Sat Sep 13 20:15:40 2008 -0700
@@ -0,0 +1,11 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: libpst
+Description: A library for reading PST files
+Version: @VERSION@
+Requires: 
+Libs: -L${libdir} -lpst
+Cflags: -I${includedir}
--- a/src/Makefile.am	Tue Sep 09 11:11:56 2008 -0700
+++ b/src/Makefile.am	Sat Sep 13 20:15:40 2008 -0700
@@ -9,12 +9,44 @@
 readpst_SOURCES     = $(hfiles) readpst.c    libpst.c timeconv.c libstrfunc.c debug.c lzfu.c vbuf.c
 readpstlog_SOURCES  = $(hfiles) readpstlog.c                                  debug.c
 pst2ldif_SOURCES    = $(hfiles) pst2ldif.cpp libpst.c timeconv.c libstrfunc.c debug.c lzfu.c vbuf.c
-pst2dii_SOURCES	    = $(hfiles) pst2dii.cpp  libpst.c timeconv.c libstrfunc.c debug.c lzfu.c vbuf.c
-
+pst2dii_SOURCES     = $(hfiles) pst2dii.cpp  libpst.c timeconv.c libstrfunc.c debug.c lzfu.c vbuf.c
 deltasearch_SOURCES = deltasearch.cpp debug.c
 dumpblocks_SOURCES  = dumpblocks.c    debug.c libpst.c libstrfunc.c timeconv.c vbuf.c
 getidblock_SOURCES  = getidblock.c    debug.c libpst.c libstrfunc.c timeconv.c vbuf.c
 
+if BUILD_LIBPST_SHARED
+    lspst_CFLAGS        = $(AM_CFLAGS)
+    readpst_CFLAGS      = $(AM_CFLAGS)
+    readpstlog_CFLAGS   = $(AM_CFLAGS)
+    pst2ldif_CFLAGS     = $(AM_CFLAGS)
+    pst2dii_CFLAGS      = $(AM_CFLAGS)
+    deltasearch_CFLAGS  = $(AM_CFLAGS)
+    dumpblocks_CFLAGS   = $(AM_CFLAGS)
+    getidblock_CFLAGS   = $(AM_CFLAGS)
+    lib_LTLIBRARIES = libpst.la
+    libpst_la_SOURCES = common.h        \
+                        debug.c 		\
+                        libpst.c        \
+                        libpst.h        \
+                        libstrfunc.c    \
+                        libstrfunc.h    \
+                        lspst.c         \
+                        timeconv.c      \
+                        timeconv.h      \
+                        vbuf.c          \
+                        vbuf.h          \
+                        version.h
+    libpst_la_LDFLAGS = -no-undefined
+    libpstincludedir = $(includedir)/libpst
+    libpstinclude_HEADERS = common.h        \
+                            define.h        \
+                            libpst.h        \
+                            libstrfunc.h	\
+                            timeconv.h      \
+                            vbuf.h          \
+                            version.h
+endif
+
 if NEED_XGETOPT
     lspst_SOURCES       += XGetopt.c
     readpst_SOURCES     += XGetopt.c