abi_check.sh: Update version number for automatic abi check (2.5.0->2.5.1)
[openjpeg.git] / tools / travis-ci / abi-check.sh
1 #!/bin/bash
2
3 # This script executes the abi-check step when running under travis-ci (in run step)
4
5 # Set-up some bash options
6 set -o nounset   ## set -u : exit the script if you try to use an uninitialised variable
7 set -o errexit   ## set -e : exit the script if any statement returns a non-true return value
8 set -o pipefail  ## Fail on error in pipe
9 set -o xtrace    ## set -x : Print a trace of simple commands and their arguments after they are expanded and before they are executed.
10
11 # Exit if not ABI check
12 if [ "${OPJ_CI_ABI_CHECK:-}" != "1" ]; then
13         exit 0
14 fi
15
16 if [ "${OPJ_CI_CC:-}" != "" ]; then
17     export CC=${OPJ_CI_CC}
18     echo "Using ${CC}"
19 fi
20
21 if [ "${OPJ_CI_CXX:-}" != "" ]; then
22     export CXX=${OPJ_CI_CXX}
23     echo "Using ${CXX}"
24 fi
25
26 OPJ_UPLOAD_ABI_REPORT=0
27 OPJ_PREVIOUS_VERSION="2.5.0"
28 OPJ_LATEST_VERSION="2.5.1"
29 if [ "${OPJ_PREVIOUS_VERSION:-}" != "" ]; then
30         OPJ_LIMIT_ABI_BUILDS="-limit 3"
31 else
32         OPJ_LIMIT_ABI_BUILDS="-limit 2"
33 fi
34 OPJ_REPO="https://github.com/uclouvain/openjpeg.git"
35 OPJ_SSH_REPO=${OPJ_REPO/https:\/\/github.com\//git@github.com:}
36 OPJ_UPLOAD_BRANCH="gh-pages"
37 OPJ_UPLOAD_DIR="abi-check"
38 OPJ_SOURCE_DIR=$(cd $(dirname $0)/../.. && pwd)
39
40 if [ "${GITHUB_REPOSITORY:-}" != "" ]; then
41     BRANCH=$(git -C ${OPJ_SOURCE_DIR} branch | grep '*' | tr -d '*[[:blank:]]')
42         if [ "$(echo "${GITHUB_REPOSITORY}" | sed 's/\(^.*\)\/.*/\1/')" == "uclouvain" ] && [ "${GITHUB_EVENT_NAME:-}" != "pull_request" ] && [ "$BRANCH" == "master" ]; then
43                 # Upload updated report to gh-pages
44                 echo "FIXME. We aren't yet ready to upload ABI report due to lack of keys to push to the gh-pages branch"
45                 # OPJ_UPLOAD_ABI_REPORT=1
46                 # Build full report
47                 #OPJ_LIMIT_ABI_BUILDS=
48         fi
49 elif [ "${TRAVIS_REPO_SLUG:-}" != "" ]; then
50         if [ "$(echo "${TRAVIS_REPO_SLUG}" | sed 's/\(^.*\)\/.*/\1/')" == "uclouvain" ] && [ "${TRAVIS_PULL_REQUEST:-}" == "false" ] && [ "${TRAVIS_BRANCH:-}" == "master" ]; then
51                 # Upload updated report to gh-pages
52                 OPJ_UPLOAD_ABI_REPORT=1
53                 # Build full report
54                 #OPJ_LIMIT_ABI_BUILDS=
55         fi
56 fi
57
58 # INSTALL REQUIRED PACKAGES
59
60 mkdir ${HOME}/abi-check
61 cd ${HOME}/abi-check
62 # Let's get tools not available with apt
63 mkdir tools
64 # Travis doesn't allow package wdiff...
65 wget -qO - http://mirrors.kernel.org/gnu/wdiff/wdiff-latest.tar.gz | tar -xz
66 cd wdiff-*
67 ./configure --prefix=${HOME}/abi-check/tools/wdiff &> /dev/null
68 make &> /dev/null
69 make check &> /dev/null
70 make install &> /dev/null
71 cd ..
72 export PATH=${PWD}/tools/wdiff/bin:$PATH
73 wget https://tools.ietf.org/tools/rfcdiff/rfcdiff
74 chmod +x rfcdiff
75 mv rfcdiff ${PWD}/tools
76 export PATH=${PWD}/tools:$PATH
77 wget -qO - https://github.com/lvc/installer/archive/0.10.tar.gz | tar -xz
78 mkdir ${PWD}/tools/abi-tracker
79 make -C installer-0.10 install prefix=${PWD}/tools/abi-tracker target=abi-tracker
80 export PATH=${PWD}/tools/abi-tracker/bin:$PATH
81
82 # This will print configuration
83 # travis-ci doesn't dump cmake version in system info, let's print it 
84 cmake --version
85
86 # RUN THE ABI-CHECK SCRIPTS
87
88 mkdir work
89 cd work
90
91 # Clone the gh-pages branch and work from there
92 git clone -b $OPJ_UPLOAD_BRANCH --single-branch $OPJ_REPO .
93 cd $OPJ_UPLOAD_DIR
94 rm -rf installed/openjpeg/current/*
95
96 # Let's create all we need
97 grep -v Git ${OPJ_SOURCE_DIR}/tools/abi-tracker/openjpeg.json > ./openjpeg.json
98 abi-monitor ${OPJ_LIMIT_ABI_BUILDS} -get openjpeg.json
99 if [ "${OPJ_LIMIT_ABI_BUILDS}" != "" ]; then
100         cp -f ${OPJ_SOURCE_DIR}/tools/abi-tracker/openjpeg.json ./openjpeg.json
101 else
102         # Old versions of openjpeg don't like -fvisibility=hidden...
103         grep -v Configure ${OPJ_SOURCE_DIR}/tools/abi-tracker/openjpeg.json > ./openjpeg.json
104 fi
105 cp -rf ${OPJ_SOURCE_DIR} src/openjpeg/current
106 rm -f src/openjpeg/current/build/CMakeCache.txt
107 abi-monitor -v current -build openjpeg.json
108 cat build_logs/openjpeg/current/make
109
110 rm -rf ./installed/openjpeg/${OPJ_LATEST_VERSION}
111 rm -rf ./compat_report/openjpeg/${OPJ_LATEST_VERSION}
112 rm -rf ./abi_dump/openjpeg/${OPJ_LATEST_VERSION}
113 rm -rf ./headers_diff/openjpeg/${OPJ_LATEST_VERSION}
114 rm -rf ./objects_report/openjpeg/${OPJ_LATEST_VERSION}
115 abi-monitor -v ${OPJ_LATEST_VERSION} -build openjpeg.json
116 if [ "${OPJ_PREVIOUS_VERSION:-}" != "" ]; then
117         abi-monitor -v ${OPJ_PREVIOUS_VERSION} -build openjpeg.json
118 fi
119 abi-tracker -build openjpeg.json
120
121 EXIT_CODE=0
122
123 # Check API
124 abi-compliance-checker -l openjpeg -old $(find ./abi_dump/openjpeg/$OPJ_LATEST_VERSION -name '*.dump') -new $(find ./abi_dump/openjpeg/current -name '*.dump') -header openjpeg.h -api -s || EXIT_CODE=1
125 if [ "${OPJ_PREVIOUS_VERSION:-}" != "" ]; then
126         abi-compliance-checker -l openjpeg -old $(find ./abi_dump/openjpeg/$OPJ_PREVIOUS_VERSION -name '*.dump') -new $(find ./abi_dump/openjpeg/$OPJ_LATEST_VERSION -name '*.dump') -header openjpeg.h -api -s || EXIT_CODE=1
127 fi
128
129 # Check ABI
130 if [ "${OPJ_LIMIT_ABI_BUILDS}" != "" ]; then
131         abi-compliance-checker -l openjpeg -old $(find ./abi_dump/openjpeg/$OPJ_LATEST_VERSION -name '*.dump') -new $(find ./abi_dump/openjpeg/current -name '*.dump') -header openjpeg.h -abi -s || EXIT_CODE=1
132         if [ ${EXIT_CODE} -eq 1 ]; then
133             cat "compat_reports/openjpeg/${OPJ_LATEST_VERSION}_to_current/abi_compat_report.html"
134         fi
135         if [ "${OPJ_PREVIOUS_VERSION:-}" != "" ]; then
136                 abi-compliance-checker -l openjpeg -old $(find ./abi_dump/openjpeg/$OPJ_PREVIOUS_VERSION -name '*.dump') -new $(find ./abi_dump/openjpeg/$OPJ_LATEST_VERSION -name '*.dump') -header openjpeg.h -abi -s || EXIT_CODE=1
137         fi
138 else
139         echo "Disable ABI check for now, problems with symbol visibility..."
140 fi
141
142 rm -rf src/openjpeg/current
143 rm -rf build_logs
144         
145 if [ ${OPJ_UPLOAD_ABI_REPORT} -eq 1 ]; then
146         git config user.name "OpenJPEG Travis CI"
147         git config user.email "info@openjpeg.org"
148
149         git add --all .
150         git commit -m "Update ABI/API compatibility reports after commit ${TRAVIS_COMMIT:-}"
151
152         # Get the deploy key by using Travis's stored variables to decrypt travis_rsa.enc
153         openssl aes-256-cbc -K $encrypted_99d63218f67a_key -iv $encrypted_99d63218f67a_iv -in ${OPJ_SOURCE_DIR}/tools/travis-ci/travis_rsa.enc -out travis_rsa -d
154         chmod 600 travis_rsa
155         eval `ssh-agent -s`
156         ssh-add travis_rsa
157
158         # Now that we're all set up, we can push.
159         git push $OPJ_SSH_REPO $OPJ_UPLOAD_BRANCH
160 fi
161
162 rm -rf src installed
163
164 exit $EXIT_CODE