diff --git a/contrib/buildserver/cmake_daily.sh b/contrib/buildserver/cmake_daily.sh index 943db177..d7a6834e 100755 --- a/contrib/buildserver/cmake_daily.sh +++ b/contrib/buildserver/cmake_daily.sh @@ -5,15 +5,6 @@ ## source $(find . -name buildserver.library) -## -# configure the build (only used for msvc builds) -#arch=x64 -#mode=dll -#config=Release -#vs=2013 - -result=0 - ## # determine location of the build and source directories if [ "$PLATFORM" == "msvc" ]; then @@ -21,14 +12,11 @@ if [ "$PLATFORM" == "msvc" ]; then build=$(cygpath -aw ./build) dist=$(cygpath -au ./build/dist/) msvc=$(cygpath -au ./contrib/cmake/msvc) - exe=.exe - bin='' else exiv2=$PWD build=$PWD/build dist=$PWD/build/dist/$PLATFORM - exe='' - bin=bin + if [ -e $exiv2/CMakeCache.txt ]; then rm -rf $exiv2/CMakeCache.txt ; fi fi @@ -41,73 +29,14 @@ mkdir -p $build/dist/logs echo "---- dist = $dist ------" echo "---- build = $build ------" -## -# perform the build -( - case $PLATFORM in - msvc) - ## - # get windows cmd.exe to perform the build - # use a subshell to restore the path - ( - PATH="$msvc:/cygdrive/c/Program Files/csvn/bin:/cygdrive/c/Program Files (x86)/WANdisco/Subversion/csvn/bin:/cygdrive/c/Program Files/7-zip:/cygdrive/c/Program Files (x86)/cmake/bin:$PATH:/cygdrive/c/Windows/System32" - # cmd.exe /c "cd $build && vcvars $vs $arch && cmakeBuild --rebuild --exiv2=$exiv2 $*" - for ARCH in x64 Win32; do - for VS in 2005 ; do # 2008 2010 2012 2013 2015; do - cmd.exe /c "cd $build && vcvars $VS $ARCH && cmakeBuild --rebuild --exiv2=$exiv2 --test $*" - done - done - result=$? - cp $msvc/vcvars.bat $build/dist # required by test_daily.sh - ) - ;; - - mingw) - if [ ! -z "$RECURSIVE" ]; then - # we are already in MinGW/bash, so build - /usr/local/bin/cmake -DCMAKE_INSTALL_PREFIX=$dist -DEXIV2_ENABLE_NLS=OFF $exiv2 - else - # recursively invoke MinGW/bash with appropriate tool chain - export RECURSIVE=1 - export CFLAGS=-m64 - export CXXFLAGS=-m64 - export LDFLAGS=-m64 - - export TMP=/tmp - export TEMP=$TMP - if [ "$x64" == true ]; then - /cygdrive/c/MinGW64/msys/1.0/bin/bash.exe -c "export PATH=/c/TDM-GCC-64/bin:/c/MinGW64/bin:/c/MinGW64/msys/1.0/bin:/c/MinGW64/msys/1.0/local/bin; $0" - result=$? - fi - fi - ;; - - *) pushd $build > /dev/null - ( - # build 64 bit library - export CFLAGS=-m64 - export CXXFLAGS=-m64 - export LDFLAGS=-m64 - # Always use /usr/local/bin/cmake - # I can guarantee it to be at least 3.4.1 - # because I built it from source and installed it - /usr/local/bin/cmake -DCMAKE_INSTALL_PREFIX=$dist -DEXIV2_ENABLE_NLS=OFF $exiv2 - make - result=$? - /usr/local/bin/cmake --build . --target install - ) - popd > /dev/null - ;; - esac -) | tee "$build/dist/logs/build.log" - ## # test the build (don't test msvc because it was tested by cmakeBuild) -if [ "$PLATFORM" != "msvc" ]; then - if [ -e $dist/$bin/exiv2$exe ]; then +testBuild() +{ + if [ -e $dist/bin/exiv2 ]; then pushd test > /dev/null # EXIV2_BINDIR is used by the test suite to locate executables - export EXIV2_BINDIR=$dist/$bin + export EXIV2_BINDIR=$dist/bin # set LD_LIBRARY_PATH (and DYLD_LIBRARY_PATH for macosx) # to be sure we run the tests with the newly built library export DYLD_LIBRARY_PATH=$dist/lib @@ -146,11 +75,75 @@ if [ "$PLATFORM" != "msvc" ]; then echo '' result=1 fi -fi +} + +## +# perform the build +( + case $PLATFORM in + msvc) + ## + # get windows cmd.exe to perform the build + # use a subshell to restore the path + ( + PATH="$msvc:/cygdrive/c/Program Files/csvn/bin:/cygdrive/c/Program Files (x86)/WANdisco/Subversion/csvn/bin:/cygdrive/c/Program Files/7-zip:/cygdrive/c/Program Files (x86)/cmake/bin:$PATH:/cygdrive/c/Windows/System32" + # cmd.exe /c "cd $build && vcvars $vs $arch && cmakeBuild --rebuild --exiv2=$exiv2 $*" + for ARCH in x64 Win32; do + for VS in 2005 2008 2010 2012 2013 2015; do + cmd.exe /c "cd $build && vcvars $VS $ARCH && cmakeBuild --rebuild --exiv2=$exiv2 --test $*" + done + done + result=$? + cp $msvc/vcvars.bat $build/dist # required by test_daily.sh + ) + ;; + + mingw) + if [ ! -z "$RECURSIVE" ]; then + # we are already in MinGW/bash, so build + /usr/local/bin/cmake -DCMAKE_INSTALL_PREFIX=$dist -DEXIV2_ENABLE_NLS=OFF $exiv2 + else + # recursively invoke MinGW/bash with appropriate tool chain + export RECURSIVE=1 + export CFLAGS=-m64 + export CXXFLAGS=-m64 + export LDFLAGS=-m64 + + export TMP=/tmp + export TEMP=$TMP + if [ "$x64" == true ]; then + /cygdrive/c/MinGW64/msys/1.0/bin/bash.exe -c "export PATH=/c/TDM-GCC-64/bin:/c/MinGW64/bin:/c/MinGW64/msys/1.0/bin:/c/MinGW64/msys/1.0/local/bin; $0" + result=$? + if [ "$result" == "0" ]; then + testBuild + fi + fi + fi + ;; + + *) pushd $build > /dev/null + ( + # build 64 bit library + export CFLAGS=-m64 + export CXXFLAGS=-m64 + export LDFLAGS=-m64 + # Always use /usr/local/bin/cmake + # I can guarantee it to be at least 3.4.1 + # because I built it from source and installed it + /usr/local/bin/cmake -DCMAKE_INSTALL_PREFIX=$dist -DEXIV2_ENABLE_NLS=OFF $exiv2 + make + result=$? + /usr/local/bin/cmake --build . --target install + testBuild + ) + popd > /dev/null + ;; + esac +) | tee "$build/dist/logs/build.log" ## # store the build for users to collect -if [ $result == "0" ]; then +if [ "$result" == "0" ]; then case $PLATFORM in linux) mmHD=/media/psf/Host ;; msvc|cygwin|mingw) mmHD="//psf/Host/" ;; @@ -168,24 +161,29 @@ if [ $result == "0" ]; then if [ ! -e $monly ]; then mkdir -p $monly ; fi if [ -e $jpubl ]; then + svn=0 + /usr/local/bin/svn info . 2>/dev/null >/dev/null + if [ "$?" == "0" ]; then + svn=$(/usr/local/bin/svn info . | grep Revision | cut -d' ' -f 2) + # svn=$($EXIV2_BINDIR/exiv2$exe -vV | grep -e ^svn | cut -d= -f 2) + fi dow=$(date '+%w') # 0..6 day of the week dom=$(date '+%d') # 1..31 day of the month mon=$(date '+%m') # 1..12 month - date=$(date '+%Y-%m-%d+%H-%M-%S') - svn=$($EXIV2_BINDIR/exiv2$exe -vV | grep -e ^svn | cut -d= -f 2) - b="${PLATFORM}-svn-${svn}-date-${date}.tar.gz" + dat=$(date '+%Y-%m-%d+%H-%M-%S') + zip="${PLATFORM}-svn-${svn}-date-${dat}.tar.gz" # add documentation and samples to dist - cat contrib/buildserver/dailyReadMe.txt | sed -E -e "s/__BUILD__/$b/" > "$build/dist/ReadMe.txt" + cat contrib/buildserver/dailyReadMe.txt | sed -E -e "s/__BUILD__/$zip/" > "$build/dist/ReadMe.txt" mkdir -p "$build/dist/samples/" cp samples/exifprint.cpp "$build/dist/samples/" # create the bundle pushd "$build" > /dev/null rm -rf *.tar.gz - tar czf "$b" dist/ + tar czf "$zip" dist/ ls -alt - mv $b .. + mv $zip .. popd > /dev/null # clean userContent/build directories @@ -195,11 +193,11 @@ if [ $result == "0" ]; then if [ -e $monly ]; then find $monly -type f -ctime $((366 * 5)) -exec rm -rf {} \; ; fi # store the build - cp $b $daily - if [ "$dow" == "1" ]; then cp $b $weely; fi # Monday - if [ "$dom" == "1" ]; then cp $b $monly; fi # First day of the month + cp $zip $daily + if [ "$dow" == "1" ]; then cp $zip $weely; fi # Monday + if [ "$dom" == "1" ]; then cp $zip $monly; fi # First day of the month - echo '***' build = $b '***' + echo '***' build = $zip '***' else echo '***' jenkins builds directory does not exist ${jpubl} '***' result=2