Add configure option to enable portable builds on Linux
This commit is contained in:
parent
565b7cb86e
commit
7094bd1e20
5 changed files with 81 additions and 11 deletions
|
@ -57,7 +57,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
|
||||
|
|
46
configure.ac
46
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,
|
||||
|
@ -566,6 +567,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
|
||||
###############
|
||||
|
@ -614,12 +641,13 @@ AC_MSG_RESULT([
|
|||
Configure settings
|
||||
Install prefix: $prefix
|
||||
Revision: $BUILD_GIT_VERSION_STRING
|
||||
Debug $enable_debug
|
||||
CFLAGS $CFLAGS
|
||||
CXXFLAGS $CXXFLAGS
|
||||
CPPFLAGS $CPPFLAGS
|
||||
LDFLAGS $LDFLAGS
|
||||
LIBS $LIBS
|
||||
Debug: $enable_debug
|
||||
AppImage: $enable_appimage
|
||||
CFLAGS: $CFLAGS
|
||||
CXXFLAGS: $CXXFLAGS
|
||||
CPPFLAGS: $CPPFLAGS
|
||||
LDFLAGS: $LDFLAGS
|
||||
LIBS: $LIBS
|
||||
|
||||
Default Settings
|
||||
Audio Player: $DEFAULT_PLAYER_AUDIO
|
||||
|
|
|
@ -22,6 +22,12 @@
|
|||
#include <boost/filesystem/operations.hpp>
|
||||
#include <pwd.h>
|
||||
|
||||
#ifndef __APPLE__
|
||||
#include <fstream>
|
||||
#include <stdlib.h>
|
||||
#include <libgen.h>
|
||||
#endif
|
||||
|
||||
namespace {
|
||||
#ifndef __APPLE__
|
||||
std::string home_dir() {
|
||||
|
@ -35,7 +41,30 @@ 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 = "";
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
exe = realpath("/proc/self/file", NULL);
|
||||
#else
|
||||
exe = realpath("/proc/self/exe", NULL);
|
||||
#endif
|
||||
|
||||
if (!exe) return "";
|
||||
|
||||
if ((dir = dirname(exe)) && strlen(dir) > 0) {
|
||||
data = dir;
|
||||
}
|
||||
|
||||
free(exe);
|
||||
|
||||
return data;
|
||||
}
|
||||
#endif /* APPIMAGE_BUILD */
|
||||
#endif /* !__APPLE__ */
|
||||
}
|
||||
|
||||
namespace agi {
|
||||
|
@ -44,14 +73,23 @@ 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", Decode("?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");
|
||||
SetToken("?local", app_support/"Aegisub");
|
||||
SetToken("?data", agi::util::GetBundleSharedSupportDirectory());
|
||||
SetToken("?dictionary", agi::util::GetBundleSharedSupportDirectory() + "/dictionaries");
|
||||
SetToken("?dictionary", Decode("?data/dictionaries"));
|
||||
#endif
|
||||
SetToken("?temp", boost::filesystem::temp_directory_path());
|
||||
}
|
||||
|
|
|
@ -202,6 +202,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
|
||||
|
||||
|
|
|
@ -55,6 +55,9 @@ wxTranslations *AegisubLocale::GetTranslations() {
|
|||
if (!translations) {
|
||||
wxTranslations::Set(translations = new wxTranslations);
|
||||
wxFileTranslationsLoader::AddCatalogLookupPathPrefix(config::path->Decode("?data/locale/").wstring());
|
||||
#if !defined(_WIN32) && !defined(__APPLE__) && !defined(APPIMAGE_BUILD)
|
||||
wxFileTranslationsLoader::AddCatalogLookupPathPrefix(P_LOCALE);
|
||||
#endif
|
||||
}
|
||||
return translations;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue