#/bin/sh #---------------------- #Configuration section #---------------------- GVSIG_VERSION=2.1.0 FIX_VERSION=SNAPSHOT RELEASE=testing PACKAGE_PREFIX=gvSIG-desktop LIB_PKG=depman.tgz PACKAGE_DIRECTORY=/tmp USER= PASS= #Distribution groups #------------------- #GROUP 0 (CORE) PROJECTS[0]="org.gvsig.raster.cache org.gvsig.raster org.gvsig.raster.gdal org.gvsig.raster.tilecache org.gvsig.raster.tools" REPO_NAME[0]="Raster" #Repository of packages URL_REPO[0]="https://devel.gvsig.org/download/projects/${REPO_NAME[0]}/pool/" URL_SVN[0]="https://devel.gvsig.org/svn/gvsig-raster/" PATH_TICKET[0]="/tmp/ticket-raster.txt" PLUGINS[0]="org.gvsig.raster/org.gvsig.raster.mainplugin org.gvsig.raster.tilecache/org.gvsig.raster.tilecache.app org.gvsig.raster.tools/org.gvsig.raster.tools.app.basic org.gvsig.raster.gdal/org.gvsig.raster.gdal.app" ARCH_DEP[0]="org.gvsig.raster/org.gvsig.raster.mainplugin org.gvsig.raster.gdal/org.gvsig.raster.gdal.app" #Architecture dependent plugins #GROUP 1 (PLUGINS) PROJECTS[1]="org.gvsig.raster.multifile org.gvsig.raster.reproject org.gvsig.raster.principalcomponents" REPO_NAME[1]="Raster" URL_REPO[1]="https://devel.gvsig.org/download/projects/${REPO_NAME[1]}/pool/" URL_SVN[1]="https://devel.gvsig.org/svn/gvsig-raster/" PATH_TICKET[1]="/tmp/ticket-raster.txt" PLUGINS[1]="org.gvsig.raster.multifile/org.gvsig.raster.multifile.app.multifileclient org.gvsig.raster.reproject/org.gvsig.raster.reproject.app.reprojectclient org.gvsig.raster.principalcomponents/org.gvsig.raster.principalcomponents.app.principalcomponentsclient" ARCH_DEP[1]="" #GROUP 2 (FORMATS) PROJECTS[2]="org.gvsig.raster.ermapper org.gvsig.raster.lizardtech org.gvsig.raster.netcdf" REPO_NAME[2]="Raster" URL_REPO[2]="https://devel.gvsig.org/download/projects/${REPO_NAME[2]}/pool/" URL_SVN[2]="https://devel.gvsig.org/svn/gvsig-raster/" PATH_TICKET[2]="/tmp/ticket-raster.txt" PLUGINS[2]="org.gvsig.raster.netcdf/org.gvsig.raster.netcdf.app.netcdfclient org.gvsig.raster.ermapper/org.gvsig.raster.ermapper.app org.gvsig.raster.lizardtech/org.gvsig.raster.lizardtech.app" ARCH_DEP[2]="org.gvsig.raster.ermapper/org.gvsig.raster.ermapper.app org.gvsig.raster.lizardtech/org.gvsig.raster.lizardtech.app" #GROUP 3 (REMOTE) PROJECTS[3]="org.gvsig.raster.wmts org.gvsig.raster.wms org.gvsig.raster.wcs org.gvsig.raster.postgis" REPO_NAME[3]="Raster" URL_REPO[3]="https://devel.gvsig.org/download/projects/${REPO_NAME[3]}/pool/" URL_SVN[3]="https://devel.gvsig.org/svn/gvsig-raster/" PATH_TICKET[3]="/tmp/ticket-raster.txt" PLUGINS[3]="org.gvsig.raster.wmts/org.gvsig.raster.wmts.app.wmtsclient org.gvsig.raster.wms/org.gvsig.raster.wms.app.wmsclient org.gvsig.raster.wcs/org.gvsig.raster.wcs.app.wcsclient org.gvsig.raster.postgis/org.gvsig.raster.postgis.app.postgisrasterclient" ARCH_DEP[3]="" #GROUP 4 (GEOREFERENCING) PROJECTS[4]="org.gvsig.raster.georeferencing" REPO_NAME[4]="Raster" URL_REPO[4]="https://devel.gvsig.org/download/projects/${REPO_NAME[4]}/pool/" URL_SVN[4]="https://devel.gvsig.org/svn/gvsig-georeferencing/" PATH_TICKET[4]="/tmp/ticket-raster.txt" PLUGINS[4]="org.gvsig.raster.georeferencing/org.gvsig.raster.georeferencing.app.georeferencingclient" ARCH_DEP[4]="" #GROUP 5 (OSM) PROJECTS[5]="org.gvsig.raster.osm" REPO_NAME[5]="Raster" URL_REPO[5]="https://devel.gvsig.org/download/projects/${REPO_NAME[5]}/pool/" URL_SVN[5]="https://devel.gvsig.org/svn/gvsig-osm/" PATH_TICKET[5]="/tmp/ticket-raster.txt" PLUGINS[5]="org.gvsig.raster.osm/org.gvsig.raster.osm.app.osmclient" ARCH_DEP[5]="" #GROUP 6 (GEOPROCESS) PROJECTS[6]="org.gvsig.geoprocess" REPO_NAME[6]="gvsig-geoprocess" URL_REPO[6]="https://devel.gvsig.org/download/projects/${REPO_NAME[6]}/pool/" URL_SVN[6]="https://devel.gvsig.org/svn/gvsig-geoprocess/" PATH_TICKET[6]="/tmp/ticket-geoprocess.txt" PLUGINS[6]="org.gvsig.geoprocess/org.gvsig.geoprocess.app/org.gvsig.geoprocess.app.algorithm org.gvsig.geoprocess/org.gvsig.geoprocess.app/org.gvsig.geoprocess.app.mainplugin org.gvsig.geoprocess/org.gvsig.geoprocess.app/org.gvsig.geoprocess.app.sextante org.gvsig.geoprocess/org.gvsig.geoprocess.app/org.gvsig.geoprocess.app.tool" ARCH_DEP[6]="" #Platforms supported (Add a new block for a new architecture) #------------------------------------------------------------- ARCH="i386" TYPE="dynamic" PLATFORM[0]="linux" COMPILER[0]="gcc4" DISTRIBUTION[0]="all" CLASSIFIER[0]=${PLATFORM[0]}"-"${DISTRIBUTION[0]}"-"${COMPILER[0]}"-"$ARCH"-"$TYPE PLATFORM[1]="win" COMPILER[1]="vs8" DISTRIBUTION[1]="nt" CLASSIFIER[1]=${PLATFORM[1]}"-"${DISTRIBUTION[1]}"-"${COMPILER[1]}"-"$ARCH"-"$TYPE #------------------------- #End configuration section #------------------------- ALL_PROJECTS=${PROJECTS[*]} ALL_PLUGINS=${PLUGINS[*]} ARCH_DEP_PLUGINS=${ARCH_DEP[*]} for k in `seq 1 ${#PLATFORM[@]}` do let "i=k-1"; INSTALL_PARAMS[$i]="install -Dnative-platform="${PLATFORM[$i]}" -Dnative-compiler="${COMPILER[$i]}" -Dnative-arch="$ARCH" -Dnative-distribution="${DISTRIBUTION[$i]}" -Dlibrary-type="$TYPE" -Dnative-classifier="${CLASSIFIER[$i]}" -Dnative_classifier="${CLASSIFIER[$i]}" -Dmaven.test.skip -Dmaven.javadoc.skip=true -Danimal.sniffer.skip=true -Dlicense.skip=true" done if [ $1 != "-changeversion" ] ; then PACKAGE_TO_BUILD=$2 if [ "$PACKAGE_TO_BUILD" != "" ]; then if [ -n $PACKAGE_TO_BUILD -a $PACKAGE_TO_BUILD -ge ${#PROJECTS[@]} ]; then t=${#PROJECTS[@]} let "t=t-1" echo "Number of package to build wrong. Maximum "$t exit fi fi if [ -z $PACKAGE_TO_BUILD ]; then #Si PACKAGE_TO_BUILD es null PROJECTS_TO_BUILD=$ALL_PROJECTS else PROJECTS_TO_BUILD=${PROJECTS[$PACKAGE_TO_BUILD]} fi if [ -z $PACKAGE_TO_BUILD ]; then PLUGINS_TO_BUILD=$ALL_PLUGINS else PLUGINS_TO_BUILD=${PLUGINS[$PACKAGE_TO_BUILD]} fi if [ -z $PACKAGE_TO_BUILD ]; then PLUGINS_ARCH_DEP_TO_BUILD=$ARCH_DEP_PLUGINS else PLUGINS_ARCH_DEP_TO_BUILD=${ARCH_DEP[$PACKAGE_TO_BUILD]} fi fi #------------------------------------------------- # HELP #------------------------------------------------- if [ "$1" = "--help" ] ; then echo "Usage: First parameter:" echo " -all (clean, update, buildnumber, install, tags, commit, ticket, upload)" echo " -clean" echo " -update" echo " -buildnumber" echo " -install" echo " -upload: Upload to the repository" echo " -tags: Create tags tagdate_date_hour" echo " -commit: Commit the build number" echo " -ticket: Build a file with the URL for the package index" echo " Second parameter:" echo " -number: Number of group to build the package or empty to build all" echo "" echo "Other utils:" echo " -changeversion :Change the parent pom version (org.gvsig.desktop) of all projects" echo " -eclipse: mvn eclipse:eclipse" echo " -basicinstall: mvn install without copy and decompress depman" echo " -installplugins: install plugins" echo "" echo "To build a new package" echo "----------------------------" echo " Advisable to use: cpulimit -e java -l 50 -b " echo " 1 - Check and update variables" echo " 2 - Ejecutar ./gvprjutils -clean to clean projects" echo " 3 - Ejecutar ./gvprjutils -update to update projects" echo " 4 - Ejecutar ./gvprjutils -buildnumber to update the build numbers" echo " 5 - Ejecutar ./gvprjutils -install to install in ~/.gvsig-devel.properties and package" echo " 6 - (Check the instalation and the packages that have been built)" echo " 7 - Ejecutar ./gvprjutils -upload to upload to URL_REPO (Run with the console maximized)" echo " 8 - Ejecutar ./gvprjutils -commit to upload the buildnumber" echo " 9 - Ejecutar ./gvprjutils -tags to create tags in URL_SVN" echo " 10 - Ejecutar ./gvprjutils -ticket to create the file with the URLs of the indexes" echo "" echo "Examples:" echo "---------" echo " gvprjutils -clean 5 : Cleans the group 5" echo " gvprjutils -all : Build all projects and upload to the server" echo " gvprjutils -changeversion 2.0.16-SNAPSHOT 2.0.17-SNAPSHOT : change the number version of the parent" exit fi #------------------------------------------------- # CLEAN #------------------------------------------------- clean() { echo "***********************************" echo "Clean" echo "***********************************" for i in $PROJECTS_TO_BUILD do cd $i echo "-----------------" echo "Cambiando a"....$i echo "Ejecutando clean" mvn clean cd .. done } #------------------------------------------------- # UPDATE #------------------------------------------------- update() { for i in $PROJECTS_TO_BUILD do cd $i echo "-----------------" echo "Cambiando a"....$i echo "Ejecutando svn update " svn update; cd .. done } #------------------------------------------------- # BUILDNUMBER # Increase the build number for all plugins #------------------------------------------------- increaseBuildNumber() { DIR_BASE=`pwd` for i in $PLUGINS_TO_BUILD do if [ -d $i ]; then cd $i if [ -f buildNumber.properties ]; then CURRENT_VER=`cat buildNumber.properties | grep "buildNumber=" | cut -d'=' -f2` NEXT_VER=$CURRENT_VER let "NEXT_VER=NEXT_VER+1"; echo "Changin buildNumber "$CURRENT_VER" by "$NEXT_VER" IN "$i (cat buildNumber.properties | sed -e "s/buildNumber=${CURRENT_VER}/buildNumber=${NEXT_VER}/g") > tmp rm buildNumber.properties mv tmp buildNumber.properties fi fi cd $DIR_BASE done } #------------------------------------------------- # Copy to $PACKAGE_DIRECTORY #------------------------------------------------- copyToPackageFolder() { DIR_BASE=`pwd` for i in $PLUGINS_TO_BUILD do cd $i/target echo "-----------------" echo "Cambiando a"....$i/target echo "Copiando "$i" a "$PACKAGE_DIRECTORY COUNT_SLASHES=`grep -o "\/" <<< "$i" | wc -l` #Count the number of slashes in the path if [ $COUNT_SLASHES -eq 1 ]; then pad=`echo $i | cut -d/ -f2` fi if [ $COUNT_SLASHES -eq 2 ]; then pad=`echo $i | cut -d/ -f3` fi mkdir $PACKAGE_DIRECTORY/$pad rename 's/\.zip$//' *.gvspkg.zip #Elimina los .zip si los gvspkg están como .zip cp $PACKAGE_PREFIX* $PACKAGE_DIRECTORY/$pad cd $DIR_BASE done } #------------------------------------------------- # Install plugins #------------------------------------------------- installPlugins() { echo "***********************************" echo "Install" echo "***********************************" DIR_BASE=`pwd` for i in $PLUGINS do cd $i echo "-----------------" echo "Cambiando a"....$i echo "Ejecutando mvn "${INSTALL_PARAMS[0]} mvn ${INSTALL_PARAMS[0]}; cd $DIR_BASE done } #------------------------------------------------- # Install libraries and package plugins #------------------------------------------------- installAndPackage() { echo "***********************************" echo "Install" echo "***********************************" DIR_BASE=`pwd` #------Install and Package--------- for i in $PROJECTS_TO_BUILD do cd $i echo "-----------------" echo "Cambiando a"....$i echo "Ejecutando mvn "${INSTALL_PARAMS[0]} mvn ${INSTALL_PARAMS[0]}; cd .. done for i in $PLUGINS_ARCH_DEP_TO_BUILD #Plugins architecture dependent do dir=`cut -d/ -f1 <<<$i` cd $dir echo "-----------------" echo "Cambiando a"....$dir for k in `seq 2 ${#INSTALL_PARAMS[@]}` do let "j=k-1"; echo "Ejecutando mvn "$j ${INSTALL_PARAMS[$j]} mvn ${INSTALL_PARAMS[$j]}; done cd $DIR_BASE done } #------------------------------------------------- # Unpack deman #------------------------------------------------- unpackDepman( ) { if [ "$PLUGINS_ARCH_DEP_TO_BUILD" != "" ]; then #Si no hay plugins dependientes de la arquitectura no descomprimimos el depman if [ -f $HOME"/"$LIB_PKG ]; then CURRENT_DIR=`pwd` cd $HOME tar -xzvf $LIB_PKG cd $CURRENT_DIR else echo "Error: No existe "$HOME"/"$LIB_PKG"!!!!" exit fi fi } #---------------------------------------------------------- #Gets the number of the version reading it from the pom.xml #---------------------------------------------------------- loadPluginVersion( ) { CURRENT_DIR=`pwd` VERSION_COUNTER=0 for k in `seq 1 ${#PLUGINS[@]}` do let "i=k-1"; for j in ${PLUGINS[$i]} do if [ -d $j ]; then cd $j if [ -f pom.xml ]; then exec}" != "$line" ; then #La linea contiene el tag NEW_VN=`sed -e "s///g" <<< $line` NEW_VN=`sed -e "s/<\/version>//g" <<< $NEW_VN` PLUGIN_VERSIONS[$VERSION_COUNTER]=${PLUGIN_VERSIONS[$VERSION_COUNTER]}" "$NEW_VN let "VERSION_COUNTER=VERSION_COUNTER+1" break fi done fi cd $CURRENT_DIR fi done done } #------------------------------------------------- #Loads the array of build numbers #------------------------------------------------- loadBuildNumber() { CURRENT_DIR=`pwd` BN_COUNTER=0 for k in `seq 1 ${#PLUGINS[@]}` do let "i=k-1"; for j in ${PLUGINS[$i]} do if [ -d $j ]; then cd $j if [ -f buildNumber.properties ]; then NEW_BN=`cat buildNumber.properties | grep "buildNumber=" | cut -d'=' -f2` BN[$BN_COUNTER]=${BN[$BN_COUNTER]}" "$NEW_BN let "BN_COUNTER=BN_COUNTER+1" fi cd $CURRENT_DIR fi done done } #------------------------------------------------- #COMMIT CHANGES (BUILD NUMBERS) #------------------------------------------------- commit() { CURRENT_DIR=`pwd` for i in $PROJECTS_TO_BUILD do cd $i echo "-----------------" echo "Cambiando a"....$i echo "Ejecutando svn commit " svn commit * -m "New build number"; cd $CURRENT_DIR done } #------------------------------------------------- # REVERT CHANGES (SOLO TEST) #------------------------------------------------- if [ "$1" = "-revert" ] ; then for i in $PROJECTS_TO_BUILD do cd $i echo "-----------------" echo "Cambiando a"....$i echo "Ejecutando svn update " svn revert --recursive . cd .. done fi #------------------------------------------------- # TICKET #------------------------------------------------- ticketGeneration() { for k in `seq 1 ${#PATH_TICKET[@]}` do let "i=k-1"; rm ${PATH_TICKET[$i]} 2> /dev/null done for k in `seq 1 ${#URL_REPO[@]}` do let "i=k-1"; POS_INSIDE_PLUGINS=1 #Position of the plugin inside PLUGINS for j in ${PLUGINS[$i]} do #Si se ha seleccionado algún grupo en concreto solo se añadirá este al fichero (-n está definido) if [ "$PACKAGE_TO_BUILD" != "" ]; then if [ -n $PACKAGE_TO_BUILD -a $i -ne $PACKAGE_TO_BUILD ] ; then break fi fi COUNT_SLASHES=`grep -o "\/" <<< "$j" | wc -l` #Count the number of slashes in the path if [ $COUNT_SLASHES -eq 1 ]; then package=`echo $j | cut -d/ -f2` fi if [ $COUNT_SLASHES -eq 2 ]; then package=`echo $j | cut -d/ -f3` fi PLUGIN_VER=`cut -d' ' -f$POS_INSIDE_PLUGINS <<< ${PLUGIN_VERSIONS[$i]}` PLUGIN_BN=`cut -d' ' -f$POS_INSIDE_PLUGINS <<< ${BN[$i]}` if test "${ARCH_DEP_PLUGINS#*$j}" != "$ARCH_DEP_PLUGINS" then echo "${URL_REPO[$i]}$package/gvSIG-desktop-$GVSIG_VERSION-$package-$PLUGIN_VER-$PLUGIN_BN-$RELEASE-lin-x86-j1_5.gvspki" >> ${PATH_TICKET[$i]} echo "" >> ${PATH_TICKET[$i]} echo "${URL_REPO[$i]}$package/gvSIG-desktop-$GVSIG_VERSION-$package-$PLUGIN_VER-$PLUGIN_BN-$RELEASE-win-x86-j1_5.gvspki" >> ${PATH_TICKET[$i]} else echo "${URL_REPO[$i]}$package/gvSIG-desktop-$GVSIG_VERSION-$package-$PLUGIN_VER-$PLUGIN_BN-$RELEASE-all-all-j1_5.gvspki" >> ${PATH_TICKET[$i]} fi echo "" >> ${PATH_TICKET[$i]} let "POS_INSIDE_PLUGINS=POS_INSIDE_PLUGINS+1"; done done } #------------------------------------------------- # TAGS #------------------------------------------------- tagsGeneration() { echo "***********************************" echo "Creating tags" echo "***********************************" tag=`date +%d%m%Y_%H_%M` for k in `seq 1 ${#URL_SVN[@]}` do let "i=k-1"; for j in ${PROJECTS[$i]} do #Si se ha seleccionado algún grupo en concreto solo se hará el tag de estos proyectos if [ "$PACKAGE_TO_BUILD" != "" ]; then if [ -n $PACKAGE_TO_BUILD -a $i -ne $PACKAGE_TO_BUILD ] ; then break fi fi #echo "svn copy ${URL_SVN[$i]}$j/trunk ${URL_SVN[$i]}$j/tags/tagdate_$tag -m \"Tag build $tag\"" svn copy ${URL_SVN[$i]}$j/trunk ${URL_SVN[$i]}$j/tags/tagdate_$tag -m "Tag build $tag" done done } #------------------------------------------------- # CHANGE THE PROJECT VERSION # Change the version of the pom parent in a project #------------------------------------------------- changeProjectVersion() { CURRENT_DIR=`pwd` if [ -z $1 ] ; then echo "Current version number not defined" exit fi if [ -z $2 ] ; then echo "Next version number not defined" exit fi for i in `ls` do if [[ "$i" == org.gvsig.* ]] ; then echo $i cd $i (cat pom.xml | sed -e "s/$1<\/version>/$2<\/version>/") > tmp rm pom.xml mv tmp pom.xml cd $CURRENT_DIR fi done } #------------------------------------------------- # ECLIPSE .project #------------------------------------------------- eclipse() { echo "***********************************" echo "Eclipse:eclipse" echo "***********************************" DIR_BASE=`pwd` for i in $PROJECTS_TO_BUILD do cd $i echo "-----------------" echo "Cambiando a"....$i echo "Ejecutando mvn eclipse:eclipse" mvn eclipse:eclipse; cd .. done } #------------------------------------------------- # COMMANDS #------------------------------------------------- if [ "$1" = "-all" ] ; then clean update increaseBuildnumber unpackDepman installAndPackage copyToPackageFolder commit tagsGeneration loadBuildNumber loadPluginVersion ticketGeneration fi if [ "$1" = "-basicinstall" ] ; then installAndPackage fi if [ "$1" = "-installplugins" ] ; then installPlugins fi if [ "$1" = "-install" ] ; then unpackDepman installAndPackage copyToPackageFolder fi if [ "$1" = "-clean" ] ; then clean fi if [ "$1" = "-update" ] ; then update fi if [ "$1" = "-buildnumber" ] ; then increaseBuildNumber fi if [ "$1" = "-commit" ] ; then commit fi if [ "$1" = "-ticket" ] ; then loadBuildNumber loadPluginVersion ticketGeneration fi if [ "$1" = "-tags" ] ; then tagsGeneration fi if [ "$1" = "-changeversion" ] ; then changeProjectVersion $2 $3 fi if [ "$1" = "-eclipse" ] ; then eclipse fi if [ "$1" != "-upload" -a "$1" != "-all" ] ; then exit fi #------------------------------------------------- # UPLOAD #------------------------------------------------- echo "***********************************" echo "Uploading" echo "***********************************" CURRENT_DIRECTORY=`pwd`; echo "Cambiando a..."$PACKAGE_DIRECTORY cd $PACKAGE_DIRECTORY for k in `seq 1 ${#URL_REPO[@]}` do let "i=k-1"; for j in ${PLUGINS[$i]} do #Si se ha seleccionado algún grupo en concreto solo se subiran los paquetes de este grupo if [ "$PACKAGE_TO_BUILD" != "" ]; then if [ -n $PACKAGE_TO_BUILD -a $i -ne $PACKAGE_TO_BUILD ] ; then break fi fi PKG_DIR=`echo $j | cut -d/ -f3` if [ "$PKG_DIR" == "" ] ; then PKG_DIR=`echo $j | cut -d/ -f2` fi expect < send "cd $PKG_DIR\r" expect $PKG_DIR/> send "lcd $PKG_DIR\r" expect $PKG_DIR/> send "mput *.gvspki\r" expect "Nombre de usuario:" send $USER\r expect "Contraseña:" send $PASS\r expect $PKG_DIR/> send "mput *.gvspkg\r" expect $PKG_DIR/> send quit\r expect "cerrada." EOD done done cd $CURRENT_DIRECTORY