view buildRelease.sh @ 457:1fbc35327a72

Updated the universal shell build script. git-svn-id: svn://svn.code.sf.net/p/universalindent/code/trunk@692 59b1889a-e5ac-428c-b0c7-476e01d41282
author thomas_-_s <thomas_-_s@59b1889a-e5ac-428c-b0c7-476e01d41282>
date Sun, 25 May 2008 17:07:10 +0000
parents 041e28575b3d
children 15813e622299
line wrap: on
line source

#!/bin/sh

# Command line syntax:
# buildRelease [targetsystem qtdir]
# Example:
# buildRelease win32 /c/qt.4.3.2
# Default values are targetsystem=src, qtdir=""

# 1. param is target system
if [ -n "$1" ]; then
    targetSystem=$1
else
    targetSystem="src"
fi

# 2. param, which is QTDIR
if [ -n "$2" ]; then
    QTDIR=$2
fi

# Only allow the build targets win32, macx and linux.
if [ -n "$1" ] && [ ! "$1" = "win32" ] && [ ! "$1" = "macx" ]  && [ ! "$1" = "linux" ] && [ ! "$1" = "src" ]; then
    echo "ERROR: Build target \"$1\" not supported! Supported are win32, macx, linux and src."
    exit 1
fi

if [ "$targetSystem" = "win32" ]; then
    ext=".exe"
else
    ext=""
fi

if [ "$targetSystem" = "win32" ] || [ "$targetSystem" = "macx" ]; then
    targetName=UniversalIndentGUI # The targetname must be identical with the targetname set in the qmake project file.
    QMAKESPEC=${targetSystem}-g++
else
    targetName=universalindentgui # The targetname must be identical with the targetname set in the qmake project file.
fi


# Configuration
# -------------
version=0.8.2
doSVNUpdate=false
languages="de zh_TW ja_JP ru uk"

if [ "$targetSystem" = "src" ]; then
    targetDir=${targetName}-$version
else
    targetDir=${targetName}_$targetSystem
fi

# Set QTDIR and QMAKESPEC for each platform
if [ "$targetSystem" = "win32" ] && [ ! -n "$2" ]; then
    QTDIR=/c/Programmierung/qt.4.3.2_gcc
else
    if [ "$targetSystem" = "macx" ] && [ ! -n "$2" ]; then
        QTDIR=/Users/thomas/Documents/Informatik/qt-static-release
    fi
fi

echo "Making some environment settings"
echo "--------------------------------"
export QTDIR
PATH=$QTDIR/bin:$PATH
export PATH
export QMAKESPEC
echo "Done"
echo ""


echo "Delete old target dir and create new one"
echo "----------------------------------------"
if [ -d "$targetDir" ]; then
    rm -r $targetDir &> /dev/null
fi
if [ $? -gt 0 ]; then
    echo "ERROR: Deleting dir $targetDir failed!"
    exit 1
fi

# wait until the old target dir has been really deleted
while [ -d "$targetDir" ]
do
    sleep 1
done

mkdir $targetDir &> /dev/null
if [ $? -gt 0 ]; then
    echo "ERROR: Creating dir $targetDir failed!"
    exit 1
fi

# wait until the new target dir has been really created
while [ ! -d "$targetDir" ]
do
    sleep 1
done

mkdir $targetDir/indenters &> /dev/null
if [ $? -gt 0 ]; then
    echo "ERROR: Creating dir indenters failed!"
    exit 1
fi
mkdir $targetDir/doc &> /dev/null
if [ $? -gt 0 ]; then
    echo "ERROR: Creating dir doc failed!"
    exit 1
fi
mkdir $targetDir/translations &> /dev/null
if [ $? -gt 0 ]; then
    echo "ERROR: Creating dir translations failed!"
    exit 1
fi
mkdir $targetDir/config &> /dev/null
if [ $? -gt 0 ]; then
    echo "ERROR: Creating dir config failed!"
    exit 1
fi
# In case of src as target system, create additional dirs.
if [ "$targetSystem" = "src" ]; then
    mkdir $targetDir/resources &> /dev/null
    if [ $? -gt 0 ]; then
        echo "ERROR: Creating dir resources failed!"
        exit 1
    fi
    mkdir $targetDir/src &> /dev/null
    if [ $? -gt 0 ]; then
        echo "ERROR: Creating dir src failed!"
        exit 1
    fi
fi
echo "Done"
echo ""


# Maybe do a SubVersion update.
if [ "$doSVNUpdate" = "true" ]; then
    echo "Calling svn update"
    echo "------------------"
    svn update
    if [ $? -gt 0 ]; then
        echo "ERROR: Calling svn update failed!"
        exit 1
    fi
    echo "Done"
    echo ""
fi

echo "Updating the translation files"
echo "------------------------------"
lupdate src -ts ./translations/universalindent.ts &> /dev/null
if [ $? -gt 0 ]; then
    echo "ERROR: Could not update file \"universalindent.ts\"!"
    exit 1
fi
for i in $languages
do
    lupdate src -ts ./translations/universalindent_$i.ts &> /dev/null
    if [ $? -gt 0 ]; then
        echo "ERROR: Could not update file \"universalindent_$i.ts\"!"
        exit 1
    fi
done
echo "Done"
echo ""

###################### source release begin ########################
if [ "$targetSystem" = "src" ]; then

echo "Copying the translation files to the target translation dir"
echo "-----------------------------------------------------------"
cp ./translations/universalindent.ts ./$targetDir/translations/ &> /dev/null
if [ $? -gt 0 ]; then
    echo "ERROR: Could not copy file \"universalindent.ts\"!"
    exit 1
fi
for i in $languages
do
    cp ./translations/universalindent_$i.ts ./$targetDir/translations/ &> /dev/null
    if [ $? -gt 0 ]; then
        echo "ERROR: Could not copy file \"universalindent_$i.ts\"!"
        exit 1
    fi
done
echo "Done"
echo ""


echo "Copying the resources and src files to the target dir"
echo "-----------------------------------------------------"
cp ./resources/* ./$targetDir/resources/ &> /dev/null
if [ $? -gt 0 ]; then
    echo "ERROR: Could not copy dir \"resources\"!"
    exit 1
fi
cp ./src/* ./$targetDir/src/ &> /dev/null
if [ $? -gt 0 ]; then
    echo "ERROR: Could not copy dir \"src\"!"
    exit 1
fi
echo "Done"
echo ""


echo "Copying the indenter project files to the target dir"
echo "----------------------------------------------------"
projectfiles="UniversalIndentGUI.pro UniversalIndentGUI.sln VS8QtRules.rules UniversalIndentGUI.xcodeproj"
for i in $projectfiles
do
    cp -r ./$i ./$targetDir/ &> /dev/null
    if [ $? -gt 0 ]; then
        echo "ERROR: Could not copy file \"$i\"!"
        exit 1
    fi
done
echo "Done"
echo ""


echo "Copying man page to target dir"
echo "------------------------------"
cp ./doc/universalindentgui.man ./$targetDir/doc/ &> /dev/null
if [ $? -gt 0 ]; then
    echo "ERROR: Could not copy file \"/doc/universalindentgui.man\"!"
    exit 1
fi
echo "Done"
echo ""

###################### source release end ########################
else
###################### binary release begin ########################

echo "Cleaning up release/debug dirs"
echo "------------------------------"
if [ -d "release" ]; then
    rm -r release &> /dev/null
fi
if [ $? -gt 0 ]; then
    echo "ERROR: Could not delete release dir!"
    exit 1
fi
if [ -d "debug" ]; then
    rm -r debug &> /dev/null
fi
if [ $? -gt 0 ]; then
    echo "ERROR: Could not delete debug dir!"
    exit 1
fi
echo "Done"
echo ""


echo "Calling qmake"
echo "-------------"
qmake
if [ $? -gt 0 ]; then
    echo "ERROR: Calling qmake failed!"
    exit 1
fi
echo "Done"
echo ""


echo "Calling make release"
echo "--------------------"
make release --silent
if [ $? -gt 0 ]; then
    echo "ERROR: Calling make release failed!"
    exit 1
fi
echo "Done"
echo ""


echo "Copying ${targetName}$ext to target dir"
echo "--------------------------------------------"
cp ./release/$targetName$ext ./$targetDir/ &> /dev/null
if [ $? -gt 0 ]; then
    echo "ERROR: Could not copy file \"$targetName$ext\"!"
    exit 1
fi
echo "Done"
echo ""


echo "Copying the indenter executable files to the target indenters dir"
echo "-----------------------------------------------------------------"
indenters="astyle$ext astyle.html bcpp$ext bcpp.txt csstidy$ext gc.exe gc.txt htb$ext htb.html indent$ext indent.html tidy$ext tidy.html uncrustify$ext uncrustify.txt"
if [ "$ext" = ".exe" ]; then
    indenters="$indenters libiconv-2.dll libintl-2.dll"
fi
for i in $indenters
do
    cp ./indenters/$i ./$targetDir/indenters/ &> /dev/null
    if [ $? -gt 0 ]; then
        echo "ERROR: Could not copy file \"$i\"!"
        exit 1
    fi
done
echo "Done"
echo ""


echo "Generating the translation binaries"
echo "-----------------------------------"
for i in $languages
do
    lrelease ./translations/universalindent_$i.ts -qm ./translations/universalindent_$i.qm
    if [ $? -gt 0 ]; then
        echo "ERROR: Could not create translation file \"universalindent_$i.qm\"!"
        exit 1
    fi
done
echo "Done"
echo ""


echo "Copying the translation binaries to the target translation dir"
echo "--------------------------------------------------------------"
cp $QTDIR/translations/qt_de.qm ./$targetDir/translations/ &> /dev/null
cp $QTDIR/translations/qt_ja_jp.qm ./$targetDir/translations/qt_ja_JP.qm &> /dev/null
cp $QTDIR/translations/qt_ru.qm ./$targetDir/translations/ &> /dev/null
cp $QTDIR/translations/qt_uk.qm ./$targetDir/translations/ &> /dev/null
for i in $languages
do
    cp ./translations/universalindent_$i.qm ./$targetDir/translations/ &> /dev/null
    if [ $? -gt 0 ]; then
        echo "ERROR: Could not copy file \"universalindent_$i.qm\"!"
        exit 1
    fi
done
echo "Done"
echo ""

fi
###################### binary release end ########################

###################### Steps to be done for all ########################

echo "Copying the script based indenters to the target indenters dir"
echo "--------------------------------------------------------------"
indenters="hindent hindent.html JsDecoder.js perltidy PerlTidyLib.pm php_beautifier.html phpStylist.php phpStylist.txt shellindent.awk"
for i in $indenters
do
    cp ./indenters/$i ./$targetDir/indenters/ &> /dev/null
    if [ $? -gt 0 ]; then
        echo "ERROR: Could not copy file \"$i\"!"
        exit 1
    fi
done
echo "Done"
echo ""

echo "Copying the indenter example files to the target indenters dir"
echo "--------------------------------------------------------------"
cp ./indenters/example.* ./$targetDir/indenters/ &> /dev/null
if [ $? -gt 0 ]; then
    echo "ERROR: Could not copy the example.* files!"
    exit 1
fi
echo "Done"
echo ""


echo "Copying the indenter uigui ini files to the target indenters dir"
echo "----------------------------------------------------------------"
cp ./indenters/uigui*.ini ./$targetDir/indenters/ &> /dev/null
if [ $? -gt 0 ]; then
    echo "ERROR: Could not copy the uigui*.ini files!"
    exit 1
fi
echo "Done"
echo ""


echo "Copying the default syntax highlight ini file to the target config dir"
echo "----------------------------------------------------------------------"
cp ./config/UiGuiSyntaxHighlightConfig.ini ./$targetDir/config/ &> /dev/null
if [ $? -gt 0 ]; then
    echo "ERROR: Could not copy the UiGuiSyntaxHighlightConfig.ini file!"
    exit 1
fi
echo "Done"
echo ""


echo "Copying some other files (README, CHANGELOG etc)"
echo "------------------------------------------------"
otherfiles="CHANGELOG.txt LICENSE.GPL INSTALL.txt README.txt"
for i in $otherfiles
do
    cp ./$i ./$targetDir/ &> /dev/null
    if [ $? -gt 0 ]; then
        echo "ERROR: Could not copy file \"$i\"!"
        exit 1
    fi
done
echo "Done"
echo ""


echo "Copying doc to target dir"
echo "-------------------------"
docfiles="iniFileFormat.html"
if [ ! "$ext" = ".exe" ]; then
    indenters="$docfiles universalindentgui.man"
fi
for i in $docfiles
do
    cp ./doc/$i ./$targetDir/doc/ &> /dev/null
    if [ $? -gt 0 ]; then
        echo "ERROR: Could not copy file \"$i\"!"
        exit 1
    fi
done
echo "Done"
echo ""


echo "Packing the whole target dir"
echo "----------------------------"
if [ "$ext" = ".exe" ]; then
    zip -r9 ${targetName}_${version}_$targetSystem.zip $targetDir &> /dev/null
    if [ $? -gt 0 ]; then
        echo "ERROR: Could not create archive \"${targetName}_${version}_$targetSystem.zip\"!"
        exit 1
    fi
else
    if [ "$targetSystem" = "src" ]; then
        targetArchiveName=${targetName}-${version}.tar
    else
        targetArchiveName=${targetName}_${version}_$targetSystem.tar
    fi
    tar cf $targetArchiveName $targetDir &> /dev/null
    if [ $? -gt 0 ]; then
        echo "ERROR: Could not create archive \"$targetArchiveName\"!"
        exit 1
    fi
    gzip -9 -f $targetArchiveName
    if [ $? -gt 0 ]; then
        echo "ERROR: Could not create archive \"$targetArchiveName.gz\"!"
        exit 1
    fi
fi
echo "Done"
echo ""


echo "Everything completed successfully!"
#read -p "press any key to continue"