Release 2-3-1 with tag: REL_mrw-c++-2-3-1
This commit is contained in:
		
							
								
								
									
										
											BIN
										
									
								
								log4cxx-0.9.7-3.i386.rpm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								log4cxx-0.9.7-3.i386.rpm
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							@@ -46,13 +46,13 @@ RPMS = /usr/src/packages/RPMS/i586/@PACKAGENAME@-minimal-@MAJOR@.@MINOR@.@LEAST@
 | 
			
		||||
release: tag webserver
 | 
			
		||||
 | 
			
		||||
tag: distcheck
 | 
			
		||||
	cvs ci -R .
 | 
			
		||||
	cvs tag -FR REL_@PACKAGENAME@-@MAJOR@-@MINOR@-@LEAST@ .
 | 
			
		||||
	svn ci -m "Release @MAJOR@-@MINOR@-@LEAST@ with tag: REL_@PACKAGENAME@-@MAJOR@-@MINOR@-@LEAST@" .
 | 
			
		||||
	svn cp . file:///home/svn/pro/@PACKAGENAME@/tags/REL_@PACKAGENAME@-@MAJOR@-@MINOR@-@LEAST@
 | 
			
		||||
 | 
			
		||||
rpm: dist
 | 
			
		||||
	cp @PACKAGENAME@-@MAJOR@.@MINOR@.@LEAST@.tar.gz /usr/src/packages/SOURCES/
 | 
			
		||||
	rpmbuild -ba --clean @PACKAGENAME@.spec
 | 
			
		||||
	rpmbuild -ba --clean @PACKAGENAME@-minimal.spec
 | 
			
		||||
	rpmbuild -bb --clean @PACKAGENAME@-minimal.spec
 | 
			
		||||
 | 
			
		||||
webserver: rpm
 | 
			
		||||
	ssh root@waeckerlin.org bash -c \
 | 
			
		||||
@@ -64,8 +64,9 @@ webserver: rpm
 | 
			
		||||
	    log4cxx*.rpm \
 | 
			
		||||
	    root@waeckerlin.org:/home/marc/mrw-c++/
 | 
			
		||||
 | 
			
		||||
distclean-local:
 | 
			
		||||
maintainerclean-local:
 | 
			
		||||
	- find . -name '*~' | xargs rm
 | 
			
		||||
	- rm -r doc
 | 
			
		||||
	- rm -r autom4te.cache
 | 
			
		||||
	- rm aclocal.m4 config.guess config.sub configure \
 | 
			
		||||
	     depcomp install-sh ltmain.sh makefile makefile.in \
 | 
			
		||||
 
 | 
			
		||||
@@ -10,22 +10,26 @@
 | 
			
		||||
##
 | 
			
		||||
 | 
			
		||||
# rpmbuild -bb --clean @PACKAGENAME@.spec
 | 
			
		||||
Summary: MRW's C++ Class Library, facilities for modern C++ programming
 | 
			
		||||
Name: @PACKAGENAME@-minimal
 | 
			
		||||
Name: @PACKAGENAME@
 | 
			
		||||
Version: @MAJOR@.@MINOR@.@LEAST@
 | 
			
		||||
Release: 1
 | 
			
		||||
License: LGPL
 | 
			
		||||
Group: Development/Libraries/C++
 | 
			
		||||
Summary: dummy
 | 
			
		||||
 | 
			
		||||
%description
 | 
			
		||||
dummy
 | 
			
		||||
 | 
			
		||||
%package minimal
 | 
			
		||||
Summary: MRW's C++ Class Library (minimal release, no debugging features)
 | 
			
		||||
Group: Development/Libraries/C++
 | 
			
		||||
URL: http://marc.waeckerlin.org/mrw-c++/index.html
 | 
			
		||||
Source0: @PACKAGENAME@-@MAJOR@.@MINOR@.@LEAST@.tar.gz
 | 
			
		||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot
 | 
			
		||||
Prefix: /usr
 | 
			
		||||
 | 
			
		||||
Summary: MRW's C++ Class Library (minimal release, no debugging features)
 | 
			
		||||
Group: Development/Libraries/C++
 | 
			
		||||
Provides: @PACKAGENAME@
 | 
			
		||||
 | 
			
		||||
%description
 | 
			
		||||
%description minimal
 | 
			
		||||
@README@
 | 
			
		||||
 | 
			
		||||
This package contains only the shared libraries required at runtime,
 | 
			
		||||
@@ -56,7 +60,7 @@ rm -r $RPM_BUILD_ROOT/usr/share/doc/packages/@PACKAGENAME@/examples
 | 
			
		||||
%clean
 | 
			
		||||
rm -rf $RPM_BUILD_ROOT
 | 
			
		||||
 | 
			
		||||
%files
 | 
			
		||||
%files minimal
 | 
			
		||||
%defattr(-,root,root,-)
 | 
			
		||||
/usr/lib/libmrw.so
 | 
			
		||||
/usr/lib/libmrw.so.@MAJOR@
 | 
			
		||||
 
 | 
			
		||||
@@ -16,6 +16,7 @@
 | 
			
		||||
#include <sys/mman.h> // munmap, PROT_READ, MAP_SHARED
 | 
			
		||||
#include <unistd.h> // close
 | 
			
		||||
#include <stdexcept>
 | 
			
		||||
#include <cassert>
 | 
			
		||||
 | 
			
		||||
// forward
 | 
			
		||||
class bfd;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										132
									
								
								mrw/autofunctiontracestdlog.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										132
									
								
								mrw/autofunctiontracestdlog.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,132 @@
 | 
			
		||||
/** @file
 | 
			
		||||
 | 
			
		||||
    $Id: autofunctiontracelog4cxx.cpp,v 1.3 2005/04/14 19:12:18 marc Exp $
 | 
			
		||||
 | 
			
		||||
    $Date: 2005/04/14 19:12:18 $
 | 
			
		||||
    $Author: marc $
 | 
			
		||||
 | 
			
		||||
    @copy © Marc Wäckerlin
 | 
			
		||||
    @license LGPL, see file <a href="license.html">COPYING</a>
 | 
			
		||||
 | 
			
		||||
         1         2         3         4         5         6         7         8
 | 
			
		||||
    5678901234567890123456789012345678901234567890123456789012345678901234567890
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#ifndef __GNUG__
 | 
			
		||||
#error GNU C++ Compiler is required for automatical function trace
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <mrw/string.hpp>
 | 
			
		||||
#include <mrw/stacktrace.hpp>
 | 
			
		||||
#include <iostream>
 | 
			
		||||
#include <iomanip>
 | 
			
		||||
 | 
			
		||||
#if (__GNUC__==3 && __GNUC_MINOR__<4 || __GNUC__<3) && _REENTRANT && !_MT
 | 
			
		||||
#define _MT
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// these are special built in functions of GNU Compiler Collection
 | 
			
		||||
extern "C" void __cyg_profile_func_enter (void *, void *) __attribute__((no_instrument_function));
 | 
			
		||||
extern "C" void __cyg_profile_func_exit (void *, void *) __attribute__((no_instrument_function));
 | 
			
		||||
 | 
			
		||||
namespace mrw {
 | 
			
		||||
  
 | 
			
		||||
  // workaround doxygen problem:
 | 
			
		||||
  //  - the C++ compiler compiles the following code
 | 
			
		||||
  //  - doxygen ignores it
 | 
			
		||||
#ifndef LET_DOXYGEN_IGNORE_THIS // no matching class member found for
 | 
			
		||||
                                // int mrw::ThreadInfo::level()
 | 
			
		||||
  struct ThreadInfo {
 | 
			
		||||
      int level;
 | 
			
		||||
      bool recurse;
 | 
			
		||||
  };
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef _MT
 | 
			
		||||
  static __thread ThreadInfo info = {0, false};
 | 
			
		||||
#else
 | 
			
		||||
  static ThreadInfo info = {0, false};
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  static bool mainPassed(false);
 | 
			
		||||
 | 
			
		||||
  class Lock {
 | 
			
		||||
    public:
 | 
			
		||||
      Lock() __attribute__((no_instrument_function));
 | 
			
		||||
      ~Lock() __attribute__((no_instrument_function));
 | 
			
		||||
  };
 | 
			
		||||
  // workaround doxygen problem:
 | 
			
		||||
  //  - the C++ compiler compiles the following code
 | 
			
		||||
  //  - doxygen ignores it
 | 
			
		||||
#ifndef LET_DOXYGEN_IGNORE_THIS // doxygen can't match with __attribute__ above
 | 
			
		||||
  Lock::Lock() {
 | 
			
		||||
    info.recurse = true;
 | 
			
		||||
  }
 | 
			
		||||
  Lock::~Lock() {
 | 
			
		||||
    info.recurse = false;
 | 
			
		||||
  }
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
extern "C" int main(int, char**);
 | 
			
		||||
 | 
			
		||||
/** @addtogroup FunctionTrace */
 | 
			
		||||
//@{
 | 
			
		||||
 | 
			
		||||
/** @defgroup AutoFunctionTraceStdlog Automatic Function Trace to standard out for GNU g++
 | 
			
		||||
 | 
			
		||||
    Same as @ref AutoFunctionTrace, but traces to @c stdlog.
 | 
			
		||||
 | 
			
		||||
    If you link to the library @c libmrwautofunctiontracestdlog using
 | 
			
		||||
    a linker option such as: @c -lmrwautofunctiontracestdlog and you
 | 
			
		||||
    must enable the GNU Compiler Collection specific function trace
 | 
			
		||||
    feature with compile and link option @c -finstrument-functions
 | 
			
		||||
    then you get an automatical function trace, that traces to @c
 | 
			
		||||
    stdlog. You don't need to change a single line in your code!
 | 
			
		||||
 | 
			
		||||
    */
 | 
			
		||||
//@{
 | 
			
		||||
 | 
			
		||||
//@}
 | 
			
		||||
 | 
			
		||||
//@}
 | 
			
		||||
 | 
			
		||||
extern "C" void __cyg_profile_func_enter(void *this_fn, void*) {
 | 
			
		||||
  if (!mrw::mainPassed)
 | 
			
		||||
    if (this_fn == (void*)&::main) // not ANSI C++ conform...
 | 
			
		||||
      mrw::mainPassed=true;
 | 
			
		||||
    else
 | 
			
		||||
      return;
 | 
			
		||||
  try {
 | 
			
		||||
    if (mrw::info.recurse) return;
 | 
			
		||||
    mrw::Lock lock;
 | 
			
		||||
    {
 | 
			
		||||
      static bool init(mrw::StackTrace::createSymtable());
 | 
			
		||||
      if (!init) return;
 | 
			
		||||
      mrw::StackTrace::CodePos pos(mrw::StackTrace::translate(this_fn));
 | 
			
		||||
      std::clog<<std::setw(2+mrw::info.level++)<<std::setfill(' ')
 | 
			
		||||
               <<"\\ "<<pos.function<<" ("<<pos.file<<':'<<pos.line<<')'
 | 
			
		||||
               <<std::endl;
 | 
			
		||||
    }
 | 
			
		||||
  } catch (...) {}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
extern "C" void __cyg_profile_func_exit(void *this_fn, void*) {
 | 
			
		||||
  if (!mrw::mainPassed)
 | 
			
		||||
    return;
 | 
			
		||||
  else
 | 
			
		||||
    if (this_fn == (void*)&::main) { // not ANSI C++ conform...
 | 
			
		||||
      mrw::mainPassed=false;
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
  try {
 | 
			
		||||
    if (mrw::info.recurse || mrw::info.level==0) return;
 | 
			
		||||
    mrw::Lock lock;
 | 
			
		||||
    {
 | 
			
		||||
      mrw::StackTrace::CodePos pos(mrw::StackTrace::translate(this_fn));
 | 
			
		||||
      std::clog<<std::setw(2+--mrw::info.level)<<std::setfill(' ')
 | 
			
		||||
               <<"/ "<<pos.function<<" ("<<pos.file<<':'<<pos.line<<')'
 | 
			
		||||
               <<std::endl;
 | 
			
		||||
    }
 | 
			
		||||
  } catch (...) {}
 | 
			
		||||
}
 | 
			
		||||
@@ -58,7 +58,7 @@
 | 
			
		||||
          http://boost.org
 | 
			
		||||
        - log4cxx for automated tracing and function traces:
 | 
			
		||||
           - http://logging.apache.org/log4cxx
 | 
			
		||||
           - RPM: http://marc.waeckerlin.org/mrw-c++/log4cxx-0.9.7-2.i386.rpm
 | 
			
		||||
           - RPM: http://marc.waeckerlin.org/mrw-c++/log4cxx-0.9.7-3.i386.rpm
 | 
			
		||||
        - @ref mrw::StackTrace requires:
 | 
			
		||||
           - the GNU Binutils
 | 
			
		||||
           - either GNU Compiler gcc or GNU C library glibc
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										49
									
								
								mrw/string_test.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								mrw/string_test.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,49 @@
 | 
			
		||||
/** @file
 | 
			
		||||
 | 
			
		||||
    $Id$
 | 
			
		||||
 | 
			
		||||
    $Date$
 | 
			
		||||
    $Author$
 | 
			
		||||
 | 
			
		||||
    @copy © Marc Wäckerlin
 | 
			
		||||
    @license LGPL, see file <a href="license.html">COPYING</a>
 | 
			
		||||
 | 
			
		||||
    $Log$
 | 
			
		||||
 | 
			
		||||
         1         2         3         4         5         6         7         8
 | 
			
		||||
    5678901234567890123456789012345678901234567890123456789012345678901234567890
 | 
			
		||||
*/
 | 
			
		||||
#include <mrw/string.hpp>
 | 
			
		||||
#include <mrw/list.hpp>
 | 
			
		||||
#include <algorithm>
 | 
			
		||||
 | 
			
		||||
#include <cppunit/TestFixture.h>
 | 
			
		||||
#include <cppunit/ui/text/TestRunner.h>
 | 
			
		||||
#include <cppunit/extensions/HelperMacros.h>
 | 
			
		||||
#include <cppunit/extensions/TestFactoryRegistry.h>
 | 
			
		||||
 | 
			
		||||
class StringTest: public CppUnit::TestFixture { 
 | 
			
		||||
  public:
 | 
			
		||||
    void Join() {
 | 
			
		||||
      std::list<std::string> l;
 | 
			
		||||
      l<<"Hello"<<"World"<<"here"<<"I"<<"am";
 | 
			
		||||
      CPPUNIT_ASSERT(mrw::join(l)=="Hello World here I am");
 | 
			
		||||
    }
 | 
			
		||||
    void Split() {
 | 
			
		||||
      std::string text("Hello World here I am");
 | 
			
		||||
      std::list<std::string> a(mrw::split(text)), b;
 | 
			
		||||
      b<<"Hello"<<"World"<<"here"<<"I"<<"am";
 | 
			
		||||
      CPPUNIT_ASSERT(equal(a.begin(), a.end(), b.begin()));
 | 
			
		||||
    }
 | 
			
		||||
    CPPUNIT_TEST_SUITE(StringTest);
 | 
			
		||||
    CPPUNIT_TEST(Join);
 | 
			
		||||
    CPPUNIT_TEST(Split);
 | 
			
		||||
    CPPUNIT_TEST_SUITE_END();
 | 
			
		||||
};
 | 
			
		||||
CPPUNIT_TEST_SUITE_REGISTRATION(StringTest);
 | 
			
		||||
 | 
			
		||||
int main() {
 | 
			
		||||
  CppUnit::TextUi::TestRunner runner;
 | 
			
		||||
  runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest());
 | 
			
		||||
  return runner.run() ? 0 : 1;
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user