texinfo-commits
[Top][All Lists]
Advanced

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

branch master updated: Deprecated directories warning in XS/C


From: Patrice Dumas
Subject: branch master updated: Deprecated directories warning in XS/C
Date: Mon, 23 Dec 2024 18:11:40 -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 749da3e00a Deprecated directories warning in XS/C
749da3e00a is described below

commit 749da3e00a96730060ae5c2bf8f211ad0265c32f
Author: Patrice Dumas <pertusus@free.fr>
AuthorDate: Sun Dec 15 19:40:41 2024 +0100

    Deprecated directories warning in XS/C
    
    * tp/Texinfo/XS/main/utils.c (file_name_is_absolute)
    (locate_include_file, locate_file_in_dirs): add file_name_is_absolute.
    
    * tp/Texinfo/XS/main/converter_types.h (DEPRECATED_DIR_INFO)
    (DEPRECATED_DIRS_LIST, CONVERTER_INITIALIZATION_INFO, CONVERTER),
    tp/Texinfo/XS/main/utils.c (find_deprecated_dir_info)
    (add_deprecated_dir_info, copy_deprecated_dirs)
    (add_new_deprecated_dir_info, free_deprecated_dirs_list): add
    deprecated directories structures and functions.
    
    * tp/Texinfo/XS/convert/converter.c (apply_converter_info)
    (destroy_converter_initialization_info, free_generic_converter),
    tp/Texinfo/XS/convert/get_converter_perl_info.c
    (get_deprecated_config_directories_sv, get_converter_info_from_sv):
    pass deprecated directories information from Perl to converter.
    
    * tp/Texinfo/XS/main/utils.c (locate_file_in_dirs),
    tp/Texinfo/XS/convert/html_prepare_converter.c (load_htmlxref_files):
    set deprecated directories used in locate_file_in_dirs.  Warn if
    deprecated directories are used in load_htmlxref_files.
---
 ChangeLog                                       |  25 ++++++
 tp/Texinfo/XS/convert/converter.c               |   7 ++
 tp/Texinfo/XS/convert/get_converter_perl_info.c |  45 +++++++++-
 tp/Texinfo/XS/convert/html_prepare_converter.c  |  44 +++++++++-
 tp/Texinfo/XS/main/converter_types.h            |  15 ++++
 tp/Texinfo/XS/main/utils.c                      | 108 ++++++++++++++++++++++--
 tp/Texinfo/XS/main/utils.h                      |  13 ++-
 7 files changed, 247 insertions(+), 10 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index dd5c400a2e..9c0149fabc 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,28 @@
+2024-12-15  Patrice Dumas  <pertusus@free.fr>
+
+       Deprecated directories warning in XS/C
+
+       * tp/Texinfo/XS/main/utils.c (file_name_is_absolute)
+       (locate_include_file, locate_file_in_dirs): add file_name_is_absolute.
+
+       * tp/Texinfo/XS/main/converter_types.h (DEPRECATED_DIR_INFO)
+       (DEPRECATED_DIRS_LIST, CONVERTER_INITIALIZATION_INFO, CONVERTER),
+       tp/Texinfo/XS/main/utils.c (find_deprecated_dir_info)
+       (add_deprecated_dir_info, copy_deprecated_dirs)
+       (add_new_deprecated_dir_info, free_deprecated_dirs_list): add
+       deprecated directories structures and functions.
+
+       * tp/Texinfo/XS/convert/converter.c (apply_converter_info)
+       (destroy_converter_initialization_info, free_generic_converter),
+       tp/Texinfo/XS/convert/get_converter_perl_info.c
+       (get_deprecated_config_directories_sv, get_converter_info_from_sv):
+       pass deprecated directories information from Perl to converter.
+
+       * tp/Texinfo/XS/main/utils.c (locate_file_in_dirs),
+       tp/Texinfo/XS/convert/html_prepare_converter.c (load_htmlxref_files):
+       set deprecated directories used in locate_file_in_dirs.  Warn if
+       deprecated directories are used in load_htmlxref_files.
+
 2024-12-10  Patrice Dumas  <pertusus@free.fr>
 
        * tp/Texinfo/XS/convert/texinfo.c (txi_parser): check that
diff --git a/tp/Texinfo/XS/convert/converter.c 
b/tp/Texinfo/XS/convert/converter.c
index 3a712b109c..b17133cfbf 100644
--- a/tp/Texinfo/XS/convert/converter.c
+++ b/tp/Texinfo/XS/convert/converter.c
@@ -353,6 +353,9 @@ apply_converter_info (CONVERTER *converter,
       converter->translated_commands
         = copy_translated_commands (init_info->translated_commands);
     }
+
+  copy_deprecated_dirs (&converter->deprecated_config_directories,
+                        &init_info->deprecated_config_directories);
 }
 
 /* apply format_defaults and user_conf initialization information.
@@ -411,6 +414,8 @@ destroy_converter_initialization_info 
(CONVERTER_INITIALIZATION_INFO *init_info)
 
   free_options_list (&init_info->conf);
 
+  free_deprecated_dirs_list (&init_info->deprecated_config_directories);
+
   free_strings_list (&init_info->non_valid_customization);
   free (init_info);
 }
@@ -1785,6 +1790,8 @@ free_generic_converter (CONVERTER *self)
       destroy_translated_commands (self->translated_commands);
     }
 
+  free_deprecated_dirs_list (&self->deprecated_config_directories);
+
   free (self->expanded_formats);
 
   if (self->init_conf)
diff --git a/tp/Texinfo/XS/convert/get_converter_perl_info.c 
b/tp/Texinfo/XS/convert/get_converter_perl_info.c
index 868ef7a13f..41faf3c790 100644
--- a/tp/Texinfo/XS/convert/get_converter_perl_info.c
+++ b/tp/Texinfo/XS/convert/get_converter_perl_info.c
@@ -209,6 +209,45 @@ set_translated_commands (SV *translated_commands_sv)
   return translated_commands;
 }
 
+static void
+get_deprecated_config_directories_sv (SV *deprecated_config_directories_sv,
+                                      DEPRECATED_DIRS_LIST *deprecated_dirs)
+{
+  dTHX;
+
+  if (deprecated_config_directories_sv)
+    {
+      HV *deprecated_config_directories_hv = 0;
+      I32 hv_number;
+      I32 i;
+
+      if (!SvOK (deprecated_config_directories_sv))
+        hv_number = 0;
+      else
+        {
+          deprecated_config_directories_hv
+            = (HV *)SvRV (deprecated_config_directories_sv);
+
+          hv_number = hv_iterinit (deprecated_config_directories_hv);
+        }
+
+      for (i = 0; i < hv_number; i++)
+        {
+          HE *next = hv_iternext (deprecated_config_directories_hv);
+          SV *obsolete_dir_sv = hv_iterkeysv (next);
+          const char *obsolete_dir = (char *) SvPVutf8_nolen (obsolete_dir_sv);
+          SV *value_sv = HeVAL(next);
+          if (SvOK (value_sv))
+            {
+              const char *reference_dir = (char *) SvPVutf8_nolen (value_sv);
+              add_new_deprecated_dir_info (deprecated_dirs, obsolete_dir,
+                                           reference_dir);
+            }
+        }
+    }
+}
+
+
 /* CLASS_NAME is Perl converter class for warning message.  If NULL, no 
message.
    CONVERTER may be NULL (when called from converter_defaults). */
 CONVERTER_INITIALIZATION_INFO *
@@ -265,9 +304,11 @@ get_converter_info_from_sv (SV *conf_sv, const char 
*class_name,
               if (!strcmp (key, "translated_commands"))
                 initialization_info->translated_commands
                   = set_translated_commands (value_sv);
-              /* FIXME get deprecated_config_directories if needed */
               else if (!strcmp (key, "deprecated_config_directories"))
-                {}
+                {
+                  get_deprecated_config_directories_sv (value_sv,
+                    &initialization_info->deprecated_config_directories);
+                }
               else if (class_name)
                 {
                   fprintf (stderr,
diff --git a/tp/Texinfo/XS/convert/html_prepare_converter.c 
b/tp/Texinfo/XS/convert/html_prepare_converter.c
index 3c1647af7a..e75e9d6a90 100644
--- a/tp/Texinfo/XS/convert/html_prepare_converter.c
+++ b/tp/Texinfo/XS/convert/html_prepare_converter.c
@@ -1144,6 +1144,7 @@ load_htmlxref_files (CONVERTER *self)
         {
           char *encoded_htmlxref_file_name;
           char *path_encoding;
+          static DEPRECATED_DIRS_LIST deprecated_dirs_used;
 
           /* cast to remove const */
           encoded_htmlxref_file_name
@@ -1154,7 +1155,48 @@ load_htmlxref_files (CONVERTER *self)
           free (path_encoding);
 
           locate_file_in_dirs (encoded_htmlxref_file_name,
-                               &htmlxref_dirs, &htmlxref_files);
+                               &htmlxref_dirs, &htmlxref_files,
+                               &self->deprecated_config_directories,
+                               &deprecated_dirs_used);
+
+          if (deprecated_dirs_used.number)
+            {
+              size_t i;
+              const char *encoding = 
self->conf->COMMAND_LINE_ENCODING.o.string;
+              for (i = 0; i < deprecated_dirs_used.number; i++)
+                {
+                  char *dir_name, *replacement_dir;
+                  DEPRECATED_DIR_INFO *deprecated_dir_info
+                    = &deprecated_dirs_used.list[i];
+                  if (encoding)
+                    {
+                      int status;
+                      dir_name
+                       = decode_string (deprecated_dir_info->obsolete_dir,
+                                         encoding, &status, 0);
+                      replacement_dir
+                        = decode_string (deprecated_dir_info->reference_dir,
+                                         encoding, &status, 0);
+                      free (deprecated_dir_info->obsolete_dir);
+                      free (deprecated_dir_info->reference_dir);
+                    }
+                  else
+                    {
+                      dir_name = deprecated_dir_info->obsolete_dir;
+                      replacement_dir
+                         = deprecated_dir_info->reference_dir;
+                    }
+
+                  message_list_document_warn (&self->error_messages,
+                      self->conf, 0,
+                      "%s directory is deprecated. Use %s instead",
+                      dir_name, replacement_dir);
+
+                  free (dir_name);
+                  free (replacement_dir);
+                }
+              deprecated_dirs_used.number = 0;
+            }
           free (encoded_htmlxref_file_name);
         }
       free_strings_list (&htmlxref_dirs);
diff --git a/tp/Texinfo/XS/main/converter_types.h 
b/tp/Texinfo/XS/main/converter_types.h
index 6aca42ed1b..54163de0b8 100644
--- a/tp/Texinfo/XS/main/converter_types.h
+++ b/tp/Texinfo/XS/main/converter_types.h
@@ -749,11 +749,23 @@ typedef struct PRE_CLASS_TYPE_INFO {
     char *pre_class;
 } PRE_CLASS_TYPE_INFO;
 
+typedef struct DEPRECATED_DIR_INFO {
+  char *reference_dir;
+  char *obsolete_dir;
+} DEPRECATED_DIR_INFO;
+
+typedef struct DEPRECATED_DIRS_LIST {
+  size_t space;
+  size_t number;
+  DEPRECATED_DIR_INFO *list;
+} DEPRECATED_DIRS_LIST;
+
 /* information on converter configuration from a source of configuration
    (either output format or user customization) */
 typedef struct CONVERTER_INITIALIZATION_INFO {
     TRANSLATED_COMMAND *translated_commands;
     OPTIONS_LIST conf;
+    DEPRECATED_DIRS_LIST deprecated_config_directories;
     /* gather strings that are not customization options */
     STRING_LIST non_valid_customization;
 } CONVERTER_INITIALIZATION_INFO;
@@ -799,6 +811,9 @@ typedef struct CONVERTER {
   /* API to open, set encoding and register files */
     OUTPUT_FILES_INFORMATION output_files_information;
 
+  /* associates deprecated directories and reference directories */
+    DEPRECATED_DIRS_LIST deprecated_config_directories;
+
   /* HTML specific */
     /* set for a converter */
     int external_references_number; /* total number of external references
diff --git a/tp/Texinfo/XS/main/utils.c b/tp/Texinfo/XS/main/utils.c
index d9db59e7f4..3d21febd57 100644
--- a/tp/Texinfo/XS/main/utils.c
+++ b/tp/Texinfo/XS/main/utils.c
@@ -1024,6 +1024,95 @@ destroy_strings_list (STRING_LIST *strings)
   free (strings);
 }
 
+/* Note: the Perl code (in Common.pm, 'locate_include_file') handles
+   a volume in a path (like "A:") using the File::Spec module. */
+static int
+file_name_is_absolute (const char *filename)
+{
+  return !memcmp (filename, "/", 1);
+}
+
+static DEPRECATED_DIR_INFO *
+find_deprecated_dir_info (DEPRECATED_DIRS_LIST *deprecated_dirs,
+                          const char *directory_name)
+{
+  size_t i;
+  for (i = 0; i < deprecated_dirs->number; i++)
+    {
+      DEPRECATED_DIR_INFO *result = &deprecated_dirs->list[i];
+      if (!strcmp (result->obsolete_dir, directory_name))
+        return result;
+    }
+  return 0;
+}
+
+void
+add_deprecated_dir_info (DEPRECATED_DIRS_LIST *deprecated_dirs,
+                         const DEPRECATED_DIR_INFO *deprecated_dir_info)
+{
+  DEPRECATED_DIR_INFO *found_deprecated_dir_info
+    = find_deprecated_dir_info (deprecated_dirs,
+                                deprecated_dir_info->obsolete_dir);
+
+  if (found_deprecated_dir_info)
+    {
+      free (found_deprecated_dir_info->reference_dir);
+      found_deprecated_dir_info->reference_dir
+        = strdup (deprecated_dir_info->reference_dir);
+    }
+  else
+    {
+      if (deprecated_dirs->number >= deprecated_dirs->space)
+        {
+          deprecated_dirs->list
+            = realloc (deprecated_dirs->list,
+               (deprecated_dirs->space += 5) * sizeof (DEPRECATED_DIR_INFO));
+        }
+      deprecated_dirs->list[deprecated_dirs->number].obsolete_dir
+        = strdup (deprecated_dir_info->obsolete_dir);
+      deprecated_dirs->list[deprecated_dirs->number].reference_dir
+        = strdup (deprecated_dir_info->reference_dir);
+      deprecated_dirs->number++;
+    }
+}
+
+void
+copy_deprecated_dirs (DEPRECATED_DIRS_LIST *deprecated_dirs_dst,
+                      const DEPRECATED_DIRS_LIST *deprecated_dirs_src)
+{
+  size_t i;
+  for (i = 0; i < deprecated_dirs_src->number; i++)
+    {
+      add_deprecated_dir_info (deprecated_dirs_dst,
+                               &deprecated_dirs_src->list[i]);
+    }
+}
+
+void
+add_new_deprecated_dir_info (DEPRECATED_DIRS_LIST *deprecated_dirs,
+                             const char *obsolete_dir,
+                             const char *reference_dir)
+{
+  static DEPRECATED_DIR_INFO deprecated_dir_info;
+  /* actually const, but cannot be const in the structure */
+  deprecated_dir_info.obsolete_dir = (char *) obsolete_dir;
+  deprecated_dir_info.reference_dir = (char *) reference_dir;
+  add_deprecated_dir_info (deprecated_dirs, &deprecated_dir_info);
+}
+
+void
+free_deprecated_dirs_list (DEPRECATED_DIRS_LIST *deprecated_dirs)
+{
+  size_t i;
+  for (i = 0; i < deprecated_dirs->number; i++)
+    {
+      DEPRECATED_DIR_INFO *deprecated_dir_info = &deprecated_dirs->list[i];
+      free (deprecated_dir_info->obsolete_dir);
+      free (deprecated_dir_info->reference_dir);
+    }
+  free (deprecated_dirs->list);
+}
+
 /* Return value to be freed by caller. */
 /* try to locate a file called FILENAME, looking for it in the list of include
    directories. */
@@ -1036,9 +1125,7 @@ locate_include_file (const char *filename, const 
STRING_LIST *include_dirs_list)
   size_t i;
 
   /* Checks if filename is absolute or relative to current directory. */
-  /* Note: the Perl code (in Common.pm, 'locate_include_file') handles
-     a volume in a path (like "A:") using the File::Spec module. */
-  if (!memcmp (filename, "/", 1)
+  if (file_name_is_absolute (filename)
       || (strlen (filename) >= 3 && !memcmp (filename, "../", 3))
       || (strlen (filename) >= 2 && !memcmp (filename, "./", 2)))
     {
@@ -1084,9 +1171,11 @@ locate_include_file (const char *filename, const 
STRING_LIST *include_dirs_list)
 char *
 locate_file_in_dirs (const char *filename,
                      const STRING_LIST *directories,
-                     STRING_LIST *all_files)
+                     STRING_LIST *all_files,
+                     DEPRECATED_DIRS_LIST *deprecated_dirs,
+                     DEPRECATED_DIRS_LIST *deprecated_dirs_used)
 {
-  if (!memcmp (filename, "/", 1))
+  if (file_name_is_absolute (filename))
     {
       if (euidaccess (filename, R_OK) == 0)
         {
@@ -1106,6 +1195,15 @@ locate_file_in_dirs (const char *filename,
           xasprintf (&fullpath, "%s/%s", directories->list[i], filename);
           if (euidaccess (fullpath, R_OK) == 0)
             {
+              if (deprecated_dirs && deprecated_dirs_used)
+                {
+                  DEPRECATED_DIR_INFO *deprecated_dir_info
+                    = find_deprecated_dir_info (deprecated_dirs,
+                                         directories->list[i]);
+                  if (deprecated_dir_info)
+                    add_deprecated_dir_info (deprecated_dirs_used,
+                                             deprecated_dir_info);
+                }
               if (all_files)
                 add_string (fullpath, all_files);
               else
diff --git a/tp/Texinfo/XS/main/utils.h b/tp/Texinfo/XS/main/utils.h
index 915d0af7b3..15a4b57eb0 100644
--- a/tp/Texinfo/XS/main/utils.h
+++ b/tp/Texinfo/XS/main/utils.h
@@ -166,8 +166,17 @@ void add_include_directory (const char *filename,
 char *locate_include_file (const char *filename,
                            const STRING_LIST *include_dirs_list);
 char *locate_file_in_dirs (const char *filename,
-                           const STRING_LIST *directories,
-                           STRING_LIST *all_files);
+                     const STRING_LIST *directories,
+                     STRING_LIST *all_files,
+                     DEPRECATED_DIRS_LIST *deprecated_dirs,
+                     DEPRECATED_DIRS_LIST *deprecated_dirs_used);
+
+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,
+                                  const char *obsolete_dir,
+                                  const char *reference_dir);
+void free_deprecated_dirs_list (DEPRECATED_DIRS_LIST *deprecated_dirs);
 
 ENCODING_CONVERSION *get_encoding_conversion (const char *encoding,
                                     ENCODING_CONVERSION_LIST *encodings_list);



reply via email to

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