diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/paths.c | 81 | ||||
| -rw-r--r-- | src/core/paths.h | 6 | ||||
| -rw-r--r-- | src/gui/core/theme.c | 28 | ||||
| -rw-r--r-- | src/hub.c | 32 | ||||
| -rw-r--r-- | src/main.c | 37 | ||||
| -rw-r--r-- | src/plugins/pglist.c | 9 | 
6 files changed, 163 insertions, 30 deletions
diff --git a/src/core/paths.c b/src/core/paths.c index f58f46c..7f4765e 100644 --- a/src/core/paths.c +++ b/src/core/paths.c @@ -27,12 +27,20 @@  #include <glib.h>  #include <malloc.h>  #include <stdio.h> +#include <string.h>  #include <unistd.h>  #include <config.h> +#include "../common/extstr.h" + + + +/* Eventuelle nouvelle racine de substitution */ +static const char *_new_prefix = NULL; +  /* Trouve le chemin d'accès complet à un fichier donné. */  static char *find_file_in_directory(const char *, const char *); @@ -41,6 +49,65 @@ static char *find_file_in_directory(const char *, const char *);  /******************************************************************************  *                                                                             * +*  Paramètres  : new = nouvelle racine pour les répertoires.                  * +*                                                                             * +*  Description : Enregistre un répertoire comme nouvelle base de construction.* +*                                                                             * +*  Retour      : -                                                            * +*                                                                             * +*  Remarques   : -                                                            * +*                                                                             * +******************************************************************************/ + +void register_new_prefix(const char *new) +{ +    _new_prefix = new; + +} + + +/****************************************************************************** +*                                                                             * +*  Paramètres  : template = répertoire de travail visé.                       * +*                                                                             * +*  Description : Fournit le répertoire réel correspondant à une cible.        * +*                                                                             * +*  Retour      : Répertoire de travail effectif.                              * +*                                                                             * +*  Remarques   : -                                                            * +*                                                                             * +******************************************************************************/ + +char *get_effective_directory(const char *template) +{ +    char *result;                           /* Répertoire à retourner      */ +    size_t len;                             /* Taille de comparaison       */ + +    result = NULL; + +    if (_new_prefix == NULL) +        goto use_default; + +    len = strlen(BUILD_PREFIX_DIR); + +    if (strncmp(template, BUILD_PREFIX_DIR, len) == 0) +    { +        result = strdup(_new_prefix); +        result = stradd(result, template + len); +    } + + use_default: + +    if (result == NULL) +        result = strdup(template); + +    return result; + +} + + +/****************************************************************************** +*                                                                             *  *  Paramètres  : dirname  = répertoire de travail à fouiller.                 *  *                filename = nom de fichier seul comme indice.                 *  *                                                                             * @@ -87,6 +154,7 @@ static char *find_file_in_directory(const char *dirname, const char *filename)  char *find_pixmap_file(const char *filename)  {      char *result;                           /* Trouvaille à renvoyer       */ +    char *edir;                             /* Répertoire de base effectif */      /**       * On privilégie si possible les sources fraiches. @@ -103,7 +171,11 @@ char *find_pixmap_file(const char *filename)  #endif      if (result == NULL) -        result = find_file_in_directory(PIXMAPS_DIR, filename); +    { +        edir = get_effective_directory(PIXMAPS_DIR); +        result = find_file_in_directory(edir, filename); +        free(edir); +    }      return result; @@ -129,6 +201,7 @@ char *find_plugin_data_file(const char *pgname, const char *filename)  #ifndef DISCARD_LOCAL      char *dirname;                          /* Répertoire à cibler         */  #endif +    char *edir;                             /* Répertoire de base effectif */      /**       * On privilégie si possible les sources fraiches. @@ -150,7 +223,11 @@ char *find_plugin_data_file(const char *pgname, const char *filename)  #endif      if (result == NULL) -        result = find_file_in_directory(PLUGINS_DATA_DIR, filename); +    { +        edir = get_effective_directory(PLUGINS_DATA_DIR); +        result = find_file_in_directory(edir, filename); +        free(edir); +    }      return result; diff --git a/src/core/paths.h b/src/core/paths.h index a755559..e6ce61f 100644 --- a/src/core/paths.h +++ b/src/core/paths.h @@ -26,6 +26,12 @@ +/* Enregistre un répertoire comme nouvelle base de construction. */ +void register_new_prefix(const char *); + +/* Fournit le répertoire réel correspondant à une cible. */ +char *get_effective_directory(const char *); +  /* Trouve le chemin d'accès complet à un fichier d'image. */  char *find_pixmap_file(const char *); diff --git a/src/gui/core/theme.c b/src/gui/core/theme.c index 578bf9b..1345717 100644 --- a/src/gui/core/theme.c +++ b/src/gui/core/theme.c @@ -43,6 +43,7 @@  #include "../../common/extstr.h"  #include "../../common/xdg.h"  #include "../../core/logs.h" +#include "../../core/paths.h" @@ -50,18 +51,6 @@  static void look_for_editor_themes(const char *); -/* Répertoires de recherche */ -static const char *_themes_directories[] = { - -#ifndef DISCARD_LOCAL -    PACKAGE_SOURCE_DIR G_DIR_SEPARATOR_S "themes", -#else -    THEMES_DIR, -#endif -    NULL - -}; -  /* Liste de thèmes utilisables */  static GEditorTheme **_themes = NULL;  static size_t _theme_count = 0; @@ -84,7 +73,9 @@ void load_all_themes(void)  {      char *suffix;                           /* Fin du répertoire personnel */      char *owndir;                           /* Thèmes personnels ?         */ -    const char **iter;                      /* Boucle de parcours          */ +#ifdef DISCARD_LOCAL +    char *edir;                             /* Répertoire de base effectif */ +#endif      /* Répertoire de l'utilisateur en premier ! */ @@ -104,8 +95,15 @@ void load_all_themes(void)      /* Parcours des autres répertoires classiques au besoin */ -    for (iter = _themes_directories; *iter != NULL; iter++) -        look_for_editor_themes(*iter); +#ifndef DISCARD_LOCAL +    look_for_editor_themes(PACKAGE_SOURCE_DIR G_DIR_SEPARATOR_S "themes"); +#else + +    edir = get_effective_directory(THEMES_DIR); +    look_for_editor_themes(edir); +    free(edir); + +#endif  } @@ -43,6 +43,7 @@  #include "analysis/db/server.h"  #include "core/global.h"  #include "core/logs.h" +#include "core/paths.h" @@ -207,6 +208,8 @@ static void show_hub_help(const char *name)  static void show_hub_version(void)  { +    char *edir;                             /* Répertoire de base effectif */ +      printf("\n");      printf("-o-  Chrysalide Hub r%u  -o-\n", REVISION); @@ -214,11 +217,25 @@ static void show_hub_version(void)      printf("\n"); -    printf(_("Pictures directory: %s\n"), PIXMAPS_DIR); -    printf(_("Themes directory: %s\n"), THEMES_DIR); -    printf(_("Plugins library directory: %s\n"), PLUGINS_LIB_DIR); -    printf(_("Plugins data directory: %s\n"), PLUGINS_DATA_DIR); -    printf(_("Locale directory: %s\n"), LOCALE_DIR); +    edir = get_effective_directory(PIXMAPS_DIR); +    printf(_("Pictures directory: %s\n"), edir); +    free(edir); + +    edir = get_effective_directory(THEMES_DIR); +    printf(_("Themes directory: %s\n"), edir); +    free(edir); + +    edir = get_effective_directory(PLUGINS_LIB_DIR); +    printf(_("Plugins library directory: %s\n"), edir); +    free(edir); + +    edir = get_effective_directory(PLUGINS_DATA_DIR); +    printf(_("Plugins data directory: %s\n"), edir); +    free(edir); + +    edir = get_effective_directory(LOCALE_DIR); +    printf(_("Locale directory: %s\n"), edir); +    free(edir);      printf("\n"); @@ -247,6 +264,7 @@ int main(int argc, char **argv)      LogMessageType verbosity;               /* Niveau de filtre de message */      int index;                              /* Indice d'argument           */      int ret;                                /* Bilan d'un appel            */ +    char *edir;                             /* Répertoire de base effectif */      static struct option long_options[] = {          { "help",       no_argument,        NULL,   'h' }, @@ -327,7 +345,9 @@ int main(int argc, char **argv)      /* Lancement des choses sérieuses */      setlocale(LC_ALL, ""); -    bindtextdomain(PACKAGE, LOCALE_DIR); +    edir = get_effective_directory(LOCALE_DIR); +    bindtextdomain(PACKAGE, edir); +    free(edir);      textdomain(PACKAGE);      /* Initialisation de GTK */ @@ -47,6 +47,7 @@  #include "core/global.h"  #include "core/logs.h"  #include "core/params.h" +#include "core/paths.h"  #include "core/queue.h"  #include "glibext/delayed.h"  #include "gui/editor.h" @@ -132,6 +133,8 @@ static void show_chrysalide_help(const char *name)  static void show_chrysalide_version(void)  { +    char *edir;                             /* Répertoire de base effectif */ +      printf("\n");      printf("-o-  Chrysalide r%u  -o-\n", REVISION); @@ -139,11 +142,25 @@ static void show_chrysalide_version(void)      printf("\n"); -    printf(_("Pictures directory: %s\n"), PIXMAPS_DIR); -    printf(_("Themes directory: %s\n"), THEMES_DIR); -    printf(_("Plugins library directory: %s\n"), PLUGINS_LIB_DIR); -    printf(_("Plugins data directory: %s\n"), PLUGINS_DATA_DIR); -    printf(_("Locale directory: %s\n"), LOCALE_DIR); +    edir = get_effective_directory(PIXMAPS_DIR); +    printf(_("Pictures directory: %s\n"), edir); +    free(edir); + +    edir = get_effective_directory(THEMES_DIR); +    printf(_("Themes directory: %s\n"), edir); +    free(edir); + +    edir = get_effective_directory(PLUGINS_LIB_DIR); +    printf(_("Plugins library directory: %s\n"), edir); +    free(edir); + +    edir = get_effective_directory(PLUGINS_DATA_DIR); +    printf(_("Plugins data directory: %s\n"), edir); +    free(edir); + +    edir = get_effective_directory(LOCALE_DIR); +    printf(_("Locale directory: %s\n"), edir); +    free(edir);      printf("\n"); @@ -174,6 +191,7 @@ int main(int argc, char **argv)      char *prj_filename;                     /* Chemin vers un projet       */      int index;                              /* Indice d'argument           */      int ret;                                /* Bilan d'un appel            */ +    char *edir;                             /* Répertoire de base effectif */      bool status;                            /* Bilan d'opérations          */      GtkWidget *editor;                      /* Fenêtre graphique           */      GGenConfig *config;                     /* Configuration globale       */ @@ -188,6 +206,7 @@ int main(int argc, char **argv)          { "batch",      no_argument,        NULL,   'b' },          { "save",       no_argument,        NULL,   's' },          { "project",    required_argument,  NULL,   'p' }, +        { "new-prefix", required_argument,  NULL,   'n' },          { NULL,         0,                  NULL,   0 }      }; @@ -241,6 +260,10 @@ int main(int argc, char **argv)                  prj_filename = optarg;                  break; +            case 'n': +                register_new_prefix(optarg); +                break; +          }      } @@ -264,7 +287,9 @@ int main(int argc, char **argv)      /* Lancement des choses sérieuses */      setlocale(LC_ALL, ""); -    bindtextdomain(PACKAGE, LOCALE_DIR); +    edir = get_effective_directory(LOCALE_DIR); +    bindtextdomain(PACKAGE, edir); +    free(edir);      textdomain(PACKAGE);      /* Initialisation de GTK */ diff --git a/src/plugins/pglist.c b/src/plugins/pglist.c index 97fc931..cb366fe 100644 --- a/src/plugins/pglist.c +++ b/src/plugins/pglist.c @@ -37,6 +37,7 @@  #include "plugin-int.h"  #include "../common/extstr.h" +#include "../core/paths.h" @@ -73,12 +74,18 @@ static void on_plugin_ref_toggle(gpointer, GPluginModule *, gboolean);  bool init_all_plugins(bool load)  { +#ifdef DISCARD_LOCAL +    char *edir;                             /* Répertoire de base effectif */ +#endif +      g_rw_lock_init(&_pg_lock);  #ifndef DISCARD_LOCAL      browse_directory_for_plugins(PACKAGE_SOURCE_DIR "/plugins");  #else -    browse_directory_for_plugins(PLUGINS_LIB_DIR); +    edir = get_effective_directory(PLUGINS_LIB_DIR); +    browse_directory_for_plugins(edir); +    free(edir);  #endif      if (load)  | 
