Alain> Le dimanche 20 mars 2011 04:03:48, Kevin Kofler a écrit :
Alain> > Przemek Klosowski wrote:
Alain> > > On 03/11/2011 10:58 AM, Alain Portal wrote:
Alain> > >> Le vendredi 11 mars 2011 14:58:03, Stephen Gallagher a écrit :
Alain> > >>> On 03/11/2011 08:12 AM, Alain Portal wrote:
Alain> > >>>> Hi,
Alain> > >>>> 
Alain> > >>>> I trying to update kicad but the built fails with a ld error:
Alain> > >>>> http://koji.fedoraproject.org/koji/taskinfo?taskID=2903979
Alain> > >>>> and I don't succeed to fix it.
Alain> > >>>> 
Alain> > >>>> Can somebody help me?
Alain> > >>> 
Alain> > >>> Looks like you're not linking in BOARD::GetLayerColor(int) and
Alain> > >>> BOARD::GetLayerName(int) const correctly. You should figure out
Alain> > >>> what library or object file provides those and make sure they're
Alain> > >>> listed in the linking step.
Alain> > >> 
Alain> > >> These functions are provided by pcbnew/class_board.cpp and I don't
Alain> > >> know how to act on the linking step.
Alain> > > 
Alain> > > class_board.cpp.o is placed in libpcbcommon.o but the failing link
Alain> > > step, creating eeschema, only links to libcommon.o
Alain> > 
Alain> > Regression caused by this upstream commit:
Alain> > 
http://bazaar.launchpad.net/~kicad-stable-committers/kicad/stable/revision/
Alain> > 2594
Alain> > 
Alain> > This moves class_layerchoicebox.cpp from pcbnew to common without
Alain> > realizing that it depends on stuff from pcbnew.
Alain> 
Alain> What is your secret Kevin?
Alain> 
Alain> Reported upstream.
Alain> Thanks.
Alain> 
Alain> Alain

Here we go, thanks Kevin to point the commit regression. The workaround is
pretty simple. I've moved class_layerchoicebox.cpp back to pcbnew and one
little tweak in CMakeLists.txt. See patch for more info.

Successful build http://koji.fedoraproject.org/koji/taskinfo?taskID=2930101

Happy hacking ;)

-- 
Nikola
diff -d -urpN kicad-2011.01.28/common/class_layerchoicebox.cpp kicad-origin/common/class_layerchoicebox.cpp
--- kicad-2011.01.28/common/class_layerchoicebox.cpp	2011-03-01 20:24:28.000000000 +0100
+++ kicad-origin/common/class_layerchoicebox.cpp	1970-01-01 01:00:00.000000000 +0100
@@ -1,180 +0,0 @@
-#include "common.h"
-#include "pcbnew.h"
-#include "wxPcbStruct.h"
-#include "class_board_design_settings.h"
-#include "colors_selection.h"
-
-#include "bitmaps.h"
-
-#include "hotkeys.h"
-#include "help_common_strings.h"
-
-#include <wx/ownerdrw.h>
-#include <wx/menuitem.h>
-#include <wx/bmpcbox.h>
-#include <wx/wx.h>
-
-#include "class_layerchoicebox.h"
-
-/* class to display a layer list.
- *
- */
-
-WinEDALayerChoiceBox::WinEDALayerChoiceBox( WinEDA_Toolbar* parent, wxWindowID id,
-                                            const wxPoint& pos, const wxSize& size,
-                                            int n, const wxString choices[] ) :
-    wxBitmapComboBox( parent, id, wxEmptyString, pos, size,
-                      n, choices, wxCB_READONLY )
-{
-    m_layerorder   = true;
-    m_layerhotkeys = true;
-    m_hotkeys      = NULL;
-
-    if( choices != NULL )
-        ResyncBitmapOnly();
-}
-
-
-WinEDALayerChoiceBox::WinEDALayerChoiceBox( WinEDA_Toolbar* parent, wxWindowID id,
-                                            const wxPoint& pos, const wxSize& size,
-                                            const wxArrayString& choices ) :
-    wxBitmapComboBox( parent, id, wxEmptyString, pos, size,
-                      choices, wxCB_READONLY )
-{
-    m_layerorder   = true;
-    m_layerhotkeys = true;
-    m_hotkeys      = NULL;
-
-    if( !choices.IsEmpty() )
-        ResyncBitmapOnly();
-}
-
-
-bool WinEDALayerChoiceBox::SetLayersOrdered( bool value )
-{
-    m_layerorder = value;
-    return m_layerorder;
-}
-
-
-bool WinEDALayerChoiceBox::SetLayersHotkeys( bool value )
-{
-    m_layerhotkeys = value;
-    return m_layerhotkeys;
-}
-
-
-// Get Current Item #
-int WinEDALayerChoiceBox::GetChoice()
-{
-    return GetSelection();
-}
-
-
-// Get Current Layer
-int WinEDALayerChoiceBox::GetLayerSelection()
-{
-    return (long) GetClientData( GetSelection() );
-}
-
-
-// Set Layer #
-int WinEDALayerChoiceBox::SetLayerSelection( int layer )
-{
-    int elements = GetCount();
-
-    for( int i = 0; i < elements; i++ )
-    {
-        if( GetClientData( i ) == (void*) layer )
-        {
-            if( GetSelection() != i )   // Element (i) is not selected
-            {
-                SetSelection( i );
-                return i;
-            }
-            else
-                return i;               //If element already selected; do nothing
-        }
-    }
-
-    // Not Found
-    SetSelection( -1 );
-    return -1;
-}
-
-
-// Reload the Layers
-void WinEDALayerChoiceBox::Resync()
-{
-    WinEDA_BasePcbFrame* pcbFrame = (WinEDA_BasePcbFrame*) GetParent()->GetParent();
-    BOARD* board = pcbFrame->GetBoard();
-
-    wxASSERT( board != NULL );
-
-    Clear();
-
-    static DECLARE_LAYERS_ORDER_LIST( layertranscode );
-    static DECLARE_LAYERS_HOTKEY( layerhk );
-
-    for( int i = 0; i < LAYER_COUNT; i++ )
-    {
-        wxBitmap   layerbmp( 14, 14 );
-        wxMemoryDC bmpDC;
-        wxBrush    brush;
-        wxString   layername;
-        int        layerid = i;
-
-        if( m_layerorder )
-            layerid = layertranscode[i];
-
-        if( !board->IsLayerEnabled( layerid ) )
-            continue;
-
-        // Prepare Bitmap
-        bmpDC.SelectObject( layerbmp );
-        brush.SetColour( MakeColour( board->GetLayerColor( layerid ) ) );
-        brush.SetStyle( wxSOLID );
-
-        bmpDC.SetBrush( brush );
-        bmpDC.DrawRectangle( 0, 0, layerbmp.GetWidth(), layerbmp.GetHeight() );
-        bmpDC.SetBrush( *wxTRANSPARENT_BRUSH );
-        bmpDC.SetPen( *wxBLACK_PEN );
-        bmpDC.DrawRectangle( 0, 0, layerbmp.GetWidth(), layerbmp.GetHeight() );
-
-        layername = board->GetLayerName( layerid );
-
-        if( m_layerhotkeys && m_hotkeys != NULL )
-            layername = AddHotkeyName( layername, m_hotkeys, layerhk[layerid], false );
-
-        Append( layername, layerbmp, (void*) layerid );
-    }
-}
-
-void WinEDALayerChoiceBox::ResyncBitmapOnly()
-{
-    WinEDA_BasePcbFrame* pcbFrame = (WinEDA_BasePcbFrame*) GetParent()->GetParent();
-    BOARD* board = pcbFrame->GetBoard();
-
-    int elements = GetCount();
-    for( int i = 0; i < elements; i++ )
-    {
-        wxBitmap   layerbmp( 14, 14 );
-        wxMemoryDC bmpDC;
-        wxBrush    brush;
-        wxString   layername;
-        int        layerid = i;
-
-        // Prepare Bitmap
-        bmpDC.SelectObject( layerbmp );
-        brush.SetColour( MakeColour( board->GetLayerColor( layerid ) ) );
-        brush.SetStyle( wxSOLID );
-
-        bmpDC.SetBrush( brush );
-        bmpDC.DrawRectangle( 0, 0, layerbmp.GetWidth(), layerbmp.GetHeight() );
-        bmpDC.SetBrush( *wxTRANSPARENT_BRUSH );
-        bmpDC.SetPen( *wxBLACK_PEN );
-        bmpDC.DrawRectangle( 0, 0, layerbmp.GetWidth(), layerbmp.GetHeight() );
-
-        SetItemBitmap(i, layerbmp); 
-    }
-}
diff -d -urpN kicad-2011.01.28/common/CMakeLists.txt kicad-origin/common/CMakeLists.txt
--- kicad-2011.01.28/common/CMakeLists.txt	2011-03-01 20:24:28.000000000 +0100
+++ kicad-origin/common/CMakeLists.txt	2011-03-21 23:58:27.691625676 +0100
@@ -28,7 +28,6 @@ set(COMMON_SRCS
     block_commande.cpp
     build_version.cpp
     class_colors_design_settings.cpp
-    class_layerchoicebox.cpp
     class_marker_base.cpp
     class_plotter.cpp
     class_undoredo_container.cpp
@@ -101,6 +100,7 @@ set(PCB_COMMON_SRCS
     ../pcbnew/classpcb.cpp
     ../pcbnew/collectors.cpp
     ../pcbnew/sel_layer.cpp
+    ../pcbnew/class_layerchoicebox.cpp
 )
 
 add_library(pcbcommon ${PCB_COMMON_SRCS})
diff -d -urpN kicad-2011.01.28/pcbnew/class_layerchoicebox.cpp kicad-origin/pcbnew/class_layerchoicebox.cpp
--- kicad-2011.01.28/pcbnew/class_layerchoicebox.cpp	1970-01-01 01:00:00.000000000 +0100
+++ kicad-origin/pcbnew/class_layerchoicebox.cpp	2011-03-01 20:24:28.000000000 +0100
@@ -0,0 +1,180 @@
+#include "common.h"
+#include "pcbnew.h"
+#include "wxPcbStruct.h"
+#include "class_board_design_settings.h"
+#include "colors_selection.h"
+
+#include "bitmaps.h"
+
+#include "hotkeys.h"
+#include "help_common_strings.h"
+
+#include <wx/ownerdrw.h>
+#include <wx/menuitem.h>
+#include <wx/bmpcbox.h>
+#include <wx/wx.h>
+
+#include "class_layerchoicebox.h"
+
+/* class to display a layer list.
+ *
+ */
+
+WinEDALayerChoiceBox::WinEDALayerChoiceBox( WinEDA_Toolbar* parent, wxWindowID id,
+                                            const wxPoint& pos, const wxSize& size,
+                                            int n, const wxString choices[] ) :
+    wxBitmapComboBox( parent, id, wxEmptyString, pos, size,
+                      n, choices, wxCB_READONLY )
+{
+    m_layerorder   = true;
+    m_layerhotkeys = true;
+    m_hotkeys      = NULL;
+
+    if( choices != NULL )
+        ResyncBitmapOnly();
+}
+
+
+WinEDALayerChoiceBox::WinEDALayerChoiceBox( WinEDA_Toolbar* parent, wxWindowID id,
+                                            const wxPoint& pos, const wxSize& size,
+                                            const wxArrayString& choices ) :
+    wxBitmapComboBox( parent, id, wxEmptyString, pos, size,
+                      choices, wxCB_READONLY )
+{
+    m_layerorder   = true;
+    m_layerhotkeys = true;
+    m_hotkeys      = NULL;
+
+    if( !choices.IsEmpty() )
+        ResyncBitmapOnly();
+}
+
+
+bool WinEDALayerChoiceBox::SetLayersOrdered( bool value )
+{
+    m_layerorder = value;
+    return m_layerorder;
+}
+
+
+bool WinEDALayerChoiceBox::SetLayersHotkeys( bool value )
+{
+    m_layerhotkeys = value;
+    return m_layerhotkeys;
+}
+
+
+// Get Current Item #
+int WinEDALayerChoiceBox::GetChoice()
+{
+    return GetSelection();
+}
+
+
+// Get Current Layer
+int WinEDALayerChoiceBox::GetLayerSelection()
+{
+    return (long) GetClientData( GetSelection() );
+}
+
+
+// Set Layer #
+int WinEDALayerChoiceBox::SetLayerSelection( int layer )
+{
+    int elements = GetCount();
+
+    for( int i = 0; i < elements; i++ )
+    {
+        if( GetClientData( i ) == (void*) layer )
+        {
+            if( GetSelection() != i )   // Element (i) is not selected
+            {
+                SetSelection( i );
+                return i;
+            }
+            else
+                return i;               //If element already selected; do nothing
+        }
+    }
+
+    // Not Found
+    SetSelection( -1 );
+    return -1;
+}
+
+
+// Reload the Layers
+void WinEDALayerChoiceBox::Resync()
+{
+    WinEDA_BasePcbFrame* pcbFrame = (WinEDA_BasePcbFrame*) GetParent()->GetParent();
+    BOARD* board = pcbFrame->GetBoard();
+
+    wxASSERT( board != NULL );
+
+    Clear();
+
+    static DECLARE_LAYERS_ORDER_LIST( layertranscode );
+    static DECLARE_LAYERS_HOTKEY( layerhk );
+
+    for( int i = 0; i < LAYER_COUNT; i++ )
+    {
+        wxBitmap   layerbmp( 14, 14 );
+        wxMemoryDC bmpDC;
+        wxBrush    brush;
+        wxString   layername;
+        int        layerid = i;
+
+        if( m_layerorder )
+            layerid = layertranscode[i];
+
+        if( !board->IsLayerEnabled( layerid ) )
+            continue;
+
+        // Prepare Bitmap
+        bmpDC.SelectObject( layerbmp );
+        brush.SetColour( MakeColour( board->GetLayerColor( layerid ) ) );
+        brush.SetStyle( wxSOLID );
+
+        bmpDC.SetBrush( brush );
+        bmpDC.DrawRectangle( 0, 0, layerbmp.GetWidth(), layerbmp.GetHeight() );
+        bmpDC.SetBrush( *wxTRANSPARENT_BRUSH );
+        bmpDC.SetPen( *wxBLACK_PEN );
+        bmpDC.DrawRectangle( 0, 0, layerbmp.GetWidth(), layerbmp.GetHeight() );
+
+        layername = board->GetLayerName( layerid );
+
+        if( m_layerhotkeys && m_hotkeys != NULL )
+            layername = AddHotkeyName( layername, m_hotkeys, layerhk[layerid], false );
+
+        Append( layername, layerbmp, (void*) layerid );
+    }
+}
+
+void WinEDALayerChoiceBox::ResyncBitmapOnly()
+{
+    WinEDA_BasePcbFrame* pcbFrame = (WinEDA_BasePcbFrame*) GetParent()->GetParent();
+    BOARD* board = pcbFrame->GetBoard();
+
+    int elements = GetCount();
+    for( int i = 0; i < elements; i++ )
+    {
+        wxBitmap   layerbmp( 14, 14 );
+        wxMemoryDC bmpDC;
+        wxBrush    brush;
+        wxString   layername;
+        int        layerid = i;
+
+        // Prepare Bitmap
+        bmpDC.SelectObject( layerbmp );
+        brush.SetColour( MakeColour( board->GetLayerColor( layerid ) ) );
+        brush.SetStyle( wxSOLID );
+
+        bmpDC.SetBrush( brush );
+        bmpDC.DrawRectangle( 0, 0, layerbmp.GetWidth(), layerbmp.GetHeight() );
+        bmpDC.SetBrush( *wxTRANSPARENT_BRUSH );
+        bmpDC.SetPen( *wxBLACK_PEN );
+        bmpDC.DrawRectangle( 0, 0, layerbmp.GetWidth(), layerbmp.GetHeight() );
+
+        SetItemBitmap(i, layerbmp); 
+    }
+}
-- 
devel mailing list
devel@lists.fedoraproject.org
https://admin.fedoraproject.org/mailman/listinfo/devel

Reply via email to