1PKG_CONFIG ?= pkg-config
2BUILDDIR    = build
3PROGS       = $(addprefix $(BUILDDIR)/horizon-,imp eda)
4
5all: $(PROGS)
6pymodule: $(BUILDDIR)/horizon.so
7
8.PHONY: all pymodule install install-man
9
10SRC_COMMON = \
11	src/util/uuid.cpp \
12	src/util/uuid_path.cpp\
13	src/util/sqlite.cpp\
14	src/util/str_util.cpp\
15	src/pool/pool_manager.cpp \
16	src/pool/unit.cpp \
17	src/pool/symbol.cpp \
18	src/pool/part.cpp\
19	src/common/common.cpp \
20	src/common/junction.cpp \
21	src/common/junction_util.cpp \
22	src/common/line.cpp \
23	src/common/arc.cpp \
24	src/common/layer_provider.cpp \
25	src/pool/gate.cpp\
26	src/block/net.cpp\
27	src/block/bus.cpp\
28	src/block/block.cpp\
29	src/pool/entity.cpp\
30	src/block/component.cpp\
31	src/block/bom.cpp\
32	src/block/bom_export_settings.cpp\
33	src/schematic/schematic.cpp\
34	src/schematic/sheet.cpp\
35	src/common/text.cpp\
36	src/schematic/schematic_junction.cpp\
37	src/schematic/line_net.cpp\
38	src/schematic/net_label.cpp\
39	src/schematic/bus_label.cpp\
40	src/schematic/bus_ripper.cpp\
41	src/schematic/schematic_symbol.cpp\
42	src/schematic/power_symbol.cpp\
43	src/schematic/schematic_rules.cpp\
44	src/schematic/rule_single_pin_net.cpp\
45	src/common/pdf_export_settings.cpp\
46	src/pool/padstack.cpp\
47	src/common/polygon.cpp\
48	src/common/hole.cpp\
49	src/common/shape.cpp\
50	src/common/patch_type_names.cpp\
51	src/pool/package.cpp\
52	src/package/pad.cpp\
53	src/package/package_rules.cpp\
54	src/package/rule_package_checks.cpp\
55	src/package/rule_clearance_package.cpp\
56	src/board/board.cpp\
57	src/board/board_package.cpp\
58	src/board/track.cpp\
59	src/board/airwire.cpp\
60	src/board/via.cpp\
61	src/board/plane.cpp\
62	src/board/board_rules.cpp\
63	src/board/rule_hole_size.cpp\
64	src/board/rule_clearance_silk_exp_copper.cpp\
65	src/board/rule_track_width.cpp\
66	src/board/rule_clearance_copper.cpp\
67	src/board/rule_parameters.cpp\
68	src/board/rule_via.cpp\
69	src/board/rule_clearance_copper_other.cpp\
70	src/board/rule_plane.cpp\
71	src/board/rule_diffpair.cpp\
72	src/board/rule_preflight_checks.cpp\
73	src/board/rule_clearance_copper_keepout.cpp\
74	src/board/rule_layer_pair.cpp\
75	src/board/rule_clearance_same_net.cpp\
76	3rd_party/delaunator/delaunator.cpp\
77	src/board/airwires.cpp\
78	src/board/fab_output_settings.cpp\
79	src/board/board_hole.cpp\
80	src/board/connection_line.cpp\
81	src/board/step_export_settings.cpp\
82	src/board/pnp_export_settings.cpp\
83	src/board/pnp.cpp\
84	src/board/board_decal.cpp\
85	src/pool/pool.cpp \
86	src/pool/ipool.cpp \
87	src/pool/pool_info.cpp \
88	src/util/placement.cpp\
89	src/util/util.cpp\
90	src/util/geom_util.cpp\
91	src/util/csv.cpp\
92	src/common/object_descr.cpp\
93	src/block/net_class.cpp\
94	src/project/project.cpp\
95	src/util/version.cpp\
96	src/rules/rules.cpp\
97	src/rules/rule.cpp\
98	src/rules/rule_descr.cpp\
99	src/rules/rule_match.cpp\
100	src/rules/rule_match_keepout.cpp\
101	src/rules/rules_import_export.cpp\
102	src/parameter/program.cpp\
103	src/parameter/set.cpp\
104	3rd_party/clipper/clipper.cpp\
105	src/common/dimension.cpp\
106	src/logger/logger.cpp\
107	src/parameter/program_polygon.cpp\
108	src/frame/frame.cpp\
109	src/common/keepout.cpp\
110	src/board/board_layers.cpp\
111	src/pool/pool_parametric.cpp \
112	src/board/included_board.cpp \
113	src/board/board_panel.cpp \
114	src/common/picture.cpp\
115	src/util/picture_data.cpp\
116	src/util/picture_load.cpp\
117	src/pool/decal.cpp\
118	src/symbol/symbol_rules.cpp\
119	src/symbol/rule_symbol_checks.cpp\
120	src/util/file_version.cpp\
121	src/pool/project_pool.cpp\
122	src/util/fs_util.cpp\
123	src/common/grid_settings.cpp\
124
125
126ifeq ($(OS),Windows_NT)
127    SRC_COMMON += src/util/uuid_win32.cpp
128endif
129SRC_COMMON_GEN += $(GENDIR)/resources.cpp
130SRC_COMMON_GEN += $(GENDIR)/version_gen.cpp
131SRC_COMMON_GEN += $(GENDIR)/help_texts.cpp
132
133SRC_POOL_UPDATE = \
134	src/pool-update/pool-update.cpp\
135	src/pool-update/pool-update_parametric.cpp\
136	src/pool-update/pool-update_pool.cpp\
137	src/pool-update/pool_updater.cpp\
138	src/pool-update/pool_updater_frame.cpp\
139	src/pool-update/pool_updater_decal.cpp\
140	src/pool-update/pool_updater_unit.cpp\
141	src/pool-update/pool_updater_entity.cpp\
142	src/pool-update/pool_updater_padstack.cpp\
143	src/pool-update/pool_updater_package.cpp\
144	src/pool-update/pool_updater_part.cpp\
145	src/pool-update/pool_updater_symbol.cpp\
146	src/pool-update/graph.cpp\
147
148SRC_CANVAS = \
149	src/canvas/canvas.cpp \
150	src/canvas/canvas_gl.cpp \
151	src/canvas/grid.cpp \
152	src/canvas/gl_util.cpp \
153	src/canvas/pan.cpp \
154	src/canvas/render.cpp \
155	src/canvas/draw.cpp \
156	src/canvas/text.cpp \
157	src/canvas/hershey_fonts.cpp \
158	src/canvas/drag_selection.cpp \
159	src/canvas/selectables.cpp \
160	src/canvas/selectables_renderer.cpp \
161	src/canvas/hover_prelight.cpp\
162	src/canvas/triangle_renderer.cpp\
163	src/canvas/image.cpp\
164	src/canvas/selection_filter.cpp\
165	3rd_party/polypartition/polypartition.cpp\
166	src/canvas/marker.cpp\
167	src/canvas/annotation.cpp \
168	src/canvas/fragment_cache.cpp \
169	src/util/text_data.cpp \
170	3rd_party/poly2tri/common/shapes.cpp\
171	3rd_party/poly2tri/sweep/cdt.cpp\
172	3rd_party/poly2tri/sweep/sweep.cpp\
173	3rd_party/poly2tri/sweep/sweep_context.cpp\
174	3rd_party/poly2tri/sweep/advancing_front.cpp\
175	src/util/msd.cpp\
176	src/util/msd_animator.cpp\
177	src/canvas/appearance.cpp\
178	src/canvas/bitmap_font_util.cpp\
179	src/canvas/picture_renderer.cpp\
180	src/util/polygon_arc_removal_proxy.cpp\
181	src/util/warp_cursor.cpp\
182
183SRC_IMP = \
184	src/imp/imp_main.cpp \
185	src/imp/main_window.cpp \
186	src/imp/imp.cpp \
187	src/imp/imp_search.cpp \
188	src/imp/imp_key.cpp \
189	src/imp/imp_hud.cpp \
190	src/imp/imp_action.cpp \
191	src/imp/imp_layer.cpp\
192	src/imp/imp_symbol.cpp\
193	src/imp/imp_schematic.cpp\
194	src/imp/imp_padstack.cpp\
195	src/imp/imp_package.cpp\
196	src/imp/3d/imp_package_3d.cpp\
197	src/imp/3d/model_editor.cpp\
198	src/imp/3d/place_model_box.cpp\
199	src/imp/imp_board.cpp\
200	src/imp/imp_frame.cpp\
201	src/imp/imp_decal.cpp\
202	src/imp/tool_popover.cpp\
203	src/imp/selection_filter_dialog.cpp\
204	src/imp/action.cpp\
205	src/imp/action_catalog.cpp\
206	src/imp/in_tool_action_catalog.cpp\
207	src/imp/clipboard_handler.cpp\
208	$(SRC_CANVAS) \
209	src/document/document.cpp \
210	src/document/document_board.cpp \
211	src/core/core.cpp \
212	src/core/tool.cpp \
213	src/core/create_tool.cpp \
214	src/core/core_properties.cpp\
215	src/core/tools/tool_move.cpp\
216	src/core/tools/tool_place_junction.cpp\
217	src/core/tools/tool_place_junction_schematic.cpp\
218	src/core/tools/tool_draw_line.cpp\
219	src/core/tools/tool_delete.cpp\
220	src/core/tools/tool_draw_arc.cpp\
221	src/core/tools/tool_map_pin.cpp\
222	src/core/tools/tool_map_symbol.cpp\
223	src/core/tools/tool_draw_line_net.cpp\
224	src/core/tools/tool_place_text.cpp\
225	src/core/tools/tool_place_net_label.cpp\
226	src/core/tools/tool_disconnect.cpp\
227	src/core/tools/tool_bend_line_net.cpp\
228	src/core/tools/tool_move_net_segment.cpp\
229	src/core/tools/tool_place_power_symbol.cpp\
230	src/core/tools/tool_edit_symbol_pin_names.cpp\
231	src/core/tools/tool_place_bus_label.cpp\
232	src/core/tools/tool_place_bus_ripper.cpp\
233	src/core/tools/tool_manage_buses.cpp\
234	src/core/tools/tool_draw_polygon.cpp\
235	src/core/tools/tool_draw_plane.cpp\
236	src/core/tools/tool_enter_datum.cpp\
237	src/core/tools/tool_place_hole.cpp\
238	src/core/tools/tool_place_pad.cpp\
239	src/core/tools/tool_paste.cpp\
240	src/core/tools/tool_assign_part.cpp\
241	src/core/tools/tool_map_package.cpp\
242	src/core/tools/tool_draw_track.cpp\
243	src/core/tools/tool_place_via.cpp\
244	src/core/tools/tool_drag_keep_slope.cpp\
245	src/core/tools/tool_add_part.cpp\
246	src/core/tools/tool_smash.cpp\
247	src/core/tools/tool_place_shape.cpp\
248	src/core/tools/tool_edit_shape.cpp\
249	src/core/tools/tool_import_dxf.cpp\
250	src/core/tools/tool_edit_pad_parameter_set.cpp\
251	src/core/tools/tool_draw_polygon_rectangle.cpp\
252	src/core/tools/tool_draw_line_rectangle.cpp\
253	src/core/tools/tool_edit_line_rectangle.cpp\
254	src/core/tools/tool_draw_line_circle.cpp\
255	src/core/tools/tool_helper_map_symbol.cpp\
256	src/core/tools/tool_helper_move.cpp\
257	src/core/tools/tool_helper_merge.cpp\
258	src/core/tools/tool_helper_collect_nets.cpp\
259	src/core/tools/tool_helper_plane.cpp\
260	src/core/tools/tool_edit_via.cpp\
261	src/core/tools/tool_rotate_arbitrary.cpp\
262	src/core/tools/tool_edit_plane.cpp\
263	src/core/tools/tool_update_all_planes.cpp\
264	src/core/tools/tool_draw_dimension.cpp\
265	src/core/tools/tool_set_diffpair.cpp\
266	src/core/tools/tool_set_via_net.cpp\
267	src/core/tools/tool_lock.cpp\
268	src/core/tools/tool_add_vertex.cpp\
269	src/core/tools/tool_place_board_hole.cpp\
270	src/core/tools/tool_edit_board_hole.cpp\
271	src/core/tools/tool_generate_courtyard.cpp\
272	src/core/tools/tool_generate_silkscreen.cpp\
273	src/core/tools/tool_set_group.cpp\
274	src/core/tools/tool_copy_placement.cpp\
275	src/core/tools/tool_copy_tracks.cpp\
276	src/core/tools/tool_swap_nets.cpp\
277	src/core/tools/tool_line_loop_to_polygon.cpp\
278	src/core/tools/tool_change_unit.cpp\
279	src/core/tools/tool_helper_line_width_setting.cpp\
280	src/core/tools/tool_set_nc_all.cpp\
281	src/core/tools/tool_set_nc.cpp\
282	src/core/tools/tool_add_keepout.cpp\
283	src/core/tools/tool_helper_draw_net_setting.cpp\
284	src/core/tools/tool_helper_get_symbol.cpp\
285	src/core/tools/tool_change_symbol.cpp\
286	src/core/tools/tool_place_refdes_and_value.cpp\
287	src/core/tools/tool_helper_restrict.cpp\
288	src/core/tools/tool_draw_polygon_circle.cpp\
289	src/core/tools/tool_draw_connection_line.cpp\
290	src/core/tools/tool_backannotate_connection_lines.cpp\
291	src/core/tools/tool_import_kicad_package.cpp\
292	src/core/tools/tool_smash_silkscreen_graphics.cpp\
293	src/core/tools/tool_renumber_pads.cpp\
294	src/core/tools/tool_fix.cpp\
295	src/core/tools/tool_nopopulate.cpp\
296	src/core/tools/tool_polygon_to_line_loop.cpp\
297	src/core/tools/tool_place_board_panel.cpp\
298	src/core/tools/tool_smash_panel_outline.cpp\
299	src/core/tools/tool_smash_package_outline.cpp\
300	src/core/tools/tool_resize_symbol.cpp\
301	src/core/tools/tool_round_off_vertex.cpp\
302	src/core/tools/tool_swap_gates.cpp\
303	src/core/tools/tool_place_picture.cpp\
304	src/core/tools/tool_place_decal.cpp\
305	src/core/tools/tool_drag_polygon_edge.cpp\
306	src/core/tools/tool_measure.cpp\
307	src/core/tools/tool_edit_custom_value.cpp\
308	src/core/tools/tool_place_dot.cpp\
309	src/core/tools/tool_set_track_width.cpp\
310	src/core/tools/tool_settings_rectangle_mode.cpp\
311	src/document/documents.cpp\
312	src/core/clipboard/clipboard.cpp\
313	src/core/clipboard/clipboard_padstack.cpp\
314	src/core/clipboard/clipboard_package.cpp\
315	src/core/clipboard/clipboard_schematic.cpp\
316	src/core/clipboard/clipboard_board.cpp\
317	src/dialogs/map_pin.cpp\
318	src/dialogs/map_symbol.cpp\
319	src/dialogs/map_package.cpp\
320	src/dialogs/ask_net_merge.cpp\
321	src/dialogs/select_net.cpp\
322	src/dialogs/symbol_pin_names_window.cpp\
323	src/dialogs/manage_buses.cpp\
324	src/dialogs/ask_datum.cpp\
325	src/dialogs/ask_datum_string.cpp\
326	src/widgets/text_editor.cpp\
327	src/dialogs/dialogs.cpp\
328	src/dialogs/annotate.cpp\
329	src/dialogs/edit_shape.cpp\
330	src/dialogs/manage_net_classes.cpp\
331	src/dialogs/manage_power_nets.cpp\
332	src/dialogs/pad_parameter_set_window.cpp\
333	src/dialogs/edit_via.cpp\
334	src/dialogs/pool_browser_dialog.cpp\
335	src/dialogs/schematic_properties.cpp\
336	src/dialogs/edit_plane.cpp\
337	src/dialogs/edit_stackup.cpp\
338	src/dialogs/edit_board_hole.cpp\
339	src/dialogs/edit_frame.cpp\
340	src/dialogs/edit_keepout.cpp\
341	src/dialogs/select_group_tag.cpp\
342	src/dialogs/ask_datum_angle.cpp\
343	src/dialogs/tool_window.cpp\
344	src/dialogs/renumber_pads_window.cpp\
345	src/dialogs/generate_silkscreen_window.cpp\
346	src/dialogs/select_included_board.cpp\
347	src/dialogs/manage_included_boards.cpp\
348	src/dialogs/enter_datum_window.cpp\
349	src/dialogs/enter_datum_angle_window.cpp\
350	src/dialogs/enter_datum_scale_window.cpp\
351	src/dialogs/router_settings_window.cpp\
352	src/dialogs/edit_custom_value.cpp\
353	src/util/sort_controller.cpp\
354	src/core/core_symbol.cpp\
355	src/core/core_schematic.cpp\
356	src/core/core_padstack.cpp\
357	src/core/core_package.cpp\
358	src/core/core_board.cpp\
359	src/core/core_frame.cpp\
360	src/core/core_decal.cpp\
361	src/property_panels/property_panels.cpp\
362	src/property_panels/property_panel.cpp\
363	src/property_panels/property_editor.cpp\
364	src/widgets/warnings_box.cpp\
365	src/widgets/net_selector.cpp\
366	src/widgets/sheet_box.cpp \
367	src/widgets/net_button.cpp\
368	src/widgets/layer_box.cpp\
369	src/widgets/spin_button_dim.cpp\
370	src/widgets/cell_renderer_color_box.cpp\
371	src/widgets/net_class_button.cpp\
372	src/widgets/parameter_set_editor.cpp\
373	src/widgets/pool_browser.cpp\
374	src/widgets/pool_selector.cpp\
375	src/widgets/component_selector.cpp\
376	src/widgets/component_button.cpp\
377	src/widgets/preview_canvas.cpp\
378	src/widgets/about_dialog.cpp\
379	src/widgets/project_meta_editor.cpp\
380	src/export_pdf/canvas_pdf.cpp\
381	src/export_pdf/export_pdf.cpp\
382	src/export_pdf/export_pdf_board.cpp\
383	src/export_pdf/export_pdf_util.cpp\
384	src/imp/keyseq_dialog.cpp\
385	src/canvas/canvas_patch.cpp\
386	src/export_gerber/gerber_writer.cpp\
387	src/export_gerber/excellon_writer.cpp\
388	src/export_gerber/gerber_export.cpp\
389	src/export_gerber/canvas_gerber.cpp\
390	src/export_gerber/hash.cpp\
391	src/imp/footprint_generator/footprint_generator_window.cpp\
392	src/imp/footprint_generator/footprint_generator_base.cpp\
393	src/imp/footprint_generator/footprint_generator_dual.cpp\
394	src/imp/footprint_generator/footprint_generator_single.cpp\
395	src/imp/footprint_generator/footprint_generator_quad.cpp\
396	src/imp/footprint_generator/footprint_generator_grid.cpp\
397	src/imp/footprint_generator/svg_overlay.cpp\
398	src/imp/footprint_generator/footprint_generator_footag.cpp\
399	src/imp/footprint_generator/footag/display.cpp\
400	src/imp/imp_interface.cpp\
401	src/imp/parameter_window.cpp\
402	src/widgets/pool_browser_part.cpp\
403	src/widgets/pool_browser_entity.cpp\
404	src/widgets/pool_browser_padstack.cpp\
405	src/widgets/pool_browser_package.cpp\
406	src/widgets/pool_browser_padstack.cpp\
407	src/widgets/pool_browser_unit.cpp\
408	src/widgets/pool_browser_symbol.cpp\
409	src/widgets/pool_browser_frame.cpp\
410	src/widgets/pool_browser_decal.cpp\
411	src/widgets/pool_browser_stockinfo.cpp\
412	src/widgets/plane_editor.cpp\
413	src/widgets/title_block_values_editor.cpp\
414	3rd_party/dxflib/dl_dxf.cpp\
415	3rd_party/dxflib/dl_writer_ascii.cpp\
416	src/import_dxf/dxf_importer.cpp\
417	src/imp/rules/rules_window.cpp\
418	src/imp/rules/rule_editor.cpp\
419	src/imp/rules/rule_match_editor.cpp\
420	src/imp/rules/rule_match_keepout_editor.cpp\
421	src/imp/rules/rule_editor_hole_size.cpp\
422	src/imp/rules/rule_editor_clearance_silk_exp_copper.cpp\
423	src/imp/rules/rule_editor_track_width.cpp\
424	src/imp/rules/rule_editor_clearance_copper.cpp\
425	src/imp/rules/rule_editor_single_pin_net.cpp\
426	src/imp/rules/rule_editor_via.cpp\
427	src/imp/rules/rule_editor_clearance_copper_other.cpp\
428	src/imp/rules/rule_editor_plane.cpp\
429	src/imp/rules/rule_editor_diffpair.cpp\
430	src/imp/rules/rule_editor_package_checks.cpp\
431	src/imp/rules/rule_editor_clearance_copper_keepout.cpp\
432	src/imp/rules/rule_editor_layer_pair.cpp\
433	src/imp/rules/rule_editor_clearance_same_net.cpp\
434	src/imp/rules/import.cpp\
435	src/imp/rules/export.cpp\
436	src/widgets/location_entry.cpp\
437	src/rules/rules_with_core.cpp\
438	src/rules/cache.cpp\
439	src/board/board_rules_check.cpp\
440	src/board/board_rules_import.cpp\
441	src/schematic/schematic_rules_check.cpp\
442	src/package/package_rules_check.cpp\
443	src/symbol/symbol_rules_check.cpp\
444	src/board/plane_update.cpp\
445	src/imp/symbol_preview/symbol_preview_window.cpp\
446	src/imp/symbol_preview/symbol_preview_expand_window.cpp\
447	src/imp/symbol_preview/preview_box.cpp\
448	src/util/gtk_util.cpp\
449	src/imp/fab_output_window.cpp\
450	src/imp/bom_export_window.cpp\
451	src/imp/pdf_export_window.cpp\
452	src/imp/3d/3d_view.cpp\
453	src/imp/3d/axes_lollipop.cpp\
454	src/imp/step_export_window.cpp\
455	src/imp/tuning_window.cpp\
456	src/canvas3d/canvas_mesh.cpp\
457	src/canvas3d/canvas3d.cpp\
458	src/canvas3d/canvas3d_base.cpp\
459	src/canvas3d/cover_renderer.cpp\
460	src/canvas3d/wall_renderer.cpp\
461	src/canvas3d/face_renderer.cpp\
462	src/canvas3d/point_renderer.cpp\
463	src/canvas3d/background_renderer.cpp\
464	src/imp/header_button.cpp\
465	src/preferences/preferences.cpp\
466	src/canvas/canvas_pads.cpp\
467	src/util/window_state_store.cpp\
468	src/widgets/board_display_options.cpp\
469	src/widgets/log_window.cpp\
470	src/widgets/log_view.cpp\
471	src/util/selection_util.cpp\
472	src/util/pool_completion.cpp\
473	src/export_bom/export_bom.cpp\
474	src/widgets/unplaced_box.cpp\
475	src/widgets/tag_entry.cpp\
476	src/widgets/layer_help_box.cpp\
477	src/preferences/preferences_util.cpp\
478	src/preferences/preferences_provider.cpp\
479	src/widgets/spin_button_angle.cpp\
480	src/util/exception_util.cpp\
481	src/util/status_dispatcher.cpp\
482	src/util/export_file_chooser.cpp\
483	3rd_party/sexpr/sexpr_parser.cpp\
484	3rd_party/sexpr/sexpr.cpp\
485	src/util/kicad_package_parser.cpp\
486	src/widgets/pool_browser_button.cpp\
487	src/widgets/pool_browser_parametric.cpp\
488	src/util/stock_info_provider.cpp\
489	src/util/stock_info_provider_partinfo.cpp\
490	src/util/stock_info_provider_digikey.cpp\
491	src/util/http_client.cpp\
492	src/widgets/column_chooser.cpp\
493	src/util/csv_util.cpp\
494	src/imp/pnp_export_window.cpp\
495	src/export_pnp/export_pnp.cpp\
496	src/imp/airwire_filter_window.cpp\
497	src/imp/search/searcher.cpp\
498	src/imp/search/searcher_symbol.cpp\
499	src/imp/search/searcher_schematic.cpp\
500	src/imp/search/searcher_package.cpp\
501	src/imp/search/searcher_board.cpp\
502	src/util/clipper_util.cpp\
503	src/widgets/action_button.cpp\
504	src/util/picture_util.cpp\
505	src/imp/grid_controller.cpp\
506	src/imp/parts_window.cpp\
507	src/util/zmq_helper.cpp\
508	src/widgets/help_button.cpp\
509	src/util/keep_slope_util.cpp\
510	src/imp/view_angle_window.cpp\
511	src/imp/action_icon.cpp\
512  	src/util/automatic_prefs.cpp\
513	src/util/treeview_state_store.cpp\
514	src/widgets/layer_combo_box.cpp\
515	src/widgets/color_box.cpp\
516	src/imp/grids_window.cpp\
517	src/util/action_label.cpp\
518
519SRC_IMPC = \
520	3rd_party/footag/wiz.c\
521	3rd_party/footag/wiz_setref.c\
522	3rd_party/footag/hint.c\
523	3rd_party/footag/chip.c\
524	3rd_party/footag/chiparray.c\
525	3rd_party/footag/molded.c\
526	3rd_party/footag/capae.c\
527	3rd_party/footag/soic.c\
528	3rd_party/footag/sod.c\
529	3rd_party/footag/soj.c\
530	3rd_party/footag/qfp.c\
531	3rd_party/footag/son.c\
532	3rd_party/footag/qfn.c\
533	3rd_party/footag/pson.c\
534	3rd_party/footag/pqfn.c\
535	3rd_party/footag/bga.c\
536	3rd_party/footag/sot223.c\
537	3rd_party/footag/sot23.c\
538	3rd_party/footag/dip.c\
539	3rd_party/footag/sip.c\
540	3rd_party/footag/pga.c\
541	3rd_party/footag/ipc7351b/ipc7351b.c\
542	3rd_party/footag/ipc7351b/table.c\
543	3rd_party/footag/ipc7251draft1/ipc7251draft1.c\
544
545SRC_ROUTER = \
546	3rd_party/router/router/pns_router.cpp \
547	3rd_party/router/router/pns_item.cpp \
548	3rd_party/router/router/pns_node.cpp \
549	3rd_party/router/router/pns_solid.cpp \
550	3rd_party/router/router/pns_optimizer.cpp \
551	3rd_party/router/router/pns_topology.cpp \
552	3rd_party/router/router/pns_walkaround.cpp \
553	3rd_party/router/router/pns_utils.cpp \
554	3rd_party/router/router/pns_algo_base.cpp \
555	3rd_party/router/router/pns_diff_pair_placer.cpp \
556	3rd_party/router/router/pns_diff_pair.cpp \
557	3rd_party/router/router/pns_dp_meander_placer.cpp\
558	3rd_party/router/router/pns_dragger.cpp\
559	3rd_party/router/router/pns_itemset.cpp \
560	3rd_party/router/router/pns_line_placer.cpp \
561	3rd_party/router/router/pns_line.cpp \
562	3rd_party/router/router/pns_via.cpp \
563	3rd_party/router/router/pns_logger.cpp \
564	3rd_party/router/router/pns_meander_placer_base.cpp\
565	3rd_party/router/router/pns_meander_placer.cpp\
566	3rd_party/router/router/pns_meander_skew_placer.cpp\
567	3rd_party/router/router/pns_meander.cpp\
568	3rd_party/router/router/pns_shove.cpp \
569	3rd_party/router/router/pns_index.cpp \
570	3rd_party/router/router/time_limit.cpp \
571	3rd_party/router/router/pns_routing_settings.cpp \
572	3rd_party/router/router/pns_sizes_settings.cpp \
573	3rd_party/router/common/geometry/shape_line_chain.cpp\
574	3rd_party/router/common/geometry/shape_arc.cpp\
575	3rd_party/router/common/geometry/shape.cpp \
576	3rd_party/router/common/geometry/shape_collisions.cpp\
577	3rd_party/router/common/geometry/seg.cpp\
578	3rd_party/router/common/geometry/geometry_utils.cpp\
579	3rd_party/router/common/math/math_util.cpp\
580	3rd_party/router/wx_compat.cpp\
581	src/router/pns_horizon_iface.cpp\
582	src/core/tools/tool_route_track_interactive.cpp\
583
584
585SRC_POOL_UTIL = \
586	src/pool-util/util_main.cpp\
587	$(SRC_POOL_UPDATE)
588
589SRC_PRJ_UTIL = \
590	src/prj-util/util_main.cpp
591
592SRC_POOL_PRJ_MGR = \
593	src/pool-prj-mgr/pool-prj-mgr-main.cpp\
594	src/pool-prj-mgr/pool-prj-mgr-app.cpp\
595	src/pool-prj-mgr/pool-prj-mgr-app_win.cpp\
596	src/pool-prj-mgr/pool-prj-mgr-process.cpp\
597	src/pool-prj-mgr/pool-mgr/pool_notebook.cpp\
598	src/pool-prj-mgr/pool-mgr/pool_notebook_units.cpp\
599	src/pool-prj-mgr/pool-mgr/pool_notebook_symbols.cpp\
600	src/pool-prj-mgr/pool-mgr/pool_notebook_entities.cpp\
601	src/pool-prj-mgr/pool-mgr/pool_notebook_padstacks.cpp\
602	src/pool-prj-mgr/pool-mgr/pool_notebook_packages.cpp\
603	src/pool-prj-mgr/pool-mgr/pool_notebook_parts.cpp\
604	src/pool-prj-mgr/pool-mgr/pool_notebook_frames.cpp\
605	src/pool-prj-mgr/pool-mgr/pool_notebook_decals.cpp\
606	src/pool-prj-mgr/pool-mgr/pool_notebook_parametric.cpp\
607	src/pool-prj-mgr/pool-mgr/editors/unit_editor.cpp\
608	src/pool-prj-mgr/pool-mgr/editors/part_editor.cpp\
609	src/pool-prj-mgr/pool-mgr/editors/parametric.cpp\
610	src/pool-prj-mgr/pool-mgr/editors/entity_editor.cpp\
611	src/pool-prj-mgr/pool-mgr/editors/editor_window.cpp\
612	src/pool-prj-mgr/pool-mgr/create_part_dialog.cpp\
613	src/pool-prj-mgr/pool-mgr/part_wizard/part_wizard.cpp\
614	src/pool-prj-mgr/pool-mgr/part_wizard/pad_editor.cpp\
615	src/pool-prj-mgr/pool-mgr/part_wizard/gate_editor.cpp\
616	src/widgets/location_entry.cpp\
617	src/pool-prj-mgr/pool-mgr/duplicate/duplicate_unit.cpp\
618	src/pool-prj-mgr/pool-mgr/duplicate/duplicate_entity.cpp\
619	src/pool-prj-mgr/pool-mgr/duplicate/duplicate_part.cpp\
620	src/pool-prj-mgr/pool-mgr/duplicate/duplicate_window.cpp\
621	src/pool-prj-mgr/pool-mgr/pool_remote_box.cpp\
622	src/pool-prj-mgr/pool-mgr/pool_settings_box.cpp\
623	src/pool-prj-mgr/pool-mgr/pool_cache_box.cpp\
624	src/pool-prj-mgr/pool_update_error_dialog.cpp\
625	src/pool-prj-mgr/pool-mgr/pool_git_box.cpp\
626	src/pool-prj-mgr/forced_pool_update_dialog.cpp\
627	src/widgets/pool_browser.cpp\
628	src/widgets/pool_selector.cpp\
629	src/widgets/pool_browser_unit.cpp\
630	src/widgets/pool_browser_symbol.cpp\
631	src/widgets/pool_browser_entity.cpp\
632	src/widgets/pool_browser_padstack.cpp\
633	src/widgets/pool_browser_part.cpp\
634	src/widgets/pool_browser_package.cpp\
635	src/widgets/pool_browser_frame.cpp\
636	src/widgets/pool_browser_decal.cpp\
637	src/widgets/pool_browser_parametric.cpp\
638	src/dialogs/pool_browser_dialog.cpp\
639	src/widgets/pool_browser_stockinfo.cpp\
640	src/widgets/cell_renderer_color_box.cpp\
641	src/widgets/where_used_box.cpp\
642	src/widgets/project_meta_editor.cpp\
643	src/util/sort_controller.cpp\
644	src/util/editor_process.cpp\
645	$(SRC_CANVAS)\
646	$(SRC_POOL_UPDATE)\
647	src/util/gtk_util.cpp\
648	src/util/window_state_store.cpp\
649	src/util/http_client.cpp\
650	src/util/github_client.cpp\
651	src/widgets/recent_item_box.cpp\
652	src/util/recent_util.cpp\
653	src/widgets/part_preview.cpp\
654	src/widgets/entity_preview.cpp\
655	src/widgets/preview_canvas.cpp\
656	src/widgets/preview_base.cpp\
657	src/widgets/unit_preview.cpp\
658	src/widgets/symbol_preview.cpp\
659	src/util/pool_completion.cpp\
660	src/pool/pool_cache_status.cpp\
661	src/pool-prj-mgr/prj-mgr/prj-mgr_views.cpp\
662	src/pool-prj-mgr/prj-mgr/part_browser/part_browser_window.cpp\
663	src/pool-prj-mgr/close_utils.cpp\
664	src/pool-prj-mgr/prj-mgr/pool_cache_cleanup_dialog.cpp\
665	src/pool-prj-mgr/pool-mgr/view_create_pool.cpp\
666	src/preferences/preferences.cpp\
667	src/preferences/preferences_provider.cpp\
668	src/preferences/preferences_util.cpp\
669	src/pool-prj-mgr/preferences/preferences_window.cpp\
670	src/pool-prj-mgr/preferences/preferences_window_keys.cpp\
671	src/pool-prj-mgr/preferences/preferences_window_in_tool_keys.cpp\
672	src/pool-prj-mgr/preferences/preferences_window_canvas.cpp\
673	src/pool-prj-mgr/preferences/preferences_window_stock_info.cpp\
674	src/pool-prj-mgr/preferences/preferences_window_stock_info_partinfo.cpp\
675	src/pool-prj-mgr/preferences/preferences_window_stock_info_digikey.cpp\
676	src/pool-prj-mgr/preferences/digikey_auth_window.cpp\
677	src/pool-prj-mgr/preferences/preferences_window_misc.cpp\
678	src/pool-prj-mgr/preferences/action_editor.cpp\
679	src/imp/action.cpp\
680	src/imp/action_catalog.cpp\
681	src/imp/in_tool_action_catalog.cpp\
682	src/widgets/unit_info_box.cpp\
683	src/widgets/entity_info_box.cpp\
684	src/widgets/padstack_preview.cpp\
685	src/widgets/tag_entry.cpp\
686	src/widgets/about_dialog.cpp\
687	src/util/status_dispatcher.cpp\
688	src/util/exception_util.cpp\
689	src/widgets/package_info_box.cpp\
690	src/widgets/pool_browser_button.cpp\
691	src/pool-prj-mgr/welcome_window.cpp\
692	src/pool-prj-mgr/output_window.cpp\
693	src/pool-prj-mgr/autosave_recovery_dialog.cpp\
694	src/util/stock_info_provider.cpp\
695	src/util/stock_info_provider_partinfo.cpp\
696	src/util/stock_info_provider_digikey.cpp\
697	src/widgets/help_button.cpp\
698	src/pool-prj-mgr/pool-mgr/kicad_symbol_import_wizard/kicad_symbol_import_wizard.cpp\
699	src/pool-prj-mgr/pool-mgr/kicad_symbol_import_wizard/gate_editor.cpp\
700	src/util/kicad_lib_parser.cpp\
701	src/widgets/capture_dialog.cpp\
702	src/widgets/color_box.cpp\
703	src/checks/check_util.cpp\
704	src/checks/check_entity.cpp\
705	src/checks/check_unit.cpp\
706	src/checks/check_part.cpp\
707	src/checks/check_item.cpp\
708	src/symbol/symbol_rules_check.cpp\
709	src/package/package_rules_check.cpp\
710	src/canvas/canvas_patch.cpp\
711	src/util/clipper_util.cpp\
712	src/pool-prj-mgr/pool-mgr/check_column.cpp\
713	src/pool-prj-mgr/pool-mgr/github_login_window.cpp\
714	src/widgets/log_view.cpp\
715	src/widgets/log_window.cpp\
716	src/logger/log_dispatcher.cpp\
717	src/util/zmq_helper.cpp\
718	src/pool-prj-mgr/pool-mgr/import_kicad_package_window.cpp\
719	3rd_party/sexpr/sexpr_parser.cpp\
720	3rd_party/sexpr/sexpr.cpp\
721	src/util/kicad_package_parser.cpp\
722	src/util/automatic_prefs.cpp\
723	src/util/treeview_state_store.cpp\
724	src/util/paned_state_store.cpp\
725	src/pool-prj-mgr/pools_window/pools_window.cpp\
726	src/pool-prj-mgr/pools_window/pools_window_available.cpp\
727	src/pool-prj-mgr/pools_window/pool_index.cpp\
728	src/pool-prj-mgr/pools_window/pool_status_provider.cpp\
729	src/pool-prj-mgr/pools_window/pool_merge_box.cpp\
730	src/pool-prj-mgr/pools_window/pool_download_window.cpp\
731	src/pool-prj-mgr/pool-mgr/move_window.cpp\
732
733SRC_PGM_TEST = \
734	src/pgm-test/pgm-test.cpp
735
736SRC_GEN_PKG = \
737	src/gen-pkg/gen-pkg.cpp
738
739SRC_PR_REVIEW = \
740	src/pr-review/pr-review.cpp\
741	src/pr-review/canvas_cairo2.cpp\
742	$(SRC_POOL_UPDATE)\
743	src/canvas/canvas.cpp \
744	src/canvas/appearance.cpp \
745	src/canvas/render.cpp \
746	src/canvas/draw.cpp \
747	src/canvas/text.cpp \
748	src/canvas/hershey_fonts.cpp \
749	src/canvas/image.cpp\
750	src/canvas/selectables.cpp\
751	src/canvas/fragment_cache.cpp\
752	src/canvas/canvas_patch.cpp\
753	src/util/polygon_arc_removal_proxy.cpp\
754	src/util/text_data.cpp \
755	3rd_party/polypartition/polypartition.cpp\
756	3rd_party/poly2tri/common/shapes.cpp\
757	3rd_party/poly2tri/sweep/cdt.cpp\
758	3rd_party/poly2tri/sweep/sweep.cpp\
759	3rd_party/poly2tri/sweep/sweep_context.cpp\
760	3rd_party/poly2tri/sweep/advancing_front.cpp\
761	src/package/package_rules_check.cpp\
762	src/symbol/symbol_rules_check.cpp\
763	src/import_step/step_importer.cpp\
764	src/util/clipper_util.cpp\
765	src/checks/check_util.cpp\
766	src/checks/check_entity.cpp\
767	src/checks/check_unit.cpp\
768	src/checks/check_part.cpp\
769	src/checks/check_item.cpp\
770
771SRC_OCE = \
772	src/import_step/step_importer.cpp\
773	src/export_step/export_step.cpp\
774	src/imp/3d/imp_package_3d_occt.cpp\
775
776SRC_PYTHON = \
777	src/python_module/horizonmodule.cpp \
778	src/python_module/util.cpp \
779	src/python_module/schematic.cpp \
780	src/python_module/project.cpp \
781	src/python_module/board.cpp \
782	src/python_module/pool_manager.cpp \
783	src/python_module/pool.cpp \
784	src/python_module/3d_image_exporter.cpp \
785	src/python_module/version.cpp \
786
787SRC_OCE_EXPORT = \
788	src/export_step/export_step.cpp\
789	src/import_step/step_importer.cpp\
790
791SRC_ALL = $(sort $(SRC_COMMON) $(SRC_IMP) $(SRC_POOL_UTIL) $(SRC_PRJ_UTIL) $(SRC_PGM_TEST) $(SRC_POOL_PRJ_MGR) $(SRC_GEN_PKG) $(SRC_PR_REVIEW))
792
793INC = -Isrc -isystem 3rd_party -I$(BUILDDIR)/gen
794
795DEFINES = -D_USE_MATH_DEFINES -DGLM_ENABLE_EXPERIMENTAL
796
797LIBS_COMMON = sqlite3 libzip
798ifneq ($(OS),Windows_NT)
799	LIBS_COMMON += uuid
800endif
801LIBS_ALL = $(LIBS_COMMON) gtkmm-3.0 epoxy cairomm-pdf-1.0 librsvg-2.0 libzmq libgit2 libcurl glm libpng
802
803OPTIMIZE = -fdata-sections -ffunction-sections -O3
804DEBUGFLAGS = -g3
805WARNFLAGS = -Wall -Wshadow
806PKG_CONFIG_LIBS := $(shell $(PKG_CONFIG) --cflags $(LIBS_ALL))
807CXXFLAGS += $(DEBUGFLAGS) $(DEFINES) $(OPTIMIZE) $(PKG_CONFIG_LIBS) -MP -MD -pthread $(WARNFLAGS) -std=c++17
808CFLAGS = $(filter-out -Wsuggest-override, $(filter-out -std=%,$(CXXFLAGS))) -std=c99
809LDFLAGS += -lm -lpthread -lstdc++
810GLIB_COMPILE_RESOURCES := $(shell $(PKG_CONFIG) --variable=glib_compile_resources gio-2.0)
811
812ifeq ($(DEBUG),1)
813	CXXFLAGS += -DUUID_PTR_CHECK -DCONNECTION_CHECK
814endif
815
816
817ifeq ($(OS),Windows_NT)
818	LDFLAGS += -lrpcrt4
819	DEFINES += -DWIN32_UUID
820	LDFLAGS_GUI = -Wl,-subsystem,windows
821else
822	UNAME := $(shell uname)
823	ifeq ($(UNAME), FreeBSD)
824		CXXFLAGS += -D_LIBCPP_ENABLE_CXX17_REMOVED_AUTO_PTR
825	else
826		LDFLAGS += -lstdc++fs
827	endif
828	ifeq ($(UNAME), Darwin)
829		# do nothing on mac os
830	else
831		# allow ld.gold to be overriden by command line
832		GOLD = -fuse-ld=gold
833		LDFLAGS += $(GOLD)
834	endif
835endif
836
837SRC_SHARED_3D = \
838	src/export_3d_image/export_3d_image.cpp\
839	src/canvas3d/canvas3d_base.cpp\
840	src/canvas3d/canvas_mesh.cpp\
841	src/canvas3d/background_renderer.cpp\
842	src/canvas3d/wall_renderer.cpp\
843	src/canvas3d/cover_renderer.cpp\
844	src/canvas3d/face_renderer.cpp\
845	src/canvas3d/point_renderer.cpp\
846	src/canvas/gl_util.cpp\
847
848SRC_SHARED = $(SRC_COMMON) \
849	src/export_pdf/canvas_pdf.cpp \
850	src/export_pdf/export_pdf.cpp \
851	src/export_pdf/export_pdf_board.cpp \
852	src/export_pdf/export_pdf_util.cpp\
853	src/export_pnp/export_pnp.cpp \
854	src/canvas/canvas.cpp \
855	src/canvas/appearance.cpp \
856	src/canvas/render.cpp \
857	src/canvas/draw.cpp \
858	src/canvas/text.cpp \
859	src/canvas/hershey_fonts.cpp \
860	src/canvas/image.cpp\
861	src/canvas/selectables.cpp\
862	src/canvas/fragment_cache.cpp\
863	src/util/text_data.cpp \
864	src/util/polygon_arc_removal_proxy.cpp\
865	3rd_party/polypartition/polypartition.cpp\
866	3rd_party/poly2tri/common/shapes.cpp\
867	3rd_party/poly2tri/sweep/cdt.cpp\
868	3rd_party/poly2tri/sweep/sweep.cpp\
869	3rd_party/poly2tri/sweep/sweep_context.cpp\
870	3rd_party/poly2tri/sweep/advancing_front.cpp\
871	src/export_bom/export_bom.cpp\
872	src/export_gerber/gerber_writer.cpp\
873	src/export_gerber/excellon_writer.cpp\
874	src/export_gerber/gerber_export.cpp\
875	src/export_gerber/canvas_gerber.cpp\
876	src/export_gerber/hash.cpp\
877	src/board/plane_update.cpp\
878	src/canvas/canvas_pads.cpp\
879	src/canvas/canvas_patch.cpp\
880	src/util/csv_util.cpp\
881	src/util/clipper_util.cpp\
882	src/document/document.cpp \
883	src/document/document_board.cpp \
884	src/rules/cache.cpp \
885	src/board/board_rules_check.cpp \
886	$(SRC_POOL_UPDATE)\
887	$(SRC_SHARED_3D)
888
889SRC_SHARED_GEN = $(SRC_COMMON_GEN)
890
891OBJDIR           = $(BUILDDIR)/obj
892PICOBJDIR        = $(BUILDDIR)/picobj
893GENDIR           = $(BUILDDIR)/gen
894MKDIR            = mkdir -p
895QUIET            = @
896ECHO             = @echo
897
898# Object files
899OBJ_ALL          = $(addprefix $(OBJDIR)/,$(SRC_ALL:.cpp=.o))
900OBJ_ALL         += $(addprefix $(OBJDIR)/,$(SRC_IMPC:.c=.o))
901OBJ_ROUTER       = $(addprefix $(OBJDIR)/,$(SRC_ROUTER:.cpp=.o))
902OBJ_COMMON       = $(addprefix $(OBJDIR)/,$(SRC_COMMON:.cpp=.o))
903OBJ_COMMON      += $(addprefix $(OBJDIR)/,$(SRC_COMMON_GEN:.cpp=.o))
904OBJ_OCE          = $(addprefix $(OBJDIR)/,$(SRC_OCE:.cpp=.o))
905OBJ_PYTHON       = $(addprefix $(PICOBJDIR)/,$(SRC_PYTHON:.cpp=.o))
906OBJ_SHARED       = $(addprefix $(PICOBJDIR)/,$(SRC_SHARED:.cpp=.o))
907OBJ_SHARED      += $(addprefix $(PICOBJDIR)/,$(SRC_SHARED_GEN:.cpp=.o))
908OBJ_SHARED_OCE   = $(addprefix $(PICOBJDIR)/,$(SRC_OCE_EXPORT:.cpp=.o))
909OBJ_SHARED_3D    = $(addprefix $(PICOBJDIR)/,$(SRC_SHARED_3D:.cpp=.o))
910
911
912OBJ_IMP          = $(addprefix $(OBJDIR)/,$(SRC_IMP:.cpp=.o))
913OBJ_IMP         += $(addprefix $(OBJDIR)/,$(SRC_IMPC:.c=.o))
914OBJ_POOL_UTIL    = $(addprefix $(OBJDIR)/,$(SRC_POOL_UTIL:.cpp=.o))
915OBJ_PRJ_UTIL     = $(addprefix $(OBJDIR)/,$(SRC_PRJ_UTIL:.cpp=.o))
916OBJ_POOL_PRJ_MGR = $(addprefix $(OBJDIR)/,$(SRC_POOL_PRJ_MGR:.cpp=.o)) $(OBJ_RES)
917OBJ_PGM_TEST     = $(addprefix $(OBJDIR)/,$(SRC_PGM_TEST:.cpp=.o))
918OBJ_GEN_PKG      = $(addprefix $(OBJDIR)/,$(SRC_GEN_PKG:.cpp=.o))
919OBJ_PR_REVIEW    = $(addprefix $(OBJDIR)/,$(SRC_PR_REVIEW:.cpp=.o))
920
921
922
923INC_ROUTER = -I3rd_party/router/include/ -I3rd_party/router -isystem 3rd_party
924INC_OCE ?= -isystem /opt/opencascade/inc/ -isystem /mingw64/include/oce/ -isystem /usr/include/oce -isystem /usr/include/opencascade -isystem ${CASROOT}/include/opencascade -isystem ${CASROOT}/include/oce -isystem /usr/local/include/OpenCASCADE
925INC_PYTHON = $(shell $(PKG_CONFIG) --cflags python3 py3cairo)
926OCE_LIBDIRS = -L/opt/opencascade/lib/ -L${CASROOT}/lib
927LDFLAGS_OCE = $(OCE_LIBDIRS) -lTKSTEP  -lTKernel  -lTKXCAF -lTKXSBase -lTKBRep -lTKCDF -lTKXDESTEP -lTKLCAF -lTKMath -lTKMesh -lTKTopAlgo -lTKPrim -lTKBO -lTKShHealing -lTKBRep -lTKG3d
928ifeq ($(OS),Windows_NT)
929	LDFLAGS_OCE += -lTKV3d
930endif
931
932OBJ_RES =
933ifeq ($(OS),Windows_NT)
934	SRC_RES = src/horizon-pool-prj-mgr.rc
935	OBJ_RES = $(addprefix $(OBJDIR)/,$(SRC_RES:.rc=.res))
936endif
937
938PREFIX ?= /usr/local
939BINDIR = ${PREFIX}/bin/
940ICONDIR = ${PREFIX}/share/icons/hicolor/
941APPSDIR = ${PREFIX}/share/applications/
942METADIR = ${PREFIX}/share/metainfo/
943MANDIR = ${PREFIX}/share/man/man1
944INSTALL = /usr/bin/install
945
946src/preferences/color_presets.json: $(wildcard src/preferences/color_presets/*)
947	python3 scripts/make_color_presets.py $^ > $@
948
949$(BUILDDIR)/gen/resources.cpp: imp.gresource.xml $(shell $(GLIB_COMPILE_RESOURCES) --generate-dependencies imp.gresource.xml |  while read line; do echo "src/$$line"; done)
950	$(QUIET)$(MKDIR) $(dir $@)
951	$(ECHO) " $@"
952	$(QUIET)$(GLIB_COMPILE_RESOURCES) imp.gresource.xml --target=$@ --sourcedir=src --generate-source
953
954$(BUILDDIR)/gen/version_gen.cpp: $(wildcard .git/HEAD .git/index) version.py make_version.py
955	$(QUIET)$(MKDIR) $(dir $@)
956	$(ECHO) " $@"
957	$(QUIET)python3 make_version.py $@
958
959$(BUILDDIR)/gen/help_texts.cpp: scripts/make_help.py src/help_texts.txt $(BUILDDIR)/gen/help_texts.hpp
960	$(QUIET)$(MKDIR) $(dir $@)
961	$(ECHO) " $@"
962	$(QUIET)python3 scripts/make_help.py c src/help_texts.txt > $@
963
964$(BUILDDIR)/gen/help_texts.hpp: scripts/make_help.py src/help_texts.txt
965	$(QUIET)$(MKDIR) $(dir $@)
966	$(ECHO) " $@"
967	$(QUIET)python3 scripts/make_help.py h src/help_texts.txt > $@
968
969$(BUILDDIR)/horizon-imp: $(OBJ_COMMON) $(OBJ_ROUTER) $(OBJ_OCE) $(OBJ_IMP)
970	$(ECHO) " $@"
971	$(QUIET)$(CXX) $^ $(LDFLAGS) $(LDFLAGS_GUI) $(LDFLAGS_OCE) $(shell $(PKG_CONFIG) --libs $(LIBS_COMMON) gtkmm-3.0 epoxy cairomm-pdf-1.0 librsvg-2.0 libzmq libcurl libpng) -lpodofo -lTKHLR -lTKGeomBase -o $@
972
973$(BUILDDIR)/horizon-pool: $(OBJ_COMMON) $(OBJ_POOL_UTIL)
974	$(ECHO) " $@"
975	$(QUIET)$(CXX) $^ $(LDFLAGS) $(shell $(PKG_CONFIG) --libs $(LIBS_COMMON) gtkmm-3.0) -o $@
976
977$(BUILDDIR)/horizon-prj: $(OBJ_COMMON) $(OBJ_PRJ_UTIL)
978	$(ECHO) " $@"
979	$(QUIET)$(CXX) $^ $(LDFLAGS) $(shell $(PKG_CONFIG) --libs $(LIBS_COMMON) glibmm-2.4 giomm-2.4) -o $@
980
981$(BUILDDIR)/horizon-eda: $(OBJ_COMMON) $(OBJ_POOL_PRJ_MGR) $(OBJ_RES)
982	$(ECHO) " $@"
983	$(QUIET)$(CXX) $^ $(LDFLAGS) $(LDFLAGS_GUI) $(shell $(PKG_CONFIG) --libs $(LIBS_COMMON) gtkmm-3.0 epoxy libzmq libcurl libgit2 libpng) -o $@
984
985$(BUILDDIR)/horizon-pgm-test: $(OBJ_COMMON) $(OBJ_PGM_TEST)
986	$(ECHO) " $@"
987	$(QUIET)$(CXX) $^ $(LDFLAGS) $(LDFLAGS_GUI) $(shell $(PKG_CONFIG) --libs $(LIBS_COMMON) glibmm-2.4 giomm-2.4) -o $@
988
989$(BUILDDIR)/horizon-gen-pkg: $(OBJ_COMMON) $(OBJ_GEN_PKG)
990	$(ECHO) " $@"
991	$(QUIET)$(CXX) $^ $(LDFLAGS) $(INC) $(CXXFLAGS) $(shell $(PKG_CONFIG) --libs $(LIBS_COMMON) glibmm-2.4 giomm-2.4) -o $@
992
993$(BUILDDIR)/horizon-pr-review: $(OBJ_COMMON) $(OBJ_PR_REVIEW) $(OBJ_SHARED_3D)
994	$(ECHO) " $@"
995	$(QUIET)$(CXX) $^ $(LDFLAGS) $(INC) $(CXXFLAGS) $(shell $(PKG_CONFIG) --libs $(LIBS_COMMON) glibmm-2.4 giomm-2.4 cairomm-1.0 libgit2 libpng) -lOSMesa $(LDFLAGS_OCE) -o $@
996
997$(BUILDDIR)/horizon.so: $(OBJ_PYTHON) $(OBJ_SHARED) $(OBJ_SHARED_OCE)
998	$(ECHO) " $@"
999	$(QUIET)$(CXX) $^ $(LDFLAGS) $(INC) $(CXXFLAGS) $(shell $(PKG_CONFIG) --libs $(LIBS_COMMON) python3 glibmm-2.4 giomm-2.4 cairomm-1.0 py3cairo libpng) -lpodofo  $(OCE_LIBDIRS) -lTKXDESTEP -lOSMesa -shared -o $@
1000
1001$(OBJDIR)/%.o: %.c
1002	$(QUIET)$(MKDIR) $(dir $@)
1003	$(ECHO) " $@"
1004	$(QUIET)$(CC) -c $(INC) $(CFLAGS) $< -o $@
1005
1006$(OBJDIR)/%.o: %.cpp
1007	$(QUIET)$(MKDIR) $(dir $@)
1008	$(ECHO) " $@"
1009	$(QUIET)$(CXX) -c $(INC) $(CXXFLAGS) $< -o $@
1010
1011$(OBJ_ROUTER): INC += $(INC_ROUTER)
1012
1013$(OBJ_OCE): INC += $(INC_OCE)
1014$(OBJ_SHARED_OCE): INC += $(INC_OCE)
1015
1016$(PICOBJDIR)/%.o: %.cpp
1017	$(QUIET)$(MKDIR) $(dir $@)
1018	$(ECHO) " $@"
1019	$(QUIET)$(CXX) -c $(INC) $(CXXFLAGS) -fPIC -DOFFSCREEN=1 $< -o $@
1020
1021$(OBJ_PYTHON): INC += $(INC_PYTHON)
1022
1023$(OBJ_RES): $(OBJDIR)/%.res: %.rc
1024	$(QUIET)$(MKDIR) $(dir $@)
1025	windres $< -O coff -o $@
1026
1027install: $(BUILDDIR)/horizon-imp $(BUILDDIR)/horizon-eda
1028	mkdir -p $(DESTDIR)$(BINDIR)
1029	$(INSTALL) -m755 $(BUILDDIR)/horizon-imp $(DESTDIR)$(BINDIR)
1030	$(INSTALL) -m755 $(BUILDDIR)/horizon-eda $(DESTDIR)$(BINDIR)
1031	mkdir -p $(DESTDIR)$(ICONDIR)/scalable/apps
1032	$(INSTALL) -m644 src/icons/scalable/apps/horizon-eda.svg $(DESTDIR)$(ICONDIR)/scalable/apps/org.horizon_eda.HorizonEDA.svg
1033	mkdir -p $(DESTDIR)$(ICONDIR)/16x16/apps
1034	$(INSTALL) -m644 src/icons/16x16/apps/horizon-eda.png $(DESTDIR)$(ICONDIR)/16x16/apps/org.horizon_eda.HorizonEDA.png
1035	mkdir -p $(DESTDIR)$(ICONDIR)/32x32/apps
1036	$(INSTALL) -m644 src/icons/32x32/apps/horizon-eda.png $(DESTDIR)$(ICONDIR)/32x32/apps/org.horizon_eda.HorizonEDA.png
1037	mkdir -p $(DESTDIR)$(ICONDIR)/64x64/apps
1038	$(INSTALL) -m644 src/icons/64x64/apps/horizon-eda.png $(DESTDIR)$(ICONDIR)/64x64/apps/org.horizon_eda.HorizonEDA.png
1039	mkdir -p $(DESTDIR)$(ICONDIR)/256x256/apps
1040	$(INSTALL) -m644 src/icons/256x256/apps/horizon-eda.png $(DESTDIR)$(ICONDIR)/256x256/apps/org.horizon_eda.HorizonEDA.png
1041	mkdir -p $(DESTDIR)$(APPSDIR)
1042	$(INSTALL) -m644 org.horizon_eda.HorizonEDA.desktop $(DESTDIR)$(APPSDIR)
1043	mkdir -p $(DESTDIR)$(METADIR)
1044	$(INSTALL) -m644 org.horizon_eda.HorizonEDA.metainfo.xml $(DESTDIR)$(METADIR)
1045
1046install-man:
1047	mkdir -p $(DESTDIR)$(MANDIR)
1048	$(INSTALL) -m 644 man/horizon-eda.1 $(DESTDIR)$(MANDIR)/horizon-eda.1
1049	$(INSTALL) -m 644 man/horizon-imp.1 $(DESTDIR)$(MANDIR)/horizon-imp.1
1050
1051clean: clean_router clean_oce clean_res
1052	$(RM) $(OBJ_ALL) $(BUILDDIR)/horizon-imp $(BUILDDIR)/horizon-pool $(BUILDDIR)/horizon-prj $(BUILDDIR)/horizon-pool-mgr $(BUILDDIR)/horizon-prj-mgr $(BUILDDIR)/horizon-pgm-test $(BUILDDIR)/horizon-gen-pkg $(BUILDDIR)/horizon-eda $(OBJ_ALL:.o=.d) $(GENDIR)/resources.cpp $(GENDIR)/version_gen.cpp $(OBJ_COMMON) $(OBJ_COMMON:.o=.d)
1053	$(RM) $(BUILDDIR)/horizon.so
1054	$(RM) $(GENDIR)/help_texts.hpp
1055	$(RM) $(GENDIR)/help_texts.cpp
1056	$(RM) $(OBJ_SHARED) $(OBJ_PYTHON) $(OBJ_SHARED:.o=.d) $(OBJ_PYTHON:.o=.d)
1057	$(RM) -r __pycache__
1058
1059clean_router:
1060	$(RM) $(OBJ_ROUTER) $(OBJ_ROUTER:.o=.d)
1061
1062clean_oce:
1063	$(RM) $(OBJ_OCE) $(OBJ_OCE:.o=.d) $(OBJ_SHARED_OCE) $(OBJ_SHARED_OCE:.o=.d)
1064
1065clean_res:
1066	$(RM) $(OBJ_RES)
1067
1068-include  $(OBJ_ALL:.o=.d)
1069-include  $(OBJ_ROUTER:.o=.d)
1070-include  $(OBJ_OCE:.o=.d)
1071-include  $(OBJ_SHARED:.o=.d)
1072-include  $(OBJ_SHARED_OCE:.o=.d)
1073-include  $(OBJ_PYTHON:.o=.d)
1074
1075.PHONY: clean clean_router clean_oce clean_res install
1076