1#!/usr/bin/env bash
2
3arguments_usage() {
4    cat <<EOF
5usage: build.sh [-h] [commands]
6       -h: print this help message and
7           abort execution
8
9       Will execute the passed commands
10       in the order they were passed
11EOF
12}
13
14arguments_parse() {
15    local __res=0
16    while getopts ":h" opt
17    do
18        case ${opt} in
19            h )
20                arguments_usage
21                __res=2
22                break
23                ;;
24            \? )
25                echo "Unknown option ${opt}"
26                arguments_usage
27                __res=1
28                break
29                ;;
30        esac
31    done
32    shift $((OPTIND -1))
33    commands=("$@")
34    return ${__res}
35}
36
37configure() {
38    local __res=0
39    for _ in 1
40    do
41        cmake ../foundationdb ${CMAKE_EXTRA_ARGS}
42        __res=$?
43        if [ ${__res} -ne 0 ]
44        then
45            break
46        fi
47    done
48    return ${__res}
49}
50
51build_fast() {
52    local __res=0
53    for _ in 1
54    do
55        make -j`nproc`
56        __res=$?
57        if [ ${__res} -ne 0 ]
58        then
59            break
60        fi
61    done
62    return ${__res}
63}
64
65build() {
66    local __res=0
67    for _ in 1
68    do
69        configure
70        __res=$?
71        if [ ${__res} -ne 0 ]
72        then
73            break
74        fi
75        build_fast
76        __res=$?
77        if [ ${__res} -ne 0 ]
78        then
79            break
80        fi
81    done
82    return ${__res}
83}
84
85package_fast() {
86    local __res=0
87    for _ in 1
88    do
89        make -j`nproc` packages
90        cpack
91        cpack -G RPM -D GENERATE_EL6=ON
92        __res=$?
93        if [ ${__res} -ne 0 ]
94        then
95            break
96        fi
97    done
98    return ${__res}
99}
100
101package() {
102    local __res=0
103    for _ in 1
104    do
105        build
106        __res=$?
107        if [ ${__res} -ne 0 ]
108        then
109            break
110        fi
111        package_fast
112        __res=$?
113        if [ ${__res} -ne 0 ]
114        then
115            break
116        fi
117    done
118    return ${__res}
119}
120
121rpm() {
122    local __res=0
123    for _ in 1
124    do
125        configure
126        __res=$?
127        if [ ${__res} -ne 0 ]
128        then
129            break
130        fi
131        build_fast
132        __res=$?
133        if [ ${__res} -ne 0 ]
134        then
135            break
136        fi
137        fakeroot cpack -G RPM -D GENERATE_EL6=ON
138        fakeroot cpack -G RPM
139        __res=$?
140        if [ ${__res} -ne 0 ]
141        then
142            break
143        fi
144    done
145    return ${__res}
146}
147
148deb() {
149    local __res=0
150    for _ in 1
151    do
152        configure
153        __res=$?
154        if [ ${__res} -ne 0 ]
155        then
156            break
157        fi
158        build_fast
159        __res=$?
160        if [ ${__res} -ne 0 ]
161        then
162            break
163        fi
164        fakeroot cpack -G DEB
165        __res=$?
166        if [ ${__res} -ne 0 ]
167        then
168            break
169        fi
170    done
171    return ${__res}
172}
173
174test-fast() {
175    local __res=0
176    for _ in 1
177    do
178        ctest -j`nproc` ${CTEST_EXTRA_ARGS}
179        __res=$?
180        if [ ${__res} -ne 0 ]
181        then
182            break
183        fi
184    done
185    return ${__res}
186}
187
188test() {
189    local __res=0
190    for _ in 1
191    do
192        build
193        __res=$?
194        if [ ${__res} -ne 0 ]
195        then
196            break
197        fi
198        test-fast
199        __res=$?
200        if [ ${__res} -ne 0 ]
201        then
202            break
203        fi
204    done
205    return ${__res}
206}
207
208main() {
209    local __res=0
210    for _ in 1
211    do
212        arguments_parse "$@"
213        __res=$?
214        if [ ${__res} -ne 0 ]
215        then
216            if [ ${__res} -eq 2 ]
217            then
218                # in this case there was no error
219                # We still want to exit the script
220                __res=0
221            fi
222            break
223        fi
224        echo "Num commands ${#commands[@]}"
225        for command in "${commands[@]}"
226        do
227            echo "Command: ${command}"
228            case ${command} in
229                configure )
230                    configure
231                    __res=$?
232                    ;;
233                build )
234                    build
235                    __res=$?
236                    ;;
237                build/fast )
238                    build_fast
239                    __res=$?
240                    ;;
241                package )
242                    package
243                    __res=$?
244                    ;;
245                package/fast )
246                    package_fast
247                    __res=$?
248                    ;;
249                rpm )
250                    rpm
251                    ;;
252                deb )
253                    deb
254                    ;;
255                linux-pkgs)
256                    rpm
257                    deb
258                    ;;
259                test-fast)
260                    test-fast
261                    ;;
262                test)
263                    test
264                    ;;
265                * )
266                    echo "ERROR: Command not found ($command)"
267                    __res=1
268                    ;;
269            esac
270            if [ ${__res} -ne 0 ]
271            then
272                break
273            fi
274        done
275    done
276    return ${__res}
277}
278
279main "$@"
280