help-octave
[Top][All Lists]
Advanced

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

Re: Failure to compile Octave 3.0.2 on AIX 5.3


From: John W. Eaton
Subject: Re: Failure to compile Octave 3.0.2 on AIX 5.3
Date: Wed, 08 Oct 2008 12:26:54 -0400

On  7-Oct-2008, Alisdair Tullo wrote:

| 
| John, David,
| 
| Thanks for this. I've applied the patch, but I still get a few link 
| errors:
| 
| ld: 0711-317 ERROR: Undefined symbol: .mx_el_and(const 
SparseBoolMatrix&,const double&)
| ld: 0711-317 ERROR: Undefined symbol: .mx_el_and(const double&,const 
SparseBoolMatrix&)
| ld: 0711-317 ERROR: Undefined symbol: .mx_el_or(const SparseBoolMatrix&,const 
double&)
| ld: 0711-317 ERROR: Undefined symbol: .mx_el_or(const double&,const 
SparseBoolMatrix&)
| 
| I'm guessing that this means that another of these macros needs the same 
| treatment. Any help you could offer would be gratefully received.

Please try the following additional patch.

Thanks,

jwe

# HG changeset patch
# User John W. Eaton <address@hidden>
# Date 1223483113 14400
# Node ID 5ac184c0581168c9c627fead187057dcf1d3bfb8
# Parent  4c85b8056d0bc57d795fa5e9f88787ca45a1db9f
additional AIX build fix

diff --git a/liboctave/ChangeLog b/liboctave/ChangeLog
--- a/liboctave/ChangeLog
+++ b/liboctave/ChangeLog
@@ -1,3 +1,8 @@
+2008-10-08  John W. Eaton  <address@hidden>
+
+       * Sparse-op-defs.h (SPARSE_SMSM_BOOL_OPS): Duplicate code for scalar
+       sparse arguments rather than rely on extern function.
+
 2008-10-08  Jaroslav Hajek  <address@hidden>
 
        * oct-inttypes.h (octave_base_int<T>::compute_threshold): Return
diff --git a/liboctave/Sparse-op-defs.h b/liboctave/Sparse-op-defs.h
--- a/liboctave/Sparse-op-defs.h
+++ b/liboctave/Sparse-op-defs.h
@@ -735,6 +735,10 @@
   SPARSE_CMP_OP_DECL (mx_el_eq, M1, M2, API); \
   SPARSE_CMP_OP_DECL (mx_el_ne, M1, M2, API);
 
+// FIXME -- this macro duplicatest the bodies of the template
+// functions defined in the SPARSE_SSM_CMP_OP and SPARSE_SMS_CMP_OP
+// macros.
+
 #define SPARSE_SMSM_CMP_OP(F, OP, M1, Z1, C1, M2, Z2, C2)      \
   SparseBoolMatrix \
   F (const M1& m1, const M2& m2) \
@@ -915,6 +919,10 @@
   SPARSE_BOOL_OP_DECL (mx_el_and, M1, M2, API); \
   SPARSE_BOOL_OP_DECL (mx_el_or,  M1, M2, API);
 
+// FIXME -- this macro duplicatest the bodies of the template
+// functions defined in the SPARSE_SSM_BOOL_OP and SPARSE_SMS_BOOL_OP
+// macros.
+
 #define SPARSE_SMSM_BOOL_OP(F, OP, M1, M2, LHS_ZERO, RHS_ZERO) \
   SparseBoolMatrix \
   F (const M1& m1, const M2& m2) \
@@ -929,15 +937,67 @@
     \
     if (m1_nr == 1 && m1_nc == 1) \
       { \
-        extern OCTAVE_API SparseBoolMatrix F (const double&, const M2&); \
-        extern OCTAVE_API SparseBoolMatrix F (const Complex&, const M2&); \
-        r = F (m1.elem(0,0), m2); \
+       if (m2_nr > 0 && m2_nc > 0) \
+         { \
+           if ((m1.elem(0,0) != LHS_ZERO) OP RHS_ZERO) \
+             { \
+               r = SparseBoolMatrix (m2_nr, m2_nc, true); \
+               for (octave_idx_type j = 0; j < m2_nc; j++) \
+                 for (octave_idx_type i = m2.cidx(j); i < m2.cidx(j+1); i++) \
+                   if (! ((m1.elem(0,0) != LHS_ZERO) OP (m2.data(i) != 
RHS_ZERO))) \
+                     r.data (m2.ridx (i) + j * m2_nr) = false; \
+               r.maybe_compress (true); \
+             } \
+           else \
+             { \
+               r = SparseBoolMatrix (m2_nr, m2_nc, m2.nnz ()); \
+               r.cidx (0) = static_cast<octave_idx_type> (0); \
+               octave_idx_type nel = 0; \
+               for (octave_idx_type j = 0; j < m2_nc; j++) \
+                 { \
+                   for (octave_idx_type i = m2.cidx(j); i < m2.cidx(j+1); i++) 
\
+                     if ((m1.elem(0,0) != LHS_ZERO) OP (m2.data(i) != 
RHS_ZERO)) \
+                       { \
+                         r.ridx (nel) = m2.ridx (i); \
+                         r.data (nel++) = true; \
+                       } \
+                   r.cidx (j + 1) = nel; \
+                 } \
+               r.maybe_compress (false); \
+             } \
+         } \
       } \
     else if (m2_nr == 1 && m2_nc == 1) \
       { \
-        extern OCTAVE_API SparseBoolMatrix F (const M1&, const double&); \
-        extern OCTAVE_API SparseBoolMatrix F (const M1&, const Complex&); \
-        r = F (m1, m2.elem(0,0)); \
+       if (m1_nr > 0 && m1_nc > 0) \
+         { \
+           if (LHS_ZERO OP (m2.elem(0,0) != RHS_ZERO)) \
+             { \
+               r = SparseBoolMatrix (m1_nr, m1_nc, true); \
+               for (octave_idx_type j = 0; j < m1_nc; j++) \
+                 for (octave_idx_type i = m1.cidx(j); i < m1.cidx(j+1); i++) \
+                   if (! ((m1.data(i) != LHS_ZERO) OP (m2.elem(0,0) != 
RHS_ZERO))) \
+                     r.data (m1.ridx (i) + j * m1_nr) = false; \
+               r.maybe_compress (true); \
+             } \
+           else \
+             { \
+               r = SparseBoolMatrix (m1_nr, m1_nc, m1.nnz ()); \
+               r.cidx (0) = static_cast<octave_idx_type> (0); \
+               octave_idx_type nel = 0; \
+               for (octave_idx_type j = 0; j < m1_nc; j++) \
+                 { \
+                   for (octave_idx_type i = m1.cidx(j); i < m1.cidx(j+1); i++) 
\
+                     if ((m1.data(i) != LHS_ZERO) OP (m2.elem(0,0) != 
RHS_ZERO)) \
+                       { \
+                         r.ridx (nel) = m1.ridx (i); \
+                         r.data (nel++) = true; \
+                       } \
+                   r.cidx (j + 1) = nel; \
+                 } \
+               r.maybe_compress (false); \
+             } \
+         } \
       } \
     else if (m1_nr == m2_nr && m1_nc == m2_nc) \
       { \

reply via email to

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