Files
Damjan Prerad b80ee13595 Local history: add restore dialog
The old restore dialog only showed a simple list of snapshots
so it was hard to see what each entry contained before
restoring. It also had a bug where pressing Restore could
close the dialog but not restore anything, because the
pre-restore backup step treated no changes to save as a faliure.

This change adds a dedicated restore dialog that shows the
snapshot time, summary, hash, and changed files. It also
updates the restore code to load snapshot details for the
dialog and to continue with the restore when the backup
step finds no new changes.
2026-03-19 17:04:02 +01:00

1219 lines
35 KiB
CMake

# Add all the warnings to the files
if( COMPILER_SUPPORTS_WARNINGS )
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${WARN_FLAGS_CXX}")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${WARN_FLAGS_C}")
endif()
set( INC_AFTER ${INC_AFTER} ${NGSPICE_INCLUDE_DIR} )
include_directories( BEFORE ${INC_BEFORE} )
include_directories(
./dialogs
./widgets
./dialog_about
${CMAKE_SOURCE_DIR}/libs/sexpr/include
${CMAKE_SOURCE_DIR}/resources/bitmaps_png
${CMAKE_SOURCE_DIR}/3d-viewer
${CMAKE_SOURCE_DIR}/pcbnew
${CMAKE_SOURCE_DIR}/kicad
${INC_AFTER}
)
# Get the GAL Target
add_subdirectory( gal )
# Get the netlist reader library
add_subdirectory( netlist_reader )
# Get the shared PADS format support library
add_subdirectory( io/pads )
# The build version string defaults to the value in the KiCadVersion.cmake file.
# If being built inside a git repository, the git tag and commit hash are used to create
# a new version string instead. The user can supply an additional string to be appended
# to the end inside the KICAD_VERSION_EXTRA variable
set( KICAD_VERSION_EXTRA "" CACHE STRING
"User defined configuration string to append to KiCad version." )
# Generate version header file.
add_custom_target(
version_header ALL
COMMAND ${CMAKE_COMMAND}
-DKICAD_VERSION_EXTRA=${KICAD_VERSION_EXTRA}
-DOUTPUT_FILE=${CMAKE_BINARY_DIR}/kicad_build_version.h
-DTEXT_OUTPUT_FILE=${CMAKE_BINARY_DIR}/kicad_build_version.txt
-DSRC_PATH=${PROJECT_SOURCE_DIR}
-DKICAD_CMAKE_MODULE_PATH=${KICAD_CMAKE_MODULE_PATH}
-P ${KICAD_CMAKE_MODULE_PATH}/BuildSteps/WriteVersionHeader.cmake
WORKING_DIRECTORY ${CMAKE_BINARY_DIR} BYPRODUCTS ${CMAKE_BINARY_DIR}/kicad_build_version.h
DEPENDS ${KICAD_CMAKE_MODULE_PATH}/BuildSteps/WriteVersionHeader.cmake
COMMENT "Generating version string header"
)
add_custom_target(
banned_functions ALL
COMMAND ${CMAKE_COMMAND}
-DBANNED_DIRS="${PROJECT_SOURCE_DIR}/common/io;${PROJECT_SOURCE_DIR}/pcbnew/pcb_io;${PROJECT_SOURCE_DIR}/eeschema/sch_io"
-P ${KICAD_CMAKE_MODULE_PATH}/CheckBannedFunctions.cmake
)
if( NOT (${CMAKE_CURRENT_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_BINARY_DIR} ) )
file( GLOB REMOTE_PROVIDER_SCHEMA_FILES
${CMAKE_SOURCE_DIR}/resources/schemas/kicad-remote-*.json
)
add_custom_target( remote_provider_schema_build_copy
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/schemas
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${REMOTE_PROVIDER_SCHEMA_FILES}
${CMAKE_BINARY_DIR}/schemas
DEPENDS ${REMOTE_PROVIDER_SCHEMA_FILES}
COMMENT "Copying remote provider schema files into build directory"
)
endif()
# A shared library used by multiple *.kiface files and one or two program
# launchers. Object files can migrate into here over time, but only if they are
# surely needed and certainly used from more than one place without recompilation.
# Functions and data all need to use the #include <import_export.h> and be declared
# as APIEXPORT
set( KICOMMON_SRCS
# Fonts
newstroke_font.cpp
font/fontconfig.cpp
font/version_info.cpp
# Gal
gal/color4d.cpp
# KiCad GL
kicad_gl/gl_utils.cpp
kicad_gl/gl_context_mgr.cpp
# Git
git/git_add_to_index_handler.cpp
git/git_branch_handler.cpp
git/git_clone_handler.cpp
git/git_commit_handler.cpp
git/git_config_handler.cpp
git/git_compare_handler.cpp
git/git_init_handler.cpp
git/project_git_utils.cpp
git/git_pull_handler.cpp
git/git_push_handler.cpp
git/git_remove_from_index_handler.cpp
git/git_remove_vcs_handler.cpp
git/git_resolve_conflict_handler.cpp
git/git_revert_handler.cpp
git/git_status_handler.cpp
git/git_switch_branch_handler.cpp
git/git_sync_handler.cpp
git/kicad_git_common.cpp
git/kicad_git_errors.cpp
git/git_backend.cpp
git/libgit_backend.cpp
# Jobs
jobs/job.cpp
jobs/job_dispatcher.cpp
jobs/job_registry.cpp
jobs/jobs_output_archive.cpp
jobs/jobs_output_folder.cpp
jobs/job_export_pcb_drill.cpp
jobs/job_export_pcb_dxf.cpp
jobs/job_export_pcb_gerber.cpp
jobs/job_export_pcb_gerbers.cpp
jobs/job_export_pcb_hpgl.cpp
jobs/job_export_pcb_ipc2581.cpp
jobs/job_export_pcb_ipcd356.cpp
jobs/job_export_pcb_odb.cpp
jobs/job_export_pcb_pdf.cpp
jobs/job_export_pcb_stats.cpp
jobs/job_export_pcb_plot.cpp
jobs/job_export_pcb_pos.cpp
jobs/job_export_pcb_ps.cpp
jobs/job_export_pcb_svg.cpp
jobs/job_export_pcb_gencad.cpp
jobs/job_export_pcb_3d.cpp
jobs/job_export_sch_bom.cpp
jobs/job_export_sch_netlist.cpp
jobs/job_export_sch_plot.cpp
jobs/job_export_sch_pythonbom.cpp
jobs/job_special_copyfiles.cpp
jobs/job_special_execute.cpp
jobs/jobset.cpp
jobs/job_fp_export_svg.cpp
jobs/job_fp_upgrade.cpp
jobs/job_pcb_import.cpp
jobs/job_pcb_render.cpp
jobs/job_pcb_drc.cpp
jobs/job_rc.cpp
jobs/job_sch_erc.cpp
jobs/job_sym_export_svg.cpp
jobs/job_sym_upgrade.cpp
jobs/job_pcb_upgrade.cpp
jobs/job_sch_upgrade.cpp
local_history.cpp
history_lock.cpp
kicad_curl/kicad_curl.cpp
kicad_curl/kicad_curl_easy.cpp
libraries/library_manager.cpp
libraries/library_table.cpp
libraries/library_table_parser.cpp
settings/app_settings.cpp
settings/aui_settings.cpp
settings/bom_settings.cpp
settings/color_settings.cpp
settings/common_settings.cpp
settings/grid_settings.cpp
settings/json_settings.cpp
settings/kicad_settings.cpp
settings/layer_settings_utils.cpp
settings/nested_settings.cpp
settings/parameters.cpp
settings/settings_manager.cpp
project/board_project_settings.cpp
project/component_class_settings.cpp
project/net_settings.cpp
project/project_archiver.cpp
project/project_file.cpp
project/project_local_settings.cpp
project/tuning_profiles.cpp
text_eval/text_eval_wrapper.cpp
text_eval/text_eval_parser.cpp
text_eval/text_eval_vcs.cpp
# This is basically a settings object, but for the toolbar
tool/ui/toolbar_configuration.cpp
tool/ui/toolbar_context_menu_registry.cpp
dialogs/dialog_rc_job.cpp
dialogs/dialog_rc_job_base.cpp
dialogs/dialog_restore_local_history.cpp
dialogs/dialog_HTML_reporter_base.cpp
dialogs/panel_startwizard_libraries_base.cpp
dialogs/panel_startwizard_privacy_base.cpp
dialogs/panel_startwizard_settings_base.cpp
grid_tricks.cpp
widgets/aui_json_serializer.cpp
widgets/bitmap_button.cpp
widgets/grid_combobox.cpp
widgets/grid_icon_text_helpers.cpp
widgets/grid_text_button_helpers.cpp
widgets/grid_text_helpers.cpp
widgets/html_window.cpp
widgets/indicator_icon.cpp
widgets/kistatusbar.cpp
widgets/number_badge.cpp
widgets/progress_reporter_base.cpp
widgets/report_severity.cpp
widgets/std_bitmap_button.cpp
widgets/ui_common.cpp
widgets/up_down_tree.cpp
widgets/wx_grid.cpp
widgets/wx_html_report_panel.cpp
widgets/wx_html_report_panel_base.cpp
widgets/wx_html_report_box.cpp
database/database_lib_settings.cpp
design_block.cpp
design_block_io.cpp
design_block_library_adapter.cpp
advanced_config.cpp
app_monitor.cpp
asset_archive.cpp
array_axis.cpp
array_options.cpp
background_jobs_monitor.cpp
bitmap.cpp
bitmap_info.cpp
bitmap_store.cpp
build_version.cpp
cli_progress_reporter.cpp
common.cpp
config_params.cpp
confirm.cpp
dialog_shim.cpp
dpi_scaling.cpp
dpi_scaling_common.cpp
dsnlexer.cpp
eda_doc.cpp
eda_pattern_match.cpp
eda_units.cpp
embedded_files.cpp
env_paths.cpp
env_vars.cpp
exceptions.cpp
gestfich.cpp
increment.cpp
json_conversions.cpp
json_schema_validator.cpp
kidialog.cpp
kiid.cpp
kiway.cpp
kiway_mail.cpp
kiway_holder.cpp
launch_ext.cpp
layer_id.cpp
lib_id.cpp
locale_io.cpp
lseq.cpp
lset.cpp
markup_parser.cpp
netclass.cpp
notifications_manager.cpp
page_info.cpp
oauth/oauth_loopback_server.cpp
oauth/oauth_pkce.cpp
oauth/oauth_session.cpp
oauth/secure_token_store.cpp
paths.cpp
project.cpp
remote_provider_client.cpp
remote_provider_metadata.cpp
remote_provider_models.cpp
remote_provider_settings.cpp
remote_provider_utils.cpp
reporter.cpp
richio.cpp
scintilla_tricks.cpp
search_stack.cpp
searchhelpfilefullpath.cpp
string_utils.cpp
systemdirsappend.cpp
thread_pool.cpp
ui_events.cpp
title_block.cpp
trace_helpers.cpp
wildcards_and_files_ext.cpp
wx_filename.cpp
xnode.cpp
singleton.cpp
pgm_base.cpp
../scripting/python_scripting.cpp
io/kicad/kicad_io_utils.cpp # needed by richio
io/io_base.cpp
io/io_utils.cpp
api/serializable.cpp
api/api_utils.cpp
startwizard/startwizard.cpp
startwizard/startwizard_provider_libraries.cpp
startwizard/startwizard_provider_privacy.cpp
startwizard/startwizard_provider_settings.cpp
)
if( UNIX AND NOT APPLE )
list( APPEND KICOMMON_SRCS
spacenav/libspnav_driver.cpp
)
endif()
if( KICAD_IPC_API )
set( KICOMMON_SRCS
${KICOMMON_SRCS}
api/api_handler.cpp
api/api_plugin.cpp
api/api_plugin_manager.cpp
api/api_server.cpp
../scripting/python_manager.cpp
)
endif()
add_library( kicommon SHARED
${KICOMMON_SRCS}
)
if( KICAD_USE_PCH )
target_precompile_headers( kicommon
PRIVATE
<kicommon.h>
<algorithm>
<map>
<memory>
<optional>
<set>
<string>
<vector>
<kiid.h>
<pgm_base.h>
<wx/wx.h>
)
endif()
set_target_properties(kicommon PROPERTIES CXX_VISIBILITY_PRESET hidden)
target_link_libraries( kicommon
core
kiapi
kimath
kiplatform
nlohmann_json
nlohmann_json_schema_validator
FastFloat::fast_float
fmt::fmt
CURL::libcurl
picosha2
rapidcsv
sexpr
glad
${ZSTD_LIBRARY}
${wxWidgets_LIBRARIES}
${LIBGIT2_LIBRARIES}
${SPNAV_LIBRARIES}
# needed by kiid to allow linking for Boost for the UUID against bcrypt (msys2 only)
${EXTRA_LIBS}
# outline font support
${FREETYPE_LIBRARIES}
${HarfBuzz_LIBRARIES}
${Fontconfig_LIBRARIES}
# needed because of python_scripting.cpp
${PYTHON_LIBRARIES}
)
if( KICAD_USE_SENTRY )
target_link_libraries( kicommon
sentry )
set_property(SOURCE app_monitor.cpp APPEND PROPERTY COMPILE_DEFINITIONS KICAD_SENTRY_DSN="${KICAD_SENTRY_DSN}")
endif()
if( KICAD_IPC_API )
target_link_libraries( kicommon
kinng
)
endif()
include( ${KICAD_CMAKE_MODULE_PATH}/KiCadVersion.cmake )
include( ${KICAD_CMAKE_MODULE_PATH}/CreateGitVersionHeader.cmake )
create_git_version_header(${CMAKE_SOURCE_DIR})
# Extract the major and minor build version as a string
string( REGEX MATCH
"([0-9]+)\\.([0-9]+)\\.([0-9]+)"
KICAD_MAJOR_MINOR_PATCH_VERSION
"${KICAD_VERSION}"
)
set_target_properties( kicommon PROPERTIES
OUTPUT_NAME kicommon
SOVERSION ${KICAD_MAJOR_MINOR_PATCH_VERSION}
)
install( TARGETS kicommon
RUNTIME DESTINATION ${KICAD_LIB}
LIBRARY DESTINATION ${KICAD_LIB}
COMPONENT binary
)
if( APPLE )
# puts library into the main kicad.app bundle in build tree
set_target_properties( kicommon PROPERTIES
LIBRARY_OUTPUT_DIRECTORY "${OSX_BUNDLE_BUILD_LIB_DIR}"
INSTALL_NAME_DIR "${OSX_BUNDLE_BUILD_LIB_DIR}"
)
set_target_properties( kicommon PROPERTIES INSTALL_RPATH
"@executable_path/../Frameworks" )
set_target_properties( kicommon PROPERTIES BUILD_WITH_INSTALL_RPATH 1 )
endif()
target_compile_definitions( kicommon PRIVATE KICOMMON_DLL=1 )
target_include_directories( kicommon
PUBLIC
.
${CMAKE_BINARY_DIR}
$<TARGET_PROPERTY:dynamic_bitset,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:magic_enum,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:pegtl,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:expected,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:kiapi,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:picosha2,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:nlohmann_json_schema_validator,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:thread-pool,INTERFACE_INCLUDE_DIRECTORIES>
)
add_dependencies( kicommon pegtl version_header )
if( TARGET remote_provider_schema_build_copy )
add_dependencies( kicommon remote_provider_schema_build_copy )
endif()
if( MSVC )
target_sources( kicommon PRIVATE ${CMAKE_SOURCE_DIR}/resources/msw/kicommon-dll.rc )
endif()
set( COMMON_ABOUT_DLG_SRCS
dialog_about/AboutDialog_main.cpp
dialog_about/dialog_about.cpp
dialog_about/dialog_about_base.cpp
)
set( COMMON_GIT_DLG_SRCS
dialogs/git/dialog_git_commit.cpp
dialogs/git/dialog_git_switch.cpp
dialogs/git/dialog_git_auth.cpp
dialogs/git/dialog_git_repository.cpp
dialogs/git/dialog_git_repository_base.cpp
dialogs/git/panel_git_repos.cpp
dialogs/git/panel_git_repos_base.cpp
)
set( COMMON_DLG_SRCS
${COMMON_GIT_DLG_SRCS}
dialogs/dialog_assign_netclass.cpp
dialogs/dialog_assign_netclass_base.cpp
dialogs/dialog_book_reporter.cpp
dialogs/dialog_book_reporter_base.cpp
dialogs/dialog_color_picker.cpp
dialogs/dialog_color_picker_base.cpp
dialogs/dialog_configure_paths.cpp
dialogs/dialog_configure_paths_base.cpp
dialogs/dialog_design_block_properties.cpp
dialogs/dialog_design_block_properties_base.cpp
dialogs/dialog_display_html_text_base.cpp
dialogs/dialog_edit_library_tables.cpp
dialogs/dialog_grid_settings.cpp
dialogs/dialog_grid_settings_base.cpp
dialogs/dialog_group_properties.cpp
dialogs/dialog_group_properties_base.cpp
dialogs/dialog_hotkey_list.cpp
dialogs/dialog_import_choose_project.cpp
dialogs/dialog_import_choose_project_base.cpp
dialogs/dialog_multi_unit_entry.cpp
dialogs/dialog_page_settings_base.cpp
dialogs/dialog_paste_special.cpp
dialogs/dialog_paste_special_base.cpp
dialogs/dialog_plugin_options.cpp
dialogs/dialog_plugin_options_base.cpp
dialogs/dialog_text_entry_base.cpp
dialogs/dialog_page_settings.cpp
dialogs/dialog_print_generic.cpp
dialogs/dialog_print_generic_base.cpp
dialogs/dialog_text_entry.cpp
dialogs/dialog_unit_entry.cpp
dialogs/dialog_unit_entry_base.cpp
dialogs/eda_list_dialog.cpp
dialogs/eda_list_dialog_base.cpp
dialogs/eda_reorderable_list_dialog.cpp
dialogs/eda_reorderable_list_dialog_base.cpp
dialogs/eda_view_switcher.cpp
dialogs/eda_view_switcher_base.cpp
dialogs/hotkey_cycle_popup.cpp
dialogs/html_message_box.cpp
dialogs/panel_color_settings_base.cpp
dialogs/panel_color_settings.cpp
dialogs/panel_common_settings.cpp
dialogs/panel_common_settings_base.cpp
dialogs/panel_design_block_lib_table_base.cpp
dialogs/panel_design_block_lib_table.cpp
dialogs/panel_embedded_files.cpp
dialogs/panel_embedded_files_base.cpp
dialogs/panel_base_display_options.cpp
dialogs/panel_base_display_options.cpp
dialogs/panel_hotkeys_editor.cpp
dialogs/panel_image_editor.cpp
dialogs/panel_image_editor_base.cpp
dialogs/panel_gal_options.cpp
dialogs/panel_gal_options_base.cpp
dialogs/panel_grid_settings.cpp
dialogs/panel_grid_settings_base.cpp
dialogs/panel_maintenance.cpp
dialogs/panel_maintenance_base.cpp
dialogs/panel_mouse_settings.cpp
dialogs/panel_mouse_settings_base.cpp
dialogs/panel_spacemouse.cpp
dialogs/panel_spacemouse_base.cpp
dialogs/panel_packages_and_updates.cpp
dialogs/panel_packages_and_updates_base.cpp
dialogs/panel_plugin_settings.cpp
dialogs/panel_plugin_settings_base.cpp
dialogs/panel_setup_netclasses.cpp
dialogs/panel_printer_list.cpp
dialogs/panel_printer_list_base.cpp
dialogs/panel_setup_netclasses_base.cpp
dialogs/panel_setup_severities.cpp
dialogs/panel_text_variables.cpp
dialogs/panel_text_variables_base.cpp
dialogs/panel_toolbar_customization.cpp
dialogs/panel_toolbar_customization_base.cpp
dialogs/rule_editor_dialog_base.cpp
libraries/lib_table_grid_data_model.cpp
)
if( KICAD_USE_SENTRY )
list( APPEND COMMON_DLG_SRCS
dialogs/panel_data_collection.cpp
dialogs/panel_data_collection_base.cpp
)
endif()
set( COMMON_WIDGET_SRCS
widgets/app_progress_dialog.cpp
widgets/wx_bitmap_combobox.cpp
widgets/bitmap_toggle.cpp
widgets/button_row_panel.cpp
widgets/color_swatch.cpp
widgets/design_block_pane.cpp
widgets/filter_combobox.cpp
widgets/font_choice.cpp
widgets/footprint_choice.cpp
widgets/footprint_diff_widget.cpp
widgets/footprint_preview_widget.cpp
widgets/footprint_select_widget.cpp
widgets/grid_bitmap_toggle.cpp
widgets/grid_button.cpp
widgets/grid_checkbox.cpp
widgets/grid_color_swatch_helpers.cpp
widgets/wx_infobar.cpp
widgets/layer_box_selector.cpp
widgets/layer_presentation.cpp
widgets/lib_tree.cpp
widgets/listbox_tricks.cpp
widgets/mathplot.cpp
widgets/msgpanel.cpp
widgets/paged_dialog.cpp
widgets/panel_design_block_chooser.cpp
widgets/properties_panel.cpp
widgets/search_pane.cpp
widgets/search_pane_base.cpp
widgets/search_pane_tab.cpp
widgets/split_button.cpp
widgets/stepped_slider.cpp
widgets/text_ctrl_eval.cpp
widgets/margin_offset_binder.cpp
widgets/unit_binder.cpp
widgets/widget_save_restore.cpp
widgets/widget_hotkey_list.cpp
widgets/wx_aui_art_providers.cpp
widgets/wx_aui_utils.cpp
widgets/wx_busy_indicator.cpp
widgets/wx_collapsible_pane.cpp
widgets/wx_combobox.cpp
widgets/wx_dataviewctrl.cpp
widgets/wx_ellipsized_static_text.cpp
widgets/wx_listbox.cpp
widgets/wx_panel.cpp
widgets/wx_progress_reporters.cpp
widgets/wx_splitter_window.cpp
widgets/wx_treebook.cpp
widgets/webview_panel.cpp
widgets/zoom_correction_ctrl.cpp
)
set( COMMON_DRAWING_SHEET_SRCS
drawing_sheet/ds_data_item.cpp
drawing_sheet/ds_data_model.cpp
drawing_sheet/ds_data_model_io.cpp
drawing_sheet/drawing_sheet_default_description.cpp
drawing_sheet/ds_draw_item.cpp
drawing_sheet/ds_proxy_undo_item.cpp
drawing_sheet/ds_proxy_view_item.cpp
drawing_sheet/drawing_sheet_parser.cpp
)
set( COMMON_PREVIEW_ITEMS_SRCS
preview_items/anchor_debug.cpp
preview_items/angle_item.cpp
preview_items/arc_assistant.cpp
preview_items/arc_geom_manager.cpp
preview_items/bezier_assistant.cpp
preview_items/bezier_geom_manager.cpp
preview_items/centreline_rect_item.cpp
preview_items/construction_geom.cpp
preview_items/draw_context.cpp
preview_items/item_drawing_utils.cpp
preview_items/polygon_geom_manager.cpp
preview_items/polygon_item.cpp
preview_items/preview_utils.cpp
preview_items/ruler_item.cpp
preview_items/selection_area.cpp
preview_items/simple_overlay_item.cpp
preview_items/snap_indicator.cpp
preview_items/two_point_assistant.cpp
)
set( PLOTTERS_CONTROL_SRCS
plotters/plotter.cpp
plotters/DXF_plotter.cpp
plotters/GERBER_plotter.cpp
plotters/PDF_plotter.cpp
plotters/pdf_stroke_font.cpp
plotters/pdf_outline_font.cpp
plotters/PS_plotter.cpp
plotters/SVG_plotter.cpp
plotters/common_plot_functions.cpp
)
set( COMMON_IO_SRCS
# Altium
io/altium/altium_binary_parser.cpp
io/altium/altium_ascii_parser.cpp
io/altium/altium_parser_utils.cpp
io/altium/altium_project_variants.cpp
io/altium/altium_props_utils.cpp
# Cadstar
io/cadstar/cadstar_archive_parser.cpp
io/cadstar/cadstar_parts_lib_parser.cpp
# Eagle
io/eagle/eagle_parser.cpp
# EasyEDA
io/easyeda/easyeda_parser_base.cpp
io/easyeda/easyeda_parser_structs.cpp
# EasyEDA pro
io/easyedapro/easyedapro_parser.cpp
io/easyedapro/easyedapro_import_utils.cpp
io/csv.cpp
)
set ( COMMON_TRANSLINE_CALCULATION_SRCS
transline_calculations/transline_calculation_base.cpp
transline_calculations/microstrip.cpp
transline_calculations/coupled_microstrip.cpp
transline_calculations/stripline.cpp
transline_calculations/coupled_stripline.cpp
)
set( COMMON_IMPORT_GFX_SRCS
import_gfx/graphics_import_mgr.cpp
import_gfx/graphics_importer.cpp
import_gfx/graphics_importer_buffer.cpp
import_gfx/dxf_import_plugin.cpp
import_gfx/svg_import_plugin.cpp
)
set( COMMON_SRCS
${LIB_KICAD_SRCS}
${COMMON_ABOUT_DLG_SRCS}
${COMMON_DLG_SRCS}
${COMMON_WIDGET_SRCS}
${COMMON_DRAWING_SHEET_SRCS}
${COMMON_PREVIEW_ITEMS_SRCS}
${PLOTTERS_CONTROL_SRCS}
${COMMON_IO_SRCS}
${FONT_SRCS}
${COMMON_IMPORT_GFX_SRCS}
${COMMON_TRANSLINE_CALCULATION_SRCS}
base_screen.cpp
bin_mod.cpp
bitmap_base.cpp
board_printout.cpp
clipboard.cpp
commit.cpp
draw_panel_gal.cpp
gal_display_options_common.cpp
gr_text.cpp
eda_base_frame.cpp
eda_dde.cpp
eda_draw_frame.cpp
eda_group.cpp
eda_item.cpp
eda_shape.cpp
eda_text.cpp
executable_names.cpp
filename_resolver.cpp
file_history.cpp
filter_reader.cpp
footprint_filter.cpp
footprint_info.cpp
gbr_metadata.cpp
gr_basic.cpp
hotkey_store.cpp
hotkeys_basic.cpp
inspectable.cpp
kiface_base.cpp
kiway_player.cpp
lib_table_grid_tricks.cpp
lib_table_notebook_panel.cpp
lib_tree_model.cpp
lib_tree_model_adapter.cpp
design_block_tree_model_adapter.cpp
marker_base.cpp
origin_transforms.cpp
pin_numbers.cpp
printout.cpp
ptree.cpp
rc_item.cpp
refdes_utils.cpp
reference_image.cpp
render_settings.cpp
status_popup.cpp
stroke_params.cpp
template_fieldnames.cpp
textentry_tricks.cpp
undo_redo_container.cpp
validators.cpp
drawing_sheet/ds_painter.cpp
view/wx_view_controls.cpp
)
set( COMMON_SRCS
${COMMON_SRCS}
origin_viewitem.cpp
tool/action_manager.cpp
tool/action_menu.cpp
tool/action_toolbar.cpp
tool/actions.cpp
tool/common_control.cpp
tool/construction_manager.cpp
tool/common_tools.cpp
tool/conditional_menu.cpp
tool/design_block_control.cpp
tool/edit_constraints.cpp
tool/edit_points.cpp
tool/editor_conditions.cpp
tool/embed_tool.cpp
tool/grid_helper.cpp
tool/grid_menu.cpp
tool/group_tool.cpp
tool/library_editor_control.cpp
tool/picker_tool.cpp
tool/point_editor_behavior.cpp
tool/properties_tool.cpp
tool/selection.cpp
tool/selection_tool.cpp
tool/selection_conditions.cpp
tool/tool_action.cpp
tool/tool_base.cpp
tool/tool_dispatcher.cpp
tool/tool_event.cpp
tool/tools_holder.cpp
tool/tool_interactive.cpp
tool/tool_manager.cpp
tool/tool_menu.cpp
tool/zoom_menu.cpp
tool/zoom_tool.cpp
settings/cvpcb_settings.cpp
properties/color4d_variant.cpp
properties/eda_angle_variant.cpp
properties/pg_cell_renderer.cpp
properties/pg_editors.cpp
properties/pg_properties.cpp
properties/property_mgr.cpp
properties/std_optional_variants.cpp
database/database_connection.cpp
http_lib/http_lib_connection.cpp
http_lib/http_lib_settings.cpp
api/api_enums.cpp
)
# This needs to be in the common library until draw_panel_gal is moved to kicommon
if( UNIX AND NOT APPLE )
list( APPEND COMMON_SRCS
spacenav/spnav_2d_plugin.cpp
)
endif()
if( KICAD_IPC_API )
set( COMMON_SRCS
${COMMON_SRCS}
api/api_handler_common.cpp
api/api_handler_editor.cpp
)
endif()
add_library( common STATIC
${COMMON_SRCS}
$<TARGET_OBJECTS:netlist_reader_obj>
)
if( KICAD_USE_PCH )
target_precompile_headers( common
PRIVATE
<kicommon.h>
<algorithm>
<map>
<memory>
<optional>
<set>
<string>
<vector>
<clipper2/clipper.h>
<eda_draw_frame.h>
<kiid.h>
<pgm_base.h>
<wx/wx.h>
)
endif()
add_dependencies( common version_header )
if( TARGET remote_provider_schema_build_copy )
add_dependencies( common remote_provider_schema_build_copy )
endif()
add_dependencies( common compoundfilereader ) # used by altium_parser.cpp
target_link_libraries( common
libcontext
kimath
kiplatform
kicommon
core
fmt::fmt
gal
nanosvg
dxflib_qcad
tinyspline_lib
scripting
nlohmann_json
pybind11::embed
compoundfilereader
Boost::headers
# Database support needs these two
nanodbc # for now; maybe hoist out of common
Boost::locale
${wxWidgets_LIBRARIES}
${EXTRA_LIBS}
# outline font support
${FREETYPE_LIBRARIES}
${HarfBuzz_LIBRARIES}
${Fontconfig_LIBRARIES}
)
if( KICAD_USE_SENTRY )
target_link_libraries( common
sentry )
endif()
if( KICAD_IPC_API )
target_link_libraries( common
kinng
)
endif()
target_include_directories( common
PUBLIC
.
${CMAKE_BINARY_DIR}
$<TARGET_PROPERTY:argparse::argparse,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:kiapi,INTERFACE_INCLUDE_DIRECTORIES>
)
# text markup support
add_dependencies( common pegtl )
target_include_directories( common PUBLIC
$<TARGET_PROPERTY:pegtl,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:magic_enum,INTERFACE_INCLUDE_DIRECTORIES>
)
target_include_directories( common SYSTEM PUBLIC
$<TARGET_PROPERTY:nanodbc,INTERFACE_INCLUDE_DIRECTORIES>
)
set( PCB_COMMON_SRCS
hash_eda.cpp
${CMAKE_SOURCE_DIR}/pcbnew/pcb_base_frame.cpp
${CMAKE_SOURCE_DIR}/pcbnew/pcbexpr_evaluator.cpp
${CMAKE_SOURCE_DIR}/pcbnew/pcbexpr_functions.cpp
${CMAKE_SOURCE_DIR}/pcbnew/board_commit.cpp
${CMAKE_SOURCE_DIR}/pcbnew/board_connected_item.cpp
${CMAKE_SOURCE_DIR}/pcbnew/board_design_settings.cpp
${CMAKE_SOURCE_DIR}/pcbnew/teardrop/teardrop_parameters.cpp #needed by board_design_settings.cpp
${CMAKE_SOURCE_DIR}/pcbnew/router/pns_meander.cpp #needed by board_design_settings.cpp
${CMAKE_SOURCE_DIR}/pcbnew/board.cpp
${CMAKE_SOURCE_DIR}/pcbnew/component_classes/component_class.cpp
${CMAKE_SOURCE_DIR}/pcbnew/component_classes/component_class_assignment_rule.cpp
${CMAKE_SOURCE_DIR}/pcbnew/component_classes/component_class_cache_proxy.cpp
${CMAKE_SOURCE_DIR}/pcbnew/component_classes/component_class_manager.cpp
${CMAKE_SOURCE_DIR}/pcbnew/board_item.cpp
${CMAKE_SOURCE_DIR}/pcbnew/pcb_barcode.cpp
${CMAKE_SOURCE_DIR}/pcbnew/pcb_dimension.cpp
${CMAKE_SOURCE_DIR}/pcbnew/pcb_shape.cpp
${CMAKE_SOURCE_DIR}/pcbnew/pcb_group.cpp
${CMAKE_SOURCE_DIR}/pcbnew/pcb_marker.cpp
${CMAKE_SOURCE_DIR}/pcbnew/footprint.cpp
${CMAKE_SOURCE_DIR}/pcbnew/footprint_library_adapter.cpp
${CMAKE_SOURCE_DIR}/pcbnew/fix_board_shape.cpp
${CMAKE_SOURCE_DIR}/pcbnew/layer_utils.cpp
${CMAKE_SOURCE_DIR}/pcbnew/netinfo_item.cpp
${CMAKE_SOURCE_DIR}/pcbnew/netinfo_list.cpp
${CMAKE_SOURCE_DIR}/pcbnew/pad.cpp
${CMAKE_SOURCE_DIR}/pcbnew/pad_utils.cpp
${CMAKE_SOURCE_DIR}/pcbnew/padstack.cpp
${CMAKE_SOURCE_DIR}/pcbnew/pcb_point.cpp
${CMAKE_SOURCE_DIR}/pcbnew/pcb_target.cpp
${CMAKE_SOURCE_DIR}/pcbnew/pcb_reference_image.cpp
${CMAKE_SOURCE_DIR}/pcbnew/pcb_field.cpp
${CMAKE_SOURCE_DIR}/pcbnew/pcb_table.cpp
${CMAKE_SOURCE_DIR}/pcbnew/pcb_tablecell.cpp
${CMAKE_SOURCE_DIR}/pcbnew/pcb_text.cpp
${CMAKE_SOURCE_DIR}/pcbnew/pcb_textbox.cpp
${CMAKE_SOURCE_DIR}/pcbnew/project_pcb.cpp
${CMAKE_SOURCE_DIR}/pcbnew/board_stackup_manager/board_stackup.cpp
${CMAKE_SOURCE_DIR}/pcbnew/pcb_track.cpp
${CMAKE_SOURCE_DIR}/pcbnew/pcb_generator.cpp
${CMAKE_SOURCE_DIR}/pcbnew/zone.cpp
${CMAKE_SOURCE_DIR}/pcbnew/zone_utils.cpp
${CMAKE_SOURCE_DIR}/pcbnew/collectors.cpp
${CMAKE_SOURCE_DIR}/pcbnew/connectivity/connectivity_algo.cpp
${CMAKE_SOURCE_DIR}/pcbnew/connectivity/connectivity_items.cpp
${CMAKE_SOURCE_DIR}/pcbnew/connectivity/connectivity_data.cpp
${CMAKE_SOURCE_DIR}/pcbnew/connectivity/from_to_cache.cpp
${CMAKE_SOURCE_DIR}/pcbnew/convert_shape_list_to_polygon.cpp
${CMAKE_SOURCE_DIR}/pcbnew/drc/drc_engine.cpp
${CMAKE_SOURCE_DIR}/pcbnew/drc/drc_cache_generator.cpp
${CMAKE_SOURCE_DIR}/pcbnew/drc/drc_item.cpp
${CMAKE_SOURCE_DIR}/pcbnew/drc/drc_rule.cpp
${CMAKE_SOURCE_DIR}/pcbnew/drc/drc_rule_condition.cpp
${CMAKE_SOURCE_DIR}/pcbnew/drc/drc_rule_parser.cpp
${CMAKE_SOURCE_DIR}/pcbnew/drc/drc_test_provider.cpp
${CMAKE_SOURCE_DIR}/pcbnew/footprint_editor_settings.cpp
${CMAKE_SOURCE_DIR}/pcbnew/generators_mgr.cpp
${CMAKE_SOURCE_DIR}/pcbnew/kicad_clipboard.cpp
${CMAKE_SOURCE_DIR}/pcbnew/netlist_reader/kicad_netlist_reader.cpp
${CMAKE_SOURCE_DIR}/pcbnew/netlist_reader/legacy_netlist_reader.cpp
${CMAKE_SOURCE_DIR}/pcbnew/netlist_reader/netlist_reader.cpp
${CMAKE_SOURCE_DIR}/pcbnew/pcb_draw_panel_gal.cpp
${CMAKE_SOURCE_DIR}/pcbnew/netlist_reader/pcb_netlist.cpp
${CMAKE_SOURCE_DIR}/pcbnew/pcb_origin_transforms.cpp
${CMAKE_SOURCE_DIR}/pcbnew/pcb_painter.cpp
${CMAKE_SOURCE_DIR}/pcbnew/pcb_plot_params.cpp
${CMAKE_SOURCE_DIR}/pcbnew/pcb_screen.cpp
${CMAKE_SOURCE_DIR}/pcbnew/pcb_view.cpp
${CMAKE_SOURCE_DIR}/pcbnew/pcbnew_settings.cpp
${CMAKE_SOURCE_DIR}/pcbnew/ratsnest/ratsnest_data.cpp
${CMAKE_SOURCE_DIR}/pcbnew/ratsnest/ratsnest_view_item.cpp
${CMAKE_SOURCE_DIR}/pcbnew/sel_layer.cpp
${CMAKE_SOURCE_DIR}/pcbnew/teardrop/teardrop.cpp
${CMAKE_SOURCE_DIR}/pcbnew/teardrop/teardrop_parameters.cpp
${CMAKE_SOURCE_DIR}/pcbnew/teardrop/teardrop_utils.cpp
${CMAKE_SOURCE_DIR}/pcbnew/zone_settings.cpp
${CMAKE_SOURCE_DIR}/pcbnew/pcb_board_outline.cpp
# IO files
${CMAKE_SOURCE_DIR}/pcbnew/pcb_io/pcb_io.cpp
${CMAKE_SOURCE_DIR}/pcbnew/pcb_io/pcb_io_mgr.cpp
${CMAKE_SOURCE_DIR}/pcbnew/pcb_io/kicad_legacy/pcb_io_kicad_legacy.cpp
${CMAKE_SOURCE_DIR}/pcbnew/pcb_io/kicad_sexpr/pcb_io_kicad_sexpr.cpp
${CMAKE_SOURCE_DIR}/pcbnew/pcb_io/kicad_sexpr/pcb_io_kicad_sexpr_parser.cpp
${CMAKE_SOURCE_DIR}/pcbnew/pcb_io/eagle/pcb_io_eagle.cpp
${CMAKE_SOURCE_DIR}/pcbnew/pcb_io/geda/pcb_io_geda.cpp
${CMAKE_SOURCE_DIR}/pcbnew/tools/pcb_grid_helper.cpp
${CMAKE_SOURCE_DIR}/pcbnew/tools/pcb_actions.cpp
${CMAKE_SOURCE_DIR}/pcbnew/tools/pcb_editor_conditions.cpp
${CMAKE_SOURCE_DIR}/pcbnew/tools/pcb_viewer_tools.cpp
${CMAKE_SOURCE_DIR}/pcbnew/length_delay_calculation/length_delay_calculation.cpp
${CMAKE_SOURCE_DIR}/pcbnew/length_delay_calculation/length_delay_calculation_item.cpp
${CMAKE_SOURCE_DIR}/pcbnew/length_delay_calculation/tuning_profile_parameters_user_defined.cpp
widgets/net_selector.cpp
widgets/netclass_selector.cpp
widgets/area_selector.cpp
)
set( PCB_COMMON_SRCS
${PCB_COMMON_SRCS}
${CMAKE_SOURCE_DIR}/pcbnew/api/api_pcb_enums.cpp
${CMAKE_SOURCE_DIR}/pcbnew/api/api_pcb_utils.cpp
)
add_library( pcbcommon STATIC ${PCB_COMMON_SRCS} )
if( KICAD_USE_PCH )
target_precompile_headers( pcbcommon
PRIVATE
<vector>
<map>
<memory>
<unordered_map>
<board.h>
<footprint.h>
<zone.h>
<connectivity/connectivity_data.h>
<drc/drc_engine.h> )
endif()
target_compile_definitions(pcbcommon PRIVATE PCBNEW)
target_include_directories( pcbcommon PRIVATE
)
target_link_libraries( pcbcommon PUBLIC
core
common
delaunator
kimath
kiplatform
nanoflann
zint
)
if( APPLE OR NOT UNIX )
# On Windows/MacOS, the SpaceMouse support is provided by the navlib subdirectory
message( STATUS "Including 3Dconnexion SpaceMouse navigation support in pcbcommon" )
add_subdirectory( ../pcbnew/navlib ./navlib)
target_link_libraries( pcbcommon PUBLIC pcbnew_navlib)
endif()
add_dependencies( pcbcommon delaunator )
# The lemon grammar for the numeric evaluator
generate_lemon_grammar(
kicommon
libeval
libeval/numeric_evaluator.cpp
libeval/grammar.lemon
)
# The lemon grammar for the expression compiler
generate_lemon_grammar(
kicommon
libeval_compiler
libeval_compiler/libeval_compiler.cpp
libeval_compiler/grammar.lemon
)
generate_lemon_grammar(
kicommon
text_eval
text_eval/text_eval_wrapper.cpp
text_eval/text_eval.lemon
)
# auto-generate stroke_params_lexer.h and stroke_params_keywords.cpp
# Called twice one for common and one for gal, to ensure the files are created
# on all devel tools ( Linux and msys2 )
# works on Linux:
make_lexer_export(
kicommon
stroke_params.keywords
stroke_params_lexer.h
stroke_params_keywords.cpp
STROKEPARAMS_T
KICOMMON_API
kicommon.h
)
# auto-generate netlist_lexer.h and netlist_keywords.cpp
make_lexer_export(
kicommon
netlist.keywords
netlist_lexer.h
netlist_keywords.cpp
NL_T
KICOMMON_API
kicommon.h
)
# auto-generate pcb_plot_params_lexer.h and pcb_plot_params_keywords.cpp
make_lexer(
pcbcommon
pcb_plot_params.keywords
pcb_plot_params_lexer.h
pcb_plot_params_keywords.cpp
PCBPLOTPARAMS_T
)
# auto-generate drc_rules_lexer.h and drc_rules_keywords.cpp
make_lexer_export(
kicommon
drc_rules.keywords
drc_rules_lexer.h
drc_rules_keywords.cpp
DRCRULE_T
KICOMMON_API
kicommon.h
)
# auto-generate pcbnew_sexpr.h and pcbnew_sexpr.cpp
make_lexer(
pcbcommon
pcb.keywords
pcb_lexer.h
pcb_keywords.cpp
PCB_KEYS_T
)
# auto-generate s-expression library table code.
make_lexer_export(
kicommon
lib_table.keywords
lib_table_lexer.h
lib_table_keywords.cpp
LIB_TABLE_T
KICOMMON_API
kicommon.h
)
# auto-generate s-expression template fieldnames lexer and keywords.
make_lexer_export(
kicommon
template_fieldnames.keywords
template_fieldnames_lexer.h
template_fieldnames_keywords.cpp
TFIELD_T
KICOMMON_API
kicommon.h
)
# auto-generate page layout reader s-expression page_layout_reader_lexer.h
# and title_block_reader_keywords.cpp.
make_lexer_export(
kicommon
drawing_sheet/drawing_sheet.keywords
drawing_sheet/drawing_sheet_lexer.h
drawing_sheet/drawing_sheet_keywords.cpp
DRAWINGSHEET_T
KICOMMON_API
kicommon.h
)
# auto-generate embedded files lexer and keywords
make_lexer_export(
kicommon
embedded_files.keywords
embedded_files_lexer.h
embedded_files_keywords.cpp
EMBEDDED_FILES_T
KICOMMON_API
kicommon.h
)
# This one gets made only when testing.
# to build it, first enable #define STAND_ALONE at top of dsnlexer.cpp
add_executable( dsntest EXCLUDE_FROM_ALL dsnlexer.cpp )
target_link_libraries( dsntest common ${wxWidgets_LIBRARIES} rt )