|
11 | 11 | # |
12 | 12 | # PARAMETERS: --- |
13 | 13 | # OPTIONS: --- |
14 | | -# REQUIREMENTS: --- |
| 14 | +# REQUIREMENTS: git, make, dpkg, fakeroot |
15 | 15 | # NOTES: --- |
16 | 16 | # AUTHOR: Joaquin Fernandez, joaquin.f.fernandez@gmail.com |
17 | 17 | # PROJECT: QSS Solver |
18 | 18 | # VERSION: 4.5.3 |
19 | 19 | #=================================================================================== |
20 | 20 |
|
21 | | -rm -rf qss-solver-*.deb |
22 | | - |
23 | | -cd ../../ |
24 | | -ARCH=`uname -m` |
25 | | -echo "Retrieving latest from Git"; |
26 | | -git pull |
27 | | - |
28 | | -cat ./deploy/linux/qss-solver.ini.in > ./deploy/linux/qss-solver.ini |
29 | | - |
30 | | -# Set solver version |
31 | | -VER=`cat ./deploy/linux/version` |
32 | | -INI_VER="version="$VER |
33 | | -echo $INI_VER >> ./deploy/linux/qss-solver.ini |
34 | | - |
35 | | -# Set OS config files. |
36 | | -CONTROL_FILE="control.amd64" |
37 | | -SBML_LIB="libsbml.so.5.18.0" |
38 | | -PACKAGE_NAME=qss-solver-$VER |
39 | | -SYSTEM_VERSION=`lsb_release -d` |
40 | | -if [[ "$SYSTEM_VERSION" == *"22.04"* ]]; then |
41 | | - CONTROL_FILE="control.amd64.u22" |
42 | | - SBML_LIB="libsbml.so.5.19.0" |
43 | | - PACKAGE_NAME=$PACKAGE_NAME-u22 |
44 | | -fi |
45 | | - |
46 | | -# Set solver branch |
47 | | -BRANCH=`git rev-parse --abbrev-ref HEAD` |
48 | | - |
49 | | -# If build from development branch, update package name to unstable. |
50 | | -if [ "$BRANCH" == "qss-solver-dev" ]; then |
51 | | - PACKAGE_NAME=$PACKAGE_NAME-unstable |
52 | | -fi |
53 | | - |
54 | | -PACKAGE_NAME=$PACKAGE_NAME.deb |
55 | | - |
56 | | -BRANCH="branch="$BRANCH |
57 | | -echo $BRANCH >> ./deploy/linux/qss-solver.ini |
58 | | - |
59 | | -echo "Building QSS Solver DEB package for $ARCH version $VER"; |
60 | | -echo "Building Binaries"; |
61 | | -cd ./src |
62 | | -make clean |
63 | | -make |
64 | | -cd .. |
65 | | -rm -rf tmp_deb |
66 | | -rm -rf tmp |
67 | | -mkdir tmp_deb |
68 | | -mkdir tmp |
69 | | -CHECKOUT_PATH=$MMOC_PATH/tmp/ |
70 | | -mkdir -p $CHECKOUT_PATH |
71 | | -git checkout-index -a -f --prefix=$CHECKOUT_PATH |
72 | | - |
73 | | -cp -r ./tmp/deploy/linux/deb/* ./tmp_deb/ |
74 | | -chmod 0755 tmp_deb/DEBIAN/post* |
75 | | -mkdir ./tmp_deb/opt |
76 | | -mkdir ./tmp_deb/opt/qss-solver |
77 | | -mkdir ./tmp_deb/opt/qss-solver/bin |
78 | | -mkdir ./tmp_deb/opt/qss-solver/bin/lib |
79 | | -mkdir ./tmp_deb/opt/qss-solver/src |
80 | | -mkdir ./tmp_deb/opt/qss-solver/build |
81 | | -mkdir ./tmp_deb/opt/qss-solver/output |
82 | | -mkdir ./tmp_deb/opt/qss-solver/lib/ |
83 | | - |
84 | | -cat ./tmp_deb/DEBIAN/$CONTROL_FILE | awk -v VERSION="$VER" '{ if(index($0,"Version:")>=1) print "Version: " VERSION ; else print $0;}' > ./tmp_deb/DEBIAN/control |
85 | | -rm ./tmp_deb/DEBIAN/$CONTROL_FILE |
86 | | - |
87 | | -cp deploy/linux/version ./tmp_deb/opt/qss-solver/ |
88 | | -cp src/mmoc/usr/bin/mmoc ./tmp_deb/opt/qss-solver/bin/ |
89 | | -cp src/gui/usr/bin/qss-solver ./tmp_deb/opt/qss-solver/bin/ |
90 | | -cp src/interfaces/sbml/usr/bin/translate-sbml ./tmp_deb/opt/qss-solver/bin/ |
91 | | -cp src/engine/3rd-party/partitioners/hmetis/khmetis ./tmp_deb/opt/qss-solver/bin/ |
92 | | -cp deploy/linux/qss-solver.ini ./tmp_deb/opt/qss-solver/bin/qss-solver.ini |
93 | | -cp deploy/images/integrator.svg ./tmp_deb/opt/qss-solver/bin/ |
94 | | -cp -r src/gui/3rd-party/qtermwidget-1-0.14.1/usr/config/* ./tmp_deb/opt/qss-solver/bin/ |
95 | | -cp -r src/gui/3rd-party/qtermwidget-1-0.14.1/usr/lib/* ./tmp_deb/opt/qss-solver/bin/lib/ |
96 | | -chmod 0755 `find tmp_deb/opt/qss-solver/bin` |
97 | | - |
98 | | -cp LICENSE ./tmp_deb/opt/qss-solver/ |
99 | | -cp INSTALL ./tmp_deb/opt/qss-solver/ |
100 | | -cp README.md ./tmp_deb/opt/qss-solver/ |
101 | | -cp CHANGELOG ./tmp_deb/opt/qss-solver/ |
102 | | -cp ./tmp/bin/*.sh ./tmp_deb/opt/qss-solver/bin/ |
103 | | -cp -r ./tmp/doc ./tmp_deb/opt/qss-solver/ |
104 | | -cp -r ./tmp/models ./tmp_deb/opt/qss-solver/ |
105 | | -cp -r ./tmp/packages ./tmp_deb/opt/qss-solver/ |
106 | | -cp -r ./tmp/src/engine ./tmp_deb/opt/qss-solver/src/ |
107 | | -cp -r ./tmp/src/mmoc ./tmp_deb/opt/qss-solver/src/ |
108 | | -cp -r ./tmp/src/gui ./tmp_deb/opt/qss-solver/src/ |
109 | | -cp -r ./tmp/src/interfaces ./tmp_deb/opt/qss-solver/src/ |
110 | | -cp -r ./tmp/src/usr ./tmp_deb/opt/qss-solver/src/ |
111 | | -cp -r ./tmp/src/python ./tmp_deb/opt/qss-solver/src/ |
112 | | -cp lib/*.a ./tmp_deb/opt/qss-solver/lib |
113 | | -# Clean generated code. |
114 | | -rm -rf ./deploy/linux/qss-solver.ini |
115 | | -rm -rf ./tmp_deb/opt/qss-solver/src/engine/3rd-party |
116 | | -rm -rf ./tmp_deb/opt/qss-solver/src/engine/usr/obj |
117 | | -rm -rf ./tmp_deb/opt/qss-solver/src/mmoc/usr/obj |
118 | | -rm -rf ./tmp_deb/opt/qss-solver/src/mmoc/usr/bin |
119 | | -rm -rf ./tmp_deb/opt/qss-solver/src/mmoc/usr/share |
120 | | -rm -rf ./tmp_deb/opt/qss-solver/src/mmoc/usr/lib |
121 | | -rm -rf ./tmp_deb/opt/qss-solver/src/mmoc/usr/libexec |
122 | | -rm -rf ./tmp_deb/opt/qss-solver/src/usr/src/*.o |
123 | | -rm -rf ./tmp_deb/opt/qss-solver/src/usr/lib |
124 | | -rm -rf ./tmp_deb/opt/qss-solver/src/interfaces/sbml/usr |
125 | | -rm -rf ./tmp_deb/opt/qss-solver/src/gui/usr |
126 | | - |
127 | | -cp /usr/lib/x86_64-linux-gnu/$SBML_LIB ./tmp_deb/opt/qss-solver/lib/libsbml.so.5 |
128 | | -cp src/engine/3rd-party/partitioners/patoh/Linux-x86_64/libpatoh.a ./tmp_deb/opt/qss-solver/lib/libpatoh.a |
129 | | -cp src/engine/3rd-party/partitioners/metis/Linux-x86_64/libmetis.a ./tmp_deb/opt/qss-solver/lib/libmetis.a |
130 | | - |
131 | | -chmod 0644 `find tmp_deb/ -iname *.cpp` |
132 | | -chmod 0644 `find tmp_deb/ -iname *.c` |
133 | | -chmod 0644 `find tmp_deb/ -iname *.h` |
134 | | -chmod 0644 `find tmp_deb/ -iname *.ini` |
135 | | -chmod 0644 `find tmp_deb/ -iname *.png` |
136 | | -chmod 0644 `find tmp_deb/ -iname *.tex` |
137 | | -chmod 0644 `find tmp_deb/opt/qss-solver/doc/ -type f` |
138 | | -chmod 0644 `find tmp_deb/opt/qss-solver/src/ -type f` |
139 | | -chmod 0644 `find tmp_deb/opt/qss-solver/packages/ -type f` |
140 | | -chmod 0644 `find tmp_deb/opt/qss-solver/src/usr/ -type f` |
141 | | -chmod 0755 `find tmp_deb/ -type d` |
142 | | -fakeroot dpkg -b tmp_deb qss-solver.deb |
143 | | -mv qss-solver.deb ./deploy/linux/$PACKAGE_NAME |
144 | | -rm -rf tmp_deb |
145 | | -rm -rf tmp |
146 | | -cd deploy/linux |
| 21 | +set -euo pipefail |
| 22 | + |
| 23 | +# Check required commands |
| 24 | +for cmd in git make dpkg fakeroot; do |
| 25 | + if ! command -v "$cmd" &> /dev/null; then |
| 26 | + echo "Error: Required command '$cmd' not found. Please install it." >&2 |
| 27 | + exit 1 |
| 28 | + fi |
| 29 | +done |
| 30 | + |
| 31 | +readonly DEPLOY_DIR="./deploy/linux" |
| 32 | +readonly SRC_DIR="./src" |
| 33 | +readonly TMP_DEB_DIR="./tmp_deb" |
| 34 | +readonly TMP_DIR="./tmp" |
| 35 | + |
| 36 | +function setup_environment() { |
| 37 | + echo "Cleaning old packages..." |
| 38 | + rm -f qss-solver-*.deb |
| 39 | + |
| 40 | + echo "Retrieving latest from Git..." |
| 41 | + git pull |
| 42 | + |
| 43 | + echo "Preparing ini file..." |
| 44 | + cat "$DEPLOY_DIR/qss-solver.ini.in" > "$DEPLOY_DIR/qss-solver.ini" |
| 45 | + |
| 46 | + VER=$(cat "$DEPLOY_DIR/version") |
| 47 | + echo "version=$VER" >> "$DEPLOY_DIR/qss-solver.ini" |
| 48 | + |
| 49 | + SYSTEM_VERSION=$(lsb_release -d) |
| 50 | + CONTROL_FILE="control.amd64" |
| 51 | + SBML_LIB="libsbml.so.5.18.0" |
| 52 | + PACKAGE_NAME="qss-solver-$VER" |
| 53 | + |
| 54 | + if [[ "$SYSTEM_VERSION" == *"22.04"* ]]; then |
| 55 | + CONTROL_FILE="control.amd64.u22" |
| 56 | + SBML_LIB="libsbml.so.5.19.0" |
| 57 | + PACKAGE_NAME="${PACKAGE_NAME}-u22" |
| 58 | + fi |
| 59 | + |
| 60 | + BRANCH=$(git rev-parse --abbrev-ref HEAD) |
| 61 | + if [[ "$BRANCH" == "qss-solver-dev" ]]; then |
| 62 | + PACKAGE_NAME="${PACKAGE_NAME}-unstable" |
| 63 | + fi |
| 64 | + |
| 65 | + PACKAGE_NAME="${PACKAGE_NAME}.deb" |
| 66 | + echo "branch=$BRANCH" >> "$DEPLOY_DIR/qss-solver.ini" |
| 67 | + |
| 68 | + echo "Building QSS Solver DEB package for $(uname -m) version $VER" |
| 69 | + |
| 70 | + # Export variables for use in other functions |
| 71 | + export VER PACKAGE_NAME CONTROL_FILE SBML_LIB BRANCH |
| 72 | +} |
| 73 | + |
| 74 | +function build_binaries() { |
| 75 | + echo "Building binaries..." |
| 76 | + cd "$SRC_DIR" |
| 77 | + make clean |
| 78 | + make |
| 79 | + cd - > /dev/null |
| 80 | +} |
| 81 | + |
| 82 | +function prepare_package() { |
| 83 | + echo "Preparing package directory structure..." |
| 84 | + |
| 85 | + rm -rf "$TMP_DEB_DIR" "$TMP_DIR" |
| 86 | + mkdir -p "$TMP_DEB_DIR" "$TMP_DIR" |
| 87 | + |
| 88 | + CHECKOUT_PATH="${MMOC_PATH:-$TMP_DIR}/" |
| 89 | + mkdir -p "$CHECKOUT_PATH" |
| 90 | + git checkout-index -a -f --prefix="$CHECKOUT_PATH" |
| 91 | + |
| 92 | + cp -r "$TMP_DIR/deploy/linux/deb/"* "$TMP_DEB_DIR/" |
| 93 | + chmod 0755 "$TMP_DEB_DIR/DEBIAN/post"* |
| 94 | + |
| 95 | + mkdir -p "$TMP_DEB_DIR/opt/qss-solver/bin/lib" \ |
| 96 | + "$TMP_DEB_DIR/opt/qss-solver/src" \ |
| 97 | + "$TMP_DEB_DIR/opt/qss-solver/build" \ |
| 98 | + "$TMP_DEB_DIR/opt/qss-solver/output" \ |
| 99 | + "$TMP_DEB_DIR/opt/qss-solver/lib" |
| 100 | + |
| 101 | + awk -v VERSION="$VER" '{ if(index($0,"Version:")>=1) print "Version: " VERSION ; else print $0;}' \ |
| 102 | + "$TMP_DEB_DIR/DEBIAN/$CONTROL_FILE" > "$TMP_DEB_DIR/DEBIAN/control" |
| 103 | + rm "$TMP_DEB_DIR/DEBIAN/$CONTROL_FILE" |
| 104 | + |
| 105 | + cp "$DEPLOY_DIR/version" "$TMP_DEB_DIR/opt/qss-solver/" |
| 106 | + cp "$SRC_DIR/mmoc/usr/bin/mmoc" "$TMP_DEB_DIR/opt/qss-solver/bin/" |
| 107 | + cp "$SRC_DIR/gui/usr/bin/qss-solver" "$TMP_DEB_DIR/opt/qss-solver/bin/" |
| 108 | + cp "$SRC_DIR/interfaces/sbml/usr/bin/translate-sbml" "$TMP_DEB_DIR/opt/qss-solver/bin/" |
| 109 | + cp "$SRC_DIR/engine/3rd-party/partitioners/hmetis/khmetis" "$TMP_DEB_DIR/opt/qss-solver/bin/" |
| 110 | + cp "$DEPLOY_DIR/qss-solver.ini" "$TMP_DEB_DIR/opt/qss-solver/bin/qss-solver.ini" |
| 111 | + cp "$DEPLOY_DIR/images/integrator.svg" "$TMP_DEB_DIR/opt/qss-solver/bin/" |
| 112 | + cp -r "$SRC_DIR/gui/3rd-party/qtermwidget-1-0.14.1/usr/config/"* "$TMP_DEB_DIR/opt/qss-solver/bin/" |
| 113 | + cp -r "$SRC_DIR/gui/3rd-party/qtermwidget-1-0.14.1/usr/lib/"* "$TMP_DEB_DIR/opt/qss-solver/bin/lib/" |
| 114 | + chmod 0755 $(find "$TMP_DEB_DIR/opt/qss-solver/bin" -type f) |
| 115 | + |
| 116 | + cp LICENSE INSTALL README.md CHANGELOG "$TMP_DEB_DIR/opt/qss-solver/" |
| 117 | + cp "$TMP_DIR/bin/"*.sh "$TMP_DEB_DIR/opt/qss-solver/bin/" |
| 118 | + cp -r "$TMP_DIR/doc" "$TMP_DEB_DIR/opt/qss-solver/" |
| 119 | + cp -r "$TMP_DIR/models" "$TMP_DEB_DIR/opt/qss-solver/" |
| 120 | + cp -r "$TMP_DIR/packages" "$TMP_DEB_DIR/opt/qss-solver/" |
| 121 | + cp -r "$TMP_DIR/src/engine" "$TMP_DEB_DIR/opt/qss-solver/src/" |
| 122 | + cp -r "$TMP_DIR/src/mmoc" "$TMP_DEB_DIR/opt/qss-solver/src/" |
| 123 | + cp -r "$TMP_DIR/src/gui" "$TMP_DEB_DIR/opt/qss-solver/src/" |
| 124 | + cp -r "$TMP_DIR/src/interfaces" "$TMP_DEB_DIR/opt/qss-solver/src/" |
| 125 | + cp -r "$TMP_DIR/src/usr" "$TMP_DEB_DIR/opt/qss-solver/src/" |
| 126 | + cp -r "$TMP_DIR/src/python" "$TMP_DEB_DIR/opt/qss-solver/src/" |
| 127 | + cp lib/*.a "$TMP_DEB_DIR/opt/qss-solver/lib" |
| 128 | + |
| 129 | + # Clean generated code. |
| 130 | + rm -f "$DEPLOY_DIR/qss-solver.ini" |
| 131 | + rm -rf "$TMP_DEB_DIR/opt/qss-solver/src/engine/3rd-party" |
| 132 | + rm -rf "$TMP_DEB_DIR/opt/qss-solver/src/engine/usr/obj" |
| 133 | + rm -rf "$TMP_DEB_DIR/opt/qss-solver/src/mmoc/usr/obj" |
| 134 | + rm -rf "$TMP_DEB_DIR/opt/qss-solver/src/mmoc/usr/bin" |
| 135 | + rm -rf "$TMP_DEB_DIR/opt/qss-solver/src/mmoc/usr/share" |
| 136 | + rm -rf "$TMP_DEB_DIR/opt/qss-solver/src/mmoc/usr/lib" |
| 137 | + rm -rf "$TMP_DEB_DIR/opt/qss-solver/src/mmoc/usr/libexec" |
| 138 | + rm -rf "$TMP_DEB_DIR/opt/qss-solver/src/usr/src/"*.o |
| 139 | + rm -rf "$TMP_DEB_DIR/opt/qss-solver/src/usr/lib" |
| 140 | + rm -rf "$TMP_DEB_DIR/opt/qss-solver/src/interfaces/sbml/usr" |
| 141 | + rm -rf "$TMP_DEB_DIR/opt/qss-solver/src/gui/usr" |
| 142 | + |
| 143 | + cp "/usr/lib/x86_64-linux-gnu/$SBML_LIB" "$TMP_DEB_DIR/opt/qss-solver/lib/libsbml.so.5" |
| 144 | + cp "$SRC_DIR/engine/3rd-party/partitioners/patoh/Linux-x86_64/libpatoh.a" "$TMP_DEB_DIR/opt/qss-solver/lib/libpatoh.a" |
| 145 | + cp "$SRC_DIR/engine/3rd-party/partitioners/metis/Linux-x86_64/libmetis.a" "$TMP_DEB_DIR/opt/qss-solver/lib/libmetis.a" |
| 146 | +} |
| 147 | + |
| 148 | +function set_permissions() { |
| 149 | + echo "Setting file permissions..." |
| 150 | + |
| 151 | + for ext in cpp c h ini png tex; do |
| 152 | + find "$TMP_DEB_DIR" -iname "*.$ext" -exec chmod 0644 {} + |
| 153 | + done |
| 154 | + |
| 155 | + find "$TMP_DEB_DIR/opt/qss-solver/doc" -type f -exec chmod 0644 {} + |
| 156 | + find "$TMP_DEB_DIR/opt/qss-solver/src" -type f -exec chmod 0644 {} + |
| 157 | + find "$TMP_DEB_DIR/opt/qss-solver/packages" -type f -exec chmod 0644 {} + |
| 158 | + find "$TMP_DEB_DIR/opt/qss-solver/src/usr" -type f -exec chmod 0644 {} + |
| 159 | + |
| 160 | + find "$TMP_DEB_DIR" -type d -exec chmod 0755 {} + |
| 161 | +} |
| 162 | + |
| 163 | +function build_package() { |
| 164 | + echo "Building deb package..." |
| 165 | + fakeroot dpkg -b "$TMP_DEB_DIR" qss-solver.deb |
| 166 | + mv qss-solver.deb "$DEPLOY_DIR/$PACKAGE_NAME" |
| 167 | +} |
| 168 | + |
| 169 | +function cleanup() { |
| 170 | + echo "Cleaning up temporary files..." |
| 171 | + rm -rf "$TMP_DEB_DIR" "$TMP_DIR" |
| 172 | +} |
| 173 | + |
| 174 | +function main() { |
| 175 | + setup_environment |
| 176 | + build_binaries |
| 177 | + prepare_package |
| 178 | + set_permissions |
| 179 | + build_package |
| 180 | + cleanup |
| 181 | + cd "$DEPLOY_DIR" |
| 182 | +} |
| 183 | + |
| 184 | +main |
0 commit comments