ADDED: ERC over cli....mostly
This commit is contained in:
parent
f341fde938
commit
5d001d4858
|
@ -311,6 +311,7 @@ set( COMMON_SRCS
|
||||||
bitmap_store.cpp
|
bitmap_store.cpp
|
||||||
board_printout.cpp
|
board_printout.cpp
|
||||||
build_version.cpp
|
build_version.cpp
|
||||||
|
cli_progress_reporter.cpp
|
||||||
commit.cpp
|
commit.cpp
|
||||||
common.cpp
|
common.cpp
|
||||||
config_params.cpp
|
config_params.cpp
|
||||||
|
|
|
@ -0,0 +1,54 @@
|
||||||
|
/*
|
||||||
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2023 KiCad Developers, see AUTHORS.txt for contributors.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation; either version 2
|
||||||
|
* of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, you may find one here:
|
||||||
|
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||||
|
* or you may search the http://www.gnu.org website for the version 2 license,
|
||||||
|
* or you may write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <cli_progress_reporter.h>
|
||||||
|
#include <wx/crt.h>
|
||||||
|
|
||||||
|
|
||||||
|
PROGRESS_REPORTER& CLI_PROGRESS_REPORTER::GetInstance()
|
||||||
|
{
|
||||||
|
static CLI_PROGRESS_REPORTER s_cliReporter;
|
||||||
|
|
||||||
|
return s_cliReporter;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CLI_PROGRESS_REPORTER::AdvancePhase( const wxString& aMessage )
|
||||||
|
{
|
||||||
|
printLine( aMessage );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CLI_PROGRESS_REPORTER::Report( const wxString& aMessage )
|
||||||
|
{
|
||||||
|
printLine( aMessage );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CLI_PROGRESS_REPORTER::printLine( const wxString& aMessage )
|
||||||
|
{
|
||||||
|
if( aMessage.EndsWith( wxS( "\n" ) ) )
|
||||||
|
wxFprintf( stdout, aMessage );
|
||||||
|
else
|
||||||
|
wxFprintf( stdout, aMessage + wxS( "\n" ) );
|
||||||
|
}
|
|
@ -53,3 +53,10 @@ void JOB_DISPATCHER::SetReporter( REPORTER* aReporter )
|
||||||
wxCHECK( aReporter != nullptr, /*void*/ );
|
wxCHECK( aReporter != nullptr, /*void*/ );
|
||||||
m_reporter = aReporter;
|
m_reporter = aReporter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void JOB_DISPATCHER::SetProgressReporter( PROGRESS_REPORTER* aReporter )
|
||||||
|
{
|
||||||
|
wxCHECK( aReporter != nullptr, /*void*/ );
|
||||||
|
m_progressReporter = aReporter;
|
||||||
|
}
|
|
@ -28,6 +28,7 @@
|
||||||
|
|
||||||
|
|
||||||
class REPORTER;
|
class REPORTER;
|
||||||
|
class PROGRESS_REPORTER;
|
||||||
|
|
||||||
class JOB_DISPATCHER
|
class JOB_DISPATCHER
|
||||||
{
|
{
|
||||||
|
@ -36,9 +37,11 @@ public:
|
||||||
void Register( const std::string& aJobTypeName, std::function<int( JOB* job )> aHandler );
|
void Register( const std::string& aJobTypeName, std::function<int( JOB* job )> aHandler );
|
||||||
int RunJob( JOB* job );
|
int RunJob( JOB* job );
|
||||||
void SetReporter( REPORTER* aReporter );
|
void SetReporter( REPORTER* aReporter );
|
||||||
|
void SetProgressReporter( PROGRESS_REPORTER* aReporter );
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
REPORTER* m_reporter; // non-owning
|
REPORTER* m_reporter; // non-owning
|
||||||
|
PROGRESS_REPORTER* m_progressReporter; // non-owning
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::map<std::string, std::function<int( JOB* job )>> m_jobHandlers;
|
std::map<std::string, std::function<int( JOB* job )>> m_jobHandlers;
|
||||||
|
|
|
@ -0,0 +1,67 @@
|
||||||
|
/*
|
||||||
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2023 Mark Roszko <mark.roszko@gmail.com>
|
||||||
|
* Copyright (C) 1992-2023 KiCad Developers, see AUTHORS.txt for contributors.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License as published by the
|
||||||
|
* Free Software Foundation, either version 3 of the License, or (at your
|
||||||
|
* option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef JOB_PCB_DRC_H
|
||||||
|
#define JOB_PCB_DRC_H
|
||||||
|
|
||||||
|
#include <layer_ids.h>
|
||||||
|
#include <wx/string.h>
|
||||||
|
#include <widgets/report_severity.h>
|
||||||
|
#include "job.h"
|
||||||
|
|
||||||
|
class JOB_SCH_ERC : public JOB
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
JOB_SCH_ERC( bool aIsCli ) :
|
||||||
|
JOB( "erc", aIsCli ),
|
||||||
|
m_filename(),
|
||||||
|
m_units( JOB_SCH_ERC::UNITS::MILLIMETERS ),
|
||||||
|
m_severity( RPT_SEVERITY_ERROR | RPT_SEVERITY_WARNING ),
|
||||||
|
m_format( OUTPUT_FORMAT::REPORT ),
|
||||||
|
m_exitCodeViolations( false )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
wxString m_filename;
|
||||||
|
wxString m_outputFile;
|
||||||
|
|
||||||
|
enum class UNITS
|
||||||
|
{
|
||||||
|
INCHES,
|
||||||
|
MILLIMETERS,
|
||||||
|
MILS
|
||||||
|
};
|
||||||
|
|
||||||
|
UNITS m_units;
|
||||||
|
|
||||||
|
int m_severity;
|
||||||
|
|
||||||
|
enum class OUTPUT_FORMAT
|
||||||
|
{
|
||||||
|
REPORT,
|
||||||
|
JSON
|
||||||
|
};
|
||||||
|
|
||||||
|
OUTPUT_FORMAT m_format;
|
||||||
|
|
||||||
|
bool m_exitCodeViolations;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -481,7 +481,7 @@ void DIALOG_ERC::testErc()
|
||||||
|
|
||||||
{
|
{
|
||||||
wxBusyCursor dummy;
|
wxBusyCursor dummy;
|
||||||
tester.RunTests( sch, m_parent->GetCanvas()->GetView()->GetDrawingSheet(), m_parent, this );
|
tester.RunTests( m_parent->GetCanvas()->GetView()->GetDrawingSheet(), m_parent, this );
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update marker list:
|
// Update marker list:
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
|
|
||||||
#include <pgm_base.h>
|
#include <pgm_base.h>
|
||||||
#include <kiface_base.h>
|
#include <kiface_base.h>
|
||||||
|
#include <cli_progress_reporter.h>
|
||||||
#include <confirm.h>
|
#include <confirm.h>
|
||||||
#include <gestfich.h>
|
#include <gestfich.h>
|
||||||
#include <eda_dde.h>
|
#include <eda_dde.h>
|
||||||
|
@ -350,7 +351,10 @@ bool IFACE::OnKifaceStart( PGM_BASE* aProgram, int aCtlBits )
|
||||||
m_jobHandler = std::make_unique<EESCHEMA_JOBS_HANDLER>();
|
m_jobHandler = std::make_unique<EESCHEMA_JOBS_HANDLER>();
|
||||||
|
|
||||||
if( m_start_flags & KFCTL_CLI )
|
if( m_start_flags & KFCTL_CLI )
|
||||||
|
{
|
||||||
m_jobHandler->SetReporter( &CLI_REPORTER::GetInstance() );
|
m_jobHandler->SetReporter( &CLI_REPORTER::GetInstance() );
|
||||||
|
m_jobHandler->SetProgressReporter( &CLI_PROGRESS_REPORTER::GetInstance() );
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,10 +23,12 @@
|
||||||
#include <pgm_base.h>
|
#include <pgm_base.h>
|
||||||
#include <cli/exit_codes.h>
|
#include <cli/exit_codes.h>
|
||||||
#include <sch_plotter.h>
|
#include <sch_plotter.h>
|
||||||
|
#include <drawing_sheet/ds_proxy_view_item.h>
|
||||||
#include <jobs/job_export_sch_bom.h>
|
#include <jobs/job_export_sch_bom.h>
|
||||||
#include <jobs/job_export_sch_pythonbom.h>
|
#include <jobs/job_export_sch_pythonbom.h>
|
||||||
#include <jobs/job_export_sch_netlist.h>
|
#include <jobs/job_export_sch_netlist.h>
|
||||||
#include <jobs/job_export_sch_plot.h>
|
#include <jobs/job_export_sch_plot.h>
|
||||||
|
#include <jobs/job_sch_erc.h>
|
||||||
#include <jobs/job_sym_export_svg.h>
|
#include <jobs/job_sym_export_svg.h>
|
||||||
#include <jobs/job_sym_upgrade.h>
|
#include <jobs/job_sym_upgrade.h>
|
||||||
#include <schematic.h>
|
#include <schematic.h>
|
||||||
|
@ -38,6 +40,7 @@
|
||||||
#include <sch_painter.h>
|
#include <sch_painter.h>
|
||||||
#include <locale_io.h>
|
#include <locale_io.h>
|
||||||
#include <erc.h>
|
#include <erc.h>
|
||||||
|
#include <erc_report.h>
|
||||||
#include <wildcards_and_files_ext.h>
|
#include <wildcards_and_files_ext.h>
|
||||||
#include <plotters/plotters_pslike.h>
|
#include <plotters/plotters_pslike.h>
|
||||||
#include <drawing_sheet/ds_data_model.h>
|
#include <drawing_sheet/ds_data_model.h>
|
||||||
|
@ -74,6 +77,8 @@ EESCHEMA_JOBS_HANDLER::EESCHEMA_JOBS_HANDLER()
|
||||||
std::bind( &EESCHEMA_JOBS_HANDLER::JobSymUpgrade, this, std::placeholders::_1 ) );
|
std::bind( &EESCHEMA_JOBS_HANDLER::JobSymUpgrade, this, std::placeholders::_1 ) );
|
||||||
Register( "symsvg",
|
Register( "symsvg",
|
||||||
std::bind( &EESCHEMA_JOBS_HANDLER::JobSymExportSvg, this, std::placeholders::_1 ) );
|
std::bind( &EESCHEMA_JOBS_HANDLER::JobSymExportSvg, this, std::placeholders::_1 ) );
|
||||||
|
Register( "erc",
|
||||||
|
std::bind( &EESCHEMA_JOBS_HANDLER::JobSchErc, this, std::placeholders::_1 ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -700,3 +705,114 @@ int EESCHEMA_JOBS_HANDLER::JobSymUpgrade( JOB* aJob )
|
||||||
|
|
||||||
return CLI::EXIT_CODES::OK;
|
return CLI::EXIT_CODES::OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int EESCHEMA_JOBS_HANDLER::JobSchErc( JOB* aJob )
|
||||||
|
{
|
||||||
|
JOB_SCH_ERC* ercJob = dynamic_cast<JOB_SCH_ERC*>( aJob );
|
||||||
|
|
||||||
|
if( !ercJob )
|
||||||
|
return CLI::EXIT_CODES::ERR_UNKNOWN;
|
||||||
|
|
||||||
|
SCHEMATIC* sch = EESCHEMA_HELPERS::LoadSchematic( ercJob->m_filename, SCH_IO_MGR::SCH_KICAD );
|
||||||
|
|
||||||
|
if( sch == nullptr )
|
||||||
|
{
|
||||||
|
m_reporter->Report( _( "Failed to load schematic file\n" ), RPT_SEVERITY_ERROR );
|
||||||
|
return CLI::EXIT_CODES::ERR_INVALID_INPUT_FILE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( ercJob->m_outputFile.IsEmpty() )
|
||||||
|
{
|
||||||
|
wxFileName fn = sch->GetFileName();
|
||||||
|
fn.SetName( fn.GetName() );
|
||||||
|
|
||||||
|
if( ercJob->m_format == JOB_SCH_ERC::OUTPUT_FORMAT::JSON )
|
||||||
|
fn.SetExt( JsonFileExtension );
|
||||||
|
else
|
||||||
|
fn.SetExt( ReportFileExtension );
|
||||||
|
|
||||||
|
ercJob->m_outputFile = fn.GetFullName();
|
||||||
|
}
|
||||||
|
|
||||||
|
EDA_UNITS units;
|
||||||
|
switch( ercJob->m_units )
|
||||||
|
{
|
||||||
|
case JOB_SCH_ERC::UNITS::INCHES:
|
||||||
|
units = EDA_UNITS::INCHES;
|
||||||
|
break;
|
||||||
|
case JOB_SCH_ERC::UNITS::MILS:
|
||||||
|
units = EDA_UNITS::MILS;
|
||||||
|
break;
|
||||||
|
case JOB_SCH_ERC::UNITS::MILLIMETERS:
|
||||||
|
default:
|
||||||
|
units = EDA_UNITS::MILLIMETRES; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::shared_ptr<SHEETLIST_ERC_ITEMS_PROVIDER> markersProvider =
|
||||||
|
std::make_shared<SHEETLIST_ERC_ITEMS_PROVIDER>( sch );
|
||||||
|
|
||||||
|
ERC_TESTER ercTester( sch );
|
||||||
|
|
||||||
|
m_reporter->Report( _( "Running ERC...\n" ), RPT_SEVERITY_INFO );
|
||||||
|
|
||||||
|
DS_PROXY_VIEW_ITEM* drawingSheet = getDrawingSheetProxyView( sch );
|
||||||
|
ercTester.RunTests( drawingSheet, nullptr, m_progressReporter );
|
||||||
|
|
||||||
|
markersProvider->SetSeverities( ercJob->m_severity );
|
||||||
|
|
||||||
|
m_reporter->Report(
|
||||||
|
wxString::Format( _( "Found %d violations\n" ), markersProvider->GetCount() ),
|
||||||
|
RPT_SEVERITY_INFO );
|
||||||
|
|
||||||
|
ERC_REPORT reportWriter( sch, units );
|
||||||
|
|
||||||
|
bool wroteReport = false;
|
||||||
|
if( ercJob->m_format == JOB_SCH_ERC::OUTPUT_FORMAT::JSON )
|
||||||
|
wroteReport = reportWriter.WriteJsonReport( ercJob->m_outputFile );
|
||||||
|
else
|
||||||
|
wroteReport = reportWriter.WriteTextReport( ercJob->m_outputFile );
|
||||||
|
|
||||||
|
if( !wroteReport )
|
||||||
|
{
|
||||||
|
m_reporter->Report(
|
||||||
|
wxString::Format( _( "Unable to save ERC report to %s\n" ), ercJob->m_outputFile ),
|
||||||
|
RPT_SEVERITY_INFO );
|
||||||
|
return CLI::EXIT_CODES::ERR_INVALID_OUTPUT_CONFLICT;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_reporter->Report( wxString::Format( _( "Saved ERC Report to %s\n" ), ercJob->m_outputFile ),
|
||||||
|
RPT_SEVERITY_INFO );
|
||||||
|
|
||||||
|
|
||||||
|
if( ercJob->m_exitCodeViolations )
|
||||||
|
{
|
||||||
|
if( markersProvider->GetCount() > 0 )
|
||||||
|
{
|
||||||
|
return CLI::EXIT_CODES::ERR_RC_VIOLATIONS;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return CLI::EXIT_CODES::SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DS_PROXY_VIEW_ITEM* EESCHEMA_JOBS_HANDLER::getDrawingSheetProxyView( SCHEMATIC* aSch )
|
||||||
|
{
|
||||||
|
DS_PROXY_VIEW_ITEM* drawingSheet =
|
||||||
|
new DS_PROXY_VIEW_ITEM( schIUScale, &aSch->RootScreen()->GetPageSettings(), &aSch->Prj(),
|
||||||
|
&aSch->RootScreen()->GetTitleBlock(), aSch->GetProperties() );
|
||||||
|
|
||||||
|
drawingSheet->SetPageNumber( TO_UTF8( aSch->RootScreen()->GetPageNumber() ) );
|
||||||
|
drawingSheet->SetSheetCount( aSch->RootScreen()->GetPageCount() );
|
||||||
|
drawingSheet->SetFileName( TO_UTF8( aSch->RootScreen()->GetFileName() ) );
|
||||||
|
drawingSheet->SetColorLayer( LAYER_SCHEMATIC_DRAWINGSHEET );
|
||||||
|
drawingSheet->SetPageBorderColorLayer( LAYER_SCHEMATIC_PAGE_LIMITS );
|
||||||
|
drawingSheet->SetIsFirstPage( aSch->RootScreen()->GetVirtualPageNumber() == 1 );
|
||||||
|
|
||||||
|
drawingSheet->SetSheetName( "" );
|
||||||
|
drawingSheet->SetSheetPath( "" );
|
||||||
|
|
||||||
|
return drawingSheet;
|
||||||
|
}
|
|
@ -32,6 +32,7 @@ class SCH_RENDER_SETTINGS;
|
||||||
class SCHEMATIC;
|
class SCHEMATIC;
|
||||||
class JOB_SYM_EXPORT_SVG;
|
class JOB_SYM_EXPORT_SVG;
|
||||||
class LIB_SYMBOL;
|
class LIB_SYMBOL;
|
||||||
|
class DS_PROXY_VIEW_ITEM;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handles eeschema job dispatches
|
* Handles eeschema job dispatches
|
||||||
|
@ -44,6 +45,7 @@ public:
|
||||||
int JobExportPythonBom( JOB* aJob );
|
int JobExportPythonBom( JOB* aJob );
|
||||||
int JobExportNetlist( JOB* aJob );
|
int JobExportNetlist( JOB* aJob );
|
||||||
int JobExportPlot( JOB* aJob );
|
int JobExportPlot( JOB* aJob );
|
||||||
|
int JobSchErc( JOB* aJob );
|
||||||
int JobSymUpgrade( JOB* aJob );
|
int JobSymUpgrade( JOB* aJob );
|
||||||
int JobSymExportSvg( JOB* aJob );
|
int JobSymExportSvg( JOB* aJob );
|
||||||
|
|
||||||
|
@ -63,6 +65,7 @@ private:
|
||||||
int doSymExportSvg( JOB_SYM_EXPORT_SVG* aSvgJob, KIGFX::SCH_RENDER_SETTINGS* aRenderSettings,
|
int doSymExportSvg( JOB_SYM_EXPORT_SVG* aSvgJob, KIGFX::SCH_RENDER_SETTINGS* aRenderSettings,
|
||||||
LIB_SYMBOL* symbol );
|
LIB_SYMBOL* symbol );
|
||||||
|
|
||||||
|
DS_PROXY_VIEW_ITEM* getDrawingSheetProxyView( SCHEMATIC* aSch );
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -45,7 +45,7 @@
|
||||||
#include <drawing_sheet/ds_proxy_view_item.h>
|
#include <drawing_sheet/ds_proxy_view_item.h>
|
||||||
#include <wx/ffile.h>
|
#include <wx/ffile.h>
|
||||||
#include <sim/sim_lib_mgr.h>
|
#include <sim/sim_lib_mgr.h>
|
||||||
#include <widgets/progress_reporter_base.h>
|
#include <progress_reporter.h>
|
||||||
|
|
||||||
|
|
||||||
/* ERC tests :
|
/* ERC tests :
|
||||||
|
@ -1067,11 +1067,10 @@ int ERC_TESTER::TestSimModelIssues()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void ERC_TESTER::RunTests( SCHEMATIC* aSch, DS_PROXY_VIEW_ITEM* aDrawingSheet,
|
void ERC_TESTER::RunTests( DS_PROXY_VIEW_ITEM* aDrawingSheet, SCH_EDIT_FRAME* aEditFrame,
|
||||||
SCH_EDIT_FRAME* aEditFrame,
|
PROGRESS_REPORTER* aProgressReporter )
|
||||||
PROGRESS_REPORTER_BASE* aProgressReporter )
|
|
||||||
{
|
{
|
||||||
ERC_SETTINGS& settings = aSch->ErcSettings();
|
ERC_SETTINGS& settings = m_schematic->ErcSettings();
|
||||||
|
|
||||||
// Test duplicate sheet names inside a given sheet. While one can have multiple references
|
// Test duplicate sheet names inside a given sheet. While one can have multiple references
|
||||||
// to the same file, each must have a unique name.
|
// to the same file, each must have a unique name.
|
||||||
|
@ -1102,7 +1101,7 @@ void ERC_TESTER::RunTests( SCHEMATIC* aSch, DS_PROXY_VIEW_ITEM* aDrawingSheet,
|
||||||
aEditFrame->RecalculateConnections( nullptr, NO_CLEANUP );
|
aEditFrame->RecalculateConnections( nullptr, NO_CLEANUP );
|
||||||
}
|
}
|
||||||
|
|
||||||
aSch->ConnectionGraph()->RunERC();
|
m_schematic->ConnectionGraph()->RunERC();
|
||||||
|
|
||||||
if( aProgressReporter )
|
if( aProgressReporter )
|
||||||
aProgressReporter->AdvancePhase( _( "Checking units..." ) );
|
aProgressReporter->AdvancePhase( _( "Checking units..." ) );
|
||||||
|
@ -1123,6 +1122,7 @@ void ERC_TESTER::RunTests( SCHEMATIC* aSch, DS_PROXY_VIEW_ITEM* aDrawingSheet,
|
||||||
TestMissingUnits();
|
TestMissingUnits();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( aProgressReporter )
|
||||||
aProgressReporter->AdvancePhase( _( "Checking pins..." ) );
|
aProgressReporter->AdvancePhase( _( "Checking pins..." ) );
|
||||||
|
|
||||||
if( settings.IsTestEnabled( ERCE_DIFFERENT_UNIT_NET ) )
|
if( settings.IsTestEnabled( ERCE_DIFFERENT_UNIT_NET ) )
|
||||||
|
@ -1140,40 +1140,46 @@ void ERC_TESTER::RunTests( SCHEMATIC* aSch, DS_PROXY_VIEW_ITEM* aDrawingSheet,
|
||||||
// using case insensitive comparisons)
|
// using case insensitive comparisons)
|
||||||
if( settings.IsTestEnabled( ERCE_SIMILAR_LABELS ) )
|
if( settings.IsTestEnabled( ERCE_SIMILAR_LABELS ) )
|
||||||
{
|
{
|
||||||
|
if( aProgressReporter )
|
||||||
aProgressReporter->AdvancePhase( _( "Checking labels..." ) );
|
aProgressReporter->AdvancePhase( _( "Checking labels..." ) );
|
||||||
TestSimilarLabels();
|
TestSimilarLabels();
|
||||||
}
|
}
|
||||||
|
|
||||||
if( settings.IsTestEnabled( ERCE_UNRESOLVED_VARIABLE ) )
|
if( settings.IsTestEnabled( ERCE_UNRESOLVED_VARIABLE ) )
|
||||||
{
|
{
|
||||||
|
if( aProgressReporter )
|
||||||
aProgressReporter->AdvancePhase( _( "Checking for unresolved variables..." ) );
|
aProgressReporter->AdvancePhase( _( "Checking for unresolved variables..." ) );
|
||||||
TestTextVars( aDrawingSheet );
|
TestTextVars( aDrawingSheet );
|
||||||
}
|
}
|
||||||
|
|
||||||
if( settings.IsTestEnabled( ERCE_SIMULATION_MODEL ) )
|
if( settings.IsTestEnabled( ERCE_SIMULATION_MODEL ) )
|
||||||
{
|
{
|
||||||
|
if( aProgressReporter )
|
||||||
aProgressReporter->AdvancePhase( _( "Checking SPICE models..." ) );
|
aProgressReporter->AdvancePhase( _( "Checking SPICE models..." ) );
|
||||||
TestSimModelIssues();
|
TestSimModelIssues();
|
||||||
}
|
}
|
||||||
|
|
||||||
if( settings.IsTestEnabled( ERCE_NOCONNECT_CONNECTED ) )
|
if( settings.IsTestEnabled( ERCE_NOCONNECT_CONNECTED ) )
|
||||||
{
|
{
|
||||||
|
if( aProgressReporter )
|
||||||
aProgressReporter->AdvancePhase( _( "Checking no connect pins for connections..." ) );
|
aProgressReporter->AdvancePhase( _( "Checking no connect pins for connections..." ) );
|
||||||
TestNoConnectPins();
|
TestNoConnectPins();
|
||||||
}
|
}
|
||||||
|
|
||||||
if( settings.IsTestEnabled( ERCE_LIB_SYMBOL_ISSUES ) )
|
if( settings.IsTestEnabled( ERCE_LIB_SYMBOL_ISSUES ) )
|
||||||
{
|
{
|
||||||
|
if( aProgressReporter )
|
||||||
aProgressReporter->AdvancePhase( _( "Checking for library symbol issues..." ) );
|
aProgressReporter->AdvancePhase( _( "Checking for library symbol issues..." ) );
|
||||||
TestLibSymbolIssues();
|
TestLibSymbolIssues();
|
||||||
}
|
}
|
||||||
|
|
||||||
if( settings.IsTestEnabled( ERCE_ENDPOINT_OFF_GRID ) )
|
if( settings.IsTestEnabled( ERCE_ENDPOINT_OFF_GRID ) )
|
||||||
{
|
{
|
||||||
|
if( aProgressReporter )
|
||||||
aProgressReporter->AdvancePhase( _( "Checking for off grid pins and wires..." ) );
|
aProgressReporter->AdvancePhase( _( "Checking for off grid pins and wires..." ) );
|
||||||
if( aEditFrame )
|
if( aEditFrame )
|
||||||
TestOffGridEndpoints( aEditFrame->GetCanvas()->GetView()->GetGAL()->GetGridSize().x );
|
TestOffGridEndpoints( aEditFrame->GetCanvas()->GetView()->GetGAL()->GetGridSize().x );
|
||||||
}
|
}
|
||||||
|
|
||||||
aSch->ResolveERCExclusionsPostUpdate();
|
m_schematic->ResolveERCExclusionsPostUpdate();
|
||||||
}
|
}
|
|
@ -39,7 +39,7 @@ class SCH_SHEET_LIST;
|
||||||
class SCHEMATIC;
|
class SCHEMATIC;
|
||||||
class DS_PROXY_VIEW_ITEM;
|
class DS_PROXY_VIEW_ITEM;
|
||||||
class SCH_EDIT_FRAME;
|
class SCH_EDIT_FRAME;
|
||||||
class PROGRESS_REPORTER_BASE;
|
class PROGRESS_REPORTER;
|
||||||
|
|
||||||
|
|
||||||
extern const wxString CommentERC_H[];
|
extern const wxString CommentERC_H[];
|
||||||
|
@ -146,8 +146,8 @@ public:
|
||||||
*/
|
*/
|
||||||
int TestMissingUnits();
|
int TestMissingUnits();
|
||||||
|
|
||||||
void RunTests( SCHEMATIC* aSch, DS_PROXY_VIEW_ITEM* aDrawingSheet, SCH_EDIT_FRAME* aEditFrame,
|
void RunTests( DS_PROXY_VIEW_ITEM* aDrawingSheet, SCH_EDIT_FRAME* aEditFrame,
|
||||||
PROGRESS_REPORTER_BASE* aProgressReporter );
|
PROGRESS_REPORTER* aProgressReporter );
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
|
|
@ -32,7 +32,8 @@ namespace CLI
|
||||||
static const int ERR_UNKNOWN = 2;
|
static const int ERR_UNKNOWN = 2;
|
||||||
static const int ERR_INVALID_INPUT_FILE = 3;
|
static const int ERR_INVALID_INPUT_FILE = 3;
|
||||||
static const int ERR_INVALID_OUTPUT_CONFLICT = 4;
|
static const int ERR_INVALID_OUTPUT_CONFLICT = 4;
|
||||||
static const int ERR_DRC_VIOLATIONS = 5;
|
///< Rules check violation count was greater than 0
|
||||||
|
static const int ERR_RC_VIOLATIONS = 5;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,109 @@
|
||||||
|
/*
|
||||||
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2023 KiCad Developers, see AUTHORS.txt for contributors.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation; either version 2
|
||||||
|
* of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, you may find one here:
|
||||||
|
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||||
|
* or you may search the http://www.gnu.org website for the version 2 license,
|
||||||
|
* or you may write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef CLI_PROGRESS_REPORTER_H
|
||||||
|
#define CLI_PROGRESS_REPORTER_H
|
||||||
|
|
||||||
|
#include <wx/string.h>
|
||||||
|
#include <progress_reporter.h>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reporter forwarding messages to stdout or stderr as appropriate
|
||||||
|
*/
|
||||||
|
class CLI_PROGRESS_REPORTER : public PROGRESS_REPORTER
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CLI_PROGRESS_REPORTER() {}
|
||||||
|
|
||||||
|
virtual ~CLI_PROGRESS_REPORTER() {}
|
||||||
|
|
||||||
|
static PROGRESS_REPORTER& GetInstance();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the number of phases.
|
||||||
|
*/
|
||||||
|
virtual void SetNumPhases( int aNumPhases ) override {}
|
||||||
|
virtual void AddPhases( int aNumPhases ) override {};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize the \a aPhase virtual zone of the dialog progress bar.
|
||||||
|
*/
|
||||||
|
virtual void BeginPhase( int aPhase ) override {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Use the next available virtual zone of the dialog progress bar.
|
||||||
|
*/
|
||||||
|
virtual void AdvancePhase() override {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Use the next available virtual zone of the dialog progress bar and updates the message.
|
||||||
|
*/
|
||||||
|
virtual void AdvancePhase( const wxString& aMessage ) override;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Display \a aMessage in the progress bar dialog.
|
||||||
|
*/
|
||||||
|
virtual void Report( const wxString& aMessage ) override;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the progress value to aProgress (0..1).
|
||||||
|
*/
|
||||||
|
virtual void SetCurrentProgress( double aProgress ) override {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fix the value that gives the 100 percent progress bar length
|
||||||
|
* (inside the current virtual zone).
|
||||||
|
*/
|
||||||
|
virtual void SetMaxProgress( int aMaxProgress ) override {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Increment the progress bar length (inside the current virtual zone).
|
||||||
|
*/
|
||||||
|
virtual void AdvanceProgress() override {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update the UI (if any).
|
||||||
|
*
|
||||||
|
* @warning This should only be called from the main thread.
|
||||||
|
*
|
||||||
|
* @return false if the user cancelled.
|
||||||
|
*/
|
||||||
|
virtual bool KeepRefreshing( bool aWait = false ) override { return false; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Change the title displayed on the window caption.
|
||||||
|
*
|
||||||
|
* Has meaning only for some reporters. Does nothing for others.
|
||||||
|
*
|
||||||
|
* @warning This should only be called from the main thread.
|
||||||
|
*/
|
||||||
|
virtual void SetTitle( const wxString& aTitle ) override {}
|
||||||
|
|
||||||
|
virtual bool IsCancelled() const override { return false; }
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
void printLine( const wxString& aMessage );
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -51,6 +51,7 @@ set( KICAD_CLI_SRCS
|
||||||
cli/command_export_sch_pythonbom.cpp
|
cli/command_export_sch_pythonbom.cpp
|
||||||
cli/command_export_sch_netlist.cpp
|
cli/command_export_sch_netlist.cpp
|
||||||
cli/command_export_sch_plot.cpp
|
cli/command_export_sch_plot.cpp
|
||||||
|
cli/command_sch_erc.cpp
|
||||||
cli/command_sym_export_svg.cpp
|
cli/command_sym_export_svg.cpp
|
||||||
cli/command_sym_upgrade.cpp
|
cli/command_sym_upgrade.cpp
|
||||||
cli/command_version.cpp
|
cli/command_version.cpp
|
||||||
|
|
|
@ -0,0 +1,146 @@
|
||||||
|
/*
|
||||||
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2022 Mark Roszko <mark.roszko@gmail.com>
|
||||||
|
* Copyright (C) 1992-2023 KiCad Developers, see AUTHORS.txt for contributors.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License as published by the
|
||||||
|
* Free Software Foundation, either version 3 of the License, or (at your
|
||||||
|
* option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "command_sch_erc.h"
|
||||||
|
#include <cli/exit_codes.h>
|
||||||
|
#include "jobs/job_sch_erc.h"
|
||||||
|
#include <kiface_base.h>
|
||||||
|
#include <layer_ids.h>
|
||||||
|
#include <wx/crt.h>
|
||||||
|
|
||||||
|
#include <macros.h>
|
||||||
|
#include <wx/tokenzr.h>
|
||||||
|
|
||||||
|
#define ARG_FORMAT "--format"
|
||||||
|
#define ARG_UNITS "--units"
|
||||||
|
#define ARG_SEVERITY_ALL "--severity-all"
|
||||||
|
#define ARG_SEVERITY_ERROR "--severity-error"
|
||||||
|
#define ARG_SEVERITY_WARNING "--severity-warning"
|
||||||
|
#define ARG_SEVERITY_EXCLUSIONS "--severity-exclusions"
|
||||||
|
#define ARG_EXIT_CODE_VIOLATIONS "--exit-code-violations"
|
||||||
|
|
||||||
|
CLI::SCH_ERC_COMMAND::SCH_ERC_COMMAND() : EXPORT_PCB_BASE_COMMAND( "erc" )
|
||||||
|
{
|
||||||
|
m_argParser.add_argument( ARG_FORMAT )
|
||||||
|
.default_value( std::string( "report" ) )
|
||||||
|
.help( UTF8STDSTR( _( "Output file format, options: json, report" ) ) );
|
||||||
|
|
||||||
|
m_argParser.add_argument( ARG_UNITS )
|
||||||
|
.default_value( std::string( "mm" ) )
|
||||||
|
.help( UTF8STDSTR(
|
||||||
|
_( "Report units; valid options: in, mm, mils" ) ) );
|
||||||
|
|
||||||
|
m_argParser.add_argument( ARG_SEVERITY_ALL )
|
||||||
|
.help( UTF8STDSTR( _( "Report all DRC violations, this is equivalent to including all the other severity arguments" ) ) )
|
||||||
|
.implicit_value( true )
|
||||||
|
.default_value( false );
|
||||||
|
|
||||||
|
m_argParser.add_argument( ARG_SEVERITY_ERROR )
|
||||||
|
.help( UTF8STDSTR( _( "Report all DRC error level violations, this can be combined with the other severity arguments" ) ) )
|
||||||
|
.implicit_value( true )
|
||||||
|
.default_value( false );
|
||||||
|
|
||||||
|
m_argParser.add_argument( ARG_SEVERITY_WARNING )
|
||||||
|
.help( UTF8STDSTR( _( "Report all DRC warning level violations, this can be combined with the other severity arguments" ) ) )
|
||||||
|
.implicit_value( true )
|
||||||
|
.default_value( false );
|
||||||
|
|
||||||
|
m_argParser.add_argument( ARG_SEVERITY_EXCLUSIONS )
|
||||||
|
.help( UTF8STDSTR( _( "Report all excluded DRC violations, this can be combined with the other severity arguments" ) ) )
|
||||||
|
.implicit_value( true )
|
||||||
|
.default_value( false );
|
||||||
|
|
||||||
|
m_argParser.add_argument( ARG_EXIT_CODE_VIOLATIONS )
|
||||||
|
.help( UTF8STDSTR( _( "Return a exit code depending on whether or not violations exist" ) ) )
|
||||||
|
.implicit_value( true )
|
||||||
|
.default_value( false );
|
||||||
|
|
||||||
|
m_argParser.add_argument( "-o", ARG_OUTPUT )
|
||||||
|
.default_value( std::string() )
|
||||||
|
.help( UTF8STDSTR( _( "Output file name" ) ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int CLI::SCH_ERC_COMMAND::doPerform( KIWAY& aKiway )
|
||||||
|
{
|
||||||
|
std::unique_ptr<JOB_SCH_ERC> ercJob( new JOB_SCH_ERC( true ) );
|
||||||
|
|
||||||
|
ercJob->m_outputFile = FROM_UTF8( m_argParser.get<std::string>( ARG_OUTPUT ).c_str() );
|
||||||
|
ercJob->m_filename = FROM_UTF8( m_argParser.get<std::string>( ARG_INPUT ).c_str() );
|
||||||
|
ercJob->m_exitCodeViolations = m_argParser.get<bool>( ARG_EXIT_CODE_VIOLATIONS );
|
||||||
|
|
||||||
|
if( m_argParser.get<bool>( ARG_SEVERITY_ALL ) )
|
||||||
|
{
|
||||||
|
ercJob->m_severity = RPT_SEVERITY_ERROR | RPT_SEVERITY_WARNING | RPT_SEVERITY_EXCLUSION;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( m_argParser.get<bool>( ARG_SEVERITY_ERROR ) )
|
||||||
|
{
|
||||||
|
ercJob->m_severity |= RPT_SEVERITY_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( m_argParser.get<bool>( ARG_SEVERITY_WARNING ) )
|
||||||
|
{
|
||||||
|
ercJob->m_severity |= RPT_SEVERITY_WARNING;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( m_argParser.get<bool>( ARG_SEVERITY_EXCLUSIONS ) )
|
||||||
|
{
|
||||||
|
ercJob->m_severity |= RPT_SEVERITY_EXCLUSION;
|
||||||
|
}
|
||||||
|
wxString units = FROM_UTF8( m_argParser.get<std::string>( ARG_UNITS ).c_str() );
|
||||||
|
|
||||||
|
if( units == wxS( "mm" ) )
|
||||||
|
{
|
||||||
|
ercJob->m_units = JOB_SCH_ERC::UNITS::MILLIMETERS;
|
||||||
|
}
|
||||||
|
else if( units == wxS( "in" ) )
|
||||||
|
{
|
||||||
|
ercJob->m_units = JOB_SCH_ERC::UNITS::INCHES;
|
||||||
|
}
|
||||||
|
else if( units == wxS( "mils" ) )
|
||||||
|
{
|
||||||
|
ercJob->m_units = JOB_SCH_ERC::UNITS::MILS;
|
||||||
|
}
|
||||||
|
else if( !units.IsEmpty() )
|
||||||
|
{
|
||||||
|
wxFprintf( stderr, _( "Invalid units specified\n" ) );
|
||||||
|
return EXIT_CODES::ERR_ARGS;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxString format = FROM_UTF8( m_argParser.get<std::string>( ARG_FORMAT ).c_str() );
|
||||||
|
if( format == "report" )
|
||||||
|
{
|
||||||
|
ercJob->m_format = JOB_SCH_ERC::OUTPUT_FORMAT::REPORT;
|
||||||
|
}
|
||||||
|
else if( format == "json" )
|
||||||
|
{
|
||||||
|
ercJob->m_format = JOB_SCH_ERC::OUTPUT_FORMAT::JSON;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
wxFprintf( stderr, _( "Invalid report format\n" ) );
|
||||||
|
return EXIT_CODES::ERR_ARGS;
|
||||||
|
}
|
||||||
|
|
||||||
|
int exitCode = aKiway.ProcessJob( KIWAY::FACE_SCH, ercJob.get() );
|
||||||
|
|
||||||
|
return exitCode;
|
||||||
|
}
|
|
@ -0,0 +1,38 @@
|
||||||
|
/*
|
||||||
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2022 Mark Roszko <mark.roszko@gmail.com>
|
||||||
|
* Copyright (C) 1992-2022 KiCad Developers, see AUTHORS.txt for contributors.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License as published by the
|
||||||
|
* Free Software Foundation, either version 3 of the License, or (at your
|
||||||
|
* option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef COMMAND_SCH_ERC_H
|
||||||
|
#define COMMAND_SCH_ERC_H
|
||||||
|
|
||||||
|
#include "command_export_pcb_base.h"
|
||||||
|
|
||||||
|
namespace CLI
|
||||||
|
{
|
||||||
|
class SCH_ERC_COMMAND : public EXPORT_PCB_BASE_COMMAND
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
SCH_ERC_COMMAND();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
int doPerform( KIWAY& aKiway ) override;
|
||||||
|
};
|
||||||
|
} // namespace CLI
|
||||||
|
|
||||||
|
#endif
|
|
@ -66,6 +66,7 @@
|
||||||
#include "cli/command_fp_export_svg.h"
|
#include "cli/command_fp_export_svg.h"
|
||||||
#include "cli/command_fp_upgrade.h"
|
#include "cli/command_fp_upgrade.h"
|
||||||
#include "cli/command_sch.h"
|
#include "cli/command_sch.h"
|
||||||
|
#include "cli/command_sch_erc.h"
|
||||||
#include "cli/command_sch_export.h"
|
#include "cli/command_sch_export.h"
|
||||||
#include "cli/command_sym.h"
|
#include "cli/command_sym.h"
|
||||||
#include "cli/command_sym_export.h"
|
#include "cli/command_sym_export.h"
|
||||||
|
@ -125,6 +126,7 @@ struct COMMAND_ENTRY
|
||||||
handler( aHandler ), subCommands( aSub ){};
|
handler( aHandler ), subCommands( aSub ){};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static CLI::PCB_COMMAND pcbCmd{};
|
||||||
static CLI::PCB_DRC_COMMAND pcbDrcCmd{};
|
static CLI::PCB_DRC_COMMAND pcbDrcCmd{};
|
||||||
static CLI::EXPORT_PCB_DRILL_COMMAND exportPcbDrillCmd{};
|
static CLI::EXPORT_PCB_DRILL_COMMAND exportPcbDrillCmd{};
|
||||||
static CLI::EXPORT_PCB_DXF_COMMAND exportPcbDxfCmd{};
|
static CLI::EXPORT_PCB_DXF_COMMAND exportPcbDxfCmd{};
|
||||||
|
@ -135,9 +137,9 @@ static CLI::EXPORT_PCB_POS_COMMAND exportPcbPosCmd{};
|
||||||
static CLI::EXPORT_PCB_GERBER_COMMAND exportPcbGerberCmd{};
|
static CLI::EXPORT_PCB_GERBER_COMMAND exportPcbGerberCmd{};
|
||||||
static CLI::EXPORT_PCB_GERBERS_COMMAND exportPcbGerbersCmd{};
|
static CLI::EXPORT_PCB_GERBERS_COMMAND exportPcbGerbersCmd{};
|
||||||
static CLI::EXPORT_PCB_COMMAND exportPcbCmd{};
|
static CLI::EXPORT_PCB_COMMAND exportPcbCmd{};
|
||||||
static CLI::PCB_COMMAND pcbCmd{};
|
|
||||||
static CLI::EXPORT_SCH_COMMAND exportSchCmd{};
|
static CLI::EXPORT_SCH_COMMAND exportSchCmd{};
|
||||||
static CLI::SCH_COMMAND schCmd{};
|
static CLI::SCH_COMMAND schCmd{};
|
||||||
|
static CLI::SCH_ERC_COMMAND schErcCmd{};
|
||||||
static CLI::EXPORT_SCH_BOM_COMMAND exportSchBomCmd{};
|
static CLI::EXPORT_SCH_BOM_COMMAND exportSchBomCmd{};
|
||||||
static CLI::EXPORT_SCH_PYTHONBOM_COMMAND exportSchPythonBomCmd{};
|
static CLI::EXPORT_SCH_PYTHONBOM_COMMAND exportSchPythonBomCmd{};
|
||||||
static CLI::EXPORT_SCH_NETLIST_COMMAND exportSchNetlistCmd{};
|
static CLI::EXPORT_SCH_NETLIST_COMMAND exportSchNetlistCmd{};
|
||||||
|
@ -175,6 +177,9 @@ static std::vector<COMMAND_ENTRY> commandStack = {
|
||||||
{
|
{
|
||||||
&pcbCmd,
|
&pcbCmd,
|
||||||
{
|
{
|
||||||
|
{
|
||||||
|
&pcbDrcCmd
|
||||||
|
},
|
||||||
{
|
{
|
||||||
&exportPcbCmd,
|
&exportPcbCmd,
|
||||||
{
|
{
|
||||||
|
@ -187,15 +192,15 @@ static std::vector<COMMAND_ENTRY> commandStack = {
|
||||||
&exportPcbStepCmd,
|
&exportPcbStepCmd,
|
||||||
&exportPcbSvgCmd
|
&exportPcbSvgCmd
|
||||||
}
|
}
|
||||||
},
|
|
||||||
{
|
|
||||||
&pcbDrcCmd
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
&schCmd,
|
&schCmd,
|
||||||
{
|
{
|
||||||
|
{
|
||||||
|
&schErcCmd
|
||||||
|
},
|
||||||
{
|
{
|
||||||
&exportSchCmd,
|
&exportSchCmd,
|
||||||
{
|
{
|
||||||
|
|
|
@ -25,9 +25,10 @@
|
||||||
|
|
||||||
#include <pcbnew_scripting_helpers.h>
|
#include <pcbnew_scripting_helpers.h>
|
||||||
#include <pgm_base.h>
|
#include <pgm_base.h>
|
||||||
|
#include <cli_progress_reporter.h>
|
||||||
|
#include <confirm.h>
|
||||||
#include <kiface_base.h>
|
#include <kiface_base.h>
|
||||||
#include <kiface_ids.h>
|
#include <kiface_ids.h>
|
||||||
#include <confirm.h>
|
|
||||||
#include <pcb_edit_frame.h>
|
#include <pcb_edit_frame.h>
|
||||||
#include <eda_dde.h>
|
#include <eda_dde.h>
|
||||||
#include <macros.h>
|
#include <macros.h>
|
||||||
|
@ -365,7 +366,10 @@ bool IFACE::OnKifaceStart( PGM_BASE* aProgram, int aCtlBits )
|
||||||
m_jobHandler = std::make_unique<PCBNEW_JOBS_HANDLER>();
|
m_jobHandler = std::make_unique<PCBNEW_JOBS_HANDLER>();
|
||||||
|
|
||||||
if( m_start_flags & KFCTL_CLI )
|
if( m_start_flags & KFCTL_CLI )
|
||||||
|
{
|
||||||
m_jobHandler->SetReporter( &CLI_REPORTER::GetInstance() );
|
m_jobHandler->SetReporter( &CLI_REPORTER::GetInstance() );
|
||||||
|
m_jobHandler->SetProgressReporter( &CLI_PROGRESS_REPORTER::GetInstance() );
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -960,7 +960,7 @@ int PCBNEW_JOBS_HANDLER::JobExportDrc( JOB* aJob )
|
||||||
if( markersProvider->GetCount() > 0 || ratsnestProvider->GetCount() > 0
|
if( markersProvider->GetCount() > 0 || ratsnestProvider->GetCount() > 0
|
||||||
|| fpWarningsProvider->GetCount() > 0 )
|
|| fpWarningsProvider->GetCount() > 0 )
|
||||||
{
|
{
|
||||||
return CLI::EXIT_CODES::ERR_DRC_VIOLATIONS;
|
return CLI::EXIT_CODES::ERR_RC_VIOLATIONS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -980,8 +980,7 @@ DS_PROXY_VIEW_ITEM* PCBNEW_JOBS_HANDLER::getDrawingSheetProxyView( BOARD* aBrd )
|
||||||
drawingSheet->SetSheetPath( std::string() );
|
drawingSheet->SetSheetPath( std::string() );
|
||||||
drawingSheet->SetIsFirstPage( true );
|
drawingSheet->SetIsFirstPage( true );
|
||||||
|
|
||||||
if( BOARD* board = GetBoard() )
|
drawingSheet->SetFileName( TO_UTF8( aBrd->GetFileName() ) );
|
||||||
drawingSheet->SetFileName( TO_UTF8( board->GetFileName() ) );
|
|
||||||
|
|
||||||
return drawingSheet;
|
return drawingSheet;
|
||||||
}
|
}
|
Loading…
Reference in New Issue