blob: 9b44393994f7376b652f38e12ab9a1fff63e2bc9 [file] [log] [blame]
Louis Maillard80bb7b12024-07-22 15:50:45 -04001#!/bin/bash
2set -e
3
4PKG_NAME=dhtnet
Louis Maillard31d31f82024-07-26 10:09:38 -04005PKG_VERSION=0.3.0
Louis Maillard80bb7b12024-07-22 15:50:45 -04006
7FOLDER_NAME="${PKG_NAME}-${PKG_VERSION}"
8
9# move pwd to the directory of this script (extras/packaging)
10cd "$(dirname "$0")" || exit 1
11
12rm -Rf "${FOLDER_NAME}"
Louis Maillard31d31f82024-07-26 10:09:38 -040013rm -f -- *${PKG_NAME}-${PKG_VERSION}.tar.gz
Louis Maillard80bb7b12024-07-22 15:50:45 -040014mkdir -p "${FOLDER_NAME}"
15
16rm -Rf "../../dependencies/msgpack"
17rm -Rf "../../dependencies/opendht"
18rm -Rf "../../dependencies/pjproject"
19rm -Rf "../../dependencies/restinio"
20(cd ../.. && git submodule update --init --recursive)
21
Louis Maillard31d31f82024-07-26 10:09:38 -040022build_ubuntu=false
23build_ubuntu20=false
24build_ubuntu22=false
25build_ubuntu24=false
26build_debian=false
27build_debian10=false
28build_debian11=false
29build_debian12=false
30
31parse_args() {
32 while [ "$1" != "" ]; do
33 case $1 in
34 -u | --ubuntu ) build_ubuntu=true
35 build_ubuntu20=true
36 build_ubuntu22=true
37 build_ubuntu24=true
38 ;;
39 -u20 | --ubuntu20 ) build_ubuntu20=true
40 build_ubuntu=true
41 ;;
42 -u22 | --ubuntu22 ) build_ubuntu22=true
43 build_ubuntu=true
44 ;;
45 -u24 | --ubuntu24 ) build_ubuntu24=true
46 build_ubuntu=true
47 ;;
48 -d | --debian ) build_debian=true
49 build_debian10=true
50 build_debian11=true
51 build_debian12=true
52 ;;
53 -d10 | --debian10 ) build_debian10=true
54 build_debian=true
55 ;;
56 -d11 | --debian11 ) build_debian11=true
57 build_debian=true
58 ;;
59 -d12 | --debian12 ) build_debian12=true
60 build_debian=true
61 ;;
62 -a | --all ) build_ubuntu=true
63 # not working: build_ubuntu20=true
64 build_ubuntu22=true
65 build_ubuntu24=true
66 build_debian=true
67 # not working: build_debian10=true
68 # not working: build_debian11=true
69 build_debian12=true
70 ;;
71 * ) echo "Argument '$1' is not recognized"
72 ;;
73 esac
74 shift
75 done
76}
77
78parse_args "$@"
79
80
Louis Maillard80bb7b12024-07-22 15:50:45 -040081# copy source code
82cp -Rf ../../dependencies "${FOLDER_NAME}/dependencies"
83cp -Rf ../../include "${FOLDER_NAME}/include"
84cp -Rf ../../src "${FOLDER_NAME}/src"
85cp -Rf ../../tools "${FOLDER_NAME}/tools"
86cp -Rf ../../CMakeLists.txt "${FOLDER_NAME}/CMakeLists.txt"
87cp -Rf ../../COPYING "${FOLDER_NAME}/COPYING"
88cp -Rf ../../dhtnet.pc.in "${FOLDER_NAME}/dhtnet.pc.in"
89cp -Rf ../../README.md "${FOLDER_NAME}/README.md"
90
Louis Maillard31d31f82024-07-26 10:09:38 -040091if [ "$build_ubuntu" == true ] || [ "$build_debian" == true ]; then
92 # copy debian conf
93 cp -Rf "./gnu-linux/debian" "${FOLDER_NAME}/debian"
Louis Maillard80bb7b12024-07-22 15:50:45 -040094
Louis Maillard31d31f82024-07-26 10:09:38 -040095 tar -czf "deb-${PKG_NAME}-${PKG_VERSION}.tar.gz" "${FOLDER_NAME}"
96 rm -Rf "${FOLDER_NAME}/debian"
97fi
98
Louis Maillard80bb7b12024-07-22 15:50:45 -040099rm -Rf "${FOLDER_NAME}"
Louis Maillard31d31f82024-07-26 10:09:38 -0400100echo "Archives <os>-${PKG_NAME}-${PKG_VERSION}.tar.gz are ready, starting builds... (will take few minutes)"
Louis Maillard80bb7b12024-07-22 15:50:45 -0400101
102#######################
103
Louis Maillard31d31f82024-07-26 10:09:38 -0400104started_builds=()
105started_pid=()
106remainning_builds=0
Louis Maillard80bb7b12024-07-22 15:50:45 -0400107
Louis Maillard31d31f82024-07-26 10:09:38 -0400108build_target() {
109 target="$1"
110 mkdir -p "$target"
111 docker build -t "dhtnet-builder:$target" -f "gnu-linux/$target.Dockerfile" --build-arg PKG_NAME="$FOLDER_NAME" .
112 remainning_builds=$((remainning_builds+1))
113 (
114 docker run --rm \
115 -v "$(pwd)/$target/":/build/debs \
116 -e PKG_NAME="$FOLDER_NAME" "dhtnet-builder:$target" > "$target/build.log" 2>&1;
117 if [ $? -eq 0 ]; then
118 rm -f -- $target/build-at-*
119 echo "$target package built at $(date)" > "$target/build-at-$(date +%F-%R)"
120 echo "Successfully built $target package"
121 else
122 echo "Failed to build $target package, check log for more details"
123 fi
124 ) &
125 started_pid+=("$!")
126 started_builds+=("$target")
127}
Louis Maillard80bb7b12024-07-22 15:50:45 -0400128
Louis Maillard31d31f82024-07-26 10:09:38 -0400129# build Ubuntu package (deb-*)
130if [ "$build_ubuntu24" == true ]; then
131 build_target "ubuntu-24"
132fi
133
134if [ "$build_ubuntu22" == true ]; then
135 build_target "ubuntu-22"
136fi
137
138if [ "$build_ubuntu20" == true ]; then
139 build_target "ubuntu-20"
140fi
141
142# build Debian package (deb-*)
143if [ "$build_debian12" == true ]; then
144 build_target "debian-12"
145fi
146
147if [ "$build_debian11" == true ]; then
148 build_target "debian-11"
149fi
150
151if [ "$build_debian10" == true ]; then
152 build_target "debian-10"
153fi
154
155
156while [ $remainning_builds -gt 0 ]; do
157 time="$(date +%T)"
158 for index in "${!started_builds[@]}"; do
159 if [ "${started_pid[$index]}" != "" ]; then
160 if ps -p "${started_pid[$index]}" > /dev/null; then
161 echo "[$time] Still building ${started_builds[$index]}... (pid: ${started_pid[$index]})"
162 else
163 echo "[$time] Build ${started_builds[$index]} finished"
164 remainning_builds=$((remainning_builds-1))
165 started_pid[index]=""
166 fi
167 fi
168 done
169 if [ $remainning_builds -gt 0 ]; then
170 sleep 30
171 fi
172done
173
174echo "[$(date +%T)] All builds finished:"
175for target in "${started_builds[@]}"; do
176 echo " - $target"
177done