Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 19 Oct 2014 11:23:47 +0000 (UTC)
From:      Dirk Meyer <dinoex@FreeBSD.org>
To:        ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org
Subject:   svn commit: r371177 - in head/devel/gperf: . files
Message-ID:  <201410191123.s9JBNlGu062848@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: dinoex
Date: Sun Oct 19 11:23:47 2014
New Revision: 371177
URL: https://svnweb.freebsd.org/changeset/ports/371177
QAT: https://qat.redports.org/buildarchive/r371177/

Log:
  - Add Apple's gperf enhancements (GPLv2)
  PR:		193964
  Submitted by:	Pedro F. Giffuni
  Obtained from:	http://opensource.apple.com/source/gperf/gperf-9/patches/

Added:
  head/devel/gperf/files/
  head/devel/gperf/files/patch-offsetof   (contents, props changed)
  head/devel/gperf/files/patch-size_type   (contents, props changed)
Modified:
  head/devel/gperf/Makefile

Modified: head/devel/gperf/Makefile
==============================================================================
--- head/devel/gperf/Makefile	Sun Oct 19 10:18:19 2014	(r371176)
+++ head/devel/gperf/Makefile	Sun Oct 19 11:23:47 2014	(r371177)
@@ -2,6 +2,7 @@
 
 PORTNAME=	gperf
 PORTVERSION=	3.0.3
+PORTREVISION=	1
 CATEGORIES=	devel
 MASTER_SITES=	${MASTER_SITE_GNU}
 MASTER_SITE_SUBDIR=	gperf

Added: head/devel/gperf/files/patch-offsetof
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/devel/gperf/files/patch-offsetof	Sun Oct 19 11:23:47 2014	(r371177)
@@ -0,0 +1,26 @@
+--- src/output.cc	2007-03-31 08:16:05.000000000 -0700
++++ src/output.cc	2008-05-27 16:07:01.000000000 -0700
+@@ -1106,9 +1106,7 @@ output_keyword_entry (KeywordExt *temp, 
+   if (option[TYPE])
+     printf ("{");
+   if (option[SHAREDLIB])
+-    printf ("(int)(long)&((struct %s_t *)0)->%s_str%d",
+-            option.get_stringpool_name (), option.get_stringpool_name (),
+-            stringpool_index);
++    printf("offsetof(struct %s_t, %s_str%d)", option.get_stringpool_name (), option.get_stringpool_name (), stringpool_index);
+   else
+     output_string (temp->_allchars, temp->_allchars_length);
+   if (option[TYPE])
+@@ -2035,8 +2033,11 @@ Output::output ()
+       printf ("%s\n", _struct_decl);
+     }
+ 
+-  if (option[INCLUDE])
++  if (option[INCLUDE]) {
+     printf ("#include <string.h>\n"); /* Declare strlen(), strcmp(), strncmp(). */
++    if (option[SHAREDLIB])
++      printf("#include <stddef.h>\n"); /* Declare offsetof() */
++  }
+ 
+   if (!option[ENUM])
+     {

Added: head/devel/gperf/files/patch-size_type
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/devel/gperf/files/patch-size_type	Sun Oct 19 11:23:47 2014	(r371177)
@@ -0,0 +1,300 @@
+diff -up -r ./doc/gperf.1 ./doc/gperf.1
+--- ./doc/gperf.1	2007-05-02 09:01:25.000000000 -0700
++++ ./doc/gperf.1	2011-10-06 14:21:41.000000000 -0700
+@@ -1,5 +1,5 @@
+ .\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.23.
+-.TH GPERF "1" "May 2007" "GNU gperf 3.0.3" FSF
++.TH GPERF "1" "October 2011" "GNU gperf 3.0.3" FSF
+ .SH NAME
+ gperf \- generate a perfect hash function from a key set
+ .SH SYNOPSIS
+@@ -129,6 +129,10 @@ binary search.
+ Prevents the transfer of the type declaration to the
+ output file. Use this option if the type is already
+ defined elsewhere.
++.TP
++\fB\-\-size\-type\fR=\fITYPE\fR
++Specify the type for length parameters. Default type is
++\&'unsigned int'.
+ .SS "Algorithm employed by gperf:"
+ .TP
+ \fB\-k\fR, \fB\-\-key\-positions\fR=\fIKEYS\fR
+diff -up -r ./src/options.cc ./src/options.cc
+--- ./src/options.cc	2007-03-31 08:22:16.000000000 -0700
++++ ./src/options.cc	2011-10-06 14:13:41.000000000 -0700
+@@ -67,6 +67,8 @@ static const char *const DEFAULT_STRINGP
+ /* Default delimiters that separate keywords from their attributes.  */
+ static const char *const DEFAULT_DELIMITERS = ",";
+ 
++static const char *const DEFAULT_SIZE_TYPE = "unsigned int";
++
+ /* Prints program usage to given stream.  */
+ 
+ void
+@@ -202,6 +204,9 @@ Options::long_usage (FILE * stream)
+            "                         Prevents the transfer of the type declaration to the\n"
+            "                         output file. Use this option if the type is already\n"
+            "                         defined elsewhere.\n");
++  fprintf (stream,
++           "      --size-type=TYPE   Specify the type for length parameters. Default type is\n"
++           "                         'unsigned int'.\n");
+   fprintf (stream, "\n");
+   fprintf (stream,
+            "Algorithm employed by gperf:\n");
+@@ -468,6 +473,7 @@ Options::Options ()
+     _lengthtable_name (DEFAULT_LENGTHTABLE_NAME),
+     _stringpool_name (DEFAULT_STRINGPOOL_NAME),
+     _delimiters (DEFAULT_DELIMITERS),
++    _size_type (DEFAULT_SIZE_TYPE),
+     _key_positions ()
+ {
+ }
+@@ -512,6 +518,7 @@ Options::~Options ()
+                "\nhash table size multiplier = %g"
+                "\ninitial associated value = %d"
+                "\ndelimiters = %s"
++               "\nsize type = %s"
+                "\nnumber of switch statements = %d\n",
+                _option_word & TYPE ? "enabled" : "disabled",
+                _option_word & UPPERLOWER ? "enabled" : "disabled",
+@@ -537,7 +544,7 @@ Options::~Options ()
+                _function_name, _hash_name, _wordlist_name, _lengthtable_name,
+                _stringpool_name, _slot_name, _initializer_suffix,
+                _asso_iterations, _jump, _size_multiple, _initial_asso_value,
+-               _delimiters, _total_switches);
++               _delimiters, _size_type, _total_switches);
+       if (_key_positions.is_useall())
+         fprintf (stderr, "all characters are used in the hash function\n");
+       else
+@@ -666,6 +673,12 @@ Options::set_delimiters (const char *del
+     _delimiters = delimiters;
+ }
+ 
++void
++Options::set_size_type (const char *size_type)
++{
++  if (_size_type == DEFAULT_SIZE_TYPE) 
++    _size_type = size_type;
++}
+ 
+ /* Parses the command line Options and sets appropriate flags in option_word.  */
+ 
+@@ -691,6 +704,7 @@ static const struct option long_options[
+   { "global-table", no_argument, NULL, 'G' },
+   { "word-array-name", required_argument, NULL, 'W' },
+   { "length-table-name", required_argument, NULL, CHAR_MAX + 4 },
++  { "size-type", required_argument, NULL, CHAR_MAX + 5 },
+   { "switch", required_argument, NULL, 'S' },
+   { "omit-struct-type", no_argument, NULL, 'T' },
+   { "key-positions", required_argument, NULL, 'k' },
+@@ -1044,6 +1058,11 @@ warranty; not even for MERCHANTABILITY o
+             _lengthtable_name = /*getopt*/optarg;
+             break;
+           }
++        case CHAR_MAX + 5:      /* Sets the name for the length table array.  */
++          {
++            _size_type = /*getopt*/optarg;
++            break;
++          }
+         default:
+           short_usage (stderr);
+           exit (1);
+diff -up -r ./src/options.h ./src/options.h
+--- ./src/options.h	2005-05-14 07:22:36.000000000 -0700
++++ ./src/options.h	2011-10-06 13:29:28.000000000 -0700
+@@ -209,6 +209,9 @@ public:
+   /* Sets the delimiters string, if not already set.  */
+   void                  set_delimiters (const char *delimiters);
+ 
++  const char *		get_size_type() const;
++  void			set_size_type(const char*);
++
+   /* Returns key positions.  */
+   const Positions&      get_key_positions () const;
+ 
+@@ -279,6 +282,8 @@ private:
+   /* Separates keywords from other attributes.  */
+   const char *          _delimiters;
+ 
++  const char *		_size_type;
++
+   /* Contains user-specified key choices.  */
+   Positions             _key_positions;
+ };
+diff -up -r ./src/options.icc ./src/options.icc
+--- ./src/options.icc	2005-05-14 07:22:36.000000000 -0700
++++ ./src/options.icc	2011-10-06 13:42:59.000000000 -0700
+@@ -155,3 +155,9 @@ Options::get_key_positions () const
+ {
+   return _key_positions;
+ }
++
++INLINE const char *
++Options::get_size_type() const
++{
++	return _size_type;
++}
+diff -up -r ./src/output.cc ./src/output.cc
+--- ./src/output.cc	2011-10-06 14:23:05.000000000 -0700
++++ ./src/output.cc	2011-10-06 13:41:53.000000000 -0700
+@@ -772,14 +772,14 @@ Output::output_hash_function () const
+   printf (option[KRC] ?
+                  "(str, len)\n"
+             "     register char *str;\n"
+-            "     register unsigned int len;\n" :
++            "     register %s len;\n" :
+           option[C] ?
+                  "(str, len)\n"
+             "     register const char *str;\n"
+-            "     register unsigned int len;\n" :
++            "     register %s len;\n" :
+           option[ANSIC] | option[CPLUSPLUS] ?
+-                 "(register const char *str, register unsigned int len)\n" :
+-          "");
++                 "(register const char *str, register %s len)\n" :
++          "", option.get_size_type());
+ 
+   /* Note that when the hash function is called, it has already been verified
+      that  min_key_len <= len <= max_key_len.  */
+@@ -875,7 +875,7 @@ Output::output_hash_function () const
+                   "  switch (%s)\n"
+                   "    {\n"
+                   "      default:\n",
+-                  option[NOLENGTH] ? "0" : "len",
++                  option[NOLENGTH] ? "0" : "(int)len",
+                   option[NOLENGTH] ? "len" : "hval");
+ 
+           while (key_pos != Positions::LASTCHAR && key_pos >= _max_key_len)
+@@ -1900,14 +1900,14 @@ Output::output_lookup_function () const
+   printf (option[KRC] ?
+                  "(str, len)\n"
+             "     register char *str;\n"
+-            "     register unsigned int len;\n" :
++            "     register %s len;\n" :
+           option[C] ?
+                  "(str, len)\n"
+             "     register const char *str;\n"
+-            "     register unsigned int len;\n" :
++            "     register %s len;\n" :
+           option[ANSIC] | option[CPLUSPLUS] ?
+-                 "(register const char *str, register unsigned int len)\n" :
+-          "");
++                 "(register const char *str, register %s len)\n" :
++          "", option.get_size_type());
+ 
+   /* Output the function's body.  */
+   printf ("{\n");
+@@ -2074,13 +2073,14 @@ Output::output ()
+     printf ("class %s\n"
+             "{\n"
+             "private:\n"
+-            "  static inline unsigned int %s (const char *str, unsigned int len);\n"
++            "  static inline unsigned int %s (const char *str, %s len);\n"
+             "public:\n"
+-            "  static %s%s%s (const char *str, unsigned int len);\n"
++            "  static %s%s%s (const char *str, %s len);\n"
+             "};\n"
+             "\n",
+-            option.get_class_name (), option.get_hash_name (),
+-            const_for_struct, _return_type, option.get_function_name ());
++            option.get_class_name (), option.get_hash_name (), option.get_size_type(),
++            const_for_struct, _return_type, option.get_function_name (),
++            option.get_size_type());
+ 
+   output_hash_function ();
+ 
+diff -up -r ./tests/c-parse.exp ./tests/c-parse.exp
+--- ./tests/c-parse.exp	2007-04-06 08:38:50.000000000 -0700
++++ ./tests/c-parse.exp	2011-10-06 13:45:57.000000000 -0700
+@@ -80,7 +80,7 @@ hash (str, len)
+       126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
+       126, 126, 126, 126, 126, 126
+     };
+-  register int hval = len;
++  register int hval = (int)len;
+ 
+   switch (hval)
+     {
+diff -up -r ./tests/charsets.exp ./tests/charsets.exp
+--- ./tests/charsets.exp	2007-04-19 04:13:42.000000000 -0700
++++ ./tests/charsets.exp	2011-10-06 13:47:31.000000000 -0700
+@@ -89,7 +90,7 @@ hash (str, len)
+       5046, 5046, 5046, 5046, 5046, 5046, 5046, 5046, 5046, 5046,
+       5046, 5046, 5046, 5046, 5046, 5046, 5046, 5046, 5046
+     };
+-  register int hval = len;
++  register int hval = (int)len;
+ 
+   switch (hval)
+     {
+diff -up -r ./tests/chill.exp ./tests/chill.exp
+--- ./tests/chill.exp	2007-04-19 04:13:42.000000000 -0700
++++ ./tests/chill.exp	2011-10-06 13:46:47.000000000 -0700
+@@ -78,7 +78,7 @@ hash (str, len)
+       1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050,
+       1050, 1050, 1050, 1050, 1050, 1050, 1050
+     };
+-  register int hval = len;
++  register int hval = (int)len;
+ 
+   switch (hval)
+     {
+diff -up -r ./tests/cplusplus.exp ./tests/cplusplus.exp
+--- ./tests/cplusplus.exp	2007-04-19 03:16:41.000000000 -0700
++++ ./tests/cplusplus.exp	2011-10-06 13:47:03.000000000 -0700
+@@ -80,7 +80,7 @@ hash (str, len)
+       164, 164, 164, 164, 164, 164, 164, 164, 164, 164,
+       164, 164, 164, 164, 164, 164
+     };
+-  register int hval = len;
++  register int hval = (int)len;
+ 
+   switch (hval)
+     {
+diff -up -r ./tests/java.exp ./tests/java.exp
+--- ./tests/java.exp	2007-04-19 03:16:41.000000000 -0700
++++ ./tests/java.exp	2011-10-06 13:47:19.000000000 -0700
+@@ -104,7 +104,7 @@ hash (str, len)
+       77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
+       77, 77, 77, 77, 77, 77
+     };
+-  register int hval = len;
++  register int hval = (int)len;
+ 
+   switch (hval)
+     {
+diff -up -r ./tests/languages.exp ./tests/languages.exp
+--- ./tests/languages.exp	2007-04-19 03:16:41.000000000 -0700
++++ ./tests/languages.exp	2011-10-06 13:47:47.000000000 -0700
+@@ -93,7 +94,7 @@ hash (str, len)
+       3861, 3861, 3861, 3861, 3861, 3861, 3861, 3861, 3861, 3861,
+       3861, 3861, 3861, 3861, 3861
+     };
+-  register int hval = len;
++  register int hval = (int)len;
+ 
+   switch (hval)
+     {
+diff -up -r ./tests/objc.exp ./tests/objc.exp
+--- ./tests/objc.exp	2007-04-19 03:16:41.000000000 -0700
++++ ./tests/objc.exp	2011-10-06 13:46:34.000000000 -0700
+@@ -80,7 +80,7 @@ hash (str, len)
+       96, 96, 96, 96, 96, 96, 96, 96, 96, 96,
+       96, 96, 96, 96, 96, 96
+     };
+-  register int hval = len;
++  register int hval = (int)len;
+ 
+   switch (hval)
+     {
+--- tests/test-6.exp	2004-08-22 09:04:17.000000000 -0700
++++ tests/test-6.out	2011-10-06 14:31:09.000000000 -0700
+@@ -88,6 +88,8 @@ Details in the output code:
+                          Prevents the transfer of the type declaration to the
+                          output file. Use this option if the type is already
+                          defined elsewhere.
++      --size-type=TYPE   Specify the type for length parameters. Default type is
++                         'unsigned int'.
+ 
+ Algorithm employed by gperf:
+   -k, --key-positions=KEYS



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201410191123.s9JBNlGu062848>