texinfo-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

branch master updated: Use XDG base directory in teximakehtml


From: Patrice Dumas
Subject: branch master updated: Use XDG base directory in teximakehtml
Date: Mon, 23 Dec 2024 18:13:21 -0500

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

pertusus pushed a commit to branch master
in repository texinfo.

The following commit(s) were added to refs/heads/master by this push:
     new 23df359482 Use XDG base directory in teximakehtml
23df359482 is described below

commit 23df3594825f85f0f6159365d3e8c5bd814b6fcd
Author: Patrice Dumas <pertusus@free.fr>
AuthorDate: Mon Dec 16 00:24:33 2024 +0100

    Use XDG base directory in teximakehtml
    
    * tp/Texinfo/XS/main/utils.c (find_deprecated_dir_info): add const.
    
    * tp/Texinfo/XS/convert/texinfo.c (txi_converter_setup): get and set
    DEPRECATED_DIRS_LIST deprecated dirs.
    
    * tp/Texinfo/XS/teximakehtml.c (add_config_paths, main)
    (set_subdir_directories): implement add_config_paths and
    set_subdir_directories and use to set texinfo_language_config_dirs.
---
 ChangeLog                       |  13 ++++
 tp/Texinfo/XS/convert/texinfo.c |   5 ++
 tp/Texinfo/XS/convert/texinfo.h |   1 +
 tp/Texinfo/XS/main/utils.c      |   4 +-
 tp/Texinfo/XS/main/utils.h      |   3 +
 tp/Texinfo/XS/teximakehtml.c    | 169 ++++++++++++++++++++++++++++++++++------
 6 files changed, 170 insertions(+), 25 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 9c0149fabc..11f046c738 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2024-12-15  Patrice Dumas  <pertusus@free.fr>
+
+       Use XDG base directory in teximakehtml
+
+       * tp/Texinfo/XS/main/utils.c (find_deprecated_dir_info): add const.
+
+       * tp/Texinfo/XS/convert/texinfo.c (txi_converter_setup): get and set
+       DEPRECATED_DIRS_LIST deprecated dirs.
+
+       * tp/Texinfo/XS/teximakehtml.c (add_config_paths, main)
+       (set_subdir_directories): implement add_config_paths and
+       set_subdir_directories and use to set texinfo_language_config_dirs.
+
 2024-12-15  Patrice Dumas  <pertusus@free.fr>
 
        Deprecated directories warning in XS/C
diff --git a/tp/Texinfo/XS/convert/texinfo.c b/tp/Texinfo/XS/convert/texinfo.c
index 8b30d5b46d..3a752c87fd 100644
--- a/tp/Texinfo/XS/convert/texinfo.c
+++ b/tp/Texinfo/XS/convert/texinfo.c
@@ -387,6 +387,7 @@ CONVERTER *
 txi_converter_setup (const char *format_str,
                      const char *output_format,
                      const STRING_LIST *texinfo_language_config_dirs_in,
+                     const DEPRECATED_DIRS_LIST *deprecated_dirs,
                      OPTIONS_LIST *customizations)
 {
   enum converter_format converter_format
@@ -410,6 +411,10 @@ txi_converter_setup (const char *format_str,
     copy_strings (texinfo_language_config_dirs,
                   texinfo_language_config_dirs_in);
 
+  if (deprecated_dirs)
+    copy_deprecated_dirs (&conf->deprecated_config_directories,
+                          deprecated_dirs);
+
   /*
   err_add_option_value (&conf->conf, "DEBUG", 1, 0);
    */
diff --git a/tp/Texinfo/XS/convert/texinfo.h b/tp/Texinfo/XS/convert/texinfo.h
index 820e6df72d..79df4b0ead 100644
--- a/tp/Texinfo/XS/convert/texinfo.h
+++ b/tp/Texinfo/XS/convert/texinfo.h
@@ -49,6 +49,7 @@ void txi_complete_document (DOCUMENT *document, unsigned long 
flags,
 CONVERTER *txi_converter_setup (const char *converter_format,
                      const char *output_format,
                      const STRING_LIST *texinfo_language_config_dirs,
+                     const DEPRECATED_DIRS_LIST *deprecated_dirs,
                      OPTIONS_LIST *customizations);
 
 char *txi_converter_output (CONVERTER *converter, DOCUMENT *document);
diff --git a/tp/Texinfo/XS/main/utils.c b/tp/Texinfo/XS/main/utils.c
index 3d21febd57..2b08bedad1 100644
--- a/tp/Texinfo/XS/main/utils.c
+++ b/tp/Texinfo/XS/main/utils.c
@@ -1032,8 +1032,8 @@ file_name_is_absolute (const char *filename)
   return !memcmp (filename, "/", 1);
 }
 
-static DEPRECATED_DIR_INFO *
-find_deprecated_dir_info (DEPRECATED_DIRS_LIST *deprecated_dirs,
+DEPRECATED_DIR_INFO *
+find_deprecated_dir_info (const DEPRECATED_DIRS_LIST *deprecated_dirs,
                           const char *directory_name)
 {
   size_t i;
diff --git a/tp/Texinfo/XS/main/utils.h b/tp/Texinfo/XS/main/utils.h
index 15a4b57eb0..54c8c23deb 100644
--- a/tp/Texinfo/XS/main/utils.h
+++ b/tp/Texinfo/XS/main/utils.h
@@ -171,6 +171,9 @@ char *locate_file_in_dirs (const char *filename,
                      DEPRECATED_DIRS_LIST *deprecated_dirs,
                      DEPRECATED_DIRS_LIST *deprecated_dirs_used);
 
+DEPRECATED_DIR_INFO *find_deprecated_dir_info (
+                          const DEPRECATED_DIRS_LIST *deprecated_dirs,
+                          const char *directory_name);
 void copy_deprecated_dirs (DEPRECATED_DIRS_LIST *deprecated_dirs_dst,
                            const DEPRECATED_DIRS_LIST *deprecated_dirs_src);
 void add_new_deprecated_dir_info (DEPRECATED_DIRS_LIST *deprecated_dirs,
diff --git a/tp/Texinfo/XS/teximakehtml.c b/tp/Texinfo/XS/teximakehtml.c
index 5e4d2711f0..921bac8c42 100644
--- a/tp/Texinfo/XS/teximakehtml.c
+++ b/tp/Texinfo/XS/teximakehtml.c
@@ -189,6 +189,144 @@ document_warn (const char *format, ...)
     }
 }
 
+static void
+add_config_paths (const char *env_string, const char *subdir,
+                  /* unused in Perl
+                  const STRING_LIST *default_base_dirs,
+                   */
+                  const char *installation_dir,
+                  const DEPRECATED_DIRS_LIST *overriding_dirs,
+                  STRING_LIST *result_dirs,
+                  DEPRECATED_DIRS_LIST *deprecated_dirs)
+{
+  static STRING_LIST xdg_result_dirs;
+  size_t i;
+  /*
+   read the env directories to avoid setting the overriding_dirs
+   as deprecated if they are explicitely specified in the environnement
+   variable.
+   */
+  const char *env_value = getenv (env_string);
+  if (env_value && strlen (env_value))
+    {
+      char *text = strdup (env_value);
+      char *dir = strtok (text, ":");
+
+      while (dir)
+        {
+          if (strlen (dir))
+            {
+              add_include_directory (dir, &xdg_result_dirs);
+            }
+          dir = strtok (NULL, ":");
+        }
+      free (text);
+    }
+
+  if (installation_dir)
+    {
+      char *install_result_dir;
+      xasprintf (&install_result_dir, "%s/%s", installation_dir, subdir);
+      add_string (install_result_dir, result_dirs);
+      if (overriding_dirs)
+        {
+          DEPRECATED_DIR_INFO *deprecated_dir_info
+            = find_deprecated_dir_info (overriding_dirs, installation_dir);
+
+          if (deprecated_dir_info)
+            {
+              char *deprecated_result_dir;
+              xasprintf (&deprecated_result_dir, "%s/%s",
+                         deprecated_dir_info->obsolete_dir, subdir);
+              if (!find_string (&xdg_result_dirs,
+                                deprecated_dir_info->obsolete_dir))
+                {
+                  add_new_deprecated_dir_info (deprecated_dirs,
+                                   deprecated_dir_info->obsolete_dir,
+                                   deprecated_dir_info->reference_dir);
+                  add_string (deprecated_result_dir, result_dirs);
+                }
+              free (deprecated_result_dir);
+            }
+        }
+      free (install_result_dir);
+    }
+
+  for (i = 0; i < xdg_result_dirs.number; i++)
+    {
+      char *dir = xdg_result_dirs.list[i];
+      if (!find_string (result_dirs, dir))
+        {
+          char *result_dir;
+          xasprintf (&result_dir, "%s/%s", dir, subdir);
+          add_string (result_dir, result_dirs);
+          free (result_dir);
+        }
+      free (dir);
+    }
+
+  xdg_result_dirs.number = 0;
+}
+
+#define XDG_SYSCONFDIR SYSCONFDIR "/xdg"
+
+static DEPRECATED_DIR_INFO overriding_sysconfdir_info[1] = {
+  {XDG_SYSCONFDIR, SYSCONFDIR} };
+static const DEPRECATED_DIRS_LIST overriding_sysconfdir_list = {
+  1, 1, overriding_sysconfdir_info };
+
+static STRING_LIST *
+set_subdir_directories (const char *subdir,
+                        DEPRECATED_DIRS_LIST *deprecated_dirs)
+{
+  STRING_LIST *result = new_string_list ();
+  STRING_LIST *config_dirs = new_string_list ();
+  char *dir_string;
+  char *xdg_config_home;
+
+  xasprintf (&dir_string, "./.%s", subdir);
+  add_string (dir_string, result);
+  free (dir_string);
+
+  xdg_config_home = getenv ("XDG_CONFIG_HOME");
+  if (xdg_config_home && strlen (xdg_config_home))
+    {
+      xasprintf (&dir_string, "%s/%s", xdg_config_home, subdir);
+      add_string (dir_string, result);
+      free (dir_string);
+    }
+  else
+    {
+      const char *home_dir = getenv ("HOME");
+      if (home_dir)
+        {
+          char *deprecated_config_home;
+          xasprintf (&dir_string, "%s/%s/%s", home_dir, ".config", subdir);
+          xasprintf (&deprecated_config_home, "%s/.%s", home_dir, subdir);
+          add_new_deprecated_dir_info (deprecated_dirs,
+                                   deprecated_config_home, dir_string);
+          add_string (dir_string, result);
+          free (dir_string);
+          add_string (deprecated_config_home, result);
+          free (deprecated_config_home);
+        }
+    }
+
+  add_config_paths ("XDG_CONFIG_DIRS", subdir, XDG_SYSCONFDIR,
+                    &overriding_sysconfdir_list, config_dirs, deprecated_dirs);
+
+  merge_strings (result, config_dirs);
+
+  free (config_dirs->list);
+  free (config_dirs);
+
+  xasprintf (&dir_string, DATADIR "/%s", subdir);
+  add_string (dir_string, result);
+  free (dir_string);
+
+  return result;
+}
+
 void
 get_cmdline_customization_option (OPTIONS_LIST *options_list,
                                   char *text)
@@ -282,11 +420,11 @@ main (int argc, char *argv[])
   OPTIONS_LIST convert_options;
   size_t errors_count = 0;
   size_t errors_nr;
-  STRING_LIST texinfo_language_config_dirs;
+  STRING_LIST *texinfo_language_config_dirs;
   STRING_LIST converter_texinfo_language_config_dirs;
   STRING_LIST include_dirs;
   CONVERTER_INITIALIZATION_INFO *format_defaults;
-  char *home_dir;
+  DEPRECATED_DIRS_LIST deprecated_directories;
   const char *curdir = ".";
   char *top_srcdir;
   char *top_builddir;
@@ -362,26 +500,10 @@ main (int argc, char *argv[])
                            "DEBUG", 1, 0);
    */
 
-  memset (&texinfo_language_config_dirs, 0, sizeof (STRING_LIST));
-  add_string (".config", &texinfo_language_config_dirs);
-
-  home_dir = getenv ("HOME");
-  if (home_dir)
-    {
-      char *home_texinfo_language_config_dirs;
-      xasprintf (&home_texinfo_language_config_dirs, "%s/.texinfo",
-                 home_dir);
-      add_string (home_texinfo_language_config_dirs,
-                  &texinfo_language_config_dirs);
-      free (home_texinfo_language_config_dirs);
-    }
-
-  if (strlen (SYSCONFDIR))
-    add_string (SYSCONFDIR "/texinfo", &texinfo_language_config_dirs);
-
-  if (strlen (DATADIR))
-    add_string (DATADIR "/texinfo", &texinfo_language_config_dirs);
+  memset (&deprecated_directories, 0, sizeof (DEPRECATED_DIRS_LIST));
 
+  texinfo_language_config_dirs
+   = set_subdir_directories ("texinfo", &deprecated_directories);
 
   memset (&include_dirs, 0, sizeof (STRING_LIST));
 
@@ -616,14 +738,15 @@ main (int argc, char *argv[])
   free (input_directory);
 
   copy_strings (&converter_texinfo_language_config_dirs,
-                &texinfo_language_config_dirs);
+                texinfo_language_config_dirs);
 
   converter = txi_converter_setup ("html", "html",
                                    &converter_texinfo_language_config_dirs,
+                                   &deprecated_directories,
                                    &convert_options);
 
   free_strings_list (&converter_texinfo_language_config_dirs);
-  free_strings_list (&texinfo_language_config_dirs);
+  destroy_strings_list (texinfo_language_config_dirs);
 
   free_strings_list (&include_dirs);
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]