Instructions for creating a uimacpp release or a new build


For a new release

1. create a tag for the new release, e.g.
	svn copy https://svn.apache.org/repos/asf/uima/uimacpp/trunk https://svn.apache.org/repos/asf/uima/uimacpp/tags/uimacpp-2.4.0-rcN -m"create tag for 2.4.0 release"

2. if changes are needed, update trunk. Create a new tag when ready to release.


For a new build on Linux

1. create new directory for release candidate and cd there
	mkdir uimacpp-2.4.0
	cd uimacpp-2.4.0

2. checkout source from current tag
	svn co https://svn.apache.org/repos/asf/uima/uimacpp/tag/uimacpp-2.4.0

3. Modify configure.ac 
   Update package version number specified in AC_INIT call.
   Update the  library number by modifying LT_VERSION_NUMBER following the 
      libtool version numbering convention. This is summarized on the
      wiki page https://cwiki.apache.org/UIMA/proposed-changes-to-uima-c-build-and-packaging.html.

4  Create configure script 
   cd uimacpp-2.4.0
   ./autogen.sh

5. Run configure
   define environment variable ICU_HOME, APR_HOME, XERCES_HOME, ACTIVEMQ_HOME, JAVA_INCLUDE
   ./configure --with-jdk=$JAVA_HOME/include --with-apr=$APR_HOME --with-icu=$ICU_HOME --with-xerces=$XERCES_HOME --with-activemq=$ACTIVEMQ_HOME

6. build, test and create sdk tree
	cd uimacpp-2.4.0
	[setup env for the build]
      make
      DESTDIR=`pwd` make install
      make check
      make sdk ARGS=`pwd`

7. create bin tarball
	tar -czf uimacpp-2.4.0-bin.tgz uimacpp

8. rat scan of bin
	java -jar apache-rat-0.6.jar uimacpp > uimacpp-bin-linux-report.txt

9. sniff test of base sdk
	cd uimacpp
	export UIMACPP_HOME=`pwd`
	PATH=$PATH:`pwd`/bin
	export LD_LIBRARY_PATH=`pwd`/lib:`pwd`/examples/src
	cd examples/src
	make -f all.mak
	cd ..
	./runall.sh

10. sniff test of scriptators (following base sniff test)
	cd ../scriptators/perl
	make
	PATH=$PATH:`pwd`
	LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd`
	runAECpp PerlSample.xml ../../examples/data/

	cd ../python
	make
	LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd`h
	export PYTHONPATH=`pwd`
	runAECpp PythonSample.xml ../../examples/data/

	cd ../tcl
	make
	LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd`
	runAECpp TclSample.xml ../../examples/data/

11. sniff test of uimacpp service wrapper
	in a "Uima AS window", run:
	  startBroker.sh
	back in the UimaCpp test window:
	  cd ../../examples
	  runRemoteAsyncAE.sh tcp://localhost:61616 MeetingAnnotator \
	  -d tutorial/descriptors/Deploy_MeetingAnnotator.xml



For a new build on Windows

1. checkout source from current release branch
	svn co https://svn.apache.org/repos/asf/uima/uimacpp/branches/uimacpp-2.4.0

2. build, test and create sdk tree
	cd uimacpp-2.4.0\src
	[setup env for the build]
	winmake /build release
	winmake /build debug
	cd ..\docs
	builddocs
	cd ..\src\test
	devenv test.sln /build release
	set UIMA_HOME=someGoodUimaSDK
	fvt
	devenv test.sln /build debug
	fvt debug
	cd ..\..
	buildsdk ..

3. create bin zipfile of buildDir\uimacpp as
	uimacpp-2.4.0-bin.zip

4. rat scan of bin
	java -jar apache-rat-0.6.jar uimacpp > uimacpp-bin-windows-report.txt

5. sniff test of base sdk
	cd uimacpp
	set UIMACPP_HOME=%cd%
	path=%path%;%cd%\bin;%cd%\examples\src
	cd examples\src
	devenv uimacpp-examples.sln /build release
	cd ..
	runall

6. sniff test of scriptators (following base sniff test)
	cd ..\scriptators\perl
	winmake
	runAECpp PerlSample.xml ..\..\examples\data\

	cd ..\python
	winmake
	runAECpp PythonSample.xml ..\..\examples\data\

	cd ..\tcl
	winmake
	runAECpp TclSample.xml ..\..\examples\data\

7. sniff test of uimacpp service wrapper
	in a "Uima AS window", run:
	  startBroker
	back in the UimaCpp test window:
	  cd ..\..\examples
	  runRemoteAsyncAE tcp://localhost:61616 MeetingAnnotator \
	  -d tutorial\descriptors\Deploy_MeetingAnnotator.xml


Create Source Tar ball

The source tar ball contains sources needed to build the Windows and Linux
binaries.
The source packaging  should be done on Linux as it requires running the autoconf tool to generate the configure script required for a Linux build.
 
1. update srcName in the buildSrcTree.sh
2. create source directory
   ./buildSrcTree.sh target_directory
   This will create the uimacpp-X.Y.Z-src directory in the target_directory  
3. create src tarball
   From target_directory
   tar -zcvf uimacpp-X.Y.X-src.tgz uimacpp-X.Y.Z-src
4. Rat scan of source
   java -jar apache-rat-0.6.jar uimacpp-X.Y.Z-src >
uimacpp-X.Y.Z-src-linux-report.txt
