[gcompris-devel] [PATCH] Get extra data from separate directory

Aleksey Lim alsroot at member.fsf.org
Wed May 26 08:10:06 UTC 2010


It could be useful to have GC tarballs as minimal as possible with keeping all
necessary functionality. In that case, GC bundle could be split into two
parts, required one and extra data like voices and misic that could absent.
---
 src/gcompris/gameutil.c   |    4 +++-
 src/gcompris/gcompris.c   |   11 +++++++++++
 src/gcompris/properties.c |    2 ++
 src/gcompris/properties.h |    1 +
 src/gcompris/soundutil.c  |    7 ++++++-
 5 files changed, 23 insertions(+), 2 deletions(-)

diff --git a/src/gcompris/gameutil.c b/src/gcompris/gameutil.c
index 7a81352..c4067e1 100644
--- a/src/gcompris/gameutil.c
+++ b/src/gcompris/gameutil.c
@@ -568,7 +568,7 @@ gc_file_find_absolute(const gchar *format, ...)
   int			 i = 0;
   gchar			*filename;
   gchar			*absolute_filename;
-  gchar			*dir_to_search[4];
+  gchar			*dir_to_search[6];
   GcomprisProperties	*properties = gc_prop_get();
 
   if (!format)
@@ -591,6 +591,8 @@ gc_file_find_absolute(const gchar *format, ...)
   dir_to_search[i++] = properties->user_dir;
   dir_to_search[i++] = properties->package_data_dir;
   dir_to_search[i++] = properties->package_skin_dir;
+  if(properties->package_extra_data_dir)
+    dir_to_search[i++] = properties->package_extra_data_dir;
   dir_to_search[i++] = NULL;
 
   absolute_filename = g_strdup(filename);
diff --git a/src/gcompris/gcompris.c b/src/gcompris/gcompris.c
index 5d46fd6..43b0f17 100644
--- a/src/gcompris/gcompris.c
+++ b/src/gcompris/gcompris.c
@@ -124,6 +124,7 @@ static gint popt_debug		   = FALSE;
 static gint popt_nolockcheck	   = FALSE;
 static gchar *popt_root_menu       = NULL;
 static gchar *popt_package_data_dir = NULL;
+static gchar *popt_package_extra_data_dir = NULL;
 static gchar *popt_package_skin_dir = NULL;
 static gchar *popt_plugin_dir      = NULL;
 static gchar *popt_python_plugin_dir = NULL;
@@ -184,6 +185,9 @@ static GOptionEntry options[] = {
   {"package_data_dir", 'A', 0, G_OPTION_ARG_STRING, &popt_package_data_dir,
    N_("GCompris will find the data dir in this directory"), NULL},
 
+  {"package_extra_data_dir", 0, 0, G_OPTION_ARG_STRING, &popt_package_extra_data_dir,
+   N_("GCompris will find the extra data dir in this directory"), NULL},
+
   {"package_skin_dir", 'S', 0, G_OPTION_ARG_STRING, &popt_package_skin_dir,
    N_("GCompris will find the skins in this directory"), NULL},
 
@@ -1260,6 +1264,7 @@ static void load_properties ()
 
   /* Display the directory value we have */
   printf("package_data_dir         = %s\n", properties->package_data_dir);
+  printf("package_extra_data_dir   = %s\n", properties->package_extra_data_dir);
   printf("package_skin_dir         = %s\n", properties->package_skin_dir);
   printf("package_menu_dir         = %s\n", properties->menu_dir);
   printf("package_locale_dir       = %s\n", properties->package_locale_dir);
@@ -1610,6 +1615,12 @@ main (int argc, char *argv[])
     properties->package_data_dir = g_strdup(popt_package_data_dir);
   }
 
+  if (popt_package_extra_data_dir) {
+    printf("Overloaded package_extra_data_dir  = %s\n", popt_package_extra_data_dir);
+    g_free(properties->package_extra_data_dir);
+    properties->package_extra_data_dir = g_strdup(popt_package_extra_data_dir);
+  }
+
   if (popt_package_skin_dir) {
     printf("Overloaded package_skin_dir          = %s\n", popt_package_skin_dir);
     g_free(properties->package_skin_dir);
diff --git a/src/gcompris/properties.c b/src/gcompris/properties.c
index 826b346..d8c21bf 100644
--- a/src/gcompris/properties.c
+++ b/src/gcompris/properties.c
@@ -170,6 +170,7 @@ gc_prop_new ()
   tmp->package_locale_dir         = NULL;
   tmp->package_plugin_dir         = NULL;
   tmp->package_python_plugin_dir  = NULL;
+  tmp->package_extra_data_dir     = NULL;
   tmp->menu_dir			  = NULL;
   tmp->system_icon_dir            = NULL;
   tmp->cache_dir                  = NULL;
@@ -522,6 +523,7 @@ gc_prop_destroy (GcomprisProperties *props)
   g_free(props->package_locale_dir);
   g_free(props->package_plugin_dir);
   g_free(props->package_python_plugin_dir);
+  g_free(props->package_extra_data_dir);
   g_free(props->menu_dir);
   g_free(props->system_icon_dir);
   g_free(props->cache_dir);
diff --git a/src/gcompris/properties.h b/src/gcompris/properties.h
index b4d1d54..17a8fa5 100644
--- a/src/gcompris/properties.h
+++ b/src/gcompris/properties.h
@@ -45,6 +45,7 @@ typedef struct {
   gchar        *package_locale_dir;
   gchar        *package_plugin_dir;
   gchar        *package_python_plugin_dir;
+  gchar        *package_extra_data_dir;
   gchar        *menu_dir;
   gchar        *system_icon_dir;
   gchar        *cache_dir;
diff --git a/src/gcompris/soundutil.c b/src/gcompris/soundutil.c
index 105ed1b..a90f6e0 100644
--- a/src/gcompris/soundutil.c
+++ b/src/gcompris/soundutil.c
@@ -95,9 +95,14 @@ gc_sound_build_music_list()
   gchar *music_dir;
   GDir *dir;
   const gchar *one_dirent;
+  gchar *data_dir;
 
   /* Load the Music directory file names */
-  music_dir = g_strconcat(properties->package_data_dir, "/music/background",
+  if(properties->package_extra_data_dir)
+    data_dir = properties->package_extra_data_dir;
+  else
+    data_dir = properties->package_data_dir;
+  music_dir = g_strconcat(data_dir, "/music/background",
 			  NULL);
 
   dir = g_dir_open(music_dir, 0, NULL);
-- 
1.7.0.4





More information about the Gcompris-devel mailing list