[mupen64plus] 101/262: Use XDG Base Directory compliant directories

Sven Eckelmann ecsv-guest at moszumanska.debian.org
Thu Nov 26 05:59:22 UTC 2015


This is an automated email from the git hooks/post-receive script.

ecsv-guest pushed a commit to branch master
in repository mupen64plus.

commit f5cf8daf81aec5d04c86f199f4bae72167cc05ce
Author: Sven Eckelmann <sven.eckelmann at gmx.de>
Date:   Tue Sep 1 00:29:42 2009 +0200

    Use XDG Base Directory compliant directories
    
    The freedesktop standard for basedir[1] defines three different types of
    user directories which mupen64plus uses. They are defined by environment
    variables and in the case if they are absend by well defined standard
    paths.
    
     * Data directory ($XDG_DATA_HOME); default: $HOME/.local/share/
       - save, screenshots, hires_texture, texture_dump
     * Config directory ($XDG_CONFIG_HOME); default: $HOME/.config/
       - mupen64plus.conf, configuration files of plugins
     * Cache directory ($XDG_DATA_HOME); default: $HOME/.cache/
       - rombrowser.cache and all other files which could be deleted
         without loosing essential data
    
    Specific directories for each tool should be created below that base
    directories. libxdg-basedir can be used to find the correct paths
    without caring much about the actual specification.
    
    The current config dir has to be splitted in these three different
    directories. That also means that plugins have to be informed about that
    dirs. New functions SetDataDir and SetCacheDir have been specified
    inside the API headers and implemented were the plugin would benefit
    from it. This is the case in rice_video for texture_dump and
    hires_texture.
    
    The user can also override the data and cache directories by the new
    commandline options --datadir and --cachedir.
    
    As there is no real specification for Windows available the behavior on
    that platform was not changed.
    
    [1] http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
---
 debian/NEWS                          |  26 +
 debian/changelog                     |   5 +
 debian/control                       |   3 +-
 debian/patches/116-xdg-basedir.patch | 980 +++++++++++++++++++++++++++++++++++
 debian/patches/series                |   1 +
 5 files changed, 1014 insertions(+), 1 deletion(-)

diff --git a/debian/NEWS b/debian/NEWS
new file mode 100644
index 0000000..5b32f55
--- /dev/null
+++ b/debian/NEWS
@@ -0,0 +1,26 @@
+mupen64plus (1.5+dfsg1-2) unstable; urgency=low
+
+  The used paths in which mupen64plus saves its data for every user was
+  changed to be compliant to the XDG Base Directory Specification[1].
+
+  To use the previously generated configuration and data files, they must be
+  moved to the new directories. mupen64plus.conf has to be adjusted slightly
+  to point to find the new directory to save the rombrowser cache.
+  This can be done in some simple steps, but be sure that you have a backup
+  of the files inside $HOME/.mupen64plus
+
+  # mkdir -p "$HOME"/.config/mupen64plus/
+  # mkdir -p "$HOME"/.local/share/mupen64plus/
+  # mkdir -p "$HOME"/.cache/mupen64plus/
+  # mv "$HOME"/.mupen64plus/*.conf "$HOME"/.mupen64plus/*.cfg \
+       "$HOME"/.mupen64plus/*.ini "$HOME"/.config/mupen64plus/
+  # mv "$HOME"/.mupen64plus/save "$HOME"/.mupen64plus/screenshots \
+       "$HOME"/.mupen64plus/hires_texture "$HOME"/.mupen64plus/texture_dump \
+       "$HOME"/.local/share/mupen64plus/
+  # mv "$HOME"/.mupen64plus/rombrowser.cache "$HOME"/.cache/mupen64plus/
+  # sed -i "s/.*RomCacheFile\\s*=.*//" \
+           "$HOME"/.config/mupen64plus/mupen64plus.conf
+
+  [1] http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
+
+ -- Sven Eckelmann <sven.eckelmann at gmx.de>  Tue, 01 Sep 2009 00:18:45 +0200
diff --git a/debian/changelog b/debian/changelog
index 695ffda..fa7f1ba 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -5,9 +5,14 @@ mupen64plus (1.5+dfsg1-2) UNRELEASED; urgency=low
       (Closes: #543552)
     - Add 115-fix-7z-subfolder.patch, fix crash in romcache when reading 7zip
       archive with subfolders
+    - Add 116-xdg-basedir.patch, Use "XDG Base Directory" compliant directories
+      for files for each user (Closes: #544428)
   * debian/control:
     - Depend on liblzma-dev and pkg-config for lzma and xz support
+    - Depend on libxdg-basedir-dev to support xdg-basedir standard
   * Add README.source with informations about patch management
+  * Add NEWS.Debian with information about migration of old data and
+    configuration to new xdg compliant directories
 
  -- Sven Eckelmann <sven.eckelmann at gmx.de>  Tue, 25 Aug 2009 15:21:33 +0200
 
diff --git a/debian/control b/debian/control
index 747571d..89a51d3 100644
--- a/debian/control
+++ b/debian/control
@@ -11,7 +11,8 @@ Build-Depends: debhelper (>= 7.0.50), quilt (>= 0.46-7), libsdl1.2-dev,
  libsdl-ttf2.0-dev, libfreetype6-dev, libglib2.0-dev, libgtk2.0-dev,
  libsamplerate0-dev, libpng12-dev | libpng-dev, libbz2-dev,
  zlib1g-dev | libz-dev, libgl1-mesa-dev | libgl-dev,
- libglu1-mesa-dev | libglu-dev, binutils-dev, pkg-config, liblzma-dev
+ libglu1-mesa-dev | libglu-dev, binutils-dev, pkg-config, liblzma-dev,
+ libxdg-basedir-dev
 
 Package: mupen64plus
 Architecture: any
diff --git a/debian/patches/116-xdg-basedir.patch b/debian/patches/116-xdg-basedir.patch
new file mode 100644
index 0000000..0963067
--- /dev/null
+++ b/debian/patches/116-xdg-basedir.patch
@@ -0,0 +1,980 @@
+From 2fbc059876dfe514195163c5b87c8658ca715402 Mon Sep 17 00:00:00 2001
+From: Sven Eckelmann <sven.eckelmann at gmx.de>
+Date: Mon, 31 Aug 2009 23:29:24 +0200
+Subject: [PATCH] Use XDG Base Directory compliant directories
+
+The freedesktop standard for basedir[1] defines three different types of
+user directories which mupen64plus uses. They are defined by environment
+variables and in the case if they are absend by well defined standard
+paths.
+
+ * Data directory ($XDG_DATA_HOME); default: $HOME/.local/share/
+   - save, screenshots, hires_texture, texture_dump
+ * Config directory ($XDG_CONFIG_HOME); default: $HOME/.config/
+   - mupen64plus.conf, configuration files of plugins
+ * Cache directory ($XDG_DATA_HOME); default: $HOME/.cache/
+   - rombrowser.cache and all other files which could be deleted
+     without loosing essential data
+
+Specific directories for each tool should be created below that base
+directories. libxdg-basedir can be used to find the correct paths
+without caring much about the actual specification.
+
+The current config dir has to be splitted in these three different
+directories. That also means that plugins have to be informed about that
+dirs. New functions SetDataDir and SetCacheDir have been specified
+inside the API headers and implemented were the plugin would benefit
+from it. This is the case in rice_video for texture_dump and
+hires_texture.
+
+The user can also override the data and cache directories by the new
+commandline options --datadir and --cachedir.
+
+As there is no real specification for Windows available the behavior on
+that platform was not changed.
+
+[1] http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
+
+Signed-off-by: Sven Eckelmann <sven.eckelmann at gmx.de>
+---
+ Makefile                      |    4 +-
+ blight_input/Input_1.1.h      |   22 ++++++++
+ doc/Audio_1.1.h               |   22 ++++++++
+ doc/Audio_1.2.h               |   22 ++++++++
+ doc/Graphics_1.3.h            |   22 ++++++++
+ doc/Input_1.1.h               |   22 ++++++++
+ dummy_audio/Audio_1.1.h       |   22 ++++++++
+ dummy_input/Input_1.1.h       |   22 ++++++++
+ dummy_video/Graphics_1.3.h    |   22 ++++++++
+ glide64/Gfx1.3.h              |   22 ++++++++
+ jttl_audio/Audio_1.2.h        |   22 ++++++++
+ main/main.c                   |  121 +++++++++++++++++++++++++++++++++++------
+ main/main.h                   |    2 +
+ main/plugin.c                 |   12 ++++-
+ main/plugin.h                 |    2 +-
+ main/romcache.c               |    2 +-
+ pre.mk                        |    9 +++
+ rice_video/Graphics_1.3.h     |   22 ++++++++
+ rice_video/TextureFilters.cpp |    8 ++--
+ rice_video/Video.cpp          |   80 ++++++++++++++++++++++++++--
+ rsp_hle/Audio_1.1.h           |   22 ++++++++
+ 21 files changed, 473 insertions(+), 31 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index 839ab60..76c6489 100644
+--- a/Makefile
++++ b/Makefile
+@@ -234,9 +234,9 @@ SHARE = $(shell grep CONFIG_PATH config.h | cut -d '"' -f 2)
+ # set primary objects and libraries for all outputs
+ ALL = mupen64plus $(PLUGINS)
+ OBJECTS = $(OBJ_CORE) $(OBJ_DYNAREC) $(OBJ_OPENGL)
+-LIBS = $(SDL_LIBS) $(LIBGL_LIBS) $(LZMA_LIBS) -lbz2
++LIBS = $(SDL_LIBS) $(LIBGL_LIBS) $(LZMA_LIBS) $(XDGBASEDIR_LIBS) -lbz2
+ STATIC_LIBS =
+-CFLAGS+=$(LZMA_FLAGS)
++CFLAGS+=$(LZMA_FLAGS) $(XDGBASEDIR_FLAGS)
+ 
+ # add extra objects and libraries for selected options
+ ifeq ($(DBG), 1)
+diff --git a/blight_input/Input_1.1.h b/blight_input/Input_1.1.h
+index c2ae4a6..1a22c4b 100644
+--- a/blight_input/Input_1.1.h
++++ b/blight_input/Input_1.1.h
+@@ -251,6 +251,28 @@ EXPORT void CALL WM_KeyUp( WPARAM wParam, LPARAM lParam );
+ *******************************************************************/
+ EXPORT void CALL SetConfigDir( char *configDir );
+ 
++/******************************************************************
++   NOTE: THIS HAS BEEN ADDED FOR MUPEN64PLUS AND IS NOT PART OF THE
++         ORIGINAL SPEC
++  Function: SetDataDir
++  Purpose:  To pass the location where data files should be read/
++            written to.
++  input:    path to data directory
++  output:   none
++*******************************************************************/
++EXPORT void CALL SetDataDir( char *dataDir );
++
++/******************************************************************
++   NOTE: THIS HAS BEEN ADDED FOR MUPEN64PLUS AND IS NOT PART OF THE
++         ORIGINAL SPEC
++  Function: SetCacheDir
++  Purpose:  To pass the location where cache files should be read/
++            written to.
++  input:    path to cache directory
++  output:   none
++*******************************************************************/
++EXPORT void CALL SetCacheDir( char *cacheDir );
++
+ #if defined(__cplusplus)
+ }
+ #endif
+diff --git a/doc/Audio_1.1.h b/doc/Audio_1.1.h
+index ea46b2d..7a6f68b 100644
+--- a/doc/Audio_1.1.h
++++ b/doc/Audio_1.1.h
+@@ -224,6 +224,28 @@ EXPORT void CALL RomClosed (void);
+ *******************************************************************/
+ EXPORT void CALL SetConfigDir( char *configDir );
+ 
++/******************************************************************
++   NOTE: THIS HAS BEEN ADDED FOR MUPEN64PLUS AND IS NOT PART OF THE
++         ORIGINAL SPEC
++  Function: SetDataDir
++  Purpose:  To pass the location where data files should be read/
++            written to.
++  input:    path to data directory
++  output:   none
++*******************************************************************/
++EXPORT void CALL SetDataDir( char *dataDir );
++
++/******************************************************************
++   NOTE: THIS HAS BEEN ADDED FOR MUPEN64PLUS AND IS NOT PART OF THE
++         ORIGINAL SPEC
++  Function: SetCacheDir
++  Purpose:  To pass the location where cache files should be read/
++            written to.
++  input:    path to cache directory
++  output:   none
++*******************************************************************/
++EXPORT void CALL SetCacheDir( char *cacheDir );
++
+ #if defined(__cplusplus)
+ }
+ #endif
+diff --git a/doc/Audio_1.2.h b/doc/Audio_1.2.h
+index 0decf07..43045c2 100644
+--- a/doc/Audio_1.2.h
++++ b/doc/Audio_1.2.h
+@@ -239,6 +239,28 @@ EXPORT void CALL SetConfigDir( char *configDir );
+ /******************************************************************
+    NOTE: THIS HAS BEEN ADDED FOR MUPEN64PLUS AND IS NOT PART OF THE
+          ORIGINAL SPEC
++  Function: SetDataDir
++  Purpose:  To pass the location where data files should be read/
++            written to.
++  input:    path to data directory
++  output:   none
++*******************************************************************/
++EXPORT void CALL SetDataDir( char *dataDir );
++
++/******************************************************************
++   NOTE: THIS HAS BEEN ADDED FOR MUPEN64PLUS AND IS NOT PART OF THE
++         ORIGINAL SPEC
++  Function: SetCacheDir
++  Purpose:  To pass the location where cache files should be read/
++            written to.
++  input:    path to cache directory
++  output:   none
++*******************************************************************/
++EXPORT void CALL SetCacheDir( char *cacheDir );
++
++/******************************************************************
++   NOTE: THIS HAS BEEN ADDED FOR MUPEN64PLUS AND IS NOT PART OF THE
++         ORIGINAL SPEC
+   Function: VolumeUp
+   Purpose:  To increase the audio volume
+   input:    none
+diff --git a/doc/Graphics_1.3.h b/doc/Graphics_1.3.h
+index 0f7843d..ed933b3 100644
+--- a/doc/Graphics_1.3.h
++++ b/doc/Graphics_1.3.h
+@@ -306,6 +306,28 @@ EXPORT void CALL SetConfigDir( char *configDir );
+ /******************************************************************
+    NOTE: THIS HAS BEEN ADDED FOR MUPEN64PLUS AND IS NOT PART OF THE
+          ORIGINAL SPEC
++  Function: SetDataDir
++  Purpose:  To pass the location where data files should be read/
++            written to.
++  input:    path to data directory
++  output:   none
++*******************************************************************/
++EXPORT void CALL SetDataDir( char *dataDir );
++
++/******************************************************************
++   NOTE: THIS HAS BEEN ADDED FOR MUPEN64PLUS AND IS NOT PART OF THE
++         ORIGINAL SPEC
++  Function: SetCacheDir
++  Purpose:  To pass the location where cache files should be read/
++            written to.
++  input:    path to cache directory
++  output:   none
++*******************************************************************/
++EXPORT void CALL SetCacheDir( char *cacheDir );
++
++/******************************************************************
++   NOTE: THIS HAS BEEN ADDED FOR MUPEN64PLUS AND IS NOT PART OF THE
++         ORIGINAL SPEC
+   Function: SetRenderingCallback
+   Purpose:  Allows emulator to register a callback function that will
+             be called by the graphics plugin just before the the
+diff --git a/doc/Input_1.1.h b/doc/Input_1.1.h
+index c2ae4a6..1a22c4b 100644
+--- a/doc/Input_1.1.h
++++ b/doc/Input_1.1.h
+@@ -251,6 +251,28 @@ EXPORT void CALL WM_KeyUp( WPARAM wParam, LPARAM lParam );
+ *******************************************************************/
+ EXPORT void CALL SetConfigDir( char *configDir );
+ 
++/******************************************************************
++   NOTE: THIS HAS BEEN ADDED FOR MUPEN64PLUS AND IS NOT PART OF THE
++         ORIGINAL SPEC
++  Function: SetDataDir
++  Purpose:  To pass the location where data files should be read/
++            written to.
++  input:    path to data directory
++  output:   none
++*******************************************************************/
++EXPORT void CALL SetDataDir( char *dataDir );
++
++/******************************************************************
++   NOTE: THIS HAS BEEN ADDED FOR MUPEN64PLUS AND IS NOT PART OF THE
++         ORIGINAL SPEC
++  Function: SetCacheDir
++  Purpose:  To pass the location where cache files should be read/
++            written to.
++  input:    path to cache directory
++  output:   none
++*******************************************************************/
++EXPORT void CALL SetCacheDir( char *cacheDir );
++
+ #if defined(__cplusplus)
+ }
+ #endif
+diff --git a/dummy_audio/Audio_1.1.h b/dummy_audio/Audio_1.1.h
+index ea46b2d..7a6f68b 100644
+--- a/dummy_audio/Audio_1.1.h
++++ b/dummy_audio/Audio_1.1.h
+@@ -224,6 +224,28 @@ EXPORT void CALL RomClosed (void);
+ *******************************************************************/
+ EXPORT void CALL SetConfigDir( char *configDir );
+ 
++/******************************************************************
++   NOTE: THIS HAS BEEN ADDED FOR MUPEN64PLUS AND IS NOT PART OF THE
++         ORIGINAL SPEC
++  Function: SetDataDir
++  Purpose:  To pass the location where data files should be read/
++            written to.
++  input:    path to data directory
++  output:   none
++*******************************************************************/
++EXPORT void CALL SetDataDir( char *dataDir );
++
++/******************************************************************
++   NOTE: THIS HAS BEEN ADDED FOR MUPEN64PLUS AND IS NOT PART OF THE
++         ORIGINAL SPEC
++  Function: SetCacheDir
++  Purpose:  To pass the location where cache files should be read/
++            written to.
++  input:    path to cache directory
++  output:   none
++*******************************************************************/
++EXPORT void CALL SetCacheDir( char *cacheDir );
++
+ #if defined(__cplusplus)
+ }
+ #endif
+diff --git a/dummy_input/Input_1.1.h b/dummy_input/Input_1.1.h
+index c2ae4a6..1a22c4b 100644
+--- a/dummy_input/Input_1.1.h
++++ b/dummy_input/Input_1.1.h
+@@ -251,6 +251,28 @@ EXPORT void CALL WM_KeyUp( WPARAM wParam, LPARAM lParam );
+ *******************************************************************/
+ EXPORT void CALL SetConfigDir( char *configDir );
+ 
++/******************************************************************
++   NOTE: THIS HAS BEEN ADDED FOR MUPEN64PLUS AND IS NOT PART OF THE
++         ORIGINAL SPEC
++  Function: SetDataDir
++  Purpose:  To pass the location where data files should be read/
++            written to.
++  input:    path to data directory
++  output:   none
++*******************************************************************/
++EXPORT void CALL SetDataDir( char *dataDir );
++
++/******************************************************************
++   NOTE: THIS HAS BEEN ADDED FOR MUPEN64PLUS AND IS NOT PART OF THE
++         ORIGINAL SPEC
++  Function: SetCacheDir
++  Purpose:  To pass the location where cache files should be read/
++            written to.
++  input:    path to cache directory
++  output:   none
++*******************************************************************/
++EXPORT void CALL SetCacheDir( char *cacheDir );
++
+ #if defined(__cplusplus)
+ }
+ #endif
+diff --git a/dummy_video/Graphics_1.3.h b/dummy_video/Graphics_1.3.h
+index 0f7843d..ed933b3 100644
+--- a/dummy_video/Graphics_1.3.h
++++ b/dummy_video/Graphics_1.3.h
+@@ -306,6 +306,28 @@ EXPORT void CALL SetConfigDir( char *configDir );
+ /******************************************************************
+    NOTE: THIS HAS BEEN ADDED FOR MUPEN64PLUS AND IS NOT PART OF THE
+          ORIGINAL SPEC
++  Function: SetDataDir
++  Purpose:  To pass the location where data files should be read/
++            written to.
++  input:    path to data directory
++  output:   none
++*******************************************************************/
++EXPORT void CALL SetDataDir( char *dataDir );
++
++/******************************************************************
++   NOTE: THIS HAS BEEN ADDED FOR MUPEN64PLUS AND IS NOT PART OF THE
++         ORIGINAL SPEC
++  Function: SetCacheDir
++  Purpose:  To pass the location where cache files should be read/
++            written to.
++  input:    path to cache directory
++  output:   none
++*******************************************************************/
++EXPORT void CALL SetCacheDir( char *cacheDir );
++
++/******************************************************************
++   NOTE: THIS HAS BEEN ADDED FOR MUPEN64PLUS AND IS NOT PART OF THE
++         ORIGINAL SPEC
+   Function: SetRenderingCallback
+   Purpose:  Allows emulator to register a callback function that will
+             be called by the graphics plugin just before the the
+diff --git a/glide64/Gfx1.3.h b/glide64/Gfx1.3.h
+index b34c1b4..91bd0e6 100644
+--- a/glide64/Gfx1.3.h
++++ b/glide64/Gfx1.3.h
+@@ -754,6 +754,28 @@ EXPORT void CALL SetConfigDir( char *configDir );
+ /******************************************************************
+    NOTE: THIS HAS BEEN ADDED FOR MUPEN64PLUS AND IS NOT PART OF THE
+          ORIGINAL SPEC
++  Function: SetDataDir
++  Purpose:  To pass the location where data files should be read/
++            written to.
++  input:    path to data directory
++  output:   none
++*******************************************************************/
++EXPORT void CALL SetDataDir( char *dataDir );
++
++/******************************************************************
++   NOTE: THIS HAS BEEN ADDED FOR MUPEN64PLUS AND IS NOT PART OF THE
++         ORIGINAL SPEC
++  Function: SetCacheDir
++  Purpose:  To pass the location where cache files should be read/
++            written to.
++  input:    path to cache directory
++  output:   none
++*******************************************************************/
++EXPORT void CALL SetCacheDir( char *cacheDir );
++
++/******************************************************************
++   NOTE: THIS HAS BEEN ADDED FOR MUPEN64PLUS AND IS NOT PART OF THE
++         ORIGINAL SPEC
+   Function: SetRenderingCallback
+   Purpose:  Allows emulator to register a callback function that will
+             be called by the graphics plugin just before the the
+diff --git a/jttl_audio/Audio_1.2.h b/jttl_audio/Audio_1.2.h
+index 0decf07..43045c2 100644
+--- a/jttl_audio/Audio_1.2.h
++++ b/jttl_audio/Audio_1.2.h
+@@ -239,6 +239,28 @@ EXPORT void CALL SetConfigDir( char *configDir );
+ /******************************************************************
+    NOTE: THIS HAS BEEN ADDED FOR MUPEN64PLUS AND IS NOT PART OF THE
+          ORIGINAL SPEC
++  Function: SetDataDir
++  Purpose:  To pass the location where data files should be read/
++            written to.
++  input:    path to data directory
++  output:   none
++*******************************************************************/
++EXPORT void CALL SetDataDir( char *dataDir );
++
++/******************************************************************
++   NOTE: THIS HAS BEEN ADDED FOR MUPEN64PLUS AND IS NOT PART OF THE
++         ORIGINAL SPEC
++  Function: SetCacheDir
++  Purpose:  To pass the location where cache files should be read/
++            written to.
++  input:    path to cache directory
++  output:   none
++*******************************************************************/
++EXPORT void CALL SetCacheDir( char *cacheDir );
++
++/******************************************************************
++   NOTE: THIS HAS BEEN ADDED FOR MUPEN64PLUS AND IS NOT PART OF THE
++         ORIGINAL SPEC
+   Function: VolumeUp
+   Purpose:  To increase the audio volume
+   input:    none
+diff --git a/main/main.c b/main/main.c
+index d57bafd..8215420 100644
+--- a/main/main.c
++++ b/main/main.c
+@@ -34,6 +34,8 @@
+ #ifndef __WIN32__
+ # include <ucontext.h> // extra signal types (for portability)
+ # include <libgen.h> // basename, dirname
++# include <basedir.h> // xdg(Init|Wipe)Handle, xdg(Config|Data|Cache)Home
++# include <basedir_fs.h> // xdgMakePath
+ #endif
+ 
+ #include <sys/time.h>
+@@ -152,6 +154,8 @@ static int  l_GuiEnabled = 1;           // GUI enabled?
+ #endif
+ 
+ static char l_ConfigDir[PATH_MAX] = {'\0'};
++static char l_DataDir[PATH_MAX] = {'\0'};
++static char l_CacheDir[PATH_MAX] = {'\0'};
+ static char l_InstallDir[PATH_MAX] = {'\0'};
+ 
+ static int   l_EmuMode = 0;              // emumode specified at commandline?
+@@ -173,6 +177,16 @@ char *get_configpath()
+     return l_ConfigDir;
+ }
+ 
++char *get_datapath()
++{
++    return l_DataDir;
++}
++
++char *get_cachepath()
++{
++    return l_CacheDir;
++}
++
+ char *get_installpath()
+ {
+     return l_InstallDir;
+@@ -1075,6 +1089,8 @@ void parseCommandLine(int argc, char **argv)
+         OPT_EMUMODE,
+         OPT_SSHOTDIR,
+         OPT_CONFIGDIR,
++        OPT_DATADIR,
++        OPT_CACHEDIR,
+         OPT_INSTALLDIR,
+ #ifdef DBG
+     OPT_DEBUGGER,
+@@ -1096,6 +1112,8 @@ void parseCommandLine(int argc, char **argv)
+         {"emumode", required_argument, NULL, OPT_EMUMODE},
+         {"sshotdir", required_argument, NULL, OPT_SSHOTDIR},
+         {"configdir", required_argument, NULL, OPT_CONFIGDIR},
++        {"datadir", required_argument, NULL, OPT_DATADIR},
++        {"cachedir", required_argument, NULL, OPT_CACHEDIR},
+         {"installdir", required_argument, NULL, OPT_INSTALLDIR},
+ #ifdef DBG
+         {"debugger", no_argument, NULL, OPT_DEBUGGER},
+@@ -1180,6 +1198,18 @@ void parseCommandLine(int argc, char **argv)
+                 else
+                     printf("***Warning: Config directory '%s' is not accessible or not a directory.\n", optarg);
+                 break;
++            case OPT_DATADIR:
++                if(isdir(optarg))
++                    strncpy(l_CacheDir, optarg, PATH_MAX);
++                else
++                    printf("***Warning: Cache directory '%s' is not accessible or not a directory.\n", optarg);
++                break;
++            case OPT_CACHEDIR:
++                if(isdir(optarg))
++                    strncpy(l_CacheDir, optarg, PATH_MAX);
++                else
++                    printf("***Warning: Cache directory '%s' is not accessible or not a directory.\n", optarg);
++                break;
+             case OPT_INSTALLDIR:
+                 if(isdir(optarg))
+                     strncpy(l_InstallDir, optarg, PATH_MAX);
+@@ -1249,49 +1279,79 @@ void parseCommandLine(int argc, char **argv)
+ 
+ /** setPaths
+  *  setup paths to config/install/screenshot directories. The config dir is the dir where all
+- *  user config information is stored, e.g. mupen64plus.conf, save files, and plugin conf files.
++ *  user config information is stored, e.g. mupen64plus.conf, and plugin conf files.
+  *  The install dir is where mupen64plus looks for common files, e.g. plugins, icons, language
+  *  translation files.
++ *  The cache dir is where mupen64plus looks for rombrowser and similar caches.
++ *  The data dir is where mupen64plus looks for savegames, hires-textures and saves screenshots.
+  */
+ static void setPaths(void)
+ {
+ #ifdef __WIN32__
+     strncpy(l_ConfigDir, "./", PATH_MAX);
++    strncpy(l_DataDir, "./", PATH_MAX);
++    strncpy(l_CacheDir, "./", PATH_MAX);
+     strncpy(l_InstallDir, "./", PATH_MAX);
+     return;
+ #else
+     char buf[PATH_MAX], buf2[PATH_MAX];
++    xdgHandle xdgbasedirs;
++
++    xdgInitHandle(&xdgbasedirs);
+ 
+-    // if the config dir was not specified at the commandline, look for ~/.mupen64plus dir
++    // if the config dir was not specified at the commandline, look for ~/.config/mupen64plus dir
+     if (strlen(l_ConfigDir) == 0)
+     {
+-        strncpy(l_ConfigDir, getenv("HOME"), PATH_MAX);
+-        strncat(l_ConfigDir, "/.mupen64plus", PATH_MAX - strlen(l_ConfigDir));
++        strncpy(l_ConfigDir, xdgConfigHome(&xdgbasedirs), PATH_MAX);
++        strncat(l_ConfigDir, "/mupen64plus", PATH_MAX - strlen(l_ConfigDir));
+ 
+-        // if ~/.mupen64plus dir is not found, create it
++        // if ~/.config/mupen64plus is not found, create it
+         if(!isdir(l_ConfigDir))
+         {
+-            printf("Creating %s to store user data\n", l_ConfigDir);
+-            if(mkdir(l_ConfigDir, (mode_t)0755) != 0)
++            printf("Creating %s to store user config\n", l_ConfigDir);
++            if(xdgMakePath(l_ConfigDir, (mode_t)0755) != 0)
+             {
+                 printf("Error: Could not create %s: ", l_ConfigDir);
+                 perror(NULL);
+                 exit(errno);
+             }
++        }
++    }
++
++    // make sure config dir has a '/' on the end.
++    if(l_ConfigDir[strlen(l_ConfigDir)-1] != '/')
++        strncat(l_ConfigDir, "/", PATH_MAX - strlen(l_ConfigDir));
++
++    // if the data dir was not specified at the commandline, look for ~/.local/share/mupen64plus dir
++    if (strlen(l_DataDir) == 0)
++    {
++        strncpy(l_DataDir, xdgDataHome(&xdgbasedirs), PATH_MAX);
++        strncat(l_DataDir, "/mupen64plus", PATH_MAX - strlen(l_DataDir));
++
++        // if ~/.local/share/mupen64plus dir is not found, create it
++        if(!isdir(l_DataDir))
++        {
++            printf("Creating %s to store user data\n", l_DataDir);
++            if(xdgMakePath(l_DataDir, (mode_t)0755) != 0)
++            {
++                printf("Error: Could not create %s: ", l_DataDir);
++                perror(NULL);
++                exit(errno);
++            }
+ 
+             // create save subdir
+-            strncpy(buf, l_ConfigDir, PATH_MAX);
++            strncpy(buf, l_DataDir, PATH_MAX);
+             strncat(buf, "/save", PATH_MAX - strlen(buf));
+-            if(mkdir(buf, (mode_t)0755) != 0)
++            if(xdgMakePath(buf, (mode_t)0755) != 0)
+             {
+                 // report error, but don't exit
+                 printf("Warning: Could not create %s: %s", buf, strerror(errno));
+             }
+ 
+             // create screenshots subdir
+-            strncpy(buf, l_ConfigDir, PATH_MAX);
++            strncpy(buf, l_DataDir, PATH_MAX);
+             strncat(buf, "/screenshots", PATH_MAX - strlen(buf));
+-            if(mkdir(buf, (mode_t)0755) != 0)
++            if(xdgMakePath(buf, (mode_t)0755) != 0)
+             {
+                 // report error, but don't exit
+                 printf("Warning: Could not create %s: %s", buf, strerror(errno));
+@@ -1299,9 +1359,34 @@ static void setPaths(void)
+         }
+     }
+ 
+-    // make sure config dir has a '/' on the end.
+-    if(l_ConfigDir[strlen(l_ConfigDir)-1] != '/')
+-        strncat(l_ConfigDir, "/", PATH_MAX - strlen(l_ConfigDir));
++    // make sure data dir has a '/' on the end.
++    if(l_DataDir[strlen(l_DataDir)-1] != '/')
++        strncat(l_DataDir, "/", PATH_MAX - strlen(l_DataDir));
++
++    // if the cache dir was not specified at the commandline, look for ~/.cache/mupen64plus dir
++    if (strlen(l_CacheDir) == 0)
++    {
++        strncpy(l_CacheDir, xdgCacheHome(&xdgbasedirs), PATH_MAX);
++        strncat(l_CacheDir, "/mupen64plus", PATH_MAX - strlen(l_CacheDir));
++
++        // if ~/.cache/mupen64plus dir is not found, create it
++        if(!isdir(l_CacheDir))
++        {
++            printf("Creating %s to store user cache\n", l_CacheDir);
++            if(xdgMakePath(l_CacheDir, (mode_t)0755) != 0)
++            {
++                printf("Error: Could not create %s: ", l_CacheDir);
++                perror(NULL);
++                exit(errno);
++            }
++        }
++    }
++
++    // make sure cache dir has a '/' on the end.
++    if(l_CacheDir[strlen(l_CacheDir)-1] != '/')
++        strncat(l_CacheDir, "/", PATH_MAX - strlen(l_CacheDir));
++
++    xdgWipeHandle(&xdgbasedirs);
+ 
+     // if install dir was not specified at the commandline, look for it in the executable's directory
+     if (strlen(l_InstallDir) == 0)
+@@ -1400,7 +1485,7 @@ static void setPaths(void)
+     if (!ValidScreenshotDir())
+     {
+         char chDefaultDir[PATH_MAX + 1];
+-        snprintf(chDefaultDir, PATH_MAX, "%sscreenshots/", l_ConfigDir);
++        snprintf(chDefaultDir, PATH_MAX, "%sscreenshots/", l_DataDir);
+         SetScreenshotDir(chDefaultDir);
+     }
+ #endif /* __WIN32__ */
+@@ -1481,7 +1566,7 @@ int main(int argc, char *argv[])
+     }
+     // scan the plugin directory and set the config dir for the plugins
+     plugin_scan_directory(dirpath);
+-    plugin_set_dirs(l_ConfigDir, l_InstallDir);
++    plugin_set_dirs(l_ConfigDir, l_DataDir, l_CacheDir, l_InstallDir);
+ 
+ #ifndef NO_GUI
+     if(l_GuiEnabled)
+@@ -1500,8 +1585,8 @@ int main(int argc, char *argv[])
+         config_put_number("CurrentSaveSlot",0);
+     }
+ 
+-    main_message(1, 0, 0, 0, tr("Config Dir:  %s\nInstall Dir: %s\nPlugin Dir:  %s\n"), l_ConfigDir, l_InstallDir, dirpath);
+-    main_message(0, 1, 0, 0, tr("Config Dir: \"%s\", Install Dir: \"%s\", Plugin Dir:  \"%s\""), l_ConfigDir, l_InstallDir, dirpath);
++    main_message(1, 0, 0, 0, tr("Config Dir:  %s\nData Dir:  %s\nCache Dir:  %s\nInstall Dir: %s\nPlugin Dir:  %s\n"), l_ConfigDir, l_DataDir, l_CacheDir, l_InstallDir, dirpath);
++    main_message(0, 1, 0, 0, tr("Config Dir: \"%s\", Data Dir: \"%s\", Cache Dir: \"%s\", Install Dir: \"%s\", Plugin Dir:  \"%s\""), l_ConfigDir, l_DataDir, l_CacheDir, l_InstallDir, dirpath);
+ 
+     //The database needs to be opened regardless of GUI mode.
+     romdatabase_open();
+diff --git a/main/main.h b/main/main.h
+index e597ad2..7cec0e0 100644
+--- a/main/main.h
++++ b/main/main.h
+@@ -40,6 +40,8 @@ extern char* g_InputPlugin;
+ extern char* g_RspPlugin;
+ 
+ char* get_configpath(void);
++char* get_datapath(void);
++char* get_cachepath(void);
+ char* get_installpath(void);
+ char* get_savespath(void);
+ char* get_iconspath(void);
+diff --git a/main/plugin.c b/main/plugin.c
+index 92752be..b377ff0 100644
+--- a/main/plugin.c
++++ b/main/plugin.c
+@@ -66,6 +66,8 @@ static void dummy_readController(int Control, BYTE *Command) {}
+ static void dummy_keyDown(WPARAM wParam, LPARAM lParam) {}
+ static void dummy_keyUp(WPARAM wParam, LPARAM lParam) {}
+ static void dummy_setConfigDir(char *configDir) {}
++static void dummy_setDataDir(char *dataDir) {}
++static void dummy_setCacheDir(char *cacheDir) {}
+ static void dummy_setInstallDir(char *installDir) {}
+ static unsigned int dummy;
+ static DWORD dummy_doRspCycles(DWORD Cycles) { return Cycles; };
+@@ -115,6 +117,8 @@ void (*romOpen_input)() = dummy_void;
+ void (*keyDown)(WPARAM wParam, LPARAM lParam) = dummy_keyDown;
+ void (*keyUp)(WPARAM wParam, LPARAM lParam) = dummy_keyUp;
+ void (*setConfigDir)(char *configDir) = dummy_setConfigDir;
++void (*setDataDir)(char *dataDir) = dummy_setDataDir;
++void (*setCacheDir)(char *cacheDir) = dummy_setCacheDir;
+ void (*setInstallDir)(char *installDir) = dummy_setInstallDir;
+ 
+ void (*closeDLL_RSP)() = dummy_void;
+@@ -271,7 +275,7 @@ void plugin_scan_directory(const char *plugindir)
+ /* plugin_set_configdir
+  *  Sets config dir of all plugins that support the SetConfigDir API call to the given dir.
+  */
+-void plugin_set_dirs(char* configdir, char* installdir)
++void plugin_set_dirs(char* configdir, char* datadir, char* cachedir, char* installdir)
+ {
+     plugin* p = NULL;
+     list_node_t* node;
+@@ -286,6 +290,12 @@ void plugin_set_dirs(char* configdir, char* installdir)
+             setConfigDir = dlsym(p->handle, "SetConfigDir");
+             if(setConfigDir)
+                 setConfigDir(configdir);
++            setDataDir = dlsym(p->handle, "SetDataDir");
++            if(setDataDir)
++                setDataDir(datadir);
++            setCacheDir = dlsym(p->handle, "SetCacheDir");
++            if(setCacheDir)
++                setCacheDir(cachedir);
+             setInstallDir = dlsym(p->handle, "SetInstallDir");
+             if(setInstallDir)
+                 setInstallDir(installdir);
+diff --git a/main/plugin.h b/main/plugin.h
+index 35f4f43..4b6264a 100644
+--- a/main/plugin.h
++++ b/main/plugin.h
+@@ -38,7 +38,7 @@ extern list_t g_PluginList;
+ 
+ int   plugin_scan_file(const char *filepath, WORD PluginType);
+ void  plugin_scan_directory(const char *plugindir);
+-void  plugin_set_dirs(char* configdir, char* installdir);
++void  plugin_set_dirs(char* configdir, char* datadir, char* cachedir, char* installdir);
+ void  plugin_load_plugins(const char *gfx_name, 
+               const char *audio_name, 
+               const char *input_name,
+diff --git a/main/romcache.c b/main/romcache.c
+index 54f8169..2b41bdf 100644
+--- a/main/romcache.c
++++ b/main/romcache.c
+@@ -258,7 +258,7 @@ int rom_cache_system(void* _arg)
+                 if(buffer==NULL)
+                     {
+                     buffer = (char*)malloc(PATH_MAX*sizeof(char));
+-                    snprintf(buffer, PATH_MAX, "%s%s", get_configpath(), "rombrowser.cache");
++                    snprintf(buffer, PATH_MAX, "%s%s", get_cachepath(), "rombrowser.cache");
+                     config_put_string("RomCacheFile", buffer);
+                     }
+ 
+diff --git a/pre.mk b/pre.mk
+index 0a2d965..d0b332e 100644
+--- a/pre.mk
++++ b/pre.mk
+@@ -110,6 +110,15 @@ endif
+ LZMA_FLAGS	= $(shell pkg-config liblzma --cflags)
+ LZMA_LIBS	= $(shell pkg-config liblzma --libs)
+ 
++# test for presence of libxdg-basedir
++ifeq ("$(shell pkg-config libxdg-basedir --modversion )", "")
++  $(error No libxdg-basedir development libraries found!)
++endif
++
++# set libxdg-basedir flags and libraries
++XDGBASEDIR_FLAGS	= $(shell pkg-config libxdg-basedir --cflags)
++XDGBASEDIR_LIBS	= $(shell pkg-config libxdg-basedir --libs)
++
+ # set Qt flags and libraries
+ # some distros append -qt4 to the binaries so look for those first
+ ifeq ($(GUI), QT4)
+diff --git a/rice_video/Graphics_1.3.h b/rice_video/Graphics_1.3.h
+index 0f7843d..ed933b3 100644
+--- a/rice_video/Graphics_1.3.h
++++ b/rice_video/Graphics_1.3.h
+@@ -306,6 +306,28 @@ EXPORT void CALL SetConfigDir( char *configDir );
+ /******************************************************************
+    NOTE: THIS HAS BEEN ADDED FOR MUPEN64PLUS AND IS NOT PART OF THE
+          ORIGINAL SPEC
++  Function: SetDataDir
++  Purpose:  To pass the location where data files should be read/
++            written to.
++  input:    path to data directory
++  output:   none
++*******************************************************************/
++EXPORT void CALL SetDataDir( char *dataDir );
++
++/******************************************************************
++   NOTE: THIS HAS BEEN ADDED FOR MUPEN64PLUS AND IS NOT PART OF THE
++         ORIGINAL SPEC
++  Function: SetCacheDir
++  Purpose:  To pass the location where cache files should be read/
++            written to.
++  input:    path to cache directory
++  output:   none
++*******************************************************************/
++EXPORT void CALL SetCacheDir( char *cacheDir );
++
++/******************************************************************
++   NOTE: THIS HAS BEEN ADDED FOR MUPEN64PLUS AND IS NOT PART OF THE
++         ORIGINAL SPEC
+   Function: SetRenderingCallback
+   Purpose:  Allows emulator to register a callback function that will
+             be called by the graphics plugin just before the the
+diff --git a/rice_video/TextureFilters.cpp b/rice_video/TextureFilters.cpp
+index e59f797..f8341fe 100644
+--- a/rice_video/TextureFilters.cpp
++++ b/rice_video/TextureFilters.cpp
+@@ -901,7 +901,7 @@ typedef struct {
+ CSortedList<uint64,ExtTxtrInfo> gTxtrDumpInfos;
+ CSortedList<uint64,ExtTxtrInfo> gHiresTxtrInfos;
+ 
+-extern void GetPluginDir( char * Directory );
++extern void GetDataDir( char * Directory );
+ extern char * right(char * src, int nchars);
+ 
+ BOOL PathIsDirectory(char* name)
+@@ -1238,7 +1238,7 @@ const char *subfolders[] = {
+ void FindAllDumpedTextures(void)
+ {
+     char    foldername[PATH_MAX];
+-    GetPluginDir(foldername);
++    GetDataDir(foldername);
+     if(foldername[strlen(foldername) - 1] != '/') strcat(foldername, "/");
+     strcat(foldername,"texture_dump/");
+ 
+@@ -1279,7 +1279,7 @@ void FindAllDumpedTextures(void)
+ void FindAllHiResTextures(void)
+ {
+     char    foldername[PATH_MAX];
+-    GetPluginDir(foldername);
++    GetDataDir(foldername);
+     if(foldername[strlen(foldername) - 1] != '/') strcat(foldername, "/");
+     strcat(foldername,"hires_texture/");
+     CheckAndCreateFolder(foldername);
+@@ -1448,7 +1448,7 @@ void DumpCachedTexture( TxtrCacheEntry &entry )
+         char filename2[PATH_MAX];
+         char filename3[PATH_MAX];
+         char gamefolder[PATH_MAX];
+-        GetPluginDir(gamefolder);
++        GetDataDir(gamefolder);
+         
+         strcat(gamefolder,"texture_dump/");
+         strcat(gamefolder,(const char*)g_curRomInfo.szGameName);
+diff --git a/rice_video/Video.cpp b/rice_video/Video.cpp
+index 3f3cc05..75e3ad8 100644
+--- a/rice_video/Video.cpp
++++ b/rice_video/Video.cpp
+@@ -41,6 +41,8 @@ unsigned char *g_pRDRAMu8 = NULL;
+ 
+ static char g_ConfigDir[PATH_MAX] = {0};
+ 
++static char g_DataDir[PATH_MAX] = {0};
++
+ CCritSect g_CritialSection;
+ 
+ ///#define USING_THREAD
+@@ -68,7 +70,7 @@ std::vector<uint32> frameWriteRecord;
+ 
+ //---------------------------------------------------------------------------------------
+ 
+-void GetPluginDir( char * Directory ) 
++void GetPluginDir( char * Directory )
+ {
+    if(strlen(g_ConfigDir) > 0)
+    {
+@@ -86,7 +88,7 @@ void GetPluginDir( char * Directory )
+         {
+            char path2[PATH_MAX];
+            int i;
+-           
++
+            path[n] = '\0';
+            strcpy(path2, path);
+            for (i=strlen(path2)-1; i>0; i--)
+@@ -99,7 +101,63 @@ void GetPluginDir( char * Directory )
+                 DIR *dir;
+                 struct dirent *entry;
+                 int gooddir = 0;
+-                
++
++                path2[i+1] = '\0';
++                dir = opendir(path2);
++                while((entry = readdir(dir)) != NULL)
++                  {
++              if(!strcmp(entry->d_name, "plugins"))
++                gooddir = 1;
++                  }
++                closedir(dir);
++                if(!gooddir) strcpy(path, "./");
++             }
++        }
++      int i;
++      for(i=strlen(path)-1; i>0; i--)
++        {
++           if(path[i] == '/') break;
++        }
++      path[i+1] = '\0';
++      strcat(path, "plugins/");
++      strcpy(Directory, path);
++   }
++}
++
++//---------------------------------------------------------------------------------------
++
++void GetDataDir( char * Directory )
++{
++   if(strlen(g_DataDir) > 0)
++   {
++      strncpy(Directory, g_DataDir, PATH_MAX);
++      // make sure there's a trailing '/'
++      if(Directory[strlen(Directory)-1] != '/')
++          strncat(Directory, "/", PATH_MAX - strlen(Directory));
++   }
++   else
++   {
++      char path[PATH_MAX];
++      int n = readlink("/proc/self/exe", path, PATH_MAX);
++      if(n == -1) strcpy(path, "./");
++      else
++        {
++           char path2[PATH_MAX];
++           int i;
++
++           path[n] = '\0';
++           strcpy(path2, path);
++           for (i=strlen(path2)-1; i>0; i--)
++             {
++                if(path2[i] == '/') break;
++             }
++           if(i == 0) strcpy(path, "./");
++           else
++             {
++                DIR *dir;
++                struct dirent *entry;
++                int gooddir = 0;
++
+                 path2[i+1] = '\0';
+                 dir = opendir(path2);
+                 while((entry = readdir(dir)) != NULL)
+@@ -1084,7 +1142,7 @@ EXPORT void CALL ReadScreen(void **dest, int *width, int *height)
+          GL_RGB, GL_UNSIGNED_BYTE, *dest );
+    glReadBuffer( oldMode );
+ }
+-    
++
+ /******************************************************************
+    NOTE: THIS HAS BEEN ADDED FOR MUPEN64PLUS AND IS NOT PART OF THE
+          ORIGINAL SPEC
+@@ -1102,6 +1160,20 @@ EXPORT void CALL SetConfigDir(char *configDir)
+ /******************************************************************
+    NOTE: THIS HAS BEEN ADDED FOR MUPEN64PLUS AND IS NOT PART OF THE
+          ORIGINAL SPEC
++  Function: SetDataDir
++  Purpose:  To pass the location where data files should be read/
++            written to.
++  input:    path to data directory
++  output:   none
++*******************************************************************/
++EXPORT void CALL SetDataDir(char *dataDir)
++{
++    strncpy(g_DataDir, dataDir, PATH_MAX);
++}
++
++/******************************************************************
++   NOTE: THIS HAS BEEN ADDED FOR MUPEN64PLUS AND IS NOT PART OF THE
++         ORIGINAL SPEC
+   Function: SetRenderingCallback
+   Purpose:  Allows emulator to register a callback function that will
+             be called by the graphics plugin just before the the
+diff --git a/rsp_hle/Audio_1.1.h b/rsp_hle/Audio_1.1.h
+index ea46b2d..7a6f68b 100644
+--- a/rsp_hle/Audio_1.1.h
++++ b/rsp_hle/Audio_1.1.h
+@@ -224,6 +224,28 @@ EXPORT void CALL RomClosed (void);
+ *******************************************************************/
+ EXPORT void CALL SetConfigDir( char *configDir );
+ 
++/******************************************************************
++   NOTE: THIS HAS BEEN ADDED FOR MUPEN64PLUS AND IS NOT PART OF THE
++         ORIGINAL SPEC
++  Function: SetDataDir
++  Purpose:  To pass the location where data files should be read/
++            written to.
++  input:    path to data directory
++  output:   none
++*******************************************************************/
++EXPORT void CALL SetDataDir( char *dataDir );
++
++/******************************************************************
++   NOTE: THIS HAS BEEN ADDED FOR MUPEN64PLUS AND IS NOT PART OF THE
++         ORIGINAL SPEC
++  Function: SetCacheDir
++  Purpose:  To pass the location where cache files should be read/
++            written to.
++  input:    path to cache directory
++  output:   none
++*******************************************************************/
++EXPORT void CALL SetCacheDir( char *cacheDir );
++
+ #if defined(__cplusplus)
+ }
+ #endif
+-- 
+1.6.3.3
+
diff --git a/debian/patches/series b/debian/patches/series
index b440dad..db8cf3d 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -14,3 +14,4 @@
 113-static-binutils-libs.patch
 114-system-liblzma.patch
 115-fix-7z-subfolder.patch
+116-xdg-basedir.patch

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/mupen64plus.git



More information about the Pkg-games-commits mailing list