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
[email protected]
https://admin.fedoraproject.org/mailman/listinfo/devel