diff --git a/.gitignore b/.gitignore
index 559b3454a..bfb5ba252 100644
--- a/.gitignore
+++ b/.gitignore
@@ -28,7 +28,6 @@ obj.spk
obj.win.spk
obj.spk.dbg
obj.win.spk.dbg
-AddOns/
tools/icosmesh/obj
doxygen/
libobjc2/
diff --git a/GNUmakefile b/GNUmakefile
index 47ed45403..28971bcad 100755
--- a/GNUmakefile
+++ b/GNUmakefile
@@ -104,8 +104,9 @@ endif
# add specific flags if building modern
ifeq ($(modern),yes)
- ADDITIONAL_CFLAGS += -DOOLITE_MODERN_BUILD=1
- ADDITIONAL_OBJCFLAGS += -DOOLITE_MODERN_BUILD=1
+ VER_FULL := $(shell ./ShellScripts/common/get_version.sh)
+ ADDITIONAL_CFLAGS += -DOOLITE_MODERN_BUILD=1 -DOO_VERSION_FULL=\"$(VER_FULL)\"
+ ADDITIONAL_OBJCFLAGS += -DOOLITE_MODERN_BUILD=1 -DOO_VERSION_FULL=\"$(VER_FULL)\"
# link time optimizations
ifeq ($(lto),yes)
ADDITIONAL_CFLAGS += -flto
diff --git a/GNUmakefile.postamble b/GNUmakefile.postamble
index 9ad0e3b36..cd93fdd80 100644
--- a/GNUmakefile.postamble
+++ b/GNUmakefile.postamble
@@ -1,109 +1,24 @@
-# Oolite-linux
# GNUmakefile.postamble: Runs after-compilation scripts.
-# These copy all the base data files into where oolite expects them
-# to live (Contents/Resources)
+# These copy all the base data files to where Oolite expects them
#
-CP_FLAGS = -rf
-ifeq ($(debug),yes)
- EXT =.dbg
-endif
-
-ifeq ($(findstring -gnu,$(GNUSTEP_HOST_OS)),-gnu)
- CP_FLAGS += -u
-endif
-
-ifeq ($(GNUSTEP_HOST_OS),mingw32)
- OS_EXT = .exe
- CP_FLAGS += -u
-endif
-
-SRC_BIN = $(OBJC_PROGRAM_NAME)$(OS_EXT)
-DEST_BIN = $(OBJC_PROGRAM_NAME)$(EXT)$(OS_EXT)
-
-MKMANIFEST=tools/mkmanifest.sh
-
-PROGDIR=$(OBJC_PROGRAM_NAME).app
+POST_BUILD_ENV = \
+ OBJC_PROGRAM_NAME="$(OBJC_PROGRAM_NAME)" \
+ GNUSTEP_OBJ_DIR_NAME="$(GNUSTEP_OBJ_DIR_NAME)" \
+ GNUSTEP_HOST_OS="$(GNUSTEP_HOST_OS)" \
+ GNUSTEP_HOST_CPU="$(GNUSTEP_HOST_CPU)" \
+ MINGW_PREFIX="$(MINGW_PREFIX)" \
+ DEBUG="$(debug)" \
+ DEPLOYMENT_RELEASE_CONFIGURATION="$(DEPLOYMENT_RELEASE_CONFIGURATION)" \
+ MODERN="$(modern)" \
+ ESPEAK="$(ESPEAK)" \
+ USE_DEPS="$(use_deps)" \
+ STRIP_BIN="$(strip)" \
+ STRIP="$(STRIP)" \
+ VER_FULL="$(VER_FULL)"
after-all::
- $(MKDIRS) $(PROGDIR)
- $(MKDIRS) $(PROGDIR)/Resources
- $(MKMANIFEST) > $(PROGDIR)/Resources/manifest.plist
- $(CP) $(CP_FLAGS) Resources/README.TXT $(PROGDIR)/Resources
- $(CP) $(CP_FLAGS) Resources/InfoPlist.strings $(PROGDIR)/Resources
- $(CP) $(CP_FLAGS) Resources/AIs $(PROGDIR)/Resources
- $(CP) $(CP_FLAGS) Resources/Config $(PROGDIR)/Resources
- $(CP) $(CP_FLAGS) Resources/Scenarios $(PROGDIR)/Resources
- $(CP) $(CP_FLAGS) Resources/Scripts $(PROGDIR)/Resources
- $(CP) $(CP_FLAGS) Resources/Shaders $(PROGDIR)/Resources
- $(CP) $(CP_FLAGS) Resources/Binary/Images $(PROGDIR)/Resources
- $(CP) $(CP_FLAGS) Resources/Binary/Models $(PROGDIR)/Resources
- $(CP) $(CP_FLAGS) Resources/Binary/Music $(PROGDIR)/Resources
- $(CP) $(CP_FLAGS) Resources/Binary/Sounds $(PROGDIR)/Resources
- $(CP) $(CP_FLAGS) Resources/Binary/Textures $(PROGDIR)/Resources
- $(CP) $(CP_FLAGS) Schemata $(PROGDIR)/Resources
- $(CP) $(CP_FLAGS) src/Cocoa/Info-Oolite.plist $(PROGDIR)/Resources/Info-gnustep.plist
- $(CP) $(CP_FLAGS) $(GNUSTEP_OBJ_DIR_NAME)/$(SRC_BIN) $(PROGDIR)/$(DEST_BIN)
- ifeq ($(ESPEAK),yes)
- ifeq ($(modern),yes)
- ifeq ($(GNUSTEP_HOST_OS),mingw32)
- $(CP) $(CP_FLAGS) $(MINGW_PREFIX)/share/espeak-ng-data $(PROGDIR)/Resources
- else
- ifeq ($(wildcard /usr/local/share/espeak-ng-data),)
- ifeq ($(wildcard /usr/lib/x86_64-linux-gnu/espeak-ng-data),)
- ifeq ($(wildcard /usr/share/espeak-ng-data),)
- ifeq ($(wildcard /app/share/espeak-ng-data),)
- $(error espeak-ng-data not found in any known location)
- else
- $(CP) $(CP_FLAGS) /app/share/espeak-ng-data $(PROGDIR)/Resources
- endif
- else
- $(CP) $(CP_FLAGS) /usr/share/espeak-ng-data $(PROGDIR)/Resources
- endif
- else
- $(CP) $(CP_FLAGS) /usr/lib/x86_64-linux-gnu/espeak-ng-data $(PROGDIR)/Resources
- endif
- else
- $(CP) $(CP_FLAGS) /usr/local/share/espeak-ng-data $(PROGDIR)/Resources
- endif
- endif
-
- # replace f2 voice and set the default voice as well
- $(RM) $(PROGDIR)/Resources/espeak-ng-data/voices/default
- $(RM) $(PROGDIR)/Resources/espeak-ng-data/voices/!v/f2
- # copy required files from the existing cross-platform-deps repo
- $(CP) $(CP_FLAGS) deps/Cross-platform-deps/espeak-data/voices/!v/f2 $(PROGDIR)/Resources/espeak-ng-data/voices/!v/f2
- $(CP) $(CP_FLAGS) deps/Cross-platform-deps/espeak-data/voices/default $(PROGDIR)/Resources/espeak-ng-data/voices/default
- else
- ifeq ($(GNUSTEP_HOST_OS),mingw32)
- $(CP) $(CP_FLAGS) deps/Cross-platform-deps/espeak-data $(PROGDIR)/Resources
- else
- ifeq ($(use_deps),yes)
- $(CP) $(CP_FLAGS) deps/Cross-platform-deps/espeak-data $(PROGDIR)/Resources
- endif
- endif
- endif
- endif
- ifeq ($(strip),yes)
- $(STRIP) $(PROGDIR)/$(DEST_BIN)
- endif
- ifeq ($(GNUSTEP_HOST_OS),mingw32)
- ifeq ($(modern),yes)
- ldd $(PROGDIR)/$(DEST_BIN) | grep $(MINGW_PREFIX) | awk '{print $$3}' | xargs -I {} $(CP) $(CP_FLAGS) {} $(PROGDIR)
- else
- ifeq ($(GNUSTEP_HOST_CPU),x86_64)
- $(CP) $(CP_FLAGS) deps/Windows-deps/x86_64/DLLs/*.dll $(PROGDIR)
- else
- $(CP) $(CP_FLAGS) deps/Windows-deps/x86/DLLs/*.dll $(PROGDIR)
- endif
- ifeq ($(debug),no)
- $(RM) $(PROGDIR)/js32ECMAv5dbg.dll
- endif
- $(RM) $(PROGDIR)/js32ECMAv5.dll
- endif
- else
- $(CP) $(CP_FLAGS) ShellScripts/Linux/run_oolite.sh $(PROGDIR)
- endif
+ @$(POST_BUILD_ENV) ShellScripts/common/post_build.sh
after-clean::
$(RM) -rf $(GNUSTEP_OBJ_DIR_BASENAME) $(addprefix $(GNUSTEP_OBJ_DIR_BASENAME), .spk .dbg .spk.dbg)
diff --git a/Makefile b/Makefile
index ac877f027..4a00c2cd4 100755
--- a/Makefile
+++ b/Makefile
@@ -33,7 +33,7 @@ help:
.PHONY: release
release:
$(MAKE) -f GNUmakefile debug=no strip=yes lto=yes
- mkdir -p AddOns && rm -rf AddOns/Basic-debug.oxp && cp -rf DebugOXP/Debug.oxp AddOns/Basic-debug.oxp
+ mkdir -p build/AddOns && rm -rf build/AddOns/Basic-debug.oxp && cp -rf DebugOXP/Debug.oxp build/AddOns/Basic-debug.oxp
.PHONY: release-deployment
release-deployment:
@@ -41,19 +41,19 @@ release-deployment:
.PHONY: release-snapshot
release-snapshot:
- $(MAKE) -f GNUmakefile SNAPSHOT_BUILD=yes VERSION_STRING=$(VER) debug=no
- mkdir -p AddOns && rm -rf AddOns/Basic-debug.oxp && cp -rf DebugOXP/Debug.oxp AddOns/Basic-debug.oxp
+ $(MAKE) -f GNUmakefile SNAPSHOT_BUILD=yes debug=no
+ mkdir -p build/AddOns && rm -rf build/AddOns/Basic-debug.oxp && cp -rf DebugOXP/Debug.oxp build/AddOns/Basic-debug.oxp
.PHONY: debug
debug:
$(MAKE) -f GNUmakefile debug=yes strip=no
- mkdir -p AddOns && rm -rf AddOns/Basic-debug.oxp && cp -rf DebugOXP/Debug.oxp AddOns/Basic-debug.oxp
+ mkdir -p build/AddOns && rm -rf build/AddOns/Basic-debug.oxp && cp -rf DebugOXP/Debug.oxp build/AddOns/Basic-debug.oxp
.PHONY: clean
clean:
$(MAKE) -f GNUmakefile clean
$(RM) -rf oolite.app
- $(RM) -rf AddOns
+ $(RM) -rf build/AddOns
.PHONY: all
all: release release-deployment release-snapshot debug
diff --git a/ShellScripts/Linux/run_oolite.sh b/ShellScripts/Linux/run_oolite.sh
index c8b84d098..917f55505 100755
--- a/ShellScripts/Linux/run_oolite.sh
+++ b/ShellScripts/Linux/run_oolite.sh
@@ -1,5 +1,8 @@
#!/bin/bash
+
+HERE="$(dirname "$(readlink -f "$0")")"
+
notify_failure() {
if [[ -n "$FLATPAK_ID" ]]; then
local MSG="$FLATPAK_ID failed to start!\n\nExit Code: $EXIT_CODE"
@@ -43,7 +46,6 @@ launch_guarded() {
find_exe_launch() {
if [[ -z "$OO_EXECUTABLE" ]]; then
- HERE="$(dirname "$(readlink -f "$0")")"
OO_EXECUTABLE="$HERE/oolite"
if [[ ! -f "$OO_EXECUTABLE" ]]; then
OO_EXECUTABLE="$HERE/oolite.app/oolite"
@@ -54,16 +56,31 @@ find_exe_launch() {
# Check if we are running inside a Flatpak
if [[ -n "$FLATPAK_ID" ]]; then
+ if [[ "$1" == "packageinfo" ]]; then
+ cat "/app/bin/Resources/manifest.plist"
+ exit 0
+ fi
+
GAME_DATA="$HOME/.var/app/$FLATPAK_ID"
OO_EXECUTABLE="/app/bin/oolite"
# Check if we are running inside an AppImage
elif [[ -n "$APPIMAGE" ]]; then
- # Get the folder where AppRun is in the AppImage
- HERE="$(dirname "$(readlink -f "${0}")")"
- export LD_LIBRARY_PATH="$HERE/usr/lib:$LD_LIBRARY_PATH"
- export PATH="$HERE/usr/bin:$PATH"
- OO_EXECUTABLE="$HERE/usr/bin/oolite"
+ MANIFEST="$APPDIR/usr/bin/Resources/manifest.plist"
+ if [[ "$1" == "packageinfo" ]]; then
+ cat "$MANIFEST"
+ exit 0
+ fi
+
+ export LD_LIBRARY_PATH="$APPDIR/usr/lib:$LD_LIBRARY_PATH"
+ export PATH="$APPDIR/usr/bin:$PATH"
+ OO_EXECUTABLE="$APPDIR/usr/bin/oolite"
+
+ DEBUG_OXP=$(grep "debug_functionality_support" "$MANIFEST")
+ if [[ "$DEBUG_OXP" == *"yes"* ]]; then
+ INTERNAL_ADDONS="$APPDIR/usr/bin/AddOns"
+ export OO_ADDITIONALADDONSDIRS="${OO_ADDITIONALADDONSDIRS}${OO_ADDITIONALADDONSDIRS:+,}$INTERNAL_ADDONS"
+ fi
if [[ -n "$OO_DIRTYPE" ]]; then
if [[ "${OO_DIRTYPE,,}" == "xdg" ]]; then
@@ -76,18 +93,27 @@ elif [[ -n "$APPIMAGE" ]]; then
HERE="$(dirname "$APPIMAGE")"
GAME_DATA="$HERE/GameData"
fi
+else
+ if [[ "$1" == "packageinfo" ]]; then
+ if [ -f "$HERE/Resources/manifest.plist" ]; then
+ cat "$HERE/Resources/manifest.plist"
+ else
+ cat "$HERE/oolite.app/Resources/manifest.plist"
+ fi
+ exit 0
+ fi
-# Check if OO_DIRTYPE set
-elif [[ -n "$OO_DIRTYPE" ]]; then
- if [[ "${OO_DIRTYPE,,}" == "xdg" ]]; then
- GAME_DATA="$HOME/.local/share/Oolite"
- elif [[ "${OO_DIRTYPE,,}" == "legacy" ]]; then
- find_exe_launch "$@"
+ # Check if OO_DIRTYPE set
+ if [[ -n "$OO_DIRTYPE" ]]; then
+ if [[ "${OO_DIRTYPE,,}" == "xdg" ]]; then
+ GAME_DATA="$HOME/.local/share/Oolite"
+ elif [[ "${OO_DIRTYPE,,}" == "legacy" ]]; then
+ find_exe_launch "$@"
+ fi
+ else
+ # Use script directory
+ GAME_DATA="$HERE/GameData"
fi
-else
- # Use script directory
- HERE="$(dirname "$(readlink -f "$0")")"
- GAME_DATA="$HERE/GameData"
fi
mkdir -p "$GAME_DATA"
diff --git a/ShellScripts/common/get_version.sh b/ShellScripts/common/get_version.sh
index e5ebf06eb..9a89cc690 100755
--- a/ShellScripts/common/get_version.sh
+++ b/ShellScripts/common/get_version.sh
@@ -1,7 +1,7 @@
#!/bin/bash
SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" &> /dev/null && pwd)
-pushd "$SCRIPT_DIR"
+pushd "$SCRIPT_DIR" > /dev/null
mkdir -p ../../build
cd ../../build
@@ -16,21 +16,12 @@ fi
VER_DATE=$(date +%y%m%d)
VER_GITREV=$(git rev-list --count HEAD)
VER_GITHASH=$(git rev-parse --short=7 HEAD)
-VER="$VER_MAJ.$VER_MIN.$VER_REV.$VER_GITREV-$VER_DATE-$VER_GITHASH"
+VER_FULL="$VER_MAJ.$VER_MIN.$VER_REV.$VER_GITREV-$VER_DATE-$VER_GITHASH"
BUILDTIME=$(date "+%Y.%m.%d %H:%M")
-echo "OOLITE_VERSION=$VER" >> OOLITE_VERSION.txt
-cat OOLITE_VERSION.txt
+echo "OOLITE_VERSION=$VER_FULL" > OOLITE_VERSION.txt
-echo "VERSION=$VERSION" > version.mk
-echo "VER_MAJ=$VER_MAJ" >> version.mk
-echo "VER_MIN=$VER_MIN" >> version.mk
-echo "VER_REV=$VER_REV" >> version.mk
-echo "VER_DATE=$VER_DATE" >> version.mk
-echo "VER_GITREV=$VER_GITREV" >> version.mk
-echo "VER_GITHASH=$VER_GITHASH" >> version.mk
-echo "VER=$VER" >> version.mk
-echo "BUILDTIME=$BUILDTIME" >> version.mk
+echo "$VER_FULL"
-popd
\ No newline at end of file
+popd > /dev/null
\ No newline at end of file
diff --git a/ShellScripts/common/post_build.sh b/ShellScripts/common/post_build.sh
new file mode 100755
index 000000000..2910e77cb
--- /dev/null
+++ b/ShellScripts/common/post_build.sh
@@ -0,0 +1,133 @@
+#!/bin/bash
+# Processes Oolite data files after compilation
+
+run_script() {
+ SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" &> /dev/null && pwd)
+ pushd "$SCRIPT_DIR"
+
+ cd ../..
+
+ OS_EXT=""
+ if [ "$GNUSTEP_HOST_OS" = "mingw32" ]; then
+ # Windows only executable extension
+ OS_EXT=".exe"
+ fi
+
+ # Debug extension if needed
+ EXT=""
+ if [ "$DEBUG" = "yes" ]; then
+ EXT=".dbg"
+ fi
+
+ # Paths and binary names
+ PROGDIR="${OBJC_PROGRAM_NAME}.app"
+ SRC_BIN="${OBJC_PROGRAM_NAME}${OS_EXT}"
+ DEST_BIN="${OBJC_PROGRAM_NAME}${EXT}${OS_EXT}"
+
+ mkdir -p "$PROGDIR/Resources"
+
+ tools/mkmanifest.sh > "$PROGDIR/Resources/manifest.plist"
+
+ RESOURCE_DIRS=(
+ "Resources/AIs"
+ "Resources/Config"
+ "Resources/Scenarios"
+ "Resources/Scripts"
+ "Resources/Shaders"
+ "Resources/Binary/Images"
+ "Resources/Binary/Models"
+ "Resources/Binary/Music"
+ "Resources/Binary/Sounds"
+ "Resources/Binary/Textures"
+ "Schemata"
+ )
+ for resdir in "${RESOURCE_DIRS[@]}"; do
+ cp -rfu "$resdir" "$PROGDIR/Resources"
+ done
+
+ cp -fu Resources/README.TXT "$PROGDIR/Resources"
+ cp -fu Resources/InfoPlist.strings "$PROGDIR/Resources"
+ cp -fu src/Cocoa/Info-Oolite.plist "$PROGDIR/Resources/Info-gnustep.plist"
+ cp -fu "$GNUSTEP_OBJ_DIR_NAME/$SRC_BIN" "$PROGDIR/$DEST_BIN"
+
+ # Voice Data
+ if [ "$ESPEAK" = "yes" ]; then
+ if [ "$MODERN" = "yes" ]; then
+ if [ "$GNUSTEP_HOST_OS" = "mingw32" ]; then
+ # Windows modern espeak-ng-data
+ cp -rfu "$MINGW_PREFIX/share/espeak-ng-data" "$PROGDIR/Resources"
+ else
+ # Linux modern search paths for espeak-ng-data
+ SEARCH_PATHS=(
+ "/usr/local/share/espeak-ng-data"
+ "/usr/lib/x86_64-linux-gnu/espeak-ng-data"
+ "/usr/share/espeak-ng-data"
+ "/app/share/espeak-ng-data"
+ )
+ FOUND_DATA=false
+ for path in "${SEARCH_PATHS[@]}"; do
+ if [ -d "$path" ]; then
+ cp -rfu "$path" "$PROGDIR/Resources"
+ FOUND_DATA=true
+ break
+ fi
+ done
+
+ if [ "$FOUND_DATA" = false ]; then
+ echo "❌ espeak-ng-data not found in any known location!" >&2
+ return 1
+ fi
+ fi
+
+ # Replace specific voices with Oolite-specific versions
+ rm -f "$PROGDIR/Resources/espeak-ng-data/voices/default"
+ rm -f "$PROGDIR/Resources/espeak-ng-data/voices/!v/f2"
+ cp -fu deps/Cross-platform-deps/espeak-data/voices/!v/f2 "$PROGDIR/Resources/espeak-ng-data/voices/!v/f2"
+ cp -fu deps/Cross-platform-deps/espeak-data/voices/default "$PROGDIR/Resources/espeak-ng-data/voices/default"
+ else
+ # Legacy espeak-data
+ if [ "$GNUSTEP_HOST_OS" = "mingw32" ] || [ "$USE_DEPS" = "yes" ]; then
+ cp -rfu deps/Cross-platform-deps/espeak-data "$PROGDIR/Resources"
+ fi
+ fi
+ fi
+
+ # Strip binary if requested
+ if [ "$STRIP_BIN" = "yes" ]; then
+ ${STRIP:-strip} "$PROGDIR/$DEST_BIN"
+ fi
+
+ if [ "$GNUSTEP_HOST_OS" = "mingw32" ]; then
+ if [ "$MODERN" = "yes" ]; then
+ # Determine and copy DLL dependencies for modern Windows
+ ldd "$PROGDIR/$DEST_BIN" | grep "$MINGW_PREFIX" | awk '{print $3}' | xargs -I {} cp -rfu {} "$PROGDIR"
+ else
+ # Copy legacy Windows DLLs
+ if [ "$GNUSTEP_HOST_CPU" = "x86_64" ]; then
+ cp -rfu deps/Windows-deps/x86_64/DLLs/*.dll "$PROGDIR"
+ else
+ cp -rfu deps/Windows-deps/x86/DLLs/*.dll "$PROGDIR"
+ fi
+
+ if [ "$DEBUG" = "no" ]; then
+ rm -f "$PROGDIR/js32ECMAv5dbg.dll"
+ fi
+ rm -f "$PROGDIR/js32ECMAv5.dll"
+ fi
+ else
+ # Copy Linux-specific wrapper script
+ cp -fu ShellScripts/Linux/run_oolite.sh "$PROGDIR"
+ fi
+
+ echo "✅ Oolite post-build completed successfully"
+ popd
+}
+
+run_script "$@"
+status=$?
+
+# Exit only if not sourced
+if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
+ exit $status
+fi
+
diff --git a/installers/appimage/create_appimage.sh b/installers/appimage/create_appimage.sh
index 12fd11cdd..f67ab58f5 100755
--- a/installers/appimage/create_appimage.sh
+++ b/installers/appimage/create_appimage.sh
@@ -18,6 +18,11 @@ run_script() {
PROGDIR="../oolite.app"
cp -rf $PROGDIR/Resources $APPDIR/usr/bin
+ if (( $# == 1 )); then
+ echo "Including Basic-debug.oxp"
+ cp -rf AddOns $APPDIR/usr/bin
+ fi
+
curl -o linuxdeploy -L https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage
chmod +x linuxdeploy
@@ -58,9 +63,9 @@ run_script() {
fi
if (( $# == 1 )); then
- SUFFIX="${1}_${VER}"
+ SUFFIX="${1}_${VER_FULL}"
else
- SUFFIX="$VER"
+ SUFFIX="$VER_FULL"
fi
if ! check_rename "Oolite" "Oolite-*" $SUFFIX; then
diff --git a/installers/flatpak/create_flatpak.sh b/installers/flatpak/create_flatpak.sh
index 53005335f..ceb19bb9f 100755
--- a/installers/flatpak/create_flatpak.sh
+++ b/installers/flatpak/create_flatpak.sh
@@ -59,7 +59,7 @@ run_script() {
return 1
fi
- sed -i "/- name: oolite/a \ build-options:\n env:\n VERSION_OVERRIDE: \"$VER\"" \
+ sed -i "/- name: oolite/a \ build-options:\n env:\n VERSION_OVERRIDE: \"$VER_FULL\"" \
$MANIFEST
TOTAL_LINES=$(wc -l < $MANIFEST)
START_LINE=$((TOTAL_LINES - 3))
@@ -89,9 +89,9 @@ EOF
fi
if (( $# == 1 )); then
- SUFFIX="${1}_${VER}"
+ SUFFIX="${1}_${VER_FULL}"
else
- SUFFIX="$VER"
+ SUFFIX="$VER_FULL"
fi
if ! check_rename "space.oolite.Oolite" "space.oolite.Oolite.flatpak" $SUFFIX; then
diff --git a/installers/win32/OOlite.nsi b/installers/win32/OOlite.nsi
index f82f16c59..5bbc7b8e2 100644
--- a/installers/win32/OOlite.nsi
+++ b/installers/win32/OOlite.nsi
@@ -33,7 +33,7 @@
!endif
!ifndef SNAPSHOT
-!ifndef DEPLOYMENT
+!ifndef DEPLOYMENT
!define EXTVER "-test" ; Official distribution with OXP developer tools
!define ADDCHANGELOG 1 ; Official distributions go with a changelog file
!else
@@ -81,7 +81,7 @@ RequestExecutionLevel user
VIAddVersionKey "ProductName" "Oolite"
VIAddVersionKey "FileDescription" "A space combat/trading game, inspired by Elite."
-VIAddVersionKey "LegalCopyright" " 2003-2026 Giles Williams, Jens Ayton and contributors"
+VIAddVersionKey "LegalCopyright" "� 2003-2026 Giles Williams, Jens Ayton and contributors"
VIAddVersionKey "FileVersion" "${VER}"
VIAddVersionKey "ProductVersion" "${VER}"
!ifdef SNAPSHOT
@@ -133,7 +133,7 @@ SectionEnd
Section "Basic-debug.OXP" ooDebugOXP
; Do not use any of the Debug OXP files when we are building Deployment
SetOutPath $INSTDIR
-File /r "..\..\AddOns"
+File /r "..\..\build\AddOns"
SectionEnd
; Below are the descriptions of the two component sections
@@ -250,11 +250,11 @@ ${If} ${ADDCHANGELOG} == "1"
File "..\..\Doc\CHANGELOG.TXT"
${EndIf}
File /r /x .git /x .svn /x *~ "${DST}"
-
-; Generate version info
-FileOpen $9 release.txt w ;Opens a Empty File and fills it
-FileWrite $9 "${VER}$\r$\n"
-FileClose $9 ;Closes the filled file
+
+; Generate version info
+FileOpen $9 release.txt w ;Opens a Empty File and fills it
+FileWrite $9 "${VER}$\r$\n"
+FileClose $9 ;Closes the filled file
WriteUninstaller "$INSTDIR\UninstOolite.exe"
diff --git a/installers/win32/create_nsis.sh b/installers/win32/create_nsis.sh
index 2abf5cb8e..19a266325 100644
--- a/installers/win32/create_nsis.sh
+++ b/installers/win32/create_nsis.sh
@@ -20,7 +20,7 @@ run_script() {
echo "!define VER_REV ${VER_REV}" >> OoliteVersions.nsh
echo "!define VER_GITREV ${VER_GITREV}" >> OoliteVersions.nsh
echo "!define VER_GITHASH ${VER_GITHASH}" >> OoliteVersions.nsh
- echo "!define VERSION ${VER}" >> OoliteVersions.nsh
+ echo "!define VERSION ${VER_FULL}" >> OoliteVersions.nsh
echo "!define BUILDTIME \"${BUILDTIME}\"" >> OoliteVersions.nsh
echo "!define BUILDHOST_IS64BIT 1" >> OoliteVersions.nsh
diff --git a/src/Core/Entities/PlayerEntity.m b/src/Core/Entities/PlayerEntity.m
index ce584003f..0acbfdb83 100644
--- a/src/Core/Entities/PlayerEntity.m
+++ b/src/Core/Entities/PlayerEntity.m
@@ -10075,7 +10075,7 @@ - (void) setGuiToIntroFirstGo:(BOOL)justCobra
if ([[arguments objectAtIndex:i] isEqual:@"-showversion"])
{
OOGUIRow ms_start = msgLine;
- NSString *version = [NSString stringWithFormat:@"Version %@", [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"]];
+ NSString *version = @"Version " @OO_VERSION_FULL;
OOGUIRow i = msgLine = [gui addLongText:version startingAtRow:ms_start align:GUI_ALIGN_CENTER];
for (i-- ; i >= ms_start; i--)
{
diff --git a/src/Core/OOLogHeader.m b/src/Core/OOLogHeader.m
index 1839d8839..538a02106 100644
--- a/src/Core/OOLogHeader.m
+++ b/src/Core/OOLogHeader.m
@@ -161,10 +161,10 @@ void OOPrintLogHeader(void)
#endif
NSString *versionString = nil;
- #if (defined (SNAPSHOT_BUILD) && defined (OOLITE_SNAPSHOT_VERSION))
- versionString = @"development version " OOLITE_SNAPSHOT_VERSION;
+ #if (defined (SNAPSHOT_BUILD))
+ versionString = @"development version " @OO_VERSION_FULL;
#else
- versionString = [NSString stringWithFormat:@"version %@", [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"]];
+ versionString = @"version " @OO_VERSION_FULL;
#endif
if (versionString == nil) versionString = @"";
diff --git a/src/Core/Universe.m b/src/Core/Universe.m
index ee70aca4e..8c3afa3e1 100644
--- a/src/Core/Universe.m
+++ b/src/Core/Universe.m
@@ -5229,8 +5229,8 @@ - (void) drawUniverse
// should come after the HUD to avoid it being overlapped by it
[self drawMessage];
-#if (defined (SNAPSHOT_BUILD) && defined (OOLITE_SNAPSHOT_VERSION))
- [self drawWatermarkString:@"Development version " @OOLITE_SNAPSHOT_VERSION];
+#if (defined (SNAPSHOT_BUILD))
+ [self drawWatermarkString:@"Development version " @OO_VERSION_FULL];
#endif
OOLog(@"universe.profile.drawHUD", @"%@", @"End HUD drawing");
diff --git a/src/SDL/main.m b/src/SDL/main.m
index 7f75b523d..dd24fb586 100644
--- a/src/SDL/main.m
+++ b/src/SDL/main.m
@@ -49,6 +49,11 @@
uint32_t gDebugFlags = 0;
#endif
+// This macro is normally defined in the build command
+#ifndef OO_VERSION_FULL
+#define OO_VERSION_FULL "Undefined"
+#endif
+
/**
* \ingroup cli
* Entry point for Linux and Windows systems.
@@ -186,6 +191,7 @@ int main(int argc, char *argv[])
"--xml"TABS3 TABS4"When compiling or exporting\n"TABS3 TABS4"system descriptions, use xml\n"TABS3 TABS4"format *\n"
"\n"
"Options marked with \"*\" are available only in Test Release configuration.\n"
+ "Version "OO_VERSION_FULL"\n"
"Built with "
#if OOLITE_HAVE_CLANG
"Clang version " STRINGIFY(__clang_major__) "." STRINGIFY(__clang_minor__) "." STRINGIFY(__clang_patchlevel__)
diff --git a/tools/mkmanifest.sh b/tools/mkmanifest.sh
index 0153bff47..1d380a8b6 100755
--- a/tools/mkmanifest.sh
+++ b/tools/mkmanifest.sh
@@ -18,7 +18,12 @@ echo "{"
echo " title = \"Oolite core\";"
echo " identifier = \"org.oolite.oolite\";"
echo " "
-echo " version = \"$OOLITE_VERSION\";"
+echo " version = \"$VER_FULL\";"
+if [ "$DEPLOYMENT_RELEASE_CONFIGURATION" = "yes" ]; then
+ echo " debug_functionality_support = no;"
+else
+ echo " debug_functionality_support = yes;"
+fi
echo " required_oolite_version = \"$OOLITE_VERSION\";"
echo " "
echo " license = \"GPL 2+ / CC-BY-NC-SA 3.0 - see LICENSE.md for details\";"