Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:X0F:branches:multimedia
aegisub
aegisub-PR160.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File aegisub-PR160.patch of Package aegisub
From fd599001d001da4dccee4cf2b5ac6afe6e35c233 Mon Sep 17 00:00:00 2001 From: darealshinji <djcj@gmx.de> Date: Sun, 1 Jan 2023 16:31:15 +0100 Subject: [PATCH 1/2] enable optional relocatable builds on Linux --- Makefile.inc.in | 2 +- configure.ac | 34 +++++++++++++++++++++++++++++++--- libaegisub/unix/path.cpp | 33 +++++++++++++++++++++++++++++++++ src/Makefile | 1 + src/aegisublocale.cpp | 3 +++ 5 files changed, 69 insertions(+), 4 deletions(-) diff --git a/Makefile.inc.in b/Makefile.inc.in index 4e5471b124..642f882ef9 100644 --- a/Makefile.inc.in +++ b/Makefile.inc.in @@ -58,7 +58,7 @@ P_LOCALE = @localedir@ P_APPDATA = @P_APPDATA@ P_DESKTOP = @P_DESKTOP@ P_ICON = @P_ICON@ -P_DATA = $(P_DATAROOT)/aegisub/ +P_DATA = @P_DATA@ ############### # LIBRARY FLAGS diff --git a/configure.ac b/configure.ac index 856e38993a..1a09f1b9d0 100644 --- a/configure.ac +++ b/configure.ac @@ -50,9 +50,10 @@ AC_SUBST(AEGISUB_COMMAND) AC_DEFINE_UNQUOTED([AEGISUB_COMMAND], ["${AEGISUB_COMMAND}"], [Name of the Aegisub executable]) # Name of gettext catalog. -AEGISUB_CATALOG="aegisub" -AC_SUBST(AEGISUB_CATALOG) -AC_DEFINE_UNQUOTED([AEGISUB_CATALOG], ["${AEGISUB_CATALOG}"], [Name of the Aegisub gettext catalog]) +# See '--enable-appimage' +#AEGISUB_CATALOG="aegisub" +#AC_SUBST(AEGISUB_CATALOG) +#AC_DEFINE_UNQUOTED([AEGISUB_CATALOG], ["${AEGISUB_CATALOG}"], [Name of the Aegisub gettext catalog]) # Handle location of appdata files: https://www.freedesktop.org/software/appstream/docs/chap-Metadata.html#spec-component-location AC_ARG_WITH(appdata-dir, @@ -568,6 +569,32 @@ AC_SUBST(DEFAULT_PLAYER_AUDIO) # Set some friendly strings if some of the above aren't detected. DEFAULT_PLAYER_AUDIO=${DEFAULT_PLAYER_AUDIO:-NONE} +################ +# AppImage build +################ +# If enabled, localization and automation data is obtained from the binary's +# path and never from the system's root. It will also install files that +# Aegisub will lookup next to the binary, so be careful with "make install". +AC_ARG_ENABLE(appimage, + AS_HELP_STRING([--enable-appimage], + [Enable certain relocation settings useful for building AppImages or generic portable builds [no]])) + +P_DATA="$datarootdir/aegisub" +AEGISUB_CATALOG="aegisub" + +AS_IF([test x$enable_appimage = xyes], [ + AC_DEFINE([APPIMAGE_BUILD], [], [Define to enable AppImage compatible relocations]) + P_DATA="$bindir" + localedir="$bindir/locale" + # use a different catalog name + AEGISUB_CATALOG="aegisub-appimage" +]) + +enable_appimage=${enable_appimage:-no} +AC_SUBST(P_DATA) +AC_SUBST(AEGISUB_CATALOG) +AC_DEFINE_UNQUOTED([AEGISUB_CATALOG], ["${AEGISUB_CATALOG}"], [Name of the Aegisub gettext catalog]) + ############### # Misc settings ############### @@ -617,6 +644,7 @@ Configure settings Install prefix: $prefix Revision: $BUILD_GIT_VERSION_STRING Debug $enable_debug + AppImage $enable_appimage CFLAGS $CFLAGS CXXFLAGS $CXXFLAGS CPPFLAGS $CPPFLAGS diff --git a/libaegisub/unix/path.cpp b/libaegisub/unix/path.cpp index 0541e0dbe4..d0eb76d68f 100644 --- a/libaegisub/unix/path.cpp +++ b/libaegisub/unix/path.cpp @@ -22,6 +22,12 @@ #include <boost/filesystem/operations.hpp> #include <pwd.h> +#ifndef __APPLE__ +#include <libgen.h> +#include <stdlib.h> +#include <string.h> +#endif + namespace { #ifndef __APPLE__ std::string home_dir() { @@ -35,6 +41,24 @@ std::string home_dir() { throw agi::EnvironmentError("Could not get home directory. Make sure HOME is set."); } + +#ifdef APPIMAGE_BUILD +std::string exe_dir() { + char *exe, *dir; + std::string data = ""; + + exe = realpath("/proc/self/exe", NULL); + if (!exe) return ""; + + if ((dir = dirname(exe)) && strlen(dir) > 0) { + data = dir; + } + + free(exe); + + return data; +} +#endif #endif } @@ -44,8 +68,17 @@ void Path::FillPlatformSpecificPaths() { agi::fs::path home = home_dir(); SetToken("?user", home/".aegisub"); SetToken("?local", home/".aegisub"); + +#ifdef APPIMAGE_BUILD + agi::fs::path data = exe_dir(); + if (data == "") data = home/".aegisub"; + SetToken("?data", data); + SetToken("?dictionary", data/"dictionaries"); +#else SetToken("?data", P_DATA); SetToken("?dictionary", "/usr/share/hunspell"); +#endif + #else agi::fs::path app_support = agi::util::GetApplicationSupportDirectory(); SetToken("?user", app_support/"Aegisub"); diff --git a/src/Makefile b/src/Makefile index 77928e8178..80119d1994 100644 --- a/src/Makefile +++ b/src/Makefile @@ -209,6 +209,7 @@ $(d)auto4_lua.o_FLAGS := $(CFLAGS_LUA) $(d)auto4_lua_assfile.o_FLAGS := $(CFLAGS_LUA) $(d)auto4_lua_dialog.o_FLAGS := $(CFLAGS_LUA) $(d)auto4_lua_progresssink.o_FLAGS := $(CFLAGS_LUA) +$(d)aegisublocale.o_FLAGS := -DP_LOCALE=\"$(P_LOCALE)\" $(src_OBJ): $(d)libresrc/bitmap.h $(d)libresrc/default_config.h diff --git a/src/aegisublocale.cpp b/src/aegisublocale.cpp index de8df7296d..b9e4184e94 100644 --- a/src/aegisublocale.cpp +++ b/src/aegisublocale.cpp @@ -55,6 +55,9 @@ wxTranslations *AegisubLocale::GetTranslations() { if (!translations) { wxTranslations::Set(translations = new wxTranslations); wxFileTranslationsLoader::AddCatalogLookupPathPrefix(config::path->Decode("?data/locale/").wstring()); +#if defined(P_LOCALE) && !defined(_WIN32) && !defined(__APPLE__) && !defined(APPIMAGE_BUILD) + wxFileTranslationsLoader::AddCatalogLookupPathPrefix(P_LOCALE); +#endif } return translations; } From 48fb71827f31afa6e8dc54127d4937cda150629c Mon Sep 17 00:00:00 2001 From: darealshinji <djcj@gmx.de> Date: Wed, 10 May 2023 23:32:12 +0200 Subject: [PATCH 2/2] use hunspell directory by default --- libaegisub/unix/path.cpp | 35 ++++++++++++++++------------------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/libaegisub/unix/path.cpp b/libaegisub/unix/path.cpp index d0eb76d68f..2215d7bec6 100644 --- a/libaegisub/unix/path.cpp +++ b/libaegisub/unix/path.cpp @@ -23,9 +23,8 @@ #include <pwd.h> #ifndef __APPLE__ -#include <libgen.h> #include <stdlib.h> -#include <string.h> +#include <libgen.h> #endif namespace { @@ -47,45 +46,43 @@ std::string exe_dir() { char *exe, *dir; std::string data = ""; - exe = realpath("/proc/self/exe", NULL); - if (!exe) return ""; + if ((exe = realpath("/proc/self/exe", NULL)) == NULL) + return ""; - if ((dir = dirname(exe)) && strlen(dir) > 0) { + if ((dir = dirname(exe)) && strlen(dir) > 0) data = dir; - } free(exe); return data; } -#endif -#endif +#endif // APPIMAGE_BUILD +#endif // __APPLE__ } namespace agi { void Path::FillPlatformSpecificPaths() { -#ifndef __APPLE__ +#ifdef __APPLE__ + agi::fs::path app_support = agi::util::GetApplicationSupportDirectory(); + SetToken("?user", app_support/"Aegisub"); + SetToken("?local", app_support/"Aegisub"); + SetToken("?data", agi::util::GetBundleSharedSupportDirectory()); + SetToken("?dictionary", agi::util::GetBundleSharedSupportDirectory() + "/dictionaries"); +#else agi::fs::path home = home_dir(); SetToken("?user", home/".aegisub"); SetToken("?local", home/".aegisub"); + SetToken("?dictionary", "/usr/share/hunspell"); #ifdef APPIMAGE_BUILD agi::fs::path data = exe_dir(); - if (data == "") data = home/".aegisub"; + if (data.empty()) data = home/".aegisub"; SetToken("?data", data); - SetToken("?dictionary", data/"dictionaries"); #else SetToken("?data", P_DATA); - SetToken("?dictionary", "/usr/share/hunspell"); #endif +#endif // __APPLE__ -#else - agi::fs::path app_support = agi::util::GetApplicationSupportDirectory(); - SetToken("?user", app_support/"Aegisub"); - SetToken("?local", app_support/"Aegisub"); - SetToken("?data", agi::util::GetBundleSharedSupportDirectory()); - SetToken("?dictionary", agi::util::GetBundleSharedSupportDirectory() + "/dictionaries"); -#endif SetToken("?temp", boost::filesystem::temp_directory_path()); }
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor