Someone (Thomas Sailer) offered upstream a patch that resolves the FTBFS error.

I tested it and it works.

However, applying this patch uncovers some other (I would assume unrelated ?) errors : - Some compiler compiler seems to be required by the upstream makefile, so I added bison to the build dependencies - The automatic tests made after the compilation fail because ImageMagick triggers a segmentation fault. I overrode auto test and tested manually the binary, which seems to work.

I have included the patch, the new control and rules files, and I am tagging this bug as having a patch.

Let me know if you have any questions.

Best,

Aymeric Agon-Rambosson

Description: Fix compile failures for newer g++ release
Author: Thomas Sailer <sai...@ife.ee.ethz.ch>
Forwarded: yes
Comment: Found on https://sourceforge.net/p/drawtiming/patches/12/
--- a/src/parser.yy
+++ b/src/parser.yy
@@ -42,13 +42,13 @@ statements:
 statement { $$ = $1; deps.push_back ($1); }
 | statements ',' statement { $$ = $3; deps.push_back ($3); }
 | statements ';' statement { $$ = $3; deps.clear (); deps.push_back ($3); }
-| statements CAUSE statement { $$ = $3; data.add_dependencies ($3, deps); 
+| statements CAUSE statement { $$ = $3; data_.add_dependencies ($3, deps); 
     deps.clear (); deps.push_back ($3); }
-| statements DELAY statement { $$ = $3; data.add_delay ($3, $1, $2); }
+| statements DELAY statement { $$ = $3; data_.add_delay ($3, $1, $2); }
 
 statement:
-SYMBOL '=' SYMBOL { $$ = $1; data.set_value ($1, n, timing::sigvalue ($3)); }
-| SYMBOL '=' STRING { $$ = $1; data.set_value ($1, n, timing::sigvalue ($3, timing::STATE)); }
+SYMBOL '=' SYMBOL { $$ = $1; data_.set_value ($1, n, timing::sigvalue ($3)); }
+| SYMBOL '=' STRING { $$ = $1; data_.set_value ($1, n, timing::sigvalue ($3, timing::STATE)); }
 | SYMBOL { $$ = $1; };
 
 %%
--- a/src/globals.h
+++ b/src/globals.h
@@ -22,7 +22,7 @@
 #define YYSTYPE std::string
 
 extern unsigned n;
-extern timing::data data;
+extern timing::data data_;
 extern timing::signal_sequence deps;
 
 #endif
--- a/src/timing.cc
+++ b/src/timing.cc
@@ -113,16 +113,16 @@ sigdata &sigdata::operator= (const sigda
 
 // ------------------------------------------------------------
 
-data::data (void) : maxlen (0) {
+timing::data::data (void) : maxlen (0) {
 }
 
-data::data (const data &d) {
+timing::data::data (const timing::data &d) {
   *this = d;
 }
 
 // ------------------------------------------------------------
 
-data &data::operator= (const data &d) {
+timing::data &timing::data::operator= (const timing::data &d) {
   maxlen = d.maxlen;
   signals = d.signals;
   sequence = d.sequence;
@@ -132,7 +132,7 @@ data &data::operator= (const data &d) {
 
 // ------------------------------------------------------------
 
-sigdata &data::find_signal (const signame &name) {
+sigdata &timing::data::find_signal (const signame &name) {
   signal_database::iterator i = signals.find (name);
   if (i == signals.end ()) {
     i = signals.insert (signal_database::value_type (name, sigdata ())).first;
@@ -143,7 +143,7 @@ sigdata &data::find_signal (const signam
 
 // ------------------------------------------------------------
 
-const sigdata &data::find_signal (const signame &name) const {
+const sigdata &timing::data::find_signal (const signame &name) const {
   signal_database::const_iterator i = signals.find (name);
   if (i == signals.end ()) 
     throw not_found (name);
@@ -152,7 +152,7 @@ const sigdata &data::find_signal (const
 
 // ------------------------------------------------------------
 
-void data::add_dependency (const signame &name, const signame &dep) {
+void timing::data::add_dependency (const signame &name, const signame &dep) {
   // find the signal
   sigdata &sig = find_signal (name);
   sigdata &trigger = find_signal (dep);
@@ -168,14 +168,14 @@ void data::add_dependency (const signame
 
 // ------------------------------------------------------------
 
-void data::add_dependencies (const signame &name, const signal_sequence &deps) {
+void timing::data::add_dependencies (const signame &name, const signal_sequence &deps) {
   for (signal_sequence::const_iterator j = deps.begin (); j != deps.end (); ++ j) 
     add_dependency (name, *j);
 }
 
 // ------------------------------------------------------------
 
-void data::add_delay (const signame &name, const signame &dep, const string &text) {
+void timing::data::add_delay (const signame &name, const signame &dep, const string &text) {
   // a delay always indicates a dependency
   // (but would require a way to select which is rendered)
   // add_dependency (name, dep);
@@ -206,7 +206,7 @@ void data::add_delay (const signame &nam
 
 // ------------------------------------------------------------
 
-void data::set_value (const signame &name, unsigned n, const sigvalue &value) {
+void timing::data::set_value (const signame &name, unsigned n, const sigvalue &value) {
   // find the signal
   sigdata &sig = find_signal (name);
 
@@ -228,7 +228,7 @@ void data::set_value (const signame &nam
 
 // ------------------------------------------------------------
 
-void data::pad (unsigned n) {
+void timing::data::pad (unsigned n) {
   // pad all sequences to length n
   if (n > maxlen)
     maxlen = n;
@@ -250,7 +250,7 @@ ostream &operator<< (ostream &f, const s
 
 // ------------------------------------------------------------
 
-ostream &operator<< (ostream &f, const data &data) {
+ostream &operator<< (ostream &f, const timing::data &data) {
   f << "signals: " << endl;
   for (signal_sequence::const_iterator i = data.sequence.begin ();
        i != data.sequence.end (); ++ i) 
@@ -288,7 +288,7 @@ ostream &operator<< (ostream &f, const d
 // ------------------------------------------------------------
 // calculate the required label width
 
-static int label_width (const data &d) {
+static int label_width (const timing::data &d) {
   int labelWidth = 0;
 
 #ifndef LITE
@@ -319,7 +319,7 @@ static int label_width (const data &d) {
 // ------------------------------------------------------------
 // calculate the basic height and width required before scaling
 
-static void base_size (const data &d, int &w, int &h) {
+static void base_size (const timing::data &d, int &w, int &h) {
 
   vCellHsep = vCellHt / 8;
   vCellH=vCellHt-vCellHsep;
@@ -596,7 +596,7 @@ static void draw_delay (gc &gc, int x0,
 
 // ------------------------------------------------------------
 
-static void render_common (gc& gc, const data &d,
+static void render_common (gc& gc, const timing::data &d,
     			   double hscale, double vscale) {
 
   gc.push ();
@@ -650,7 +650,7 @@ static void render_common (gc& gc, const
 
 // ------------------------------------------------------------
 
-void timing::render (gc &gc, const data &d, double scale) {
+void timing::render (gc &gc, const timing::data &d, double scale) {
   int base_width, base_height;
   base_size (d, base_width, base_height);
 
@@ -662,7 +662,7 @@ void timing::render (gc &gc, const data
 
 // ------------------------------------------------------------
 
-void timing::render (gc &gc, const data &d, int w, int h, bool fixAspect) {
+void timing::render (gc &gc, const timing::data &d, int w, int h, bool fixAspect) {
   int base_width, base_height;
   base_size (d, base_width, base_height);
 
--- a/src/main.cc
+++ b/src/main.cc
@@ -44,7 +44,7 @@ static void banner (void);
 static void freesoft (void);
 
 unsigned n;
-timing::data data;
+timing::data data_;
 timing::signal_sequence deps;
 string outfile;
 int verbose = 0;
@@ -87,9 +87,9 @@ static void render_it (timing::gc& gc, i
     		       int width, int height, double scale)
 {
   if (flags & FLAG_PAGESIZE)
-    render (gc, data, width, height, (flags & FLAG_ASPECT));
+    render (gc, data_, width, height, (flags & FLAG_ASPECT));
   else
-    render (gc, data, scale);
+    render (gc, data_, scale);
 }
 
 int main (int argc, char *argv[]) {
@@ -193,9 +193,9 @@ int main (int argc, char *argv[]) {
       }
     }
 
-    data.pad (n);
+    data_.pad (n);
     if (verbose)
-      cout << data;
+      cout << data_;
 
     if (outfile.empty ())
       return 0;

Attachment: control
Description: Binary data

Attachment: rules
Description: Binary data

Reply via email to