summaryrefslogtreecommitdiff
path: root/sci-electronics/freehdl
diff options
context:
space:
mode:
authorV3n3RiX <venerix@redcorelinux.org>2017-10-09 18:53:29 +0100
committerV3n3RiX <venerix@redcorelinux.org>2017-10-09 18:53:29 +0100
commit4f2d7949f03e1c198bc888f2d05f421d35c57e21 (patch)
treeba5f07bf3f9d22d82e54a462313f5d244036c768 /sci-electronics/freehdl
reinit the tree, so we can have metadata
Diffstat (limited to 'sci-electronics/freehdl')
-rw-r--r--sci-electronics/freehdl/Manifest7
-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.ebuild32
-rw-r--r--sci-electronics/freehdl/metadata.xml24
5 files changed, 849 insertions, 0 deletions
diff --git a/sci-electronics/freehdl/Manifest b/sci-electronics/freehdl/Manifest
new file mode 100644
index 000000000000..fffeee199555
--- /dev/null
+++ b/sci-electronics/freehdl/Manifest
@@ -0,0 +1,7 @@
+AUX freehdl-0.0.8-fix-c++14.patch 11726 SHA256 c4d94ca432ee390a41714d2915a471e63f9fb7bcb382d908dc6fc815f2a2e51a SHA512 f093ef9599376f5d56e6857365c931094346d0e33d61aef086e427737ac54bcb9667b154f58cb1949e55eeca1a5f8fc8351be4e1e2858a5df1abc23c01179a4b WHIRLPOOL 0ab7b10f34129e20175b96127baa4d150c70c77ec80a72fdb243eae15121ed23be56977d801e576741244bd8e58b0d117ab90003a7a186c6e8ed1e333e962c8e
+AUX freehdl-0.0.8-qa.patch 10587 SHA256 bf1ed53f2b83e91e580c5300d157322cf70aeb955685fa91b1358f474efef5ff SHA512 37d4c497fc843e1d57b044782e57a3d38c579301b3ac3b9f3ee1c83f44bc707608bed82339693e09144078b97a65885eeb7e884b74276bc9261206ea35dfaa5d WHIRLPOOL 99310368d6ab75c95b971d942850f01918e1b42f759334297ade5ca04dd460dc93067a0b6564f55e0a7fd40fdb39376929c104ce2ea1512f3947a3f7be3e0bfa
+DIST freehdl-0.0.8.tar.gz 1389888 SHA256 7f0978f8252329450de43e98c04c15fdd8a3f2bdc5ca91f75f8f5dd280c6ed84 SHA512 731fde1a940a762e570107819a89ac2884029e5c4f5d51e5df0032a4381fd04c7da948b5f2de6b1ce60801f6ce3a0a9123a4902e75e216a1182b25b2134f44ee WHIRLPOOL b9f496f0fdfcd8b4d3b2c4b731c2d6884760417604023c20e5c0d2f451a6883da86da8e8f935c2491d3b9d451927ce1791447303c67df05d4338795b63261a14
+EBUILD freehdl-0.0.8.ebuild 598 SHA256 2073d1a0909284f4b7b4cea9aade5b55a92484e730380438134028c17951ff57 SHA512 2ec28ecf39c6ebad74e27ee1d4ec56aba6c3a47f287a81f892c5c905516dd0ed0b641c00a4f4a6de995518519a258fefba190758b10a1942c9e966f3247c0dc9 WHIRLPOOL 11679fb51a19362e28cbcab55404414e05e433c7965f3050988569e8afcdf6512c357acd5e1fb9b27b104bdfb12aee7bc7880e75ce7ce975f45e0ac654dc5905
+MISC ChangeLog 3005 SHA256 02a8e7ca04e40b847c867de26020c39e7271a1d4f03a4150c91070ae1decfeb3 SHA512 6731d0b21ea902698c15fd3de2b9c85b12911c74fb0e8ebfb799beb71df9d87f3cba101948c7063342663e7e26a149777f2f7bae9ab78c3d8f5383453fbaaa7b WHIRLPOOL bf2131d56b74b2bfce76adc942589417ecaf2f5516e1c50b651c42813f5006dee8e7c7a7795092dceb9f4ee3fabd6f3272c8f40e44e31671d915fd71b70546d4
+MISC ChangeLog-2015 3518 SHA256 3ff7594d1a01bd808ebab637c5e1dbf0bd790ff5ded651fbc3b5992391fef7ba SHA512 2be4633abe46e16a9ddc5494b7128d531354c9cfd048a3457438bdfcd2ba335d435ddf397605520e57b440ecfaeb494ed93457b84f685597bd3aac395c1d44ee WHIRLPOOL 291a9fb56e0f48b7501e3c827242fc99e3fe1a50df67f0c12849cfb051ef36091d59b03e0c88c742eb39d5da5cdff55378e6e77ebf546f4c5c2439808f35211d
+MISC metadata.xml 975 SHA256 bac7902501077c471010c7cd51ba620264cea11228dd441350b2a8e86845443b SHA512 0fcdb77cb0ae593930860cc75f1913ae522328e82f87bdeef85602b5298ede5c3abb46e7386baf86e04f0f3d396c7d18951a7bbd4b1b0d37b07df08f0bd34867 WHIRLPOOL f691a5e34d246bdc7ab561c84b381ed4b0a3189c8ced00bdda3abcd30ec227b2a4254c8ac2b7eeee2c5c1c5459d26fcdd1483cb991f63fff79f5f5b5282f78f2
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..9bb8acab3f66
--- /dev/null
+++ b/sci-electronics/freehdl/freehdl-0.0.8.ebuild
@@ -0,0 +1,32 @@
+# Copyright 1999-2016 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+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
+}
diff --git a/sci-electronics/freehdl/metadata.xml b/sci-electronics/freehdl/metadata.xml
new file mode 100644
index 000000000000..cc98fb7a1eaa
--- /dev/null
+++ b/sci-electronics/freehdl/metadata.xml
@@ -0,0 +1,24 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>sci-electronics@gentoo.org</email>
+ <name>Gentoo Electronics Project</name>
+ </maintainer>
+ <longdescription>
+ Free, open source, GPL'ed VHDL simulator. The project goal is to develop a
+ VHDL simulator that :
+ * Has a graphical waveform viewer.
+ * Has a source level debugger.
+ * Is VHDL-93 compliant.
+ * Is of commercial quality. (on par with, say, V-System - it'll take us a
+ while to get there, but that should be our aim)
+ * Is freely distributable - both source and binaries - like Linux itself.
+ (Under the Gnu General Public License (GPL)).
+ * Works with Linux. If others want to port it to other platforms they may,
+ but it is not the goal of this project.
+ </longdescription>
+ <upstream>
+ <remote-id type="sourceforge">qucs</remote-id>
+ </upstream>
+</pkgmetadata>