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-build
	cd uimacpp-2.4.0-build

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. 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
   
   NOTE: if you need to regenerate the configure script, run autogen.sh and
   check into svn the generated output files.

5. 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`

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

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

8. 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

9. 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/

10. 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 is created by zipping up the files from svn extract of
uimacpp.
The source tar ball contains all the files needed to build the Windows and/or
Linux binaries. 

1. checkout source from current release branch
        svn co https://svn.apache.org/repos/asf/uima/uimacpp/branches/uimacpp-2.4.0
2. create the tar ball
   On Windows zip up uimacpp-2.4.0 and create uimacpp-2.4.0-src.zip
   On Linux tar -zcvf uimacpp-2.4.0-src.tgz uimacpp-2.4.0
3. rat scan the source directory
   java -jar apache-rat-0.6.jar uimacpp-2.4.0 > uimacpp-2.4.0-src-report.txt
  
