Skip to content

Commit dd775b6

Browse files
Improved build script.
1 parent 727ff66 commit dd775b6

1 file changed

Lines changed: 165 additions & 127 deletions

File tree

deploy/linux/build.sh

Lines changed: 165 additions & 127 deletions
Original file line numberDiff line numberDiff line change
@@ -11,136 +11,174 @@
1111
#
1212
# PARAMETERS: ---
1313
# OPTIONS: ---
14-
# REQUIREMENTS: ---
14+
# REQUIREMENTS: git, make, dpkg, fakeroot
1515
# NOTES: ---
1616
# AUTHOR: Joaquin Fernandez, joaquin.f.fernandez@gmail.com
1717
# PROJECT: QSS Solver
1818
# VERSION: 4.5.3
1919
#===================================================================================
2020

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

Comments
 (0)