#! /bin/bash # # $Id: //poco/1.4/release/script/mkrelease#8 $ # # mkrelease # # Create a release for distribution. # # usage: mkrelease [-i] [-f specfile] [...] # if [ "$1" = "" ] ; then echo "usage: $0 [-i] [...]" echo " -i - include internal tools" echo " -f specfile - read component list from specfile" echo " -o dir - specify output directory" echo " -c location - specify line-ending conversion utility (enables conversion)" echo " -l - include licensing" exit 1 fi comps="Foundation XML JSON Util Net" internal=0 specfile="" version="" output="" lineEndConv="" licensingDep="" while [ "$1" != "" ] ; do if [ "$1" = "-i" ] ; then shift internal=1 elif [ "$1" = "-f" ] ; then shift specfile=$1 shift elif [ "$1" = "-o" ] ; then shift output=$1 shift elif [ "$1" = "-c" ] ; then shift lineEndConv=$1 shift elif [ "$1" = "-l" ] ; then shift licensingDep="Licensing-libexec" comps="$comps Licensing" elif [ "$version" = "" ] ; then version=$1 shift else comps="$comps $1" shift fi done if [ "$specfile" != "" ] ; then while read c do comps="$comps $c" done <$specfile fi if [ "$version" = "" ] ; then echo "Error: no version specified." exit 1 fi if [ "$output" != "" ] ; then target=$output else target=$POCO_BASE/releases/poco-${version} fi mkdir -p ${target} mkdir -p ${target}/doc mkdir -p ${target}/contrib mkdir -p ${target}/patches mkdir -p ${target}/cmake # # readme files, etc. # echo ${version} "(`date +%Y-%m-%d`)" >${target}/VERSION cp ${POCO_BASE}/LICENSE ${target} cp ${POCO_BASE}/NEWS ${target} cp ${POCO_BASE}/README ${target} cp ${POCO_BASE}/CHANGELOG ${target} cp ${POCO_BASE}/CONTRIBUTORS ${target} cp ${POCO_BASE}/DLLVersion.rc ${target} cp ${POCO_BASE}/doc/Acknowledgements.html ${target}/doc cp ${POCO_BASE}/doc/*.page ${target}/doc cp -R ${POCO_BASE}/contrib/* ${target}/contrib cp -R ${POCO_BASE}/patches/* ${target}/patches cp -R ${POCO_BASE}/cmake/* ${target}/cmake cp ${POCO_BASE}/CMakeLists.txt ${target} # # build system # mkdir -p ${target}/build/config mkdir -p ${target}/build/rules mkdir -p ${target}/build/script mkdir -p ${target}/build/vms mkdir -p ${target}/build/vxconfig cp ${POCO_BASE}/build/config/* ${target}/build/config cp ${POCO_BASE}/build/rules/* ${target}/build/rules cp ${POCO_BASE}/build/vxconfig/* ${target}/build/vxconfig cp ${POCO_BASE}/build/script/makedepend.* ${target}/build/script cp ${POCO_BASE}/build/script/makeldpath ${target}/build/script cp ${POCO_BASE}/build/script/shlibln ${target}/build/script cp ${POCO_BASE}/build/script/projname ${target}/build/script cp ${POCO_BASE}/build/script/vxprogen ${target}/build/script cp ${POCO_BASE}/buildwin.cmd ${target} cp ${POCO_BASE}/configure ${target} cp ${POCO_BASE}/libversion ${target} if [ $internal = 1 ] ; then cp ${POCO_BASE}/build/script/testall ${target}/build/script cp ${POCO_BASE}/build/script/waitfortest ${target}/build/script fi # # CppUnit # mkdir -p ${target}/CppUnit mkdir -p ${target}/CppUnit/doc mkdir -p ${target}/CppUnit/include/CppUnit mkdir -p ${target}/CppUnit/src mkdir -p ${target}/CppUnit/WinTestRunner mkdir -p ${target}/CppUnit/WinTestRunner/include/WinTestRunner mkdir -p ${target}/CppUnit/WinTestRunner/src mkdir -p ${target}/CppUnit/WinTestRunner/res cp ${POCO_BASE}/CppUnit/doc/* ${target}/CppUnit/doc >/dev/null 2>&1 cp ${POCO_BASE}/CppUnit/include/CppUnit/* ${target}/CppUnit/include/CppUnit >/dev/null 2>&1 cp ${POCO_BASE}/CppUnit/src/* ${target}/CppUnit/src >/dev/null 2>&1 cp ${POCO_BASE}/CppUnit/*.sln ${target}/CppUnit >/dev/null 2>&1 cp ${POCO_BASE}/CppUnit/*.vcproj ${target}/CppUnit >/dev/null 2>&1 cp ${POCO_BASE}/CppUnit/*.vcxproj ${target}/CppUnit >/dev/null 2>&1 cp ${POCO_BASE}/CppUnit/*.vcxproj.filters ${target}/CppUnit >/dev/null 2>&1 cp ${POCO_BASE}/CppUnit/*.vcxproj.user ${target}/CppUnit >/dev/null 2>&1 cp ${POCO_BASE}/CppUnit/Makefile ${target}/CppUnit >/dev/null 2>&1 cp ${POCO_BASE}/CppUnit/*.vmsbuild ${target}/CppUnit >/dev/null 2>&1 cp ${POCO_BASE}/CppUnit/*.vxbuild ${target}/CppUnit >/dev/null 2>&1 cp ${POCO_BASE}/CppUnit/*.progen ${target}/CppUnit >/dev/null 2>&1 cp ${POCO_BASE}/CppUnit/WinTestRunner/include/WinTestRunner/* ${target}/CppUnit/WinTestRunner/include/WinTestRunner >/dev/null 2>&1 cp ${POCO_BASE}/CppUnit/WinTestRunner/src/* ${target}/CppUnit/WinTestRunner/src >/dev/null 2>&1 cp ${POCO_BASE}/CppUnit/WinTestRunner/res/WinTestRunner.rc ${target}/CppUnit/WinTestRunner/res >/dev/null 2>&1 cp ${POCO_BASE}/CppUnit/WinTestRunner/res/Resource.h ${target}/CppUnit/WinTestRunner/res >/dev/null 2>&1 cp ${POCO_BASE}/CppUnit/WinTestRunner/*.vcproj ${target}/CppUnit/WinTestRunner >/dev/null 2>&1 cp ${POCO_BASE}/CppUnit/WinTestRunner/*.vcxproj ${target}/CppUnit/WinTestRunner >/dev/null 2>&1 cp ${POCO_BASE}/CppUnit/WinTestRunner/*.vcxproj.filters ${target}/CppUnit/WinTestRunner >/dev/null 2>&1 cp ${POCO_BASE}/CppUnit/WinTestRunner/*.vcxproj.user ${target}/CppUnit/WinTestRunner >/dev/null 2>&1 cp ${POCO_BASE}/CppUnit/WinTestRunner/*.progen ${target}/CppUnit/WinTestRunner >/dev/null 2>&1 # # Copy components # for comp in $comps ; do cpproj ${POCO_BASE}/$comp ${target}/$comp done # # Create components file # echo "CppUnit" >${target}/components echo "CppUnit/WinTestRunner" >>${target}/components for comp in $comps ; do echo $comp >>${target}/components done # # Make all files writeable # chmod -R +w ${target} # # Generate Makefile # cat >${target}/Makefile <<'ENDOFSCRIPT' # # Makefile # # The global Makefile for POCO [generated by mkrelease] # sinclude config.make sinclude config.build ifndef POCO_BASE $(warning WARNING: POCO_BASE is not defined. Assuming current directory.) export POCO_BASE=$(shell pwd) endif ifndef POCO_PREFIX export POCO_PREFIX=/usr/local endif ifndef POCO_BUILD export POCO_BUILD=$(POCO_BASE) endif LIBPREFIX ?= lib .PHONY: poco all libexecs cppunit tests samples cleans clean distclean install # TESTS and SAMPLES are set in config.make poco: libexecs $(if $(TESTS),tests) $(if $(SAMPLES),samples) all: libexecs tests samples INSTALLDIR = $(DESTDIR)$(POCO_PREFIX) ENDOFSCRIPT echo "COMPONENTS = $comps" >>${target}/Makefile cat >>${target}/Makefile <<'ENDOFSCRIPT' cppunit: $(MAKE) -C $(POCO_BASE)/CppUnit CppUnit-clean: \$(MAKE) -C \$(POCO_BASE)/CppUnit clean install: libexecs mkdir -p $(INSTALLDIR)/include/Poco mkdir -p $(INSTALLDIR)/lib mkdir -p $(INSTALLDIR)/bin for comp in $(filter-out $(foreach f,$(OMIT),$f%),$(COMPONENTS)) ; do \ if [ -d "$(POCO_BASE)/$$comp/include" ] ; then \ cp -Rf $(POCO_BASE)/$$comp/include/* $(INSTALLDIR)/include/ ; \ fi ; \ if [ -d "$(POCO_BUILD)/$$comp/bin" ] ; then \ find $(POCO_BUILD)/$$comp/bin -perm -700 -type f -exec cp -f {} $(INSTALLDIR)/bin \; ; \ fi ; \ done find $(POCO_BUILD)/lib -name "$(LIBPREFIX)Poco*" -type f -exec cp -f {} $(INSTALLDIR)/lib \; find $(POCO_BUILD)/lib -name "$(LIBPREFIX)Poco*" -type l -exec cp -Rf {} $(INSTALLDIR)/lib \; ENDOFSCRIPT libexecs="" tests="" samples="" cleans="" for comp in $comps ; do libexecs="$libexecs ${comp}-libexec" cleans="$cleans ${comp}-clean" if [ -d "${POCO_BASE}/${comp}/testsuite" ] ; then tests="$tests ${comp}-tests" fi if [ -d "${POCO_BASE}/${comp}/samples" ] ; then samples="$samples ${comp}-samples" fi done echo "libexecs = $libexecs" >>${target}/Makefile echo "tests = $tests" >> ${target}/Makefile echo "samples = $samples" >> ${target}/Makefile echo "cleans = $cleans" >> ${target}/Makefile echo "" >>${target}/Makefile echo '.PHONY: $(libexecs)' >>${target}/Makefile echo '.PHONY: $(tests)' >>${target}/Makefile echo '.PHONY: $(samples)' >>${target}/Makefile echo '.PHONY: $(cleans)' >>${target}/Makefile echo "" >>${target}/Makefile echo 'libexecs: $(filter-out $(foreach f,$(OMIT),$f%),$(libexecs))' >>${target}/Makefile echo 'tests: $(filter-out $(foreach f,$(OMIT),$f%),$(tests))' >>${target}/Makefile echo 'samples: $(filter-out $(foreach f,$(OMIT),$f%),$(samples))' >>${target}/Makefile echo 'cleans: $(filter-out $(foreach f,$(OMIT),$f%),$(cleans))' >>${target}/Makefile for comp in $comps ; do if [ "`grep -c POCO_LICENSING "${POCO_BASE}/${comp}/Makefile"`" != 0 ] ; then dependencies=$licensingDep else dependencies="" fi if [ -f "${POCO_BASE}/${comp}/dependencies" ] ; then for dep in `cat "${POCO_BASE}/${comp}/dependencies"` ; do # get rid of surrounding whitespace (trailing \r on Cygwin) read dep <<< "$dep" dependencies="$dependencies ${dep}-libexec" done fi cat >>${target}/Makefile <>${target}/Makefile <>${target}/Makefile <>${target}/Makefile <>${target}/Makefile <>${target}/Makefile <>${target}/Makefile <${target}/build_vs90.cmd <<'ENDOFSCRIPT' @echo off if defined VS90COMNTOOLS ( call "%VS90COMNTOOLS%\vsvars32.bat") buildwin 90 build shared both Win32 samples ENDOFSCRIPT # # Create Visual Studio 10 build script # cat >${target}/build_vs100.cmd <<'ENDOFSCRIPT' @echo off if defined VS100COMNTOOLS ( call "%VS100COMNTOOLS%\vsvars32.bat") buildwin 100 build shared both Win32 samples ENDOFSCRIPT # # Create Visual Studio 11 build script # cat >${target}/build_vs110.cmd <<'ENDOFSCRIPT' @echo off if defined VS110COMNTOOLS ( call "%VS110COMNTOOLS%\vsvars32.bat") buildwin 110 build shared both Win32 samples ENDOFSCRIPT # # Create Visual Studio 12 build script # cat >${target}/build_vs120.cmd <<'ENDOFSCRIPT' @echo off if defined VS120COMNTOOLS ( call "%VS120COMNTOOLS%\vsvars32.bat") buildwin 120 build shared both Win32 samples ENDOFSCRIPT # # Create Visual Studio 9 WinCE build script # cat >${target}/build_CE_vs90.cmd <<'ENDOFSCRIPT' @echo off buildwin 90 build static_mt both WinCE samples ENDOFSCRIPT # # Create Visual C++ Express 2008 build script # cat >${target}/build_vcexpress2008.cmd <<'ENDOFSCRIPT' @echo off buildwin 90 build shared both Win32 samples vcexpress ENDOFSCRIPT # # Create Visual C++ Express 2010 build script # cat >${target}/build_vcexpress2010.cmd <<'ENDOFSCRIPT' @echo off buildwin 100 build shared both Win32 samples vcexpress ENDOFSCRIPT # # Fix line endings # if [ "$lineEndConv" != "" ] ; then $lineEndConv ${target}/build_vs71.cmd $lineEndConv ${target}/build_vs80.cmd $lineEndConv ${target}/build_vs90.cmd $lineEndConv ${target}/build_vs100.cmd $lineEndConv ${target}/build_CE_vs90.cmd $lineEndConv ${target}/build_vcexpress2008.cmd $lineEndConv ${target}/build_vcexpress2010.cmd $lineEndConv ${target}/Makefile $lineEndConv ${target}/components fi # # Create .tar and .zip archives # if [ "$output" = "" ] ; then cd releases find ${target}/ -print | sed "s:^${target}/*::" >${target}/MANIFEST tar cf poco-${version}.tar poco-${version} gzip poco-${version}.tar tar cf poco-${version}.tar poco-${version} bzip2 poco-${version}.tar if [ -x /usr/bin/zip ] ; then /usr/bin/zip -r -q poco-${version}.zip poco-${version} fi fi exit 0