Skip to content

Commit 7ba9e5f

Browse files
authored
Fix Linux issues raised by OoMrFlibble (#559)
Linux: - Don't segfault if no network - Smooth resizing - Centred splash screen and main window General: - Remove Doxygen coverage as it is broken
1 parent d0058b7 commit 7ba9e5f

File tree

10 files changed

+355
-248
lines changed

10 files changed

+355
-248
lines changed

.github/workflows/build-all.yaml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -279,9 +279,6 @@ jobs:
279279
echo Downloaded: ${{ fromJson(steps.download-doxygen.outputs.downloaded_files)[0] }}
280280
cd oolite
281281
../doxygen/doxygen-*/bin/doxygen
282-
python3 -m coverxygen --verbose --xml-dir doxygen/xml --src-dir . --output doxygen/coverxygen.info
283-
mkdir -p doxygen/html/coverage
284-
genhtml doxygen/coverxygen.info -o doxygen/html/coverage
285282
286283
# This is for debugging only and helps developing the workflow.
287284
- name: Environment Variables 1
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
GNUSTEP_MAKEFILES=@BASEDIR@/share/GNUstep/Makefiles
2+
GNUSTEP_SYSTEM_USERS_DIR=/home
3+
GNUSTEP_NETWORK_USERS_DIR=/home
4+
GNUSTEP_LOCAL_USERS_DIR=/home
5+
GNUSTEP_SYSTEM_APPS=@BASEDIR@/lib/GNUstep/Applications
6+
GNUSTEP_SYSTEM_ADMIN_APPS=@BASEDIR@/lib/GNUstep/Applications
7+
GNUSTEP_SYSTEM_WEB_APPS=@BASEDIR@/lib/GNUstep/WebApplications
8+
GNUSTEP_SYSTEM_TOOLS=@BASEDIR@/bin
9+
GNUSTEP_SYSTEM_ADMIN_TOOLS=@BASEDIR@/sbin
10+
GNUSTEP_SYSTEM_LIBRARY=@BASEDIR@/lib/GNUstep
11+
GNUSTEP_SYSTEM_HEADERS=@BASEDIR@/include
12+
GNUSTEP_SYSTEM_LIBRARIES=@BASEDIR@/lib
13+
GNUSTEP_SYSTEM_DOC=@BASEDIR@/share/GNUstep/Documentation
14+
GNUSTEP_SYSTEM_DOC_MAN=@BASEDIR@/share/man
15+
GNUSTEP_SYSTEM_DOC_INFO=@BASEDIR@/share/info
16+
GNUSTEP_NETWORK_APPS=@BASEDIR@/lib/GNUstep/Applications
17+
GNUSTEP_NETWORK_ADMIN_APPS=@BASEDIR@/lib/GNUstep/Applications
18+
GNUSTEP_NETWORK_WEB_APPS=@BASEDIR@/lib/GNUstep/WebApplications
19+
GNUSTEP_NETWORK_TOOLS=@BASEDIR@/bin
20+
GNUSTEP_NETWORK_ADMIN_TOOLS=@BASEDIR@/sbin
21+
GNUSTEP_NETWORK_LIBRARY=@BASEDIR@/lib/GNUstep
22+
GNUSTEP_NETWORK_HEADERS=@BASEDIR@/include
23+
GNUSTEP_NETWORK_LIBRARIES=@BASEDIR@/lib
24+
GNUSTEP_NETWORK_DOC=@BASEDIR@/share/GNUstep/Documentation
25+
GNUSTEP_NETWORK_DOC_MAN=@BASEDIR@/share/man
26+
GNUSTEP_NETWORK_DOC_INFO=@BASEDIR@/share/info
27+
GNUSTEP_LOCAL_APPS=@BASEDIR@/lib/GNUstep/Applications
28+
GNUSTEP_LOCAL_ADMIN_APPS=@BASEDIR@/lib/GNUstep/Applications
29+
GNUSTEP_LOCAL_WEB_APPS=@BASEDIR@/lib/GNUstep/WebApplications
30+
GNUSTEP_LOCAL_TOOLS=@BASEDIR@/bin
31+
GNUSTEP_LOCAL_ADMIN_TOOLS=@BASEDIR@/sbin
32+
GNUSTEP_LOCAL_LIBRARY=@BASEDIR@/lib/GNUstep
33+
GNUSTEP_LOCAL_HEADERS=@BASEDIR@/include
34+
GNUSTEP_LOCAL_LIBRARIES=@BASEDIR@/lib
35+
GNUSTEP_LOCAL_DOC=@BASEDIR@/share/GNUstep/Documentation
36+
GNUSTEP_LOCAL_DOC_MAN=@BASEDIR@/share/man
37+
GNUSTEP_LOCAL_DOC_INFO=@BASEDIR@/share/info

ShellScripts/Linux/run_oolite.sh

Lines changed: 83 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,16 @@
33

44
HERE="$(dirname "$(readlink -f "$0")")"
55

6+
SHOW_SPLASH=true
7+
# Loop through all arguments
8+
for arg in "$@"; do
9+
case "$arg" in
10+
-nosplash|--nosplash)
11+
SHOW_SPLASH=false
12+
;;
13+
esac
14+
done
15+
616
notify_failure() {
717
if [[ -n "$FLATPAK_ID" ]]; then
818
local MSG="<b>$FLATPAK_ID failed to start!</b>\n\nExit Code: $EXIT_CODE"
@@ -33,7 +43,17 @@ notify_failure() {
3343
}
3444

3545
launch_guarded() {
36-
"$@"
46+
if [[ "$1" == "packageinfo" ]]; then
47+
cat "$OO_EXEDIR/Resources/manifest.plist"
48+
exit 0
49+
fi
50+
if [[ "$SHOW_SPLASH" == true ]]; then
51+
"$OO_EXEDIR/splash-launcher" "$OO_EXEDIR/Resources/Images/splash.bmp" &
52+
"$OO_EXEDIR/oolite" "$@" -nosplash
53+
else
54+
# already has -nosplash
55+
"$OO_EXEDIR/oolite" "$@"
56+
fi
3757
local EXIT_CODE=$?
3858

3959
if [ $EXIT_CODE -eq 0 ]; then
@@ -44,76 +64,85 @@ launch_guarded() {
4464
exit $EXIT_CODE
4565
}
4666

47-
find_exe_launch() {
48-
if [[ -z "$OO_EXECUTABLE" ]]; then
49-
OO_EXECUTABLE="$HERE/oolite"
50-
if [[ ! -f "$OO_EXECUTABLE" ]]; then
51-
OO_EXECUTABLE="$HERE/oolite.app/oolite"
67+
find_exedir() {
68+
if [[ -z "$OO_EXEDIR" ]]; then
69+
OO_EXEDIR="$HERE"
70+
if [[ ! -f "$OO_EXEDIR/oolite" ]]; then
71+
OO_EXEDIR="$HERE/oolite.app"
5272
fi
5373
fi
54-
launch_guarded "$OO_EXECUTABLE" "$@"
74+
}
75+
76+
make_gnustepconf_template() {
77+
export GNUSTEP_CONFIG_FILE=$(mktemp -t oolite_gnustep_XXXX --suffix=.conf)
78+
sed -e "s|@BASEDIR@|$BASEDIR|g" "$OO_EXEDIR/Resources/GNUstep.conf.template" > "$GNUSTEP_CONFIG_FILE"
5579
}
5680

5781
# Check if we are running inside a Flatpak
5882
if [[ -n "$FLATPAK_ID" ]]; then
59-
if [[ "$1" == "packageinfo" ]]; then
60-
cat "/app/bin/Resources/manifest.plist"
61-
exit 0
62-
fi
63-
83+
BASEDIR="/app"
84+
OO_EXEDIR="$BASEDIR/bin"
6485
GAME_DATA="$HOME/.var/app/$FLATPAK_ID"
65-
OO_EXECUTABLE="/app/bin/oolite"
86+
make_gnustepconf_template
6687

6788
# Check if we are running inside an AppImage
6889
elif [[ -n "$APPIMAGE" ]]; then
69-
MANIFEST="$APPDIR/usr/bin/Resources/manifest.plist"
70-
if [[ "$1" == "packageinfo" ]]; then
71-
cat "$MANIFEST"
72-
exit 0
73-
fi
74-
75-
export LD_LIBRARY_PATH="$APPDIR/usr/lib:$LD_LIBRARY_PATH"
76-
export PATH="$APPDIR/usr/bin:$PATH"
77-
OO_EXECUTABLE="$APPDIR/usr/bin/oolite"
90+
BASEDIR="$APPDIR/usr"
91+
OO_EXEDIR="$BASEDIR/bin"
92+
export LD_LIBRARY_PATH="$BASEDIR/lib:$LD_LIBRARY_PATH"
93+
export PATH="$OO_EXEDIR:$PATH"
7894

79-
DEBUG_OXP=$(grep "debug_functionality_support" "$MANIFEST")
95+
DEBUG_OXP=$(grep "debug_functionality_support" "$OO_EXEDIR/Resources/manifest.plist")
8096
if [[ "$DEBUG_OXP" == *"yes"* ]]; then
81-
INTERNAL_ADDONS="$APPDIR/usr/bin/AddOns"
97+
INTERNAL_ADDONS="$OO_EXEDIR/AddOns"
8298
export OO_ADDITIONALADDONSDIRS="${OO_ADDITIONALADDONSDIRS}${OO_ADDITIONALADDONSDIRS:+,}$INTERNAL_ADDONS"
8399
fi
84100

85101
if [[ -n "$OO_DIRTYPE" ]]; then
86102
if [[ "${OO_DIRTYPE,,}" == "xdg" ]]; then
87103
GAME_DATA="$HOME/.local/share/Oolite"
88104
elif [[ "${OO_DIRTYPE,,}" == "legacy" ]]; then
89-
launch_guarded "$OO_EXECUTABLE" "$@"
105+
launch_guarded "$@"
90106
fi
91107
else
92108
# Get the folder containing the AppImage file
93109
HERE="$(dirname "$APPIMAGE")"
94110
GAME_DATA="$HERE/GameData"
95111
fi
112+
make_gnustepconf_template
96113
else
97-
if [[ "$1" == "packageinfo" ]]; then
98-
if [ -f "$HERE/Resources/manifest.plist" ]; then
99-
cat "$HERE/Resources/manifest.plist"
100-
else
101-
cat "$HERE/oolite.app/Resources/manifest.plist"
102-
fi
103-
exit 0
104-
fi
105-
106114
# Check if OO_DIRTYPE set
107115
if [[ -n "$OO_DIRTYPE" ]]; then
108116
if [[ "${OO_DIRTYPE,,}" == "xdg" ]]; then
109117
GAME_DATA="$HOME/.local/share/Oolite"
110118
elif [[ "${OO_DIRTYPE,,}" == "legacy" ]]; then
111-
find_exe_launch "$@"
119+
find_exedir
120+
launch_guarded "$@"
112121
fi
113122
else
114123
# Use script directory
115124
GAME_DATA="$HERE/GameData"
116125
fi
126+
# Find the current system configuration file
127+
ORIGINAL_CONF=$(gnustep-config --variable=GNUSTEP_CONFIG_FILE)
128+
129+
# Fallback: If gnustep-config returns nothing, assume standard location
130+
if [ -z "$ORIGINAL_CONF" ]; then
131+
ORIGINAL_CONF="/etc/GNUstep/GNUstep.conf"
132+
fi
133+
134+
if [ -z "$ORIGINAL_CONF" ]; then
135+
ORIGINAL_CONF="/usr/local/etc/GNUstep/GNUstep.conf"
136+
fi
137+
138+
GNUSTEP_CONFIG_FILE=$(mktemp -t oolite_gnustep_XXXX --suffix=.conf)
139+
# Copy the original config (if it exists) to the temp file
140+
if [ -f "$ORIGINAL_CONF" ]; then
141+
cp "$ORIGINAL_CONF" "$GNUSTEP_CONFIG_FILE"
142+
else
143+
echo "No system config found at $ORIGINAL_CONF. Starting with empty config."
144+
touch "$GNUSTEP_CONFIG_FILE"
145+
fi
117146
fi
118147

119148
mkdir -p "$GAME_DATA"
@@ -135,6 +164,7 @@ elif [[ -n "$OO_USERADDONSDIR" ]]; then
135164
fi
136165
fi
137166
mkdir -p "$OO_ADDONSEXTRACTDIR"
167+
# OO_ADDITIONALADDONSDIRS can be used to pass a comma separated list of additional OXP folders
138168
if [ -n "$OO_ADDITIONALADDONSDIRS" ]; then
139169
(IFS=,; mkdir -p $OO_ADDITIONALADDONSDIRS)
140170
fi
@@ -144,47 +174,21 @@ mkdir -p "$OO_GNUSTEPDIR"
144174
OO_GNUSTEPDEFAULTSDIR="${OO_GNUSTEPDEFAULTSDIR:-${GAME_DATA}}"
145175
mkdir -p "$OO_GNUSTEPDEFAULTSDIR"
146176

147-
# OO_ADDITIONALADDONSDIRS can be used to pass a comma separated list of additional OXP folders
148-
149-
150-
# Find the current system configuration file
151-
ORIGINAL_CONF=$(gnustep-config --variable=GNUSTEP_CONFIG_FILE)
152-
153-
# Fallback: If gnustep-config returns nothing, assume standard location
154-
if [ -z "$ORIGINAL_CONF" ]; then
155-
ORIGINAL_CONF="/etc/GNUstep/GNUstep.conf"
156-
fi
157-
158-
if [ -z "$ORIGINAL_CONF" ]; then
159-
ORIGINAL_CONF="/usr/local/etc/GNUstep/GNUstep.conf"
160-
fi
161-
162-
TEMP_CONF=$(mktemp -t oolite_gnustep_XXXX --suffix=.conf)
163-
164-
# Copy the original config to the temp file (if it exists)
165-
if [ -f "$ORIGINAL_CONF" ]; then
166-
cp "$ORIGINAL_CONF" "$TEMP_CONF"
167-
else
168-
echo "No system config found at $ORIGINAL_CONF. Starting with empty config."
169-
touch "$TEMP_CONF"
170-
fi
171-
172-
echo "" >> "$TEMP_CONF"
173-
echo "# --- Overrides added by launcher script ---" >> "$TEMP_CONF"
174-
echo "GNUSTEP_USER_DIR_APPS=$OO_GNUSTEPDIR/Applications" >> "$TEMP_CONF"
175-
echo "GNUSTEP_USER_DIR_ADMIN_APPS=$OO_GNUSTEPDIR/Applications/Admin" >> "$TEMP_CONF"
176-
echo "GNUSTEP_USER_DIR_WEB_APPS=$OO_GNUSTEPDIR/WebApplications" >> "$TEMP_CONF"
177-
echo "GNUSTEP_USER_DIR_TOOLS=$OO_GNUSTEPDIR/Tools" >> "$TEMP_CONF"
178-
echo "GNUSTEP_USER_DIR_ADMIN_TOOLS=$OO_GNUSTEPDIR/Tools/Admin" >> "$TEMP_CONF"
179-
echo "GNUSTEP_USER_DIR_LIBRARY=$OO_GNUSTEPDIR/Library" >> "$TEMP_CONF"
180-
echo "GNUSTEP_USER_DIR_HEADERS=$OO_GNUSTEPDIR/Library/Headers" >> "$TEMP_CONF"
181-
echo "GNUSTEP_USER_DIR_LIBRARIES=$OO_GNUSTEPDIR/Library/Libraries" >> "$TEMP_CONF"
182-
echo "GNUSTEP_USER_DIR_DOC=$OO_GNUSTEPDIR/Library/Documentation" >> "$TEMP_CONF"
183-
echo "GNUSTEP_USER_DIR_DOC_MAN=$OO_GNUSTEPDIR/Library/Documentation/man" >> "$TEMP_CONF"
184-
echo "GNUSTEP_USER_DIR_DOC_INFO=$OO_GNUSTEPDIR/Library/Documentation/info" >> "$TEMP_CONF"
185-
echo "GNUSTEP_USER_DEFAULTS_DIR=$OO_GNUSTEPDEFAULTSDIR" >> "$TEMP_CONF"
186-
187-
export GNUSTEP_CONFIG_FILE="$TEMP_CONF"
188-
189-
find_exe_launch "$@"
190-
rm "$TEMP_CONF"
177+
echo "" >> "$GNUSTEP_CONFIG_FILE"
178+
echo "GNUSTEP_USER_CONFIG_FILE=$GNUSTEP_CONFIG_FILE" >> "$GNUSTEP_CONFIG_FILE"
179+
echo "GNUSTEP_USER_DIR_APPS=$OO_GNUSTEPDIR/Applications" >> "$GNUSTEP_CONFIG_FILE"
180+
echo "GNUSTEP_USER_DIR_ADMIN_APPS=$OO_GNUSTEPDIR/Applications/Admin" >> "$GNUSTEP_CONFIG_FILE"
181+
echo "GNUSTEP_USER_DIR_WEB_APPS=$OO_GNUSTEPDIR/WebApplications" >> "$GNUSTEP_CONFIG_FILE"
182+
echo "GNUSTEP_USER_DIR_TOOLS=$OO_GNUSTEPDIR/Tools" >> "$GNUSTEP_CONFIG_FILE"
183+
echo "GNUSTEP_USER_DIR_ADMIN_TOOLS=$OO_GNUSTEPDIR/Tools/Admin" >> "$GNUSTEP_CONFIG_FILE"
184+
echo "GNUSTEP_USER_DIR_LIBRARY=$OO_GNUSTEPDIR/Library" >> "$GNUSTEP_CONFIG_FILE"
185+
echo "GNUSTEP_USER_DIR_HEADERS=$OO_GNUSTEPDIR/Library/Headers" >> "$GNUSTEP_CONFIG_FILE"
186+
echo "GNUSTEP_USER_DIR_LIBRARIES=$OO_GNUSTEPDIR/Library/Libraries" >> "$GNUSTEP_CONFIG_FILE"
187+
echo "GNUSTEP_USER_DIR_DOC=$OO_GNUSTEPDIR/Library/Documentation" >> "$GNUSTEP_CONFIG_FILE"
188+
echo "GNUSTEP_USER_DIR_DOC_MAN=$OO_GNUSTEPDIR/Library/Documentation/man" >> "$GNUSTEP_CONFIG_FILE"
189+
echo "GNUSTEP_USER_DIR_DOC_INFO=$OO_GNUSTEPDIR/Library/Documentation/info" >> "$GNUSTEP_CONFIG_FILE"
190+
echo "GNUSTEP_USER_DEFAULTS_DIR=$OO_GNUSTEPDEFAULTSDIR" >> "$GNUSTEP_CONFIG_FILE"
191+
192+
find_exedir
193+
launch_guarded "$@"
194+
rm "$GNUSTEP_CONFIG_FILE"

ShellScripts/Linux/splash-launcher

22.2 KB
Binary file not shown.

ShellScripts/common/post_build.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ run_script() {
117117
else
118118
# Copy Linux-specific wrapper script
119119
cp -fu ShellScripts/Linux/run_oolite.sh "$PROGDIR"
120+
cp -fu ShellScripts/Linux/splash-launcher "$PROGDIR"
120121
fi
121122

122123
echo "✅ Oolite post-build completed successfully"

installers/appimage/create_appimage.sh

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,19 @@ run_script() {
1313

1414
APPDIR="./Oolite.AppDir"
1515
rm -rf $APPDIR
16-
mkdir -p $APPDIR/usr/bin
16+
APPBIN="$APPDIR/usr/bin"
17+
APPLIB="$APPDIR/usr/lib"
18+
mkdir -p "$APPBIN"
1719

1820
PROGDIR="../oolite.app"
19-
cp -rf $PROGDIR/Resources $APPDIR/usr/bin
21+
cp -uf "$PROGDIR/splash-launcher" "$APPBIN"
22+
cp -rf "$PROGDIR/Resources" "$APPBIN"
23+
cp -uf "../ShellScripts/Linux/GNUstep.conf.template" "$APPBIN/Resources"
24+
2025

2126
if (( $# == 1 )); then
2227
echo "Including Basic-debug.oxp"
23-
cp -rf AddOns $APPDIR/usr/bin
28+
cp -rf AddOns "$APPBIN"
2429
fi
2530

2631
curl -o linuxdeploy -L https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage

installers/flatpak/flatpak_build.sh

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,14 @@ export ADDITIONAL_CFLAGS="-DBUILD_DATE='\"$CPP_DATE\"'"
1212
export ADDITIONAL_OBJCFLAGS="-DBUILD_DATE='\"$CPP_DATE\"'"
1313
make -f Makefile release-deployment -j$FLATPAK_BUILDER_N_JOBS
1414

15-
cp -r oolite.app/* /app/bin
15+
PROGDIR="oolite.app"
16+
APPBIN="/app/bin"
17+
18+
cp -uf "$PROGDIR/run_oolite.sh" "$APPBIN"
19+
cp -uf "$PROGDIR/oolite" "$APPBIN"
20+
cp -uf "$PROGDIR/splash-launcher" "$APPBIN"
21+
cp -rf "$PROGDIR/Resources" "$APPBIN"
22+
cp -uf "ShellScripts/Linux/GNUstep.conf.template" "/app/bin/Resources"
1623

1724
if [[ -z "$VERSION_OVERRIDE" ]]; then
1825
source ShellScripts/common/get_version.sh

0 commit comments

Comments
 (0)