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@xxxxxxxxxxxxxxxxxxxxxxx https://admin.fedoraproject.org/mailman/listinfo/devel