summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Seifert <soap@gentoo.org>2016-09-28 22:43:31 +0200
committerDavid Seifert <soap@gentoo.org>2016-09-28 23:02:01 +0200
commitbf945baafb407fb516c304759df3e68fab26ce6e (patch)
tree636d488438d2dd53b869380d93e94ee5e9498878 /sci-electronics/freehdl
parentnet-misc/x2goclient: version bump to 0.4.5.2, add qt5 support (diff)
downloadgentoo-bf945baafb407fb516c304759df3e68fab26ce6e.tar.gz
gentoo-bf945baafb407fb516c304759df3e68fab26ce6e.tar.bz2
gentoo-bf945baafb407fb516c304759df3e68fab26ce6e.zip
sci-electronics/freehdl: Version bump to 0.0.8
Gentoo-bug: 594706 * EAPI=6 * [QA] fix printf format specifiers * [QA] fix assigning C-string literals to 'char*' * Remove .la files unconditionally * Disable building and installing of static libs Package-Manager: portage-2.3.1
Diffstat (limited to 'sci-electronics/freehdl')
-rw-r--r--sci-electronics/freehdl/Manifest1
-rw-r--r--sci-electronics/freehdl/files/freehdl-0.0.8-fix-c++14.patch507
-rw-r--r--sci-electronics/freehdl/files/freehdl-0.0.8-qa.patch279
-rw-r--r--sci-electronics/freehdl/freehdl-0.0.8.ebuild33
4 files changed, 820 insertions, 0 deletions
diff --git a/sci-electronics/freehdl/Manifest b/sci-electronics/freehdl/Manifest
index c07d576ddbbf..bd71078be7a9 100644
--- a/sci-electronics/freehdl/Manifest
+++ b/sci-electronics/freehdl/Manifest
@@ -1 +1,2 @@
DIST freehdl-0.0.7.tar.gz 1394351 SHA256 b12f2066d856d03e8abc0d93d6ba566b9c55b18e60d47614106c64030324d2de SHA512 3e2ca8fe4c6ba4d112d716ae48856e6ecfecf6eceac7a4bf0665c9a99d9fca880c4af095a6db093a9d7005d2b7cc753c287a3af850d05738c64c78b3c0dad566 WHIRLPOOL f86afdc4a5069ef141d2ba338648e621586724bf96c4d83da1549012ee2d2f6bbcda24e3d197267e41c631791e5737cd069241e563b0eebf016c857915c10c21
+DIST freehdl-0.0.8.tar.gz 1389888 SHA256 7f0978f8252329450de43e98c04c15fdd8a3f2bdc5ca91f75f8f5dd280c6ed84 SHA512 731fde1a940a762e570107819a89ac2884029e5c4f5d51e5df0032a4381fd04c7da948b5f2de6b1ce60801f6ce3a0a9123a4902e75e216a1182b25b2134f44ee WHIRLPOOL b9f496f0fdfcd8b4d3b2c4b731c2d6884760417604023c20e5c0d2f451a6883da86da8e8f935c2491d3b9d451927ce1791447303c67df05d4338795b63261a14
diff --git a/sci-electronics/freehdl/files/freehdl-0.0.8-fix-c++14.patch b/sci-electronics/freehdl/files/freehdl-0.0.8-fix-c++14.patch
new file mode 100644
index 000000000000..6da5bb1b27a1
--- /dev/null
+++ b/sci-electronics/freehdl/files/freehdl-0.0.8-fix-c++14.patch
@@ -0,0 +1,507 @@
+C++11 has added new types (std::hash), which get dropped into the namespace due to
+awful 'using namespace std;' declarations everywhere, causing name collisions.
+Instead, only drop a minimal set of declarations into the global :: namespace.
+See also: https://bugs.gentoo.org/show_bug.cgi?id=594706
+
+--- a/fire/test-fire.cc
++++ b/fire/test-fire.cc
+@@ -2,7 +2,7 @@
+ #include <stdio.h>
+ #include <freehdl/fire.h>
+
+-using namespace std;
++using std::cout;
+
+ extern tree_chunk_info fire_chunk_info;
+
+--- a/freehdl/cdfggen-chunk.h
++++ b/freehdl/cdfggen-chunk.h
+@@ -7,7 +7,9 @@
+ #include <string>
+ #include <vector>
+ typedef enum {to, downto} cdfgg_direction;
+-using namespace std;
++using std::string;
++using std::vector;
++using std::pair;
+
+ extern tree_chunk_info cdfggen_chunk_info;
+ extern tree_ctype_info int_ctype_info;
+--- a/freehdl/cdfggen-chunk.t
++++ b/freehdl/cdfggen-chunk.t
+@@ -13,8 +13,7 @@
+ (header-add "#include <freehdl/tree-supp.h>"
+ "#include <string>"
+ "#include <vector>"
+- "typedef enum {to, downto} cdfgg_direction;"
+- "using namespace std;")
++ "typedef enum {to, downto} cdfgg_direction;")
+
+ (impl-add "#include <freehdl/cdfggen-chunk.h>")
+
+--- a/freehdl/kernel-attributes.hh
++++ b/freehdl/kernel-attributes.hh
+@@ -1,6 +1,8 @@
+ #ifndef FREEHDL_KERNEL_ATTRIBUTES_H
+ #define FREEHDL_KERNEL_ATTRIBUTES_H
+
++using std::max;
++
+ /* *************************************************************
+ * Function kind attributes for signals
+ * ************************************************************* */
+--- a/freehdl/kernel-db.hh
++++ b/freehdl/kernel-db.hh
+@@ -3,6 +3,8 @@
+
+ #include <assert.h>
+
++#include <string>
++using std::string;
+
+ /* This header file includes the definitions that are required to
+ * setup a kernel database. This database will be used by the kernel
+@@ -254,7 +256,7 @@
+
+ // A hash function template used tp generate a hash number from
+ // d
+-class db_basic_key_hash : public hash<unsigned long> {
++class db_basic_key_hash : public __gnu_cxx::hash<unsigned long> {
+ public:
+ size_t operator()(const db_basic_key& x) const {
+ return (*(hash<unsigned long> *)this)(((unsigned long)x.value)>>2);
+--- a/freehdl/kernel-dump.hh
++++ b/freehdl/kernel-dump.hh
+@@ -13,9 +13,9 @@
+ #include <string>
+ #include <fstream>
+
+-using namespace std;
++using std::fstream;
+
+-typedef map<string, char*, less<string> > Tmap;
++typedef map<string, const char*, less<string> > Tmap;
+ extern Tmap mapping_translation_table;
+
+ // For each signal which is dumped an virtual process is created. This
+--- a/freehdl/kernel-fhdl-stream.hh
++++ b/freehdl/kernel-fhdl-stream.hh
+@@ -9,7 +9,9 @@
+ #include <string>
+ #include <iostream>
+
+-using namespace std;
++using std::istream;
++using std::ostream;
++using std::string;
+
+ struct fhdl_ostream_t {
+ union {
+--- a/freehdl/kernel-map-list.hh
++++ b/freehdl/kernel-map-list.hh
+@@ -7,7 +7,6 @@
+ #include <freehdl/kernel-acl.hh>
+ #include <freehdl/kernel-sig-info.hh>
+
+-using namespace std;
+ //using namespace __gnu_cxx;
+
+ // A signal_link instance describes the connection
+--- a/freehdl/kernel-name-stack.hh
++++ b/freehdl/kernel-name-stack.hh
+@@ -3,7 +3,7 @@
+
+ #include <string>
+
+-using namespace std;
++using std::string;
+
+ #define NAME_STACK_INCREMENT 10
+
+--- a/freehdl/kernel-signal-source-list-array.hh
++++ b/freehdl/kernel-signal-source-list-array.hh
+@@ -13,7 +13,6 @@
+ #include <freehdl/kernel-util.hh>
+ #include <freehdl/kernel-source-descriptor.hh>
+
+-using namespace std;
+ //using namespace __gnu_cxx;
+
+ // signal_source stores information about a source of a signal. Note
+--- a/freehdl/kernel-util.hh
++++ b/freehdl/kernel-util.hh
+@@ -15,7 +15,8 @@
+ #include <hash_map>
+ #endif
+
+-using namespace std;
++using std::stringstream;
++using std::string;
+
+ #if !defined __GNUC__ || __GNUC__ != 2
+ using namespace __gnu_cxx;
+@@ -24,7 +25,7 @@
+ // A hash function template used tp generate a hash number from
+ // pointer values.
+ template<class T>
+-class pointer_hash : public hash<unsigned long> {
++class pointer_hash : public __gnu_cxx::hash<unsigned long> {
+ public:
+ size_t operator()(const T& x) const {
+ return (*(hash<unsigned long> *)this)(((unsigned long)x)>>2);
+--- a/freehdl/std.h
++++ b/freehdl/std.h
+@@ -1,7 +1,6 @@
+ #ifndef FREEHDL_STD_H
+ #define FREEHDL_STD_H
+
+-using namespace std;
+
+ #include <freehdl/std-standard.hh>
+ #include <freehdl/std-vhdl-types.hh>
+--- a/freehdl/std-vhdl-types.hh
++++ b/freehdl/std-vhdl-types.hh
+@@ -6,13 +6,24 @@
+ #include <float.h>
+ #include <math.h>
+ #include <iostream>
++#include <map>
++#include <list>
++#include <functional>
+ #include <string.h>
+
+ #include <freehdl/std-memory.hh>
+ #include <freehdl/kernel-error.hh>
+ #include <freehdl/kernel-acl.hh>
+
+-using namespace std;
++using std::string;
++using std::istream;
++using std::ostream;
++using std::min;
++using std::map;
++using std::stringstream;
++using std::list;
++using std::less;
++using std::iostream;
+
+ typedef long long int lint;
+ const int BUFFER_STREAM_SIZE_INCREMENT = 1024;
+--- a/freehdl/vaul-lexer.h
++++ b/freehdl/vaul-lexer.h
+@@ -32,7 +32,6 @@
+ #include <stdarg.h>
+ #include <string.h>
+
+-using namespace std;
+
+ #undef yyFlexLexer
+ #define yyFlexLexer vaul_FlexLexer
+--- a/ieee/numeric_std.cc
++++ b/ieee/numeric_std.cc
+@@ -2,6 +2,7 @@
+ #include <freehdl/std.h>
+
+
++using std::max;
+
+ /* package :ieee:numeric_std */
+ /* External declarations */
+--- a/kernel/attributes.cc
++++ b/kernel/attributes.cc
+@@ -5,6 +5,7 @@
+ #include <freehdl/kernel-kernel-class.hh>
+ #include <freehdl/kernel-reader-info.hh>
+ #include <freehdl/kernel-driver-info.hh>
++using std::max;
+ #include <freehdl/kernel-attributes.hh>
+
+
+--- a/kernel/db.cc
++++ b/kernel/db.cc
+@@ -1,6 +1,5 @@
+ #define KERNEL // Include internal kernel definitions
+
+-using namespace std;
+ #include <freehdl/kernel-db.hh>
+
+
+--- a/kernel/fhdl_stream.cc
++++ b/kernel/fhdl_stream.cc
+@@ -7,6 +7,9 @@
+ #include <freehdl/kernel-error.hh>
+ #include <freehdl/kernel-fhdl-stream.hh>
+
++using std::cin;
++using std::cout;
++using std::stringstream;
+
+ // Error stream to output error messages generated by the kernel,
+ // e.g. to print error messages due to invalid simulator commands
+--- a/kernel/kernel_class.cc
++++ b/kernel/kernel_class.cc
+@@ -16,6 +16,10 @@
+ #include <freehdl/kernel-resolver-descriptor.hh>
+ #include <freehdl/kernel-fhdl-stream.hh>
+
++using std::cerr;
++using std::pair;
++using std::binary_function;
++
+ // Arguments that are passed in form the command line
+ int main_argc;
+ char **main_argv;
+--- a/kernel/main.cc
++++ b/kernel/main.cc
+@@ -34,6 +34,15 @@
+ #include <freehdl/kernel-error.hh>
+ #include <freehdl/kernel-fhdl-stream.hh>
+
++using std::ios;
++using std::ifstream;
++using std::ofstream;
++using std::ostringstream;
++using std::cin;
++using std::cerr;
++using std::cout;
++using std::endl;
++
+ #ifdef PERFMON_STATISTICS
+ #include "pcounter.hh"
+ #endif
+--- a/kernel/map_list.cc
++++ b/kernel/map_list.cc
+@@ -4,6 +4,8 @@
+ #include <freehdl/kernel-sig-info.hh>
+ #include <freehdl/kernel-resolver-descriptor.hh>
+
++using std::max;
++
+ // Stores the father signal(s) of port signals
+ port_signal_link_map_t port_signal_link_map;
+
+--- a/kernel/name_stack.cc
++++ b/kernel/name_stack.cc
+@@ -1,8 +1,10 @@
+ #include <stdlib.h>
+ #include <stdio.h>
++#include <stack>
+ #include <freehdl/kernel-error.hh>
+ #include <freehdl/kernel-name-stack.hh>
+
++using std::stack;
+
+ name_stack instance_name;
+
+--- a/kernel/persistent_cdfg_dump.cc
++++ b/kernel/persistent_cdfg_dump.cc
+@@ -3,6 +3,7 @@
+ #include <freehdl/kernel-persistent-cdfg-dump.hh>
+ #include <freehdl/kernel-persistent-dump.hh>
+
++using std::endl;
+
+ buffer_stream register_cdfg_tmp_buffer;
+
+--- a/kernel/sig_info.cc
++++ b/kernel/sig_info.cc
+@@ -1,6 +1,5 @@
+ #define KERNEL // Include internal kernel definitions
+
+-using namespace std;
+ #include <freehdl/kernel-error.hh>
+ #include <freehdl/kernel-db.hh>
+ #include <freehdl/kernel-sig-info.hh>
+--- a/std/internal_textio.cc
++++ b/std/internal_textio.cc
+@@ -10,6 +10,10 @@
+ #include <freehdl/kernel-name-stack.hh>
+ #include <freehdl/kernel-register.hh>
+
++using std::ios;
++using std::cin;
++using std::cout;
++
+ /* package :std:textio */
+
+ /* Definitions for access type :std:textio:line */
+--- a/std/vhdl_types.cc
++++ b/std/vhdl_types.cc
+@@ -12,6 +12,9 @@
+ #include <freehdl/kernel-register.hh>
+
+
++using std::ios;
++using std::ifstream;
++using std::ofstream;
+
+ /* *************************************************************
+ * Some global functions
+--- a/v2cc/mapping.cc
++++ b/v2cc/mapping.cc
+@@ -34,7 +34,12 @@
+ #include <iostream>
+ #include <stdlib.h>
+
+-using namespace std;
++using std::string;
++using std::list;
++using std::map;
++using std::istream;
++using std::ifstream;
++using std::cerr;
+
+ v2cc_mapper::v2cc_mapper ()
+ {
+--- a/v2cc/v2cc.cc
++++ b/v2cc/v2cc.cc
+@@ -35,7 +35,6 @@
+
+ */
+
+-using namespace std;
+
+ #if HAVE_MALLOC_H
+ #include <malloc.h>
+--- a/v2cc/v2cc-const-fold.cc
++++ b/v2cc/v2cc-const-fold.cc
+@@ -16,6 +16,9 @@
+ #include "v2cc-util.h"
+
+
++using std::cerr;
++using std::max;
++using std::min;
+
+ // Used to generate error messages
+ extern vaul_error_printer codegen_error;
+--- a/v2cc/v2cc-decl.cc
++++ b/v2cc/v2cc-decl.cc
+@@ -13,6 +13,9 @@
+ #include "mapping.h"
+ #include "v2cc-util.h"
+
++using std::endl;
++using std::min;
++using std::max;
+
+ void test (RegionStack &rstack)
+ {
+--- a/v2cc/v2cc-explore.cc
++++ b/v2cc/v2cc-explore.cc
+@@ -15,7 +15,6 @@
+ #include "mapping.h"
+ #include "v2cc-util.h"
+
+-using namespace std;
+
+ // Used to generate error messages
+ extern vaul_error_printer codegen_error;
+--- a/v2cc/v2cc.h
++++ b/v2cc/v2cc.h
+@@ -1,7 +1,17 @@
+ #ifndef V2CC_HEADER
+ #define V2CC_HEADER
+
+-using namespace std;
++using std::vector;
++using std::list;
++using std::string;
++using std::pair;
++using std::string;
++using std::set;
++using std::less;
++using std::deque;
++using std::binary_function;
++using std::map;
++using std::binary_function;
+
+ #include <freehdl/vaul.h>
+ #include "mapping.h"
+--- a/v2cc/v2cc-qid.cc
++++ b/v2cc/v2cc-qid.cc
+@@ -4,6 +4,7 @@
+ #include "v2cc-util.h"
+
+
++using std::endl;
+
+ // ******************************************************************************************
+ // Name: m_qid , generic function
+--- a/v2cc/v2cc-util.cc
++++ b/v2cc/v2cc-util.cc
+@@ -9,6 +9,9 @@
+
+ #include "v2cc-util.h"
+
++using std::endl;
++using std::hex;
++using std::dec;
+
+ // ******************************************************************************************
+ // Some global variables
+--- a/v2cc/v2cc-util.h
++++ b/v2cc/v2cc-util.h
+@@ -2,13 +2,18 @@
+ #ifndef V2CC_UTIL_H
+ #define V2CC_UTIL_H
+
+-using namespace std;
+
+ #include <sstream>
+ #include <iomanip>
+ #include <freehdl/vaul.h>
+ #include "v2cc-chunk.h"
+
++using std::stringstream;
++using std::setprecision;
++using std::showpoint;
++using std::ofstream;
++using std::cout;
++
+ // ******************************************************************************************
+ // Some global variables
+ // ******************************************************************************************
+--- a/vaul/bison-parser.cc
++++ b/vaul/bison-parser.cc
+@@ -86,7 +86,6 @@
+ #include <malloc.h>
+ #endif
+
+-using namespace std;
+
+ #define YYINITDEPTH 10000
+ #define YYMAXDEPTH 100000
+--- a/vaul/bison-parser.yy
++++ b/vaul/bison-parser.yy
+@@ -49,7 +49,6 @@
+ #include <malloc.h>
+ #endif
+
+-using namespace std;
+
+ #define YYINITDEPTH 10000
+ #define YYMAXDEPTH 100000
+--- a/vaul/printer.cc
++++ b/vaul/printer.cc
+@@ -27,7 +27,8 @@
+ #include <string.h>
+ #include <sstream>
+
+-using namespace std;
++using std::ostringstream;
++using std::ostream;
+
+ void vaul_printer::printf (const char *fmt, ...)
+ {
+--- a/vaul/tree.cc
++++ b/vaul/tree.cc
+@@ -31,7 +31,7 @@
+ #include <assert.h>
+ #include <stdlib.h>
+
+-using namespace std;
++using std::ostream;
+
+ vaul_id_set::vaul_id_set(int dummy)
+ {
diff --git a/sci-electronics/freehdl/files/freehdl-0.0.8-qa.patch b/sci-electronics/freehdl/files/freehdl-0.0.8-qa.patch
new file mode 100644
index 000000000000..d35af9f69a69
--- /dev/null
+++ b/sci-electronics/freehdl/files/freehdl-0.0.8-qa.patch
@@ -0,0 +1,279 @@
+Fix various QA issues:
+* Use correct printf format specifiers for 'size_t'
+* Fix const correctness ('char*' -> 'const char*') for C-string literals
+* Correctly forward declare inline functions
+
+--- a/fire/test-fire.cc
++++ b/fire/test-fire.cc
+@@ -24,7 +24,7 @@
+ if (k->size < (size_t) N)
+ sizes[k->size]++;
+ if (k->size % 4 !=0)
+- printf ("odd size: %d\n", k->size);
++ printf ("odd size: %zu\n", k->size);
+ }
+ printf ("min = %d, max = %d\n", min, max);
+ for (int i = min; i <= max && i < N; i+=4)
+--- a/fire/tree-supp.cc
++++ b/fire/tree-supp.cc
+@@ -485,7 +485,7 @@
+ if (size < (size_t) N)
+ sizes[size]++;
+ if (size % 4 !=0)
+- printf ("odd size: %d\n", size);
++ printf ("odd size: %zu\n", size);
+ }
+
+ void
+--- a/freehdl/kernel-dump.hh
++++ b/freehdl/kernel-dump.hh
+@@ -42,9 +42,9 @@
+ short wait_id;
+ // This function will return an appropriate table entry (if
+ // available)
+- char *find_table(type_info_interface* type);
++ const char *find_table(type_info_interface* type);
+ //this variable is used by the read_type function
+- char* translation_table;
++ const char* translation_table;
+ // This method is executed each time the signal value changes
+ bool execute();
+ // Continue dumping the signal.
+@@ -77,7 +77,7 @@
+ extern list<signal_dump*> signal_dump_process_list;
+
+ // Used to store the user_defined translation table types
+-extern map<string, char*, less<string> > mapping_translation_table;
++extern map<string, const char*, less<string> > mapping_translation_table;
+
+
+ /******************************************************
+--- a/freehdl/kernel-fhdl-stream.hh
++++ b/freehdl/kernel-fhdl-stream.hh
+@@ -29,7 +31,7 @@
+ str->flush();
+ }
+
+- fhdl_ostream_t &operator<<(char *p);
++ fhdl_ostream_t &operator<<(const char *p);
+ fhdl_ostream_t &operator<<(const string &a);
+ fhdl_ostream_t &operator<<(const int i);
+ fhdl_ostream_t &operator<<(const unsigned int i);
+--- a/freehdl/std-vhdl-types.hh
++++ b/freehdl/std-vhdl-types.hh
+@@ -607,7 +618,7 @@
+ // which caused the failure or NULL otherwise.
+ virtual const char *read(void *dest, const char *str) = 0;
+ // Prints the content of src into an string stream in VCD format
+- virtual void vcd_print(buffer_stream &str, const void *src,char* translation_table, bool pure) = 0;
++ virtual void vcd_print(buffer_stream &str, const void *src, const char* translation_table, bool pure) = 0;
+ // Prints value into binary stream. Note that only the raw data but
+ // no type info objects are written! The method returns the number
+ // of bytes written to the stream.
+@@ -785,7 +796,7 @@
+ bool assign(void *dest, const void *src);
+ void remove(void *src);
+ void print(buffer_stream &str, const void *src, int mode);
+- void vcd_print(buffer_stream &str, const void *src,char* translation_table, bool pure);
++ void vcd_print(buffer_stream &str, const void *src, const char* translation_table, bool pure);
+ const char *read(void *dest, const char *str);
+
+ integer check(integer value) {
+@@ -821,7 +832,7 @@
+ bool assign(void *dest, const void *src);
+ void remove(void *src);
+ void print(buffer_stream &str, const void *src, int mode);
+- void vcd_print(buffer_stream &str, const void *src,char* translation_table, bool pure) {};
++ void vcd_print(buffer_stream &str, const void *src, const char* translation_table, bool pure) {};
+ const char *read(void *dest, const char *str);
+ };
+
+@@ -849,7 +860,7 @@
+ bool assign(void *dest, const void *src);
+ void remove(void *src);
+ void print(buffer_stream &str, const void *src, int mode) {};
+- void vcd_print(buffer_stream &str, const void *src,char* translation_table, bool pure) {};
++ void vcd_print(buffer_stream &str, const void *src, const char* translation_table, bool pure) {};
+ const char *read(void *dest, const char *str);
+ };
+
+@@ -879,7 +890,7 @@
+ bool assign(void *dest, const void *src);
+ void remove(void *src);
+ void print(buffer_stream &str, const void *src, int mode);
+- void vcd_print(buffer_stream &str, const void *src,char* translation_table, bool pure);
++ void vcd_print(buffer_stream &str, const void *src, const char* translation_table, bool pure);
+ const char *read(void *dest, const char *str);
+
+ floatingpoint check(floatingpoint value) {
+@@ -914,7 +925,7 @@
+ bool assign(void *dest, const void *src);
+ void remove(void *src);
+ void print(buffer_stream &str, const void *src, int mode);
+- void vcd_print(buffer_stream &str, const void *src,char* translation_table, bool pure);
++ void vcd_print(buffer_stream &str, const void *src, const char* translation_table, bool pure);
+ const char *read(void *dest, const char *str);
+
+ enumeration check(integer value) {
+@@ -954,7 +965,7 @@
+ bool assign(void *dest, const void *src);
+ void remove(void *src);
+ void print(buffer_stream &str, const void *src, int mode);
+- void vcd_print(buffer_stream &str, const void *src,char* translation_table, bool pure) ;
++ void vcd_print(buffer_stream &str, const void *src, const char* translation_table, bool pure) ;
+ const char *read(void *dest, const char *str);
+
+ physical check(physical value) {
+@@ -1087,7 +1098,7 @@
+ bool assign(void *dest, const void *src) { return false; };
+ void remove(void *src);
+ void print(buffer_stream &str, const void *src, int mode);
+- void vcd_print(buffer_stream &str, const void *src,char* translation_table, bool pure) ;
++ void vcd_print(buffer_stream &str, const void *src, const char* translation_table, bool pure) ;
+ const char *read(void *dest, const char *str);
+ };
+
+@@ -1230,7 +1241,7 @@
+ bool assign(void *dest, const void *src) { return false; };
+ void remove(void *src);
+ void print(buffer_stream &str, const void *src, int mode);
+- void vcd_print(buffer_stream &str, const void *src,char* translation_table, bool pure);
++ void vcd_print(buffer_stream &str, const void *src, const char* translation_table, bool pure);
+ const char *read(void *dest, const char *str);
+ };
+
+--- a/freehdl/vaul-lexer.h
++++ b/freehdl/vaul-lexer.h
+@@ -115,7 +114,7 @@
+ IR_String expand_bitstring(const char *, int len);
+
+ int LexerInput(char *buf, int max_size);
+- void LexerError(char *msg);
++ void LexerError(const char *msg);
+ void message(char *fmt, va_list ap);
+ void message(vaul_yyltype &loc, char *fmt, va_list ap);
+
+--- a/kernel/driver_info.cc
++++ b/kernel/driver_info.cc
+@@ -270,6 +270,7 @@
+
+
+ // Creates transaction composite signals. Returns number of assigned scalars.
++inline int do_record_transport_assignment(driver_info &, const record_base &, int, const vtime &);
+ inline int
+ do_array_transport_assignment(driver_info &driver, const array_base &value, int first, const vtime &tr_time)
+ {
+@@ -311,7 +312,6 @@
+ assigned_scalars += do_array_transport_assignment(driver, (array_base&)value.data[j], i, tr_time);
+ break;
+ case RECORD:
+- inline int do_record_transport_assignment(driver_info &, const record_base &, int, const vtime &);
+ assigned_scalars += do_record_transport_assignment(driver, (record_base&)value.data[j], i, tr_time);
+ break;
+ }
+@@ -339,6 +339,7 @@
+
+
+ // Creates transaction for composite signals. Returns number of assigned scalars.
++inline int do_record_inertial_assignment(driver_info &, const record_base &, int, const vtime &, const vtime &);
+ inline int
+ do_array_inertial_assignment(driver_info &driver,
+ const array_base &value, int first,
+@@ -381,8 +382,6 @@
+ assigned_scalars += do_array_inertial_assignment(driver, (array_base&)value.data[j], i, tr_time, rm_time);
+ break;
+ case RECORD:
+- inline int do_record_inertial_assignment(driver_info &, const record_base &, int,
+- const vtime &, const vtime &);
+ assigned_scalars += do_record_inertial_assignment(driver, (record_base&)value.data[j], i, tr_time, rm_time);
+ break;
+ }
+--- a/kernel/dump.cc
++++ b/kernel/dump.cc
+@@ -90,7 +90,7 @@
+
+
+ // find_translation table
+-char *
++const char *
+ signal_dump::find_table(type_info_interface* type)
+ {
+ switch(type->id)
+--- a/kernel/fhdl_stream.cc
++++ b/kernel/fhdl_stream.cc
+@@ -60,7 +63,7 @@
+ }
+
+ fhdl_ostream_t &
+-fhdl_ostream_t::operator<<(char *p)
++fhdl_ostream_t::operator<<(const char *p)
+ {
+ if (!socket_connection)
+ *str << p;
+--- a/std/vhdl_types.cc
++++ b/std/vhdl_types.cc
+@@ -1013,7 +1016,7 @@
+ }
+
+ void
+-integer_info_base::vcd_print(buffer_stream &str, const void *src,char* translation_table, bool pure)
++integer_info_base::vcd_print(buffer_stream &str, const void *src, const char* translation_table, bool pure)
+ {
+ integer op =*((integer*)src);
+ static char result[INTEGER_SIZE_LD + 1];
+@@ -1306,7 +1309,7 @@
+ }
+
+ void
+-float_info_base::vcd_print(buffer_stream &str, const void *src,char* translation_table, bool pure) {
++float_info_base::vcd_print(buffer_stream &str, const void *src, const char* translation_table, bool pure) {
+ // should be definitly enough characters to hold a string
+ // representation of a double
+ static char rbuffer[8*sizeof(double)];
+@@ -1432,7 +1435,7 @@
+
+
+ void
+-enum_info_base::vcd_print(buffer_stream &str, const void *src,char* translation_table, bool pure)
++enum_info_base::vcd_print(buffer_stream &str, const void *src, const char* translation_table, bool pure)
+ {
+ if (translation_table != NULL) {
+ const char output = translation_table[*((enumeration*)src)];
+@@ -1583,7 +1586,7 @@
+ }
+
+ void
+-physical_info_base::vcd_print(buffer_stream &str, const void *src,char* translation_table, bool pure) {
++physical_info_base::vcd_print(buffer_stream &str, const void *src, const char* translation_table, bool pure) {
+ str << *((physical*)src) << " " << units[0];
+ }
+
+@@ -1778,7 +1781,7 @@
+ }
+
+ // Temporary VCD_Print function
+-void array_info::vcd_print(buffer_stream &str, const void *src,char* translation_table, bool pure)
++void array_info::vcd_print(buffer_stream &str, const void *src, const char* translation_table, bool pure)
+ {
+ //str.clean();
+ int length = ((array_base*)src)->info->length;
+@@ -2090,7 +2093,7 @@
+
+
+ // Temporary VCD_Print function
+-void record_info::vcd_print(buffer_stream &str, const void *src, char* translation_table, bool pure)
++void record_info::vcd_print(buffer_stream &str, const void *src, const char* translation_table, bool pure)
+ {
+ record_base &record = *(record_base*)src;
+ record_info &rinfo = *record.info;
+--- a/vaul/lexer.cc
++++ b/vaul/lexer.cc
+@@ -2075,7 +2075,7 @@
+ }
+
+ void
+-vaul_lexer::LexerError (char *m)
++vaul_lexer::LexerError (const char *m)
+ {
+ if (prt)
+ prt->fprintf (log, "%?%s %C\n", this, m, this);
diff --git a/sci-electronics/freehdl/freehdl-0.0.8.ebuild b/sci-electronics/freehdl/freehdl-0.0.8.ebuild
new file mode 100644
index 000000000000..c11e4d948e94
--- /dev/null
+++ b/sci-electronics/freehdl/freehdl-0.0.8.ebuild
@@ -0,0 +1,33 @@
+# Copyright 1999-2016 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+EAPI=6
+
+DESCRIPTION="A free VHDL simulator"
+SRC_URI="mirror://sourceforge/qucs/${P}.tar.gz"
+HOMEPAGE="http://freehdl.seul.org/"
+LICENSE="GPL-2"
+
+SLOT="0"
+IUSE=""
+KEYWORDS="~amd64 ~ppc ~x86"
+
+RDEPEND=">=dev-scheme/guile-2.0:*"
+DEPEND="virtual/pkgconfig"
+
+PATCHES=(
+ "${FILESDIR}/${PN}-0.0.8-fix-c++14.patch"
+ "${FILESDIR}/${PN}-0.0.8-qa.patch"
+)
+
+src_configure() {
+ econf --disable-static
+}
+
+src_install() {
+ default
+
+ # package provides .pc files
+ find "${D}" -name '*.la' -delete || die
+}