202 Commits

Author SHA1 Message Date
658cb17ffa New translations os-flat-bin-archive.mdx (Ukrainian)
[ci skip]
2026-07-21 18:17:11 +08:00
091e2fd426 New translations os-flat-bin-archive.mdx (Russian)
[ci skip]
2026-07-21 18:17:10 +08:00
9078d16e52 New translations os-flat-bin-archive.mdx (Polish)
[ci skip]
2026-07-21 18:17:09 +08:00
42350f7d85 New translations os-flat-bin-archive.mdx (German)
[ci skip]
2026-07-21 18:17:07 +08:00
950380d500 New translations workspaces.mdx (Ukrainian)
[ci skip]
2026-07-21 18:17:06 +08:00
c0220f8037 New translations workspaces.mdx (Russian)
[ci skip]
2026-07-21 18:17:05 +08:00
16340b4ce1 New translations workspaces.mdx (Polish)
[ci skip]
2026-07-21 18:17:04 +08:00
0a182eb7a3 New translations workspaces.mdx (German)
[ci skip]
2026-07-21 18:17:02 +08:00
32d90ab2b4 New translations platform-support.mdx (Ukrainian)
[ci skip]
2026-07-21 18:17:01 +08:00
e10ae8ca99 New translations platform-support.mdx (Russian)
[ci skip]
2026-07-21 18:17:00 +08:00
7e35f9e733 New translations platform-support.mdx (Polish)
[ci skip]
2026-07-21 18:16:59 +08:00
37de001497 New translations platform-support.mdx (German)
[ci skip]
2026-07-21 18:16:57 +08:00
4503e71f8c New translations dependencies.mdx (Ukrainian)
[ci skip]
2026-07-21 18:16:56 +08:00
c204124d5b New translations dependencies.mdx (Russian)
[ci skip]
2026-07-21 18:16:55 +08:00
0f96005356 New translations dependencies.mdx (Polish)
[ci skip]
2026-07-21 18:16:53 +08:00
5340793fff New translations dependencies.mdx (German)
[ci skip]
2026-07-21 18:16:52 +08:00
fa55fa0c44 New translations dcr-toml.mdx (Ukrainian)
[ci skip]
2026-07-21 18:16:51 +08:00
505a5371ac New translations dcr-toml.mdx (Russian)
[ci skip]
2026-07-21 18:16:49 +08:00
0e4d8f2fa7 New translations dcr-toml.mdx (Polish)
[ci skip]
2026-07-21 18:16:47 +08:00
e22c49d66a New translations dcr-toml.mdx (German)
[ci skip]
2026-07-21 18:16:46 +08:00
5d91f93bbf New translations cross-compilation.mdx (Ukrainian)
[ci skip]
2026-07-21 18:16:44 +08:00
24585646a8 New translations cross-compilation.mdx (Russian)
[ci skip]
2026-07-21 18:16:43 +08:00
67b00b7459 New translations cross-compilation.mdx (Polish)
[ci skip]
2026-07-21 18:16:42 +08:00
5fa4c5e3ea New translations cross-compilation.mdx (German)
[ci skip]
2026-07-21 18:16:41 +08:00
90d9e3b4b3 New translations build-system.mdx (Ukrainian)
[ci skip]
2026-07-21 18:16:39 +08:00
db4983b9e5 New translations build-system.mdx (Russian)
[ci skip]
2026-07-21 18:16:38 +08:00
b2c03dadc4 New translations build-system.mdx (Polish)
[ci skip]
2026-07-21 18:16:37 +08:00
da0ae39589 New translations build-system.mdx (German)
[ci skip]
2026-07-21 18:16:35 +08:00
40eeed48f0 New translations first-steps.mdx (Ukrainian)
[ci skip]
2026-07-21 18:16:34 +08:00
c7b71b2e93 New translations first-steps.mdx (Russian)
[ci skip]
2026-07-21 18:16:33 +08:00
8a7e891f0c New translations first-steps.mdx (Polish)
[ci skip]
2026-07-21 18:16:32 +08:00
3583da762a New translations first-steps.mdx (German)
[ci skip]
2026-07-21 18:16:30 +08:00
8b3a5d0a2d New translations faq.mdx (Ukrainian)
[ci skip]
2026-07-21 18:16:29 +08:00
a20ca20a43 New translations faq.mdx (Russian)
[ci skip]
2026-07-21 18:16:28 +08:00
df4dca15f3 New translations faq.mdx (Polish)
[ci skip]
2026-07-21 18:16:27 +08:00
ec35a981e5 New translations faq.mdx (German)
[ci skip]
2026-07-21 18:16:26 +08:00
56becced2a New translations contributing.mdx (Ukrainian)
[ci skip]
2026-07-21 18:16:24 +08:00
f10056912c New translations contributing.mdx (Russian)
[ci skip]
2026-07-21 18:16:23 +08:00
72816a3b53 New translations contributing.mdx (Polish)
[ci skip]
2026-07-21 18:16:22 +08:00
ffb31a4947 New translations contributing.mdx (German)
[ci skip]
2026-07-21 18:16:21 +08:00
75a6a63a1b New translations build-commands.mdx (Ukrainian)
[ci skip]
2026-07-21 18:16:19 +08:00
0a1cff31b2 New translations build-commands.mdx (Russian)
[ci skip]
2026-07-21 18:16:18 +08:00
de6346d6c9 New translations build-commands.mdx (Polish)
[ci skip]
2026-07-21 18:16:17 +08:00
98205b0c66 New translations build-commands.mdx (German)
[ci skip]
2026-07-21 18:16:16 +08:00
d261b705f6 New translations changelog.mdx (Ukrainian)
[ci skip]
2026-07-21 18:16:14 +08:00
15a1c753fc New translations changelog.mdx (Russian)
[ci skip]
2026-07-21 18:16:13 +08:00
7361ff8992 New translations changelog.mdx (Polish)
[ci skip]
2026-07-21 18:16:11 +08:00
2213e5dfb8 New translations changelog.mdx (German)
[ci skip]
2026-07-21 18:16:09 +08:00
94459ca7c9 New translations readme.mdx (Ukrainian)
[ci skip]
2026-07-21 18:16:08 +08:00
f301e20831 New translations readme.mdx (Russian)
[ci skip]
2026-07-21 18:16:07 +08:00
dbc1c477f2 New translations readme.mdx (Polish)
[ci skip]
2026-07-21 18:16:05 +08:00
15b5ee011d New translations readme.mdx (German)
[ci skip]
2026-07-21 18:16:04 +08:00
06a2387e5d New translations workspaces.mdx (Ukrainian)
[ci skip]
2026-07-18 20:08:53 +08:00
92e5b3ce8f New translations workspaces.mdx (Russian)
[ci skip]
2026-07-18 20:08:52 +08:00
887e3b919c New translations workspaces.mdx (Polish)
[ci skip]
2026-07-18 20:08:51 +08:00
74fda0b894 New translations workspaces.mdx (German)
[ci skip]
2026-07-18 20:08:50 +08:00
2bc30de0ab New translations dependencies.mdx (Ukrainian)
[ci skip]
2026-07-18 20:08:48 +08:00
0a32df1d0d New translations dependencies.mdx (Russian)
[ci skip]
2026-07-18 20:08:47 +08:00
df476cec1a New translations dependencies.mdx (Polish)
[ci skip]
2026-07-18 20:08:46 +08:00
b2036ba46c New translations dependencies.mdx (German)
[ci skip]
2026-07-18 20:08:45 +08:00
154e6d27d0 New translations dcr-toml.mdx (Ukrainian)
[ci skip]
2026-07-18 20:08:43 +08:00
6000a27708 New translations dcr-toml.mdx (Russian)
[ci skip]
2026-07-18 20:08:42 +08:00
de0007d16c New translations dcr-toml.mdx (Polish)
[ci skip]
2026-07-18 20:08:41 +08:00
2ac38e6cce New translations dcr-toml.mdx (German)
[ci skip]
2026-07-18 20:08:39 +08:00
952b0488db New translations multi-package-workspace.mdx (Ukrainian)
[ci skip]
2026-07-18 20:08:38 +08:00
085c14e5a9 New translations multi-package-workspace.mdx (Russian)
[ci skip]
2026-07-18 20:08:37 +08:00
fe6191265c New translations multi-package-workspace.mdx (Polish)
[ci skip]
2026-07-18 20:08:36 +08:00
4bcf793a39 New translations multi-package-workspace.mdx (German)
[ci skip]
2026-07-18 20:08:34 +08:00
87585f3524 New translations license.mdx (Ukrainian)
[ci skip]
2026-07-18 20:08:33 +08:00
bc322577f9 New translations license.mdx (Russian)
[ci skip]
2026-07-18 20:08:32 +08:00
53e0ad953a New translations license.mdx (Polish)
[ci skip]
2026-07-18 20:08:31 +08:00
bc2c2a48f6 New translations license.mdx (German)
[ci skip]
2026-07-18 20:08:30 +08:00
df3a45dd7a New translations installation.mdx (Ukrainian)
[ci skip]
2026-07-18 20:08:28 +08:00
6c7a7ad03e New translations installation.mdx (Russian)
[ci skip]
2026-07-18 20:08:27 +08:00
377b244db4 New translations installation.mdx (Polish)
[ci skip]
2026-07-18 20:08:26 +08:00
d6d08fac57 New translations installation.mdx (German)
[ci skip]
2026-07-18 20:08:25 +08:00
a566e33051 New translations faq.mdx (Ukrainian)
[ci skip]
2026-07-18 20:08:24 +08:00
255663822b New translations faq.mdx (Russian)
[ci skip]
2026-07-18 20:08:23 +08:00
f3952c1c0d New translations faq.mdx (Polish)
[ci skip]
2026-07-18 20:08:21 +08:00
13b5616069 New translations faq.mdx (German)
[ci skip]
2026-07-18 20:08:20 +08:00
6ed40d0aad New translations system-commands.mdx (Ukrainian)
[ci skip]
2026-07-18 20:08:19 +08:00
7d07863c86 New translations system-commands.mdx (Russian)
[ci skip]
2026-07-18 20:08:18 +08:00
47592c952d New translations system-commands.mdx (Polish)
[ci skip]
2026-07-18 20:08:17 +08:00
9873a8d513 New translations system-commands.mdx (German)
[ci skip]
2026-07-18 20:08:16 +08:00
c41b3e7970 New translations project-commands.mdx (Ukrainian)
[ci skip]
2026-07-18 20:08:15 +08:00
37f1887011 New translations project-commands.mdx (Russian)
[ci skip]
2026-07-18 20:08:13 +08:00
c03fd37c14 New translations project-commands.mdx (Polish)
[ci skip]
2026-07-18 20:08:12 +08:00
1f5b8cdcee New translations project-commands.mdx (German)
[ci skip]
2026-07-18 20:08:11 +08:00
2f2c4aa208 New translations test-framework.mdx (Ukrainian)
[ci skip]
2026-07-07 11:22:40 +08:00
87bad94848 New translations test-framework.mdx (Russian)
[ci skip]
2026-07-07 11:22:39 +08:00
39bba3cea8 New translations test-framework.mdx (Polish)
[ci skip]
2026-07-07 11:22:38 +08:00
d498e67782 New translations test-framework.mdx (German)
[ci skip]
2026-07-07 11:22:36 +08:00
82de72ce8d New translations running-tests.mdx (Ukrainian)
[ci skip]
2026-07-07 11:22:35 +08:00
ffaf1f1dd1 New translations running-tests.mdx (Russian)
[ci skip]
2026-07-07 11:22:34 +08:00
c050ffb8c4 New translations running-tests.mdx (Polish)
[ci skip]
2026-07-07 11:22:33 +08:00
e9908f359d New translations running-tests.mdx (German)
[ci skip]
2026-07-07 11:22:32 +08:00
024bbfcaa9 New translations self-update.mdx (Ukrainian)
[ci skip]
2026-07-07 11:22:31 +08:00
4b8d78dac7 New translations self-update.mdx (Russian)
[ci skip]
2026-07-07 11:22:29 +08:00
50a2c59fed New translations self-update.mdx (Polish)
[ci skip]
2026-07-07 11:22:28 +08:00
184c44902c New translations self-update.mdx (German)
[ci skip]
2026-07-07 11:22:27 +08:00
44cb4f3665 New translations workspaces.mdx (Ukrainian)
[ci skip]
2026-07-07 11:22:26 +08:00
98fc25c40d New translations workspaces.mdx (Russian)
[ci skip]
2026-07-07 11:22:25 +08:00
fc968d07bd New translations workspaces.mdx (Polish)
[ci skip]
2026-07-07 11:22:24 +08:00
ba20bf7d3d New translations workspaces.mdx (German)
[ci skip]
2026-07-07 11:22:23 +08:00
787e89f779 New translations platform-support.mdx (Ukrainian)
[ci skip]
2026-07-07 11:22:21 +08:00
a67729a673 New translations platform-support.mdx (Russian)
[ci skip]
2026-07-07 11:22:20 +08:00
25cc7b8f3b New translations platform-support.mdx (Polish)
[ci skip]
2026-07-07 11:22:19 +08:00
bddbc3603a New translations platform-support.mdx (German)
[ci skip]
2026-07-07 11:22:18 +08:00
666794d33d New translations environment-variables.mdx (Ukrainian)
[ci skip]
2026-07-07 11:22:17 +08:00
e35f5e0ad1 New translations environment-variables.mdx (Russian)
[ci skip]
2026-07-07 11:22:16 +08:00
4ce4632a92 New translations environment-variables.mdx (Polish)
[ci skip]
2026-07-07 11:22:14 +08:00
aaa6c99795 New translations environment-variables.mdx (German)
[ci skip]
2026-07-07 11:22:13 +08:00
fe6ac220e6 New translations dependencies.mdx (Ukrainian)
[ci skip]
2026-07-07 11:22:12 +08:00
6622353ff8 New translations dependencies.mdx (Russian)
[ci skip]
2026-07-07 11:22:11 +08:00
b3f14d1e68 New translations dependencies.mdx (Polish)
[ci skip]
2026-07-07 11:22:09 +08:00
4cb8985bfb New translations dependencies.mdx (German)
[ci skip]
2026-07-07 11:22:08 +08:00
95bb204884 New translations dcr-toml.mdx (Ukrainian)
[ci skip]
2026-07-07 11:22:07 +08:00
bebda1fe8a New translations dcr-toml.mdx (Russian)
[ci skip]
2026-07-07 11:22:06 +08:00
f0e587b12b New translations dcr-toml.mdx (Polish)
[ci skip]
2026-07-07 11:22:02 +08:00
476f13676a New translations dcr-toml.mdx (German)
[ci skip]
2026-07-07 11:22:01 +08:00
fcf21b2b2e New translations cross-compilation.mdx (Ukrainian)
[ci skip]
2026-07-07 11:22:00 +08:00
cb519cc4fd New translations cross-compilation.mdx (Russian)
[ci skip]
2026-07-07 11:21:56 +08:00
32911212e8 New translations cross-compilation.mdx (Polish)
[ci skip]
2026-07-07 11:21:52 +08:00
3f506e79af New translations cross-compilation.mdx (German)
[ci skip]
2026-07-07 11:21:48 +08:00
fc657b8a99 New translations build-system.mdx (Ukrainian)
[ci skip]
2026-07-07 11:21:46 +08:00
462c53d93f New translations build-system.mdx (Russian)
[ci skip]
2026-07-07 11:21:45 +08:00
c9ff114b25 New translations build-system.mdx (Polish)
[ci skip]
2026-07-07 11:21:44 +08:00
746a26bae9 New translations build-system.mdx (German)
[ci skip]
2026-07-07 11:21:42 +08:00
b6b171b2a9 New translations build-profiles.mdx (Ukrainian)
[ci skip]
2026-07-07 11:21:41 +08:00
a1ccaebfd3 New translations build-profiles.mdx (Russian)
[ci skip]
2026-07-07 11:21:40 +08:00
a15470e669 New translations build-profiles.mdx (Polish)
[ci skip]
2026-07-07 11:21:39 +08:00
901ea9ebaa New translations build-profiles.mdx (German)
[ci skip]
2026-07-07 11:21:38 +08:00
75cf0af9b4 New translations multi-package-workspace.mdx (Ukrainian)
[ci skip]
2026-07-07 11:21:37 +08:00
54f5f78e2c New translations multi-package-workspace.mdx (Russian)
[ci skip]
2026-07-07 11:21:36 +08:00
bb27b4e2e6 New translations multi-package-workspace.mdx (Polish)
[ci skip]
2026-07-07 11:21:35 +08:00
9d9422b45b New translations multi-package-workspace.mdx (German)
[ci skip]
2026-07-07 11:21:33 +08:00
b37aa2a380 New translations library-project.mdx (Ukrainian)
[ci skip]
2026-07-07 11:21:32 +08:00
af96ba2ac2 New translations library-project.mdx (Russian)
[ci skip]
2026-07-07 11:21:31 +08:00
2d73d07923 New translations library-project.mdx (Polish)
[ci skip]
2026-07-07 11:21:30 +08:00
d193dc1314 New translations library-project.mdx (German)
[ci skip]
2026-07-07 11:21:29 +08:00
8ddf4c3fb9 New translations cross-to-windows.mdx (Ukrainian)
[ci skip]
2026-07-07 11:21:28 +08:00
f7c0a50e0e New translations cross-to-windows.mdx (Russian)
[ci skip]
2026-07-07 11:21:27 +08:00
f4748173f9 New translations cross-to-windows.mdx (Polish)
[ci skip]
2026-07-07 11:21:26 +08:00
1ed2cd9a71 New translations cross-to-windows.mdx (German)
[ci skip]
2026-07-07 11:21:25 +08:00
d77fcf6b29 New translations license.mdx (Ukrainian)
[ci skip]
2026-07-07 11:21:23 +08:00
458cda2da2 New translations license.mdx (Russian)
[ci skip]
2026-07-07 11:21:22 +08:00
af9b67edec New translations license.mdx (Polish)
[ci skip]
2026-07-07 11:21:21 +08:00
72654896c0 New translations license.mdx (German)
[ci skip]
2026-07-07 11:21:20 +08:00
82a2b38132 New translations ide-integration.mdx (Ukrainian)
[ci skip]
2026-07-07 11:21:19 +08:00
c936c03fbf New translations ide-integration.mdx (Russian)
[ci skip]
2026-07-07 11:21:17 +08:00
0fecd4c2b7 New translations ide-integration.mdx (Polish)
[ci skip]
2026-07-07 11:21:16 +08:00
1e6a1ae9c1 New translations ide-integration.mdx (German)
[ci skip]
2026-07-07 11:21:15 +08:00
813354c5da New translations installation.mdx (Ukrainian)
[ci skip]
2026-07-07 11:21:14 +08:00
a02f302c48 New translations installation.mdx (Russian)
[ci skip]
2026-07-07 11:21:13 +08:00
a1d2d41fb0 New translations installation.mdx (Polish)
[ci skip]
2026-07-07 11:21:12 +08:00
c11c1a83df New translations installation.mdx (German)
[ci skip]
2026-07-07 11:21:10 +08:00
98db98d353 New translations first-steps.mdx (Ukrainian)
[ci skip]
2026-07-07 11:21:09 +08:00
6c326c21d4 New translations first-steps.mdx (Russian)
[ci skip]
2026-07-07 11:21:08 +08:00
2e895619bf New translations first-steps.mdx (Polish)
[ci skip]
2026-07-07 11:21:07 +08:00
03146c2857 New translations first-steps.mdx (German)
[ci skip]
2026-07-07 11:21:06 +08:00
6c1e041037 New translations faq.mdx (Ukrainian)
[ci skip]
2026-07-07 11:21:05 +08:00
fc545c6af9 New translations faq.mdx (Russian)
[ci skip]
2026-07-07 11:21:04 +08:00
4e2688d66f New translations faq.mdx (Polish)
[ci skip]
2026-07-07 11:21:02 +08:00
1eca47feb5 New translations faq.mdx (German)
[ci skip]
2026-07-07 11:21:01 +08:00
12f4177a91 New translations contributing.mdx (Ukrainian)
[ci skip]
2026-07-07 11:21:00 +08:00
84eb7c0c52 New translations contributing.mdx (Russian)
[ci skip]
2026-07-07 11:20:59 +08:00
ce643077b3 New translations contributing.mdx (Polish)
[ci skip]
2026-07-07 11:20:58 +08:00
bc71ee7202 New translations contributing.mdx (German)
[ci skip]
2026-07-07 11:20:57 +08:00
42312e10bb New translations system-commands.mdx (Ukrainian)
[ci skip]
2026-07-07 11:20:56 +08:00
7e54cb7155 New translations system-commands.mdx (Russian)
[ci skip]
2026-07-07 11:20:55 +08:00
4c40e74dbb New translations system-commands.mdx (Polish)
[ci skip]
2026-07-07 11:20:54 +08:00
8aa350629c New translations system-commands.mdx (German)
[ci skip]
2026-07-07 11:20:52 +08:00
49d63a1ea1 New translations quality-commands.mdx (Ukrainian)
[ci skip]
2026-07-07 11:20:51 +08:00
f87112faf0 New translations quality-commands.mdx (Russian)
[ci skip]
2026-07-07 11:20:50 +08:00
ab0ad58925 New translations quality-commands.mdx (Polish)
[ci skip]
2026-07-07 11:20:49 +08:00
f5b465446c New translations quality-commands.mdx (German)
[ci skip]
2026-07-07 11:20:48 +08:00
f4124ea268 New translations project-commands.mdx (Ukrainian)
[ci skip]
2026-07-07 11:20:46 +08:00
d10358bdab New translations project-commands.mdx (Russian)
[ci skip]
2026-07-07 11:20:45 +08:00
fd5150f3db New translations project-commands.mdx (Polish)
[ci skip]
2026-07-07 11:20:44 +08:00
82e10cc75d New translations project-commands.mdx (German)
[ci skip]
2026-07-07 11:20:43 +08:00
b7c9edb35e New translations gen-commands.mdx (Ukrainian)
[ci skip]
2026-07-07 11:20:42 +08:00
04fcedc428 New translations gen-commands.mdx (Russian)
[ci skip]
2026-07-07 11:20:41 +08:00
548808a8d8 New translations gen-commands.mdx (Polish)
[ci skip]
2026-07-07 11:20:40 +08:00
dcb8e676f1 New translations gen-commands.mdx (German)
[ci skip]
2026-07-07 11:20:38 +08:00
1b0ee1402a New translations dependency-commands.mdx (Ukrainian)
[ci skip]
2026-07-07 11:20:37 +08:00
6c6fa8d5d4 New translations dependency-commands.mdx (Russian)
[ci skip]
2026-07-07 11:20:36 +08:00
c2c3a7bd7a New translations dependency-commands.mdx (Polish)
[ci skip]
2026-07-07 11:20:35 +08:00
23149d8149 New translations dependency-commands.mdx (German)
[ci skip]
2026-07-07 11:20:34 +08:00
801a164da9 New translations build-commands.mdx (Ukrainian)
[ci skip]
2026-07-07 11:20:33 +08:00
e3ec2c198d New translations build-commands.mdx (Russian)
[ci skip]
2026-07-07 11:20:32 +08:00
312af43702 New translations build-commands.mdx (Polish)
[ci skip]
2026-07-07 11:20:30 +08:00
3ca1db4f7c New translations build-commands.mdx (German)
[ci skip]
2026-07-07 11:20:29 +08:00
0af619907a New translations changelog.mdx (Ukrainian)
[ci skip]
2026-07-07 11:20:28 +08:00
e257afde70 New translations changelog.mdx (Russian)
[ci skip]
2026-07-07 11:20:27 +08:00
cd3ef3a7f5 New translations changelog.mdx (Polish)
[ci skip]
2026-07-07 11:20:26 +08:00
966018c1e0 New translations changelog.mdx (German)
[ci skip]
2026-07-07 11:20:25 +08:00
180f927e85 New translations readme.mdx (Ukrainian)
[ci skip]
2026-07-07 11:20:23 +08:00
7ba9d296a1 New translations readme.mdx (Russian)
[ci skip]
2026-07-07 11:20:22 +08:00
93a894e66a New translations readme.mdx (Polish)
[ci skip]
2026-07-07 11:20:21 +08:00
c7dd8fecaa New translations readme.mdx (German)
[ci skip]
2026-07-07 11:20:20 +08:00
a3f8444c20 Replace GitLab pipeline trigger with Cloudflare build 2026-07-05 18:24:47 +08:00
1f3fc62cb6 Add GitHub Actions workflow to trigger site rebuild 2026-07-05 18:16:45 +08:00
63 changed files with 902 additions and 2174 deletions

View File

@@ -0,0 +1,14 @@
name: Trigger site rebuild
on:
push:
branches: [master]
paths:
- 'docs/**'
jobs:
trigger:
runs-on: ubuntu-latest
steps:
- name: Trigger Cloudflare Pages build
run: curl -sS -X POST "${{ secrets.CF_PAGES_DEPLOY_HOOK }}"

View File

@@ -8,11 +8,8 @@ sidebar_label: Introduction
<summary>Quick reference</summary>
```bash
# Installation (dcrup)
curl -fsSL https://sh.dcr-tool.ru | sh -s -- self-install
export PATH="$HOME/.dcr/bin:$PATH"
dcrup install stable # auto: cf → gh → sf → ya
# dcrup install stable --mirror cf # CloudFlare / GitHub / SourceForge / Yandex
# Installation
curl -fsSL https://dcr.dexoron.su/install.sh | sh
# Create a project
dcr new my-app

View File

@@ -4,111 +4,6 @@ sidebar_label: Changelog
# Changelog
## 0.9.5 (2026-10-21)
* **Structured CLI output** — shared helpers now provide Cargo-like human, plain, and JSON output modes.
* **Color and diagnostics policy** — `--color`, `NO_COLOR`, `--quiet`, and `--verbose` are applied consistently across commands.
* **Build reporting** — lifecycle events and compiler diagnostics are available as structured JSON events.
* **Output lab** — sandbox scenarios cover help, lifecycle commands, compiler warnings/errors, stream capture, and broken pipes.
## 0.9.1 (2026-09-13)
* **`pkg-config` dependencies** — declare `fmt = { pkg-config = "fmt" }` or multiple package names in `[dependencies]`; DCR applies `.pc` compiler/linker flags and records the resolved package in `dcr.lock`.
* **`dcr add` support for `pkg-config`** — easily add system package dependencies with `dcr add fmt pkg-config:fmt` or `dcr add openssl pkg:openssl,libcrypto`.
* **`dcr tree` & IDE integration** — `pkg-config` packages are marked in `dcr tree` and resolved into compiler flags in `dcr gen` (`compile_commands.json`).
* **Fixed `dcr new` in non-ASCII / spaced paths** — initializing projects from folders with non-ASCII characters or spaces no longer fails validation.
## 0.9.0 (2026-08-31)
* **Download mirrors in `dcrup`** — `--mirror auto|cf|gh|sf|ya` and `DCRUP_MIRROR`.
Default `auto` tries **cf → gh → sf → ya** (CloudFlare CDN, GitHub, SourceForge, Yandex CDN).
* **Complete Path/Git dependencies** — DCR packages from `path` and `git` are built before their consumer. Git sources are cached in `~/.dcr/git`, support `branch`/`tag`/`rev`, and record the exact commit in `dcr.lock`.
* **Build and prebuild modes** — `path` and `git` dependencies can build a DCR package from `dcr.toml` or link existing `include`/`lib`/`libs` artifacts; `mode = "build"` / `"prebuild"` selects explicitly when both forms are present.
* **Prebuilt dependency examples** — documentation now shows the `dcr-math-lib` Git repository and recommended build/prebuilt layouts for both `git` and `path`.
* **Transitive dependency builds and cycle reporting** — DCR recursively builds DCR packages and reports a clear dependency chain for cycles.
* **Bare path arguments for `dcr add`** — `dcr add mylib ../mylib` now works in addition to the explicit `path:` form.
* **Removed `install.sh` / `install.ps1` / `install_bsd.sh`** — superseded by `dcrup`.
## 0.8.5 (2026-08-08)
* **`package.dcr-version`** — optional CLI version pin in `dcr.toml`.
`dcr new` / `dcr init` write the current version. On config load:
* missing / empty pin → warn "add dcr-version";
* dcr older than pin → warn "update dcr";
* dcr newer than pin → warn "check changelog, update pin";
* equal → silent.
Commands do not fail, warning only (once per path per process).
## 0.8.4 (2026-08-04)
**Added:**
* **`.dcr/` directory** — shared machine-readable build facts for IDE integrations:
* `.dcr/compile_commands.json`
* `.dcr/build-info.json` (`schemaVersion`, `artifact_path`, `profile`, …)
* `.dcr/toolchain.json` (compiler/debugger paths, moc/uic/rcc)
* `.dcr/ide/` (placeholder for IDE lock files)
* **`dcr gen project-info`** — `target`, `target_dir`, `artifact_path`, `artifact_kind`, `source_roots`, `include_globs`, `exclude_globs`; absolute/canonical paths.
* **`dcr build --print-artifact-path`** — one absolute artifact path line on stdout after a successful build.
* **`dcr gen … --quiet` / `-q`** — suppress human success logs for gen subcommands.
* **`.clangd`** — created on first gen with `CompilationDatabase: .dcr` (`# managed by dcr gen`); custom `.clangd` is not overwritten.
* **Helpers** `canonicalize_path`, `atomic_write`, `ensure_dcr_dir`; pure `resolve_artifact_path` via `platform::*`.
* **`dcr new` / `dcr init`** — add `.dcr/` to `.gitignore`.
**Changed (breaking):**
* **`compile_commands.json` moved** from project root to **`.dcr/compile_commands.json`**.\
clangd discovers it via `.clangd` / `--compile-commands-dir=.dcr`.\
CLion and VSCode generators updated accordingly.
* **Atomic write** for compile_commands (tmp + rename).
* **`gen vscode` / `gen clion` launch/run** — use the same artifact path resolver as `project-info` / `build-info.json`.
**Fixed:**
* Launch configs no longer hardcode `target/\<profile>/\<name>` without the Linux triple segment.
* Symlink/mount roots: best-effort canonicalize for root and compile database paths.
## 0.8.3 (2026-08-03)
### Added
* **`dcr run -- \<args>...`** — cargo-style argument forwarding after a bare `--`\
(`dcr run --release -- --test_help`). Applies to direct binary runs and `[run].cmd`.
* **Tests** — host target section `ldflags` without CLI `--target`; run-arg forwarding; `split_double_dash` unit tests.
### Changed
* **Native builds resolve the host triple** — without `--target` / package `build.target`, host sections such as\
`[build.x86_64-unknown-linux-gnu]` apply again (`cflags` / `ldflags` / toolchain).\
Previously the target was empty and those sections were ignored while artifacts already used the host triple path.
* **Empty target** — no more `Unknown target ''` warning.
* **`dcr run --help` / man `dcr-run`** — document `--` forwarding.
### Fixed
* **Native artifact paths on Windows and macOS** — without an explicit `--target` / `build.target`, artifacts use `target/\<profile>`, so `dcr run` and flat-bin find the build output.
* Target-specific `ldflags` missing on native host builds (e.g. micro-lang + `libsct-elf`).
* Spurious empty-target warning.
## 0.8.2 (2026-07-22)
### Added
* **Compile progress `[N/M]`** — live TTY status line (`compile pkg v0.1.0 [12/41]`) so long mono-package builds do not look hung.
* **DCR status style** — fixed-width verbs: `project`, `compile`, `dep`, `ready`, `pack`, `done`, `run`.
* **Cargo feature `archive`** — optional FAT packing via `fatfs` (`cargo build --features archive`). Release CI builds with the feature; without it `[archive]` fails with a clear message.
* **Tests** — `flat_bin_nasm_build`, package `build.target` without CLI `--target`, stricter workspace `clean --all`.
* **CI expansion** — unit + integration on Linux/macOS/Windows, archive feature job, rust-cache, clippy default + all-features (see `.github/workflows/ci.yml`).
### Changed
* **No forced host triple from CLI** — without `--target`, package/member `build.target` is honored (bare-metal / ISO `post_steps` paths).
* **Relative include/lib flags** (`-I`, `-i`, `-isystem`, `-idirafter`, `-L`, `-T`) absolutized against the package root under workspace builds.
* **`dcr clean --all`** — no spam for members without a local `target/` (shared root `target/`).
* **`error` / `warn`** — red / yellow on stderr; CLI fully English (`Hint:`).
* **Help / man** — list `add`, `lint`, `setup`; unknown command exits with code 1.
* **Tool NotFound** — `linker not found: ld.lld …` / `{tool} not found …` instead of raw `os error 2`.
## 0.8.1 (2026-07-20)
### Added
@@ -119,7 +14,7 @@ sidebar_label: Changelog
* **GAS / MASM / LLC** — object → `objcopy -O binary` → `\<stem>.bin`
* **C/C++** — objects → freestanding link → `objcopy -O binary` → `\<name>.bin`
* Requires `llvm-objcopy` / `objcopy` / `gobjcopy` except for NASM/FASM direct emit
* **`[archive]` section** — FAT12/16/32 disk images after build (`output`, `format`, `size`, `offset`, `label`, `bootsector`, `layout`). From 0.8.2 requires feature `archive`.
* **`[archive]` section** — after a successful build, pack a FAT disk image (`fatfs`): `output`, `format` (`fat12`/`fat16`/`fat32`), optional `size` (default 1.44 MiB), `offset`, `label`, `bootsector`, and `layout` (`from` → `to`, supports globs). `{profile}` works in paths.
* **Single-file `build.roots`** — a root may be a single source or header file, not only a directory.
### Changed
@@ -127,6 +22,10 @@ sidebar_label: Changelog
* **`--force`** also re-runs `build.steps` and `build.post_steps`.
* **`dcr run` on workspace-only root** — if `[run].cmd` is set, run that after build; otherwise delegate to a workspace member.
### Dependencies
* `fatfs = "0.3"` for FAT image packing.
## 0.8.0 (2026-07-18)
### Added

View File

@@ -15,8 +15,6 @@ dcr add mylib path:./lib # explicit path prefix
dcr add mylib git:https://github.com/user/repo # explicit git prefix
dcr add mylib github:user/repo # GitHub shorthand
dcr add mylib gitlab:user/repo # GitLab shorthand
dcr add fmt pkg-config:fmt # system package via pkg-config
dcr add openssl pkg:openssl,libcrypto # multiple pkg-config packages
```
Source prefixes:
@@ -25,7 +23,6 @@ Source prefixes:
* `git:` — generic git URL
* `github:` — expands to `https://github.com/\<user>/\<repo>`
* `gitlab:` — expands to `https://gitlab.com/\<user>/\<repo>`
* `pkg-config:` / `pkg:` — one or more packages resolved by `pkg-config`
* `http://` / `https://` / `git@` — full URL
Flags:
@@ -34,12 +31,7 @@ Flags:
* `--tag \<name>` — git tag
* `--rev \<hash>` — git commit
If source is omitted — DCR searches connected registries. A bare relative or absolute path is accepted as a path dependency.
For `pkg-config` dependencies, the referenced packages must already be installed
and provide `.pc` files. DCR invokes `pkg-config` during the build (using
`PATH` and `PKG_CONFIG_PATH`) and forwards the returned compiler and linker
flags; it does not download or build these packages.
If source is omitted — DCR searches connected registries.
## `dcr tree`

View File

@@ -8,7 +8,6 @@ sidebar_label: Contributing
```bash
git clone https://github.com/dexoron/dcr
# or a source mirror: GitVerse / SourceCraft / SourceForge / GitLab (see README)
cd dcr
cargo build
```
@@ -43,11 +42,10 @@ cargo test --all-targets
## CI
CI runs (see `.github/workflows/ci.yml`):
CI runs:
* `cargo fmt --check`
* `cargo clippy` (default + `--all-features`)
* `cargo clippy --all-targets -- -D warnings`
* `cargo check --all-targets --all-features`
* Unit + integration tests on Linux, macOS, Windows
* Extra Linux job with `--features archive` (FAT images)
* Tools on runners: clang, nasm, clang-format/tidy (Linux)
* Build on Linux, macOS, Windows
* Integration tests (compilation check)

View File

@@ -61,15 +61,6 @@ Use `kind = "flat-bin"` (NASM `-f bin`) and optional `[archive]` for a FAT disk
See [OS-dev recipe](/docs/recipes/os-flat-bin-archive).
## How do I choose a download mirror?
`dcrup install` uses `--mirror auto` by default and tries **cf → gh → sf → ya**.
```bash
dcrup install stable --mirror cf
export DCRUP_MIRROR=ya
```
## Lock file
`dcr.lock` is created during builds (`dcr build`) when registry dependencies are present. To force an update — delete `dcr.lock` and run `dcr build`.

View File

@@ -4,75 +4,28 @@ sidebar_label: Installation
# Installation
## dcrup (recommended)
## Linux (Dexoron Packages)
Install and switch DCR versions (stable / dev / night, pin `0.8.2`, optional build from source).
Configure your package manager at https://pkg.dexoron.su and install:
### Linux / macOS / BSD / Windows (bash)
**Arch Linux**
```sh
curl --proto '=https' --tlsv1.2 -sSf https://sh.dcr-tool.ru | sh -s -- self-install
export PATH="$HOME/.dcr/bin:$PATH"
dcrup install stable
sudo pacman -Sy dcr
```
Non-interactive install of DCR in one shot:
**Debian/Ubuntu**
```sh
curl --proto '=https' --tlsv1.2 -sSf https://sh.dcr-tool.ru | sh -s -- install stable
export PATH="$HOME/.dcr/bin:$PATH"
sudo apt update && sudo apt install dcr
```
### Windows (PowerShell)
```powershell
& ([scriptblock]::Create((irm https://ps1.dcr-tool.ru))) self-install
# $env:Path += ";$env:USERPROFILE\.dcr\bin"
dcrup install stable
```
After `self-install`, the command is **`dcrup`** (no `.sh` / `.ps1`) and is installed in `~/.dcr/bin` (Unix) or `%USERPROFILE%\.dcr\bin` (Windows).
### Common dcrup commands
**Fedora/RHEL**
```sh
dcrup install stable # latest stable prebuilt (auto: cf → gh → sf → ya)
dcrup install 0.8.2 # pin → 0.8.2@stable
dcrup install 0.8.2@dev
dcrup install stable --libc musl # Linux: musl asset (default: gnu)
dcrup install stable --mirror cf # CloudFlare CDN
dcrup install stable --mirror ya # Yandex CDN (RU fallback)
dcrup install stable --build # cargo build --features archive
dcrup install night # always build from branch dev HEAD
dcrup default 0.8.2
dcrup update
dcrup list
dcrup show
dcrup which
dcrup uninstall 0.8.2 # remove one installed version
dcrup uninstall --all # remove all installed versions
sudo dnf install dcr
```
Layout: `~/.dcr/toolchains/\<id>/dcr` and `~/.dcr/bin/dcr` → active version.
### Download mirrors
Prebuilt installs try **cf → gh → sf → ya** unless you pin a host.
| Code | URL | Notes |
| ---- | ------------------------------------------------------------------------------------------------------------ | -------------------------- |
| `cf` | `https://cdn-global.dcr-tool.ru/\<tag>/\<asset>` | CloudFlare CDN (worldwide) |
| `gh` | `https://github.com/dexoron/dcr/releases/download/\<tag>/\<asset>` | GitHub Releases |
| `sf` | `https://sourceforge.net/projects/dcr-tool/files/\<tag>/\<asset>/download` | SourceForge |
| `ya` | `https://cdn-ru.dcr-tool.ru/\<tag>/\<asset>` | Yandex CDN (RU fallback) |
```sh
dcrup install stable --mirror auto # default
export DCRUP_MIRROR=cf # persist for this shell
```
---
## Arch Linux (AUR)
```sh
@@ -92,12 +45,11 @@ brew install dcr
sudo snap install dcrup
```
> If classic Snap Store publishing is unavailable, install the `.snap` from [GitHub Releases](https://github.com/dexoron/dcr/releases/latest) with `--dangerous`.
## Nix (flake)
```sh
nix run github:dexoron/dcr
# or install to profile:
nix profile install github:dexoron/dcr
```
@@ -107,37 +59,48 @@ nix profile install github:dexoron/dcr
cargo install dcr
```
Note: crates.io builds may omit optional features. For FAT disk images (`[archive]`), prefer release binaries or:
## Linux / macOS (script)
```sh
cargo install dcr --features archive
curl -fsSL https://dcr.dexoron.su/install.sh | sh
```
## BSD (script)
```sh
curl -fsSL https://dcr.dexoron.su/install_bsd.sh | sh
```
## Windows (PowerShell)
```powershell
irm https://dcr.dexoron.su/install.ps1 | iex
```
## From source
```sh
git clone https://github.com/dexoron/dcr.git
cd dcr
cargo build --release --features archive
cd dcr && cargo build --release
ln -sf "$PWD/target/release/dcr" ~/.local/bin/dcr
# or manage versions with dcrup install night / --build
```
## Post-install
Verify the installation:
```bash
dcr --version
dcrup show # if installed via dcrup
```
Man pages (package installs / release assets):
Man pages are available after installation:
```bash
man dcr
man dcr-build
```
Registry (optional) — `~/.dcr/config.toml`:
To use the registry, create `~/.dcr/config.toml`:
```toml
[registry.default]

View File

@@ -6,13 +6,6 @@ sidebar_label: IDE Integration
## VS Code
Install the recommended [DCR extension by Dexoron-Labs](https://marketplace.visualstudio.com/items?itemName=Dexoron-Labs.dcr). Do not install Microsoft C/C++ extensions for DCR projects: DCR uses `clangd`. MS C/C++ is acceptable only when you need its debugger.
Recommended companion extensions:
* [Even Better TOML](https://marketplace.visualstudio.com/items?itemName=tamasfe.even-better-toml)
* [CodeLLDB](https://marketplace.visualstudio.com/items?itemName=vadimcn.vscode-lldb), or MS C/C++ for debugger support only
```bash
dcr gen vscode
```

View File

@@ -1,34 +0,0 @@
---
sidebar_label: CLI output
---
# CLI output (experimental)
The structured output implementation is being developed incrementally.
Currently these global options apply to diagnostics emitted through the logger:
```sh
dcr --output plain build
dcr --output json build
dcr --color never build
dcr --quiet build
dcr --verbose build
```
`--output` accepts `human` (default), `plain`, or `json`.
Diagnostics are written to stderr. JSON diagnostics are newline-delimited objects
with `schema_version: 1`, `event`, and `message` fields. Command statuses use the
shared output helpers, build reporting emits structured lifecycle events, and
compiler output is represented as JSON events with its original stream and text.
The protocol is still experimental: some raw command data and subprocess stdout
remain unstructured.
`--color` accepts `auto`, `always`, or `never`. Automatic coloring requires a
terminal and respects `NO_COLOR`. Plain and JSON diagnostics never add colors.
Quiet mode preserves warnings, errors, and compiler diagnostics; verbose mode
enables debug and trace logging. Arguments following `--` are passed through
unchanged.
Remaining work includes migrating the remaining raw command data and subprocess
stdout, improving progress rendering and contextual errors, and expanding
integration coverage for stdout/stderr and closed pipes.

View File

@@ -40,39 +40,23 @@ Main project configuration file. Located at the project root.
## [package]
| Field | Required | Description |
| ------------- | -------- | --------------------------------------------------------------------------------------------------------------- |
| `name` | yes | Project name |
| `version` | yes | Semantic version of the **project** |
| `dcr-version` | no | Semver of the **dcr tool** this project targets. Written by `dcr new` / `dcr init` to the current tool version. |
| `type` | no | `app`, `lib`, `none` (defaults to `"none"`) |
| `license` | no | SPDX license identifier |
| `author` | no | Author |
| Field | Required | Description |
| --------- | -------- | ------------------------------------------- |
| `name` | yes | Project name |
| `version` | yes | Semantic version |
| `type` | no | `app`, `lib`, `none` (defaults to `"none"`) |
| `license` | no | SPDX license identifier |
| `author` | no | Author |
```toml
[package]
name = "my-app"
version = "0.1.0"
dcr-version = "0.8.4"
type = "app"
license = "MIT"
author = "John Doe"
```
### `package.dcr-version`
Optional pin of the DCR CLI the project was written for. On every `dcr.toml` load:
| Situation | Behaviour |
| ------------------------------ | ---------------------------------------------------------- |
| Field missing / empty | Warning: add `dcr-version` (set by `dcr new` / `dcr init`) |
| Running dcr **older** than pin | Warning: upgrade dcr (`dcr --update`) |
| Running dcr **newer** than pin | Warning: review changelog, bump the pin when ready |
| Equal | Silent |
| Invalid semver | Warning once, field ignored |
Never fails the command — warnings only. Pre-release suffixes (`1.0.0-dev`) are ignored for comparison (`1.0.0-dev` ≡ `1.0.0`).
## [build]
...
@@ -112,12 +96,7 @@ Never fails the command — warnings only. Pre-release suffixes (`1.0.0-dev`) ar
Settings from raw config (not in typed struct):
* `pkg_config` — list of packages queried for build-wide compiler/linker flags
Dependencies can also declare a system package directly, for example
`fmt = { pkg-config = "fmt" }`. This records the package in `dcr.lock` and applies
the flags returned by `pkg-config --cflags` and `pkg-config --libs`.
* `pkg_config` — list of pkg-config packages
* `ldscript` — linker script path
* `build.steps` / `build.post_steps` — codegen steps
@@ -206,8 +185,6 @@ See [workspaces](/docs/reference/workspaces).
Optional post-build step: format a FAT volume and copy built artifacts into a disk image. Runs after a successful package build (and after workspace member builds that define `[archive]`).
Requires DCR built with the `archive` Cargo feature (`cargo build --features archive`). Release binaries include this feature.
| Field | Required | Description |
| ------------ | -------- | ------------------------------------------------------------------------------------------- |
| `output` | yes | Image path relative to project root (`{profile}` allowed) |

View File

@@ -6,7 +6,7 @@ sidebar_label: Dependencies
## Formats
The `[dependencies]` section supports registry, path, Git, and `pkg-config` dependencies:
The `[dependencies]` section supports three formats:
### String (registry)
@@ -23,10 +23,10 @@ The version string is used as-is for registry lookup.
```toml
[dependencies]
dcr-math = { git = "https://github.com/dexoron/dcr-math-lib.git", tag = "v0.1.0" }
fmt = { git = "https://github.com/fmtlib/fmt", tag = "10.1.1" }
```
Fields: `git`, `branch`, `tag`, `rev`, `mode`, `include`, `lib`, `libs`.
Fields: `git`, `branch`, `tag`, `rev`.
### Table (path)
@@ -35,32 +35,6 @@ Fields: `git`, `branch`, `tag`, `rev`, `mode`, `include`, `lib`, `libs`.
mylib = { path = "../mylib" }
```
For a prebuilt external library, specify its layout explicitly. The three
arrays are paths relative to the dependency root (`include`, `lib`) and linker
names (`libs`):
```toml
[dependencies]
dcr-math = { path = "../deps/dcr-math", include = ["include"], lib = ["lib"], libs = ["dcr-math"] }
```
### Table (`pkg-config`)
Use an installed `.pc` package when the library is provided by the operating system
or another system package manager. DCR invokes `pkg-config --cflags` and
`pkg-config --libs`, preserving include, library, linker, and other flags:
```toml
[dependencies]
fmt = { pkg-config = "fmt" }
openssl = { pkg-config = ["openssl", "libcrypto"] }
```
The `pkg-config` executable must be available in `PATH`. The named `.pc` files must
be available through pkg-config's standard search paths or via `PKG_CONFIG_PATH`.
These dependencies are not downloaded or built by DCR; they are recorded in
`dcr.lock` with a `pkg-config+...` source.
## Registry
DCR uses a package registry for dependency lookup by name.
@@ -68,7 +42,7 @@ DCR uses a package registry for dependency lookup by name.
```toml
# ~/.dcr/config.toml
[registry.default]
url = "https://index.dcr.dexoron.tech"
url = "https://index.dcr.pm"
priority = 1
```
@@ -76,23 +50,7 @@ Registry priority: order in `config.toml`. The `DCR_INDEX_PATH` variable overrid
## Git dependencies
Git dependencies are cloned into `~/.dcr/git/`; their exact checked-out commit is written to `dcr.lock`.
Both Git and path dependencies have two modes:
* **DCR package:** the source has `dcr.toml`. DCR builds it before the consumer and uses the package name from its manifest for linking.
* **Prebuilt library:** it provides existing headers and binaries through `include`, `lib`, and `libs`. DCR passes them to the compiler/linker without building the dependency.
The mode is normally detected automatically. Use `mode = "build"` or `mode = "prebuild"` when a source contains both a manifest and prebuilt artifacts and you need to choose explicitly.
`dcr-math-lib` publishes both forms. Select its prebuilt library explicitly:
```toml
[dependencies]
dcr-math = { git = "https://github.com/dexoron/dcr-math-lib.git", tag = "v0.1.0", mode = "prebuild", include = ["include"], lib = ["lib"], libs = ["dcr-math"] }
```
DCR supports specifying branch/tag/rev for git sources:
Git dependencies are parsed and recorded in `dcr.lock`. DCR supports specifying branch/tag/rev for git sources:
* `branch` — switch to a branch
* `tag` — switch to a tag
@@ -101,7 +59,7 @@ DCR supports specifying branch/tag/rev for git sources:
## Path dependencies
Local paths may point at a DCR package or a prebuilt external library. A path DCR package is built before its consumer, including its own path/git dependencies. DCR detects dependency cycles. A prebuilt library is never built by DCR; it is linked from the directories declared in its dependency entry.
Local paths. DCR automatically discovers include and lib directories from the neighbor's `dcr.toml`.
```toml
[dependencies]
@@ -109,51 +67,18 @@ mylib = { path = "/abs/path/to/lib" }
mylib = { path = "../relative/path" }
```
For DCR packages, the package name from `dcr.toml` is used for linking (so the dependency key may differ from the library name). Header resolution includes the packaged `target/include` directory and link search includes `target/lib`.
### Recommended library layouts
Buildable DCR library:
```text
dcr-math-lib/
├── dcr.toml
└── src/
├── dcr_math.c
└── dcr_math.h
```
Prebuilt library:
```text
dcr-math-lib/
├── include/
│ └── dcr_math.h
└── lib/
└── libdcr-math.a # or .so / .lib
```
`libs` contains linker names without the `lib` prefix and file extension: use
`["dcr-math"]` for `libdcr-math.a`.
If one repository contains both forms, keep the prebuilt files in `include/` and `lib/` and select the mode explicitly:
```toml
[dependencies]
dcr-math = { git = "https://github.com/dexoron/dcr-math-lib.git", tag = "v0.1.0", mode = "prebuild", include = ["include"], lib = ["lib"], libs = ["dcr-math"] }
```
For a local copy, replace `git` with `path = "../dcr-math-lib"`. In `prebuild` mode DCR does not run the dependency build, even when `dcr.toml` is present.
*Note: Header resolution automatically checks the packaged `target/include` directory of path dependencies, ensuring consumer packages can find headers from compiled static or dynamic libraries.*
## dcr.lock
Dependency lock file. Contains package names and sources.
Created during `dcr build` for resolved registry, path, and Git dependencies. Not updated during `dcr add` — only on the next `dcr build`.
Created during `dcr build` when registry dependencies are present. Not updated during `dcr add` — only on the next `dcr build`.
## Resolution process
1. Resolve dependency sources (registry → git → path)
2. Fetch git dependencies into `~/.dcr/git/` and check out the requested ref
3. Build DCR package dependencies recursively
4. Collect `include_dirs`, `lib_dirs`, `libs` for the compiler
1. Load all dependencies (registry → git → path)
2. For path deps: recursively read their `dcr.toml`
3. For registry deps: search `index.json`
4. For git deps: clone to cache
5. Collect `include_dirs`, `lib_dirs`, `libs` for the compiler

View File

@@ -58,27 +58,3 @@ export DCR_INDEX_PATH=/custom/path/index.json
```
Default: `~/.dcr/index.json`.
## DCRUP_MIRROR
Download mirror for `dcrup` (prebuilt binaries only).
```bash
export DCRUP_MIRROR=auto # cf → gh → sf → ya (default)
export DCRUP_MIRROR=cf # CloudFlare CDN
export DCRUP_MIRROR=gh # GitHub Releases
export DCRUP_MIRROR=sf # SourceForge
export DCRUP_MIRROR=ya # Yandex CDN (RU fallback)
```
CLI override: `dcrup install stable --mirror cf`.
## DCRUP_HOME / DCRUP_BIN / DCRUP_REPO
Installer layout and source clone URL:
```bash
export DCRUP_HOME=~/.dcr
export DCRUP_BIN=~/.dcr/bin
export DCRUP_REPO=https://github.com/dexoron/dcr
```

View File

@@ -8,11 +8,8 @@ sidebar_label: Introduction
<summary>Quick reference</summary>
```bash
# Installation (dcrup)
curl -fsSL https://sh.dcr-tool.ru | sh -s -- self-install
export PATH="$HOME/.dcr/bin:$PATH"
dcrup install stable # auto: cf → gh → sf → ya
# dcrup install stable --mirror cf # CloudFlare / GitHub / SourceForge / Yandex
# Installation
curl -fsSL https://dcr.dexoron.su/install.sh | sh
# Create a project
dcr new my-app

View File

@@ -4,111 +4,6 @@ sidebar_label: Changelog
# Changelog
## 0.9.5 (2026-10-21)
* **Structured CLI output** — shared helpers now provide Cargo-like human, plain, and JSON output modes.
* **Color and diagnostics policy** — `--color`, `NO_COLOR`, `--quiet`, and `--verbose` are applied consistently across commands.
* **Build reporting** — lifecycle events and compiler diagnostics are available as structured JSON events.
* **Output lab** — sandbox scenarios cover help, lifecycle commands, compiler warnings/errors, stream capture, and broken pipes.
## 0.9.1 (2026-09-13)
* **`pkg-config` dependencies** — declare `fmt = { pkg-config = "fmt" }` or multiple package names in `[dependencies]`; DCR applies `.pc` compiler/linker flags and records the resolved package in `dcr.lock`.
* **`dcr add` support for `pkg-config`** — easily add system package dependencies with `dcr add fmt pkg-config:fmt` or `dcr add openssl pkg:openssl,libcrypto`.
* **`dcr tree` & IDE integration** — `pkg-config` packages are marked in `dcr tree` and resolved into compiler flags in `dcr gen` (`compile_commands.json`).
* **Fixed `dcr new` in non-ASCII / spaced paths** — initializing projects from folders with non-ASCII characters or spaces no longer fails validation.
## 0.9.0 (2026-08-31)
* **Download mirrors in `dcrup`** — `--mirror auto|cf|gh|sf|ya` and `DCRUP_MIRROR`.
Default `auto` tries **cf → gh → sf → ya** (CloudFlare CDN, GitHub, SourceForge, Yandex CDN).
* **Complete Path/Git dependencies** — DCR packages from `path` and `git` are built before their consumer. Git sources are cached in `~/.dcr/git`, support `branch`/`tag`/`rev`, and record the exact commit in `dcr.lock`.
* **Build and prebuild modes** — `path` and `git` dependencies can build a DCR package from `dcr.toml` or link existing `include`/`lib`/`libs` artifacts; `mode = "build"` / `"prebuild"` selects explicitly when both forms are present.
* **Prebuilt dependency examples** — documentation now shows the `dcr-math-lib` Git repository and recommended build/prebuilt layouts for both `git` and `path`.
* **Transitive dependency builds and cycle reporting** — DCR recursively builds DCR packages and reports a clear dependency chain for cycles.
* **Bare path arguments for `dcr add`** — `dcr add mylib ../mylib` now works in addition to the explicit `path:` form.
* **Removed `install.sh` / `install.ps1` / `install_bsd.sh`** — superseded by `dcrup`.
## 0.8.5 (2026-08-08)
* **`package.dcr-version`** — optional CLI version pin in `dcr.toml`.
`dcr new` / `dcr init` write the current version. On config load:
* missing / empty pin → warn "add dcr-version";
* dcr older than pin → warn "update dcr";
* dcr newer than pin → warn "check changelog, update pin";
* equal → silent.
Commands do not fail, warning only (once per path per process).
## 0.8.4 (2026-08-04)
**Added:**
* **`.dcr/` directory** — shared machine-readable build facts for IDE integrations:
* `.dcr/compile_commands.json`
* `.dcr/build-info.json` (`schemaVersion`, `artifact_path`, `profile`, …)
* `.dcr/toolchain.json` (compiler/debugger paths, moc/uic/rcc)
* `.dcr/ide/` (placeholder for IDE lock files)
* **`dcr gen project-info`** — `target`, `target_dir`, `artifact_path`, `artifact_kind`, `source_roots`, `include_globs`, `exclude_globs`; absolute/canonical paths.
* **`dcr build --print-artifact-path`** — one absolute artifact path line on stdout after a successful build.
* **`dcr gen … --quiet` / `-q`** — suppress human success logs for gen subcommands.
* **`.clangd`** — created on first gen with `CompilationDatabase: .dcr` (`# managed by dcr gen`); custom `.clangd` is not overwritten.
* **Helpers** `canonicalize_path`, `atomic_write`, `ensure_dcr_dir`; pure `resolve_artifact_path` via `platform::*`.
* **`dcr new` / `dcr init`** — add `.dcr/` to `.gitignore`.
**Changed (breaking):**
* **`compile_commands.json` moved** from project root to **`.dcr/compile_commands.json`**.\
clangd discovers it via `.clangd` / `--compile-commands-dir=.dcr`.\
CLion and VSCode generators updated accordingly.
* **Atomic write** for compile_commands (tmp + rename).
* **`gen vscode` / `gen clion` launch/run** — use the same artifact path resolver as `project-info` / `build-info.json`.
**Fixed:**
* Launch configs no longer hardcode `target/\<profile>/\<name>` without the Linux triple segment.
* Symlink/mount roots: best-effort canonicalize for root and compile database paths.
## 0.8.3 (2026-08-03)
### Added
* **`dcr run -- \<args>...`** — cargo-style argument forwarding after a bare `--`\
(`dcr run --release -- --test_help`). Applies to direct binary runs and `[run].cmd`.
* **Tests** — host target section `ldflags` without CLI `--target`; run-arg forwarding; `split_double_dash` unit tests.
### Changed
* **Native builds resolve the host triple** — without `--target` / package `build.target`, host sections such as\
`[build.x86_64-unknown-linux-gnu]` apply again (`cflags` / `ldflags` / toolchain).\
Previously the target was empty and those sections were ignored while artifacts already used the host triple path.
* **Empty target** — no more `Unknown target ''` warning.
* **`dcr run --help` / man `dcr-run`** — document `--` forwarding.
### Fixed
* **Native artifact paths on Windows and macOS** — without an explicit `--target` / `build.target`, artifacts use `target/\<profile>`, so `dcr run` and flat-bin find the build output.
* Target-specific `ldflags` missing on native host builds (e.g. micro-lang + `libsct-elf`).
* Spurious empty-target warning.
## 0.8.2 (2026-07-22)
### Added
* **Compile progress `[N/M]`** — live TTY status line (`compile pkg v0.1.0 [12/41]`) so long mono-package builds do not look hung.
* **DCR status style** — fixed-width verbs: `project`, `compile`, `dep`, `ready`, `pack`, `done`, `run`.
* **Cargo feature `archive`** — optional FAT packing via `fatfs` (`cargo build --features archive`). Release CI builds with the feature; without it `[archive]` fails with a clear message.
* **Tests** — `flat_bin_nasm_build`, package `build.target` without CLI `--target`, stricter workspace `clean --all`.
* **CI expansion** — unit + integration on Linux/macOS/Windows, archive feature job, rust-cache, clippy default + all-features (see `.github/workflows/ci.yml`).
### Changed
* **No forced host triple from CLI** — without `--target`, package/member `build.target` is honored (bare-metal / ISO `post_steps` paths).
* **Relative include/lib flags** (`-I`, `-i`, `-isystem`, `-idirafter`, `-L`, `-T`) absolutized against the package root under workspace builds.
* **`dcr clean --all`** — no spam for members without a local `target/` (shared root `target/`).
* **`error` / `warn`** — red / yellow on stderr; CLI fully English (`Hint:`).
* **Help / man** — list `add`, `lint`, `setup`; unknown command exits with code 1.
* **Tool NotFound** — `linker not found: ld.lld …` / `{tool} not found …` instead of raw `os error 2`.
## 0.8.1 (2026-07-20)
### Added
@@ -119,7 +14,7 @@ sidebar_label: Changelog
* **GAS / MASM / LLC** — object → `objcopy -O binary` → `\<stem>.bin`
* **C/C++** — objects → freestanding link → `objcopy -O binary` → `\<name>.bin`
* Requires `llvm-objcopy` / `objcopy` / `gobjcopy` except for NASM/FASM direct emit
* **`[archive]` section** — FAT12/16/32 disk images after build (`output`, `format`, `size`, `offset`, `label`, `bootsector`, `layout`). From 0.8.2 requires feature `archive`.
* **`[archive]` section** — after a successful build, pack a FAT disk image (`fatfs`): `output`, `format` (`fat12`/`fat16`/`fat32`), optional `size` (default 1.44 MiB), `offset`, `label`, `bootsector`, and `layout` (`from` → `to`, supports globs). `{profile}` works in paths.
* **Single-file `build.roots`** — a root may be a single source or header file, not only a directory.
### Changed
@@ -127,6 +22,10 @@ sidebar_label: Changelog
* **`--force`** also re-runs `build.steps` and `build.post_steps`.
* **`dcr run` on workspace-only root** — if `[run].cmd` is set, run that after build; otherwise delegate to a workspace member.
### Dependencies
* `fatfs = "0.3"` for FAT image packing.
## 0.8.0 (2026-07-18)
### Added

View File

@@ -15,8 +15,6 @@ dcr add mylib path:./lib # explicit path prefix
dcr add mylib git:https://github.com/user/repo # explicit git prefix
dcr add mylib github:user/repo # GitHub shorthand
dcr add mylib gitlab:user/repo # GitLab shorthand
dcr add fmt pkg-config:fmt # system package via pkg-config
dcr add openssl pkg:openssl,libcrypto # multiple pkg-config packages
```
Source prefixes:
@@ -25,7 +23,6 @@ Source prefixes:
* `git:` — generic git URL
* `github:` — expands to `https://github.com/\<user>/\<repo>`
* `gitlab:` — expands to `https://gitlab.com/\<user>/\<repo>`
* `pkg-config:` / `pkg:` — one or more packages resolved by `pkg-config`
* `http://` / `https://` / `git@` — full URL
Flags:
@@ -34,12 +31,7 @@ Flags:
* `--tag \<name>` — git tag
* `--rev \<hash>` — git commit
If source is omitted — DCR searches connected registries. A bare relative or absolute path is accepted as a path dependency.
For `pkg-config` dependencies, the referenced packages must already be installed
and provide `.pc` files. DCR invokes `pkg-config` during the build (using
`PATH` and `PKG_CONFIG_PATH`) and forwards the returned compiler and linker
flags; it does not download or build these packages.
If source is omitted — DCR searches connected registries.
## `dcr tree`

View File

@@ -8,7 +8,6 @@ sidebar_label: Contributing
```bash
git clone https://github.com/dexoron/dcr
# or a source mirror: GitVerse / SourceCraft / SourceForge / GitLab (see README)
cd dcr
cargo build
```
@@ -43,11 +42,10 @@ cargo test --all-targets
## CI
CI runs (see `.github/workflows/ci.yml`):
CI runs:
* `cargo fmt --check`
* `cargo clippy` (default + `--all-features`)
* `cargo clippy --all-targets -- -D warnings`
* `cargo check --all-targets --all-features`
* Unit + integration tests on Linux, macOS, Windows
* Extra Linux job with `--features archive` (FAT images)
* Tools on runners: clang, nasm, clang-format/tidy (Linux)
* Build on Linux, macOS, Windows
* Integration tests (compilation check)

View File

@@ -61,15 +61,6 @@ Use `kind = "flat-bin"` (NASM `-f bin`) and optional `[archive]` for a FAT disk
See [OS-dev recipe](/docs/recipes/os-flat-bin-archive).
## How do I choose a download mirror?
`dcrup install` uses `--mirror auto` by default and tries **cf → gh → sf → ya**.
```bash
dcrup install stable --mirror cf
export DCRUP_MIRROR=ya
```
## Lock file
`dcr.lock` is created during builds (`dcr build`) when registry dependencies are present. To force an update — delete `dcr.lock` and run `dcr build`.

View File

@@ -4,75 +4,28 @@ sidebar_label: Installation
# Installation
## dcrup (recommended)
## Linux (Dexoron Packages)
Install and switch DCR versions (stable / dev / night, pin `0.8.2`, optional build from source).
Configure your package manager at https://pkg.dexoron.su and install:
### Linux / macOS / BSD / Windows (bash)
**Arch Linux**
```sh
curl --proto '=https' --tlsv1.2 -sSf https://sh.dcr-tool.ru | sh -s -- self-install
export PATH="$HOME/.dcr/bin:$PATH"
dcrup install stable
sudo pacman -Sy dcr
```
Non-interactive install of DCR in one shot:
**Debian/Ubuntu**
```sh
curl --proto '=https' --tlsv1.2 -sSf https://sh.dcr-tool.ru | sh -s -- install stable
export PATH="$HOME/.dcr/bin:$PATH"
sudo apt update && sudo apt install dcr
```
### Windows (PowerShell)
```powershell
& ([scriptblock]::Create((irm https://ps1.dcr-tool.ru))) self-install
# $env:Path += ";$env:USERPROFILE\.dcr\bin"
dcrup install stable
```
After `self-install`, the command is **`dcrup`** (no `.sh` / `.ps1`) and is installed in `~/.dcr/bin` (Unix) or `%USERPROFILE%\.dcr\bin` (Windows).
### Common dcrup commands
**Fedora/RHEL**
```sh
dcrup install stable # latest stable prebuilt (auto: cf → gh → sf → ya)
dcrup install 0.8.2 # pin → 0.8.2@stable
dcrup install 0.8.2@dev
dcrup install stable --libc musl # Linux: musl asset (default: gnu)
dcrup install stable --mirror cf # CloudFlare CDN
dcrup install stable --mirror ya # Yandex CDN (RU fallback)
dcrup install stable --build # cargo build --features archive
dcrup install night # always build from branch dev HEAD
dcrup default 0.8.2
dcrup update
dcrup list
dcrup show
dcrup which
dcrup uninstall 0.8.2 # remove one installed version
dcrup uninstall --all # remove all installed versions
sudo dnf install dcr
```
Layout: `~/.dcr/toolchains/\<id>/dcr` and `~/.dcr/bin/dcr` → active version.
### Download mirrors
Prebuilt installs try **cf → gh → sf → ya** unless you pin a host.
| Code | URL | Notes |
| ---- | ------------------------------------------------------------------------------------------------------------ | -------------------------- |
| `cf` | `https://cdn-global.dcr-tool.ru/\<tag>/\<asset>` | CloudFlare CDN (worldwide) |
| `gh` | `https://github.com/dexoron/dcr/releases/download/\<tag>/\<asset>` | GitHub Releases |
| `sf` | `https://sourceforge.net/projects/dcr-tool/files/\<tag>/\<asset>/download` | SourceForge |
| `ya` | `https://cdn-ru.dcr-tool.ru/\<tag>/\<asset>` | Yandex CDN (RU fallback) |
```sh
dcrup install stable --mirror auto # default
export DCRUP_MIRROR=cf # persist for this shell
```
---
## Arch Linux (AUR)
```sh
@@ -92,12 +45,11 @@ brew install dcr
sudo snap install dcrup
```
> If classic Snap Store publishing is unavailable, install the `.snap` from [GitHub Releases](https://github.com/dexoron/dcr/releases/latest) with `--dangerous`.
## Nix (flake)
```sh
nix run github:dexoron/dcr
# or install to profile:
nix profile install github:dexoron/dcr
```
@@ -107,37 +59,48 @@ nix profile install github:dexoron/dcr
cargo install dcr
```
Note: crates.io builds may omit optional features. For FAT disk images (`[archive]`), prefer release binaries or:
## Linux / macOS (script)
```sh
cargo install dcr --features archive
curl -fsSL https://dcr.dexoron.su/install.sh | sh
```
## BSD (script)
```sh
curl -fsSL https://dcr.dexoron.su/install_bsd.sh | sh
```
## Windows (PowerShell)
```powershell
irm https://dcr.dexoron.su/install.ps1 | iex
```
## From source
```sh
git clone https://github.com/dexoron/dcr.git
cd dcr
cargo build --release --features archive
cd dcr && cargo build --release
ln -sf "$PWD/target/release/dcr" ~/.local/bin/dcr
# or manage versions with dcrup install night / --build
```
## Post-install
Verify the installation:
```bash
dcr --version
dcrup show # if installed via dcrup
```
Man pages (package installs / release assets):
Man pages are available after installation:
```bash
man dcr
man dcr-build
```
Registry (optional) — `~/.dcr/config.toml`:
To use the registry, create `~/.dcr/config.toml`:
```toml
[registry.default]

View File

@@ -6,13 +6,6 @@ sidebar_label: IDE Integration
## VS Code
Install the recommended [DCR extension by Dexoron-Labs](https://marketplace.visualstudio.com/items?itemName=Dexoron-Labs.dcr). Do not install Microsoft C/C++ extensions for DCR projects: DCR uses `clangd`. MS C/C++ is acceptable only when you need its debugger.
Recommended companion extensions:
* [Even Better TOML](https://marketplace.visualstudio.com/items?itemName=tamasfe.even-better-toml)
* [CodeLLDB](https://marketplace.visualstudio.com/items?itemName=vadimcn.vscode-lldb), or MS C/C++ for debugger support only
```bash
dcr gen vscode
```

View File

@@ -1,34 +0,0 @@
---
sidebar_label: CLI output
---
# CLI output (experimental)
The structured output implementation is being developed incrementally.
Currently these global options apply to diagnostics emitted through the logger:
```sh
dcr --output plain build
dcr --output json build
dcr --color never build
dcr --quiet build
dcr --verbose build
```
`--output` accepts `human` (default), `plain`, or `json`.
Diagnostics are written to stderr. JSON diagnostics are newline-delimited objects
with `schema_version: 1`, `event`, and `message` fields. Command statuses use the
shared output helpers, build reporting emits structured lifecycle events, and
compiler output is represented as JSON events with its original stream and text.
The protocol is still experimental: some raw command data and subprocess stdout
remain unstructured.
`--color` accepts `auto`, `always`, or `never`. Automatic coloring requires a
terminal and respects `NO_COLOR`. Plain and JSON diagnostics never add colors.
Quiet mode preserves warnings, errors, and compiler diagnostics; verbose mode
enables debug and trace logging. Arguments following `--` are passed through
unchanged.
Remaining work includes migrating the remaining raw command data and subprocess
stdout, improving progress rendering and contextual errors, and expanding
integration coverage for stdout/stderr and closed pipes.

View File

@@ -40,39 +40,23 @@ Main project configuration file. Located at the project root.
## [package]
| Field | Required | Description |
| ------------- | -------- | --------------------------------------------------------------------------------------------------------------- |
| `name` | yes | Project name |
| `version` | yes | Semantic version of the **project** |
| `dcr-version` | no | Semver of the **dcr tool** this project targets. Written by `dcr new` / `dcr init` to the current tool version. |
| `type` | no | `app`, `lib`, `none` (defaults to `"none"`) |
| `license` | no | SPDX license identifier |
| `author` | no | Author |
| Field | Required | Description |
| --------- | -------- | ------------------------------------------- |
| `name` | yes | Project name |
| `version` | yes | Semantic version |
| `type` | no | `app`, `lib`, `none` (defaults to `"none"`) |
| `license` | no | SPDX license identifier |
| `author` | no | Author |
```toml
[package]
name = "my-app"
version = "0.1.0"
dcr-version = "0.8.4"
type = "app"
license = "MIT"
author = "John Doe"
```
### `package.dcr-version`
Optional pin of the DCR CLI the project was written for. On every `dcr.toml` load:
| Situation | Behaviour |
| ------------------------------ | ---------------------------------------------------------- |
| Field missing / empty | Warning: add `dcr-version` (set by `dcr new` / `dcr init`) |
| Running dcr **older** than pin | Warning: upgrade dcr (`dcr --update`) |
| Running dcr **newer** than pin | Warning: review changelog, bump the pin when ready |
| Equal | Silent |
| Invalid semver | Warning once, field ignored |
Never fails the command — warnings only. Pre-release suffixes (`1.0.0-dev`) are ignored for comparison (`1.0.0-dev` ≡ `1.0.0`).
## [build]
...
@@ -112,12 +96,7 @@ Never fails the command — warnings only. Pre-release suffixes (`1.0.0-dev`) ar
Settings from raw config (not in typed struct):
* `pkg_config` — list of packages queried for build-wide compiler/linker flags
Dependencies can also declare a system package directly, for example
`fmt = { pkg-config = "fmt" }`. This records the package in `dcr.lock` and applies
the flags returned by `pkg-config --cflags` and `pkg-config --libs`.
* `pkg_config` — list of pkg-config packages
* `ldscript` — linker script path
* `build.steps` / `build.post_steps` — codegen steps
@@ -206,8 +185,6 @@ See [workspaces](/docs/reference/workspaces).
Optional post-build step: format a FAT volume and copy built artifacts into a disk image. Runs after a successful package build (and after workspace member builds that define `[archive]`).
Requires DCR built with the `archive` Cargo feature (`cargo build --features archive`). Release binaries include this feature.
| Field | Required | Description |
| ------------ | -------- | ------------------------------------------------------------------------------------------- |
| `output` | yes | Image path relative to project root (`{profile}` allowed) |

View File

@@ -6,7 +6,7 @@ sidebar_label: Dependencies
## Formats
The `[dependencies]` section supports registry, path, Git, and `pkg-config` dependencies:
The `[dependencies]` section supports three formats:
### String (registry)
@@ -23,10 +23,10 @@ The version string is used as-is for registry lookup.
```toml
[dependencies]
dcr-math = { git = "https://github.com/dexoron/dcr-math-lib.git", tag = "v0.1.0" }
fmt = { git = "https://github.com/fmtlib/fmt", tag = "10.1.1" }
```
Fields: `git`, `branch`, `tag`, `rev`, `mode`, `include`, `lib`, `libs`.
Fields: `git`, `branch`, `tag`, `rev`.
### Table (path)
@@ -35,32 +35,6 @@ Fields: `git`, `branch`, `tag`, `rev`, `mode`, `include`, `lib`, `libs`.
mylib = { path = "../mylib" }
```
For a prebuilt external library, specify its layout explicitly. The three
arrays are paths relative to the dependency root (`include`, `lib`) and linker
names (`libs`):
```toml
[dependencies]
dcr-math = { path = "../deps/dcr-math", include = ["include"], lib = ["lib"], libs = ["dcr-math"] }
```
### Table (`pkg-config`)
Use an installed `.pc` package when the library is provided by the operating system
or another system package manager. DCR invokes `pkg-config --cflags` and
`pkg-config --libs`, preserving include, library, linker, and other flags:
```toml
[dependencies]
fmt = { pkg-config = "fmt" }
openssl = { pkg-config = ["openssl", "libcrypto"] }
```
The `pkg-config` executable must be available in `PATH`. The named `.pc` files must
be available through pkg-config's standard search paths or via `PKG_CONFIG_PATH`.
These dependencies are not downloaded or built by DCR; they are recorded in
`dcr.lock` with a `pkg-config+...` source.
## Registry
DCR uses a package registry for dependency lookup by name.
@@ -68,7 +42,7 @@ DCR uses a package registry for dependency lookup by name.
```toml
# ~/.dcr/config.toml
[registry.default]
url = "https://index.dcr.dexoron.tech"
url = "https://index.dcr.pm"
priority = 1
```
@@ -76,23 +50,7 @@ Registry priority: order in `config.toml`. The `DCR_INDEX_PATH` variable overrid
## Git dependencies
Git dependencies are cloned into `~/.dcr/git/`; their exact checked-out commit is written to `dcr.lock`.
Both Git and path dependencies have two modes:
* **DCR package:** the source has `dcr.toml`. DCR builds it before the consumer and uses the package name from its manifest for linking.
* **Prebuilt library:** it provides existing headers and binaries through `include`, `lib`, and `libs`. DCR passes them to the compiler/linker without building the dependency.
The mode is normally detected automatically. Use `mode = "build"` or `mode = "prebuild"` when a source contains both a manifest and prebuilt artifacts and you need to choose explicitly.
`dcr-math-lib` publishes both forms. Select its prebuilt library explicitly:
```toml
[dependencies]
dcr-math = { git = "https://github.com/dexoron/dcr-math-lib.git", tag = "v0.1.0", mode = "prebuild", include = ["include"], lib = ["lib"], libs = ["dcr-math"] }
```
DCR supports specifying branch/tag/rev for git sources:
Git dependencies are parsed and recorded in `dcr.lock`. DCR supports specifying branch/tag/rev for git sources:
* `branch` — switch to a branch
* `tag` — switch to a tag
@@ -101,7 +59,7 @@ DCR supports specifying branch/tag/rev for git sources:
## Path dependencies
Local paths may point at a DCR package or a prebuilt external library. A path DCR package is built before its consumer, including its own path/git dependencies. DCR detects dependency cycles. A prebuilt library is never built by DCR; it is linked from the directories declared in its dependency entry.
Local paths. DCR automatically discovers include and lib directories from the neighbor's `dcr.toml`.
```toml
[dependencies]
@@ -109,51 +67,18 @@ mylib = { path = "/abs/path/to/lib" }
mylib = { path = "../relative/path" }
```
For DCR packages, the package name from `dcr.toml` is used for linking (so the dependency key may differ from the library name). Header resolution includes the packaged `target/include` directory and link search includes `target/lib`.
### Recommended library layouts
Buildable DCR library:
```text
dcr-math-lib/
├── dcr.toml
└── src/
├── dcr_math.c
└── dcr_math.h
```
Prebuilt library:
```text
dcr-math-lib/
├── include/
│ └── dcr_math.h
└── lib/
└── libdcr-math.a # or .so / .lib
```
`libs` contains linker names without the `lib` prefix and file extension: use
`["dcr-math"]` for `libdcr-math.a`.
If one repository contains both forms, keep the prebuilt files in `include/` and `lib/` and select the mode explicitly:
```toml
[dependencies]
dcr-math = { git = "https://github.com/dexoron/dcr-math-lib.git", tag = "v0.1.0", mode = "prebuild", include = ["include"], lib = ["lib"], libs = ["dcr-math"] }
```
For a local copy, replace `git` with `path = "../dcr-math-lib"`. In `prebuild` mode DCR does not run the dependency build, even when `dcr.toml` is present.
*Note: Header resolution automatically checks the packaged `target/include` directory of path dependencies, ensuring consumer packages can find headers from compiled static or dynamic libraries.*
## dcr.lock
Dependency lock file. Contains package names and sources.
Created during `dcr build` for resolved registry, path, and Git dependencies. Not updated during `dcr add` — only on the next `dcr build`.
Created during `dcr build` when registry dependencies are present. Not updated during `dcr add` — only on the next `dcr build`.
## Resolution process
1. Resolve dependency sources (registry → git → path)
2. Fetch git dependencies into `~/.dcr/git/` and check out the requested ref
3. Build DCR package dependencies recursively
4. Collect `include_dirs`, `lib_dirs`, `libs` for the compiler
1. Load all dependencies (registry → git → path)
2. For path deps: recursively read their `dcr.toml`
3. For registry deps: search `index.json`
4. For git deps: clone to cache
5. Collect `include_dirs`, `lib_dirs`, `libs` for the compiler

View File

@@ -58,27 +58,3 @@ export DCR_INDEX_PATH=/custom/path/index.json
```
Default: `~/.dcr/index.json`.
## DCRUP_MIRROR
Download mirror for `dcrup` (prebuilt binaries only).
```bash
export DCRUP_MIRROR=auto # cf → gh → sf → ya (default)
export DCRUP_MIRROR=cf # CloudFlare CDN
export DCRUP_MIRROR=gh # GitHub Releases
export DCRUP_MIRROR=sf # SourceForge
export DCRUP_MIRROR=ya # Yandex CDN (RU fallback)
```
CLI override: `dcrup install stable --mirror cf`.
## DCRUP_HOME / DCRUP_BIN / DCRUP_REPO
Installer layout and source clone URL:
```bash
export DCRUP_HOME=~/.dcr
export DCRUP_BIN=~/.dcr/bin
export DCRUP_REPO=https://github.com/dexoron/dcr
```

View File

@@ -1,18 +1,15 @@
---
sidebar_label: Введение
sidebar_label: Introduction
---
# DCR — Инструмент сборки C/C++ & Пакетный менеджер
# DCR — C/C++ Build Tool & Package Manager
<details>
<summary>Быстрая справка</summary>
<summary>Quick reference</summary>
```bash
# Installation (dcrup)
curl -fsSL https://sh.dcr-tool.ru | sh -s -- self-install
export PATH="$HOME/.dcr/bin:$PATH"
dcrup install stable # auto: cf → gh → sf → ya
# dcrup install stable --mirror cf # CloudFlare / GitHub / SourceForge / Yandex
# Installation
curl -fsSL https://dcr.dexoron.su/install.sh | sh
# Create a project
dcr new my-app
@@ -34,34 +31,34 @@ dcr gen vscode
</details>
## Содержание
## Contents
| Раздел | Описание |
| --------------------------------------------------- | -------------------------------------------- |
| [Начало работы](/docs/getting-started/installation) | Установка и первые шаги |
| [Команды](/docs/commands/project-commands) | Все CLI-команды DCR |
| [Ссылка](/docs/reference/dcr-toml) | Конфигурация, сборка, зависимости, платформы |
| [Тестирование](/docs/testing/test-framework) | Встроенный фреймворк тестирования |
| [Рецепты](/docs/recipes/cross-to-windows) | Типовые сценарии |
| [Интеграция с IDE](/docs/ide-integration) | VS Code, CLion, compile_commands.json |
| [Автоматическое обновление](/docs/self-update) | Автообновление |
| [Часто задаваемые вопросы](/docs/faq) | Частые вопросы |
| [Журнал изменений](/docs/changelog) | История версий |
| [Лицензия](/docs/license) | Лицензии DCR и вендорных библиотек |
| [Внести свой вклад](/docs/contributing) | Разработка DCR |
| Section | Description |
| ----------------------------------------------------- | --------------------------------------------- |
| [Getting Started](/docs/getting-started/installation) | Installation and first steps |
| [Commands](/docs/commands/project-commands) | All CLI commands |
| [Reference](/docs/reference/dcr-toml) | Configuration, build, dependencies, platforms |
| [Testing](/docs/testing/test-framework) | Built-in test framework |
| [Recipes](/docs/recipes/cross-to-windows) | Common scenarios |
| [IDE Integration](/docs/ide-integration) | VS Code, CLion, compile_commands.json |
| [Self Update](/docs/self-update) | Auto-update |
| [FAQ](/docs/faq) | Frequently asked questions |
| [Changelog](/docs/changelog) | Version history |
| [License](/docs/license) | DCR and vendored library licenses |
| [Contributing](/docs/contributing) | DCR development |
## Особенности
## Features
* **Инкрементальная сборка** — mtime + `.d` headers + SHA256 fingerprint
* **Параллельная компиляция** — thread::scope, атомарная очередь задач
* **Incremental builds** — mtime + `.d` headers + SHA256 fingerprint
* **Parallel compilation** — thread::scope, atomic task queue
* **7 backends** — gcc/clang (unix_cc), MSVC/clang-cl (msvc), GAS, NASM, MASM, FASM, LLVM IR
* **8 project kinds** — bin, staticlib, sharedlib, efi, elf, none, custom, flat-bin
* **Disk images** — optional `[archive]` packs FAT12/16/32 images after build
* **Cross-compilation** — short names (linux, windows, macos) и полные triples
* **Профили** — debug / release с переопределением любого поля
* **Workspaces** — мультипакетные проекты с топологической сортировкой
* **Registry + Git + Path** — три механизма зависимостей
* **Генерация IDE** — VS Code, CLion, compile_commands.json, JSON metadata
* **pkg-config** — автоматический поиск системных библиотек
* **Команда `--help` для каждой команды** — `dcr build --help`, `dcr new --help` и т. д.
* **Справочные страницы** — `man dcr`, `man dcr-build`, `man dcr-new`
* **Cross-compilation** — short names and full triples
* **Profiles** — debug / release with field overrides
* **Workspaces** — multi-package projects with topological sort
* **Registry + Git + Path** — three dependency mechanisms
* **IDE generation** — VS Code, CLion, compile_commands.json, JSON metadata
* **pkg-config** — automatic system library discovery
* **Per-command `--help`** — `dcr build --help`, `dcr new --help`, etc.
* **Man pages** — `man dcr`, `man dcr-build`, `man dcr-new`

View File

@@ -1,113 +1,8 @@
---
sidebar_label: Список изменений
sidebar_label: Changelog
---
# Список изменений
## 0.9.5 (2026-10-21)
* **Structured CLI output** — shared helpers now provide Cargo-like human, plain, and JSON output modes.
* **Color and diagnostics policy** — `--color`, `NO_COLOR`, `--quiet`, and `--verbose` are applied consistently across commands.
* **Build reporting** — lifecycle events and compiler diagnostics are available as structured JSON events.
* **Output lab** — sandbox scenarios cover help, lifecycle commands, compiler warnings/errors, stream capture, and broken pipes.
## 0.9.1 (2026-09-13)
* **`pkg-config` dependencies** — declare `fmt = { pkg-config = "fmt" }` or multiple package names in `[dependencies]`; DCR applies `.pc` compiler/linker flags and records the resolved package in `dcr.lock`.
* **`dcr add` support for `pkg-config`** — easily add system package dependencies with `dcr add fmt pkg-config:fmt` or `dcr add openssl pkg:openssl,libcrypto`.
* **`dcr tree` & IDE integration** — `pkg-config` packages are marked in `dcr tree` and resolved into compiler flags in `dcr gen` (`compile_commands.json`).
* **Fixed `dcr new` in non-ASCII / spaced paths** — initializing projects from folders with non-ASCII characters or spaces no longer fails validation.
## 0.9.0 (2026-08-31)
* **Download mirrors in `dcrup`** — `--mirror auto|cf|gh|sf|ya` and `DCRUP_MIRROR`.
Default `auto` tries **cf → gh → sf → ya** (CloudFlare CDN, GitHub, SourceForge, Yandex CDN).
* **Complete Path/Git dependencies** — DCR packages from `path` and `git` are built before their consumer. Git sources are cached in `~/.dcr/git`, support `branch`/`tag`/`rev`, and record the exact commit in `dcr.lock`.
* **Build and prebuild modes** — `path` and `git` dependencies can build a DCR package from `dcr.toml` or link existing `include`/`lib`/`libs` artifacts; `mode = "build"` / `"prebuild"` selects explicitly when both forms are present.
* **Prebuilt dependency examples** — documentation now shows the `dcr-math-lib` Git repository and recommended build/prebuilt layouts for both `git` and `path`.
* **Transitive dependency builds and cycle reporting** — DCR recursively builds DCR packages and reports a clear dependency chain for cycles.
* **Bare path arguments for `dcr add`** — `dcr add mylib ../mylib` now works in addition to the explicit `path:` form.
* **Removed `install.sh` / `install.ps1` / `install_bsd.sh`** — superseded by `dcrup`.
## 0.8.5 (2026-08-08)
* **`package.dcr-version`** — optional CLI version pin in `dcr.toml`.
`dcr new` / `dcr init` write the current version. On config load:
* missing / empty pin → warn "add dcr-version";
* dcr older than pin → warn "update dcr";
* dcr newer than pin → warn "check changelog, update pin";
* equal → silent.
Commands do not fail, warning only (once per path per process).
## 0.8.4 (2026-08-04)
**Added:**
* **`.dcr/` directory** — shared machine-readable build facts for IDE integrations:
* `.dcr/compile_commands.json`
* `.dcr/build-info.json` (`schemaVersion`, `artifact_path`, `profile`, …)
* `.dcr/toolchain.json` (compiler/debugger paths, moc/uic/rcc)
* `.dcr/ide/` (placeholder for IDE lock files)
* **`dcr gen project-info`** — `target`, `target_dir`, `artifact_path`, `artifact_kind`, `source_roots`, `include_globs`, `exclude_globs`; absolute/canonical paths.
* **`dcr build --print-artifact-path`** — one absolute artifact path line on stdout after a successful build.
* **`dcr gen … --quiet` / `-q`** — suppress human success logs for gen subcommands.
* **`.clangd`** — created on first gen with `CompilationDatabase: .dcr` (`# managed by dcr gen`); custom `.clangd` is not overwritten.
* **Helpers** `canonicalize_path`, `atomic_write`, `ensure_dcr_dir`; pure `resolve_artifact_path` via `platform::*`.
* **`dcr new` / `dcr init`** — add `.dcr/` to `.gitignore`.
**Changed (breaking):**
* **`compile_commands.json` moved** from project root to **`.dcr/compile_commands.json`**.\
clangd discovers it via `.clangd` / `--compile-commands-dir=.dcr`.\
CLion and VSCode generators updated accordingly.
* **Atomic write** for compile_commands (tmp + rename).
* **`gen vscode` / `gen clion` launch/run** — use the same artifact path resolver as `project-info` / `build-info.json`.
**Fixed:**
* Launch configs no longer hardcode `target/\<profile>/\<name>` without the Linux triple segment.
* Symlink/mount roots: best-effort canonicalize for root and compile database paths.
## 0.8.3 (2026-08-03)
### Добавлено:
* **`dcr run -- \<args>...`** — cargo-style argument forwarding after a bare `--`\
(`dcr run --release -- --test_help`). Applies to direct binary runs and `[run].cmd`.
* **Tests** — host target section `ldflags` without CLI `--target`; run-arg forwarding; `split_double_dash` unit tests.
### Изменено:
* **Native builds resolve the host triple** — without `--target` / package `build.target`, host sections such as\
`[build.x86_64-unknown-linux-gnu]` apply again (`cflags` / `ldflags` / toolchain).\
Previously the target was empty and those sections were ignored while artifacts already used the host triple path.
* **Empty target** — no more `Unknown target ''` warning.
* **`dcr run --help` / man `dcr-run`** — document `--` forwarding.
### Исправлено:
* **Native artifact paths on Windows and macOS** — without an explicit `--target` / `build.target`, artifacts use `target/\<profile>`, so `dcr run` and flat-bin find the build output.
* Target-specific `ldflags` missing on native host builds (e.g. micro-lang + `libsct-elf`).
* Spurious empty-target warning.
## 0.8.2 (2026-07-22)
### Добавлено
* **Compile progress `[N/M]`** — live TTY status line (`compile pkg v0.1.0 [12/41]`) so long mono-package builds do not look hung.
* **DCR status style** — fixed-width verbs: `project`, `compile`, `dep`, `ready`, `pack`, `done`, `run`.
* **Cargo feature `archive`** — optional FAT packing via `fatfs` (`cargo build --features archive`). Release CI builds with the feature; without it `[archive]` fails with a clear message.
* **Tests** — `flat_bin_nasm_build`, package `build.target` without CLI `--target`, stricter workspace `clean --all`.
* **CI expansion** — unit + integration on Linux/macOS/Windows, archive feature job, rust-cache, clippy default + all-features (see `.github/workflows/ci.yml`).
### Изменено
* **No forced host triple from CLI** — without `--target`, package/member `build.target` is honored (bare-metal / ISO `post_steps` paths).
* **Relative include/lib flags** (`-I`, `-i`, `-isystem`, `-idirafter`, `-L`, `-T`) absolutized against the package root under workspace builds.
* **`dcr clean --all`** — no spam for members without a local `target/` (shared root `target/`).
* **`error` / `warn`** — red / yellow on stderr; CLI fully English (`Hint:`).
* **Help / man** — list `add`, `lint`, `setup`; unknown command exits with code 1.
* **Tool NotFound** — `linker not found: ld.lld …` / `{tool} not found …` instead of raw `os error 2`.
# Changelog
## 0.8.1 (2026-07-20)
@@ -119,7 +14,7 @@ sidebar_label: Список изменений
* **GAS / MASM / LLC** — object → `objcopy -O binary` → `\<stem>.bin`
* **C/C++** — objects → freestanding link → `objcopy -O binary` → `\<name>.bin`
* Requires `llvm-objcopy` / `objcopy` / `gobjcopy` except for NASM/FASM direct emit
* **`[archive]` section** — FAT12/16/32 disk images after build (`output`, `format`, `size`, `offset`, `label`, `bootsector`, `layout`). From 0.8.2 requires feature `archive`.
* **`[archive]` section** — after a successful build, pack a FAT disk image (`fatfs`): `output`, `format` (`fat12`/`fat16`/`fat32`), optional `size` (default 1.44 MiB), `offset`, `label`, `bootsector`, and `layout` (`from` → `to`, supports globs). `{profile}` works in paths.
* **Single-file `build.roots`** — a root may be a single source or header file, not only a directory.
### Changed
@@ -127,6 +22,10 @@ sidebar_label: Список изменений
* **`--force`** also re-runs `build.steps` and `build.post_steps`.
* **`dcr run` on workspace-only root** — if `[run].cmd` is set, run that after build; otherwise delegate to a workspace member.
### Dependencies
* `fatfs = "0.3"` for FAT image packing.
## 0.8.0 (2026-07-18)
### Added
@@ -198,7 +97,7 @@ sidebar_label: Список изменений
* `default_target_triple()` now respects `target_env` — Linux (gnu/musl) and Windows (msvc/gnu) use the correct environment instead of hardcoded values.
### Исправлено
### Fixed
* **macOS Apple Silicon builds failed with `_main` undefined** — `--target=` is now passed to ldflags, not just cflags. `default_target_triple()` uses `std::env::consts::ARCH` on macOS instead of hardcoded `x86_64`.
* **GitHub Stars and GPL-3.0 badges not rendering in README** — badge block converted to pure HTML.
@@ -207,88 +106,88 @@ sidebar_label: Список изменений
* Default target resolution extracted into shared `default_target_triple()` — removed duplication across build, run, clean.
## 0.7.1 (02.06.2026)
## 0.7.1 (2026-06-02)
### Added
* **`--help` для всех команд** — `dcr build --help`, `dcr run --help`, `dcr new --help`,
* **`--help` for all commands** — `dcr build --help`, `dcr run --help`, `dcr new --help`,
`dcr init --help`, `dcr clean --help`, `dcr add --help`, `dcr fmt --help`,
`dcr setup --help`, `dcr tree --help`, `dcr gen --help`, `dcr --update --help`,
`dcr test --help`. Во всех результатах вывода используются стилизованные заголовки (зелёного цвета) и строки с информацией об использовании (голубого цвета).
* **Справочные страницы** — 12 страниц в формате troff в каталоге `man/man1/`: `dcr.1`, `dcr-build.1`,
`dcr test --help`. All output uses styled headers (green) and usage lines (cyan).
* **Man pages** — 12 troff pages in `man/man1/`: `dcr.1`, `dcr-build.1`,
`dcr-run.1`, `dcr-new.1`, `dcr-init.1`, `dcr-clean.1`, `dcr-add.1`, `dcr-test.1`,
`dcr-gen.1`, `dcr-fmt.1`, `dcr-tree.1`, `dcr-setup.1`.
* **Справочные страницы во всех пакетах** — install.sh, install_bsd.sh, PKGBUILD из AUR,
* **Man pages in all packaging** — install.sh, install_bsd.sh, AUR PKGBUILD,
Debian (cargo-deb), RPM (cargo-generate-rpm), Nix (postInstall), Homebrew
(ресурс), Snap, ресурсы релизов GitHub.
* **Проверка имени проекта** — команды `dcr init` и `dcr new` теперь проверяют имена перед созданием файлов
. Допускаются только буквы ASCII, цифры, символы `_` и `-`.
* **Поля `documentation` и `homepage`** — добавлены в файл `Cargo.toml`.
* **Оптимизации профиля релиза** — `opt-level = "z"`, LTO, `codegen-units = 1`,
`panic = "abort"`, `strip = true` для уменьшения размера бинарных файлов.
* **Платформы Linux i686, armv7, riscv64** — добавлены в рабочий процесс выпуска и скрипты установки.
* **Платформы Linux musl i686 и armv7** — скомпилированы с помощью zigbuild в системе непрерывной интеграции (CI).
* **Пакеты AUR** — рабочий процесс публикации `dcr-dev`, `dcr-dev-bin`.
* **Публикация Snap** — автоматическая публикация Snapcraft в рамках непрерывной интеграции (CI).
* **Значок Snap** — в файле README.
(resource), Snap, GitHub Release assets.
* **Project name validation** — `dcr init` and `dcr new` now validate names before
creating files. Only ASCII letters, digits, `_` and `-` are allowed.
* **`documentation` and `homepage` fields** — added to `Cargo.toml`.
* **Release profile optimizations** — `opt-level = "z"`, LTO, `codegen-units = 1`,
`panic = "abort"`, `strip = true` for smaller binaries.
* **Linux i686, armv7, riscv64 targets** — added to release workflow and install scripts.
* **Linux musl i686, armv7 targets** — cross-compiled via zigbuild in CI.
* **AUR packages** — `dcr-dev`, `dcr-dev-bin` publishing workflow.
* **Snap publishing** — automated Snapcraft publishing in CI.
* **Snap badge** — in README.
### Changed
* **`validate_package_name` стал общедоступным** — его можно вызывать из команд CLI.
* **Таблица платформы README** — реорганизована: варианты libc вынесены в отдельные строки по ОС,
удалены лишние столбцы. Обновлен список архитектур Linux.
* **Вывод `gen.rs` без аргументов** — теперь используется стилизованный вывод вместо необработанного `eprintln!`.
* **`tree.rs`, `fmt.rs` и `setup.rs`** — теперь поддерживают аргументы для опции `--help`.
* **Команды установки из файла README** — `| bash` → `| sh` для обеспечения совместимости с POSIX.
* **`validate_package_name` made public** — callable from CLI commands.
* **README platform table** — reorganized: libc variants as separate OS rows,
removed extra columns. Linux architecture list updated.
* **`gen.rs` no-args output** — now uses styled output instead of raw `eprintln!`.
* **`tree.rs`, `fmt.rs`, and `setup.rs`** — now accept arguments for `--help`.
* **README install commands** — `| bash` → `| sh` for POSIX compatibility.
### Fixed
* **`dcr new \<invalid-name>` создает каталог, а затем завершается с ошибкой** — теперь проверка
выполняется до начала любых операций с файлами.
* **`dcr init` при указании недопустимого имени каталога** — то же исправление.
* **Отсутствующие справочные страницы в установленных пакетах** — теперь поставляются во всех форматах.
* **Ложное срабатывание по букве диска Windows** — в модуле анализа файлов зависимостей.
* **CRLF (`\r\n`) вызывает сбой в работе парсера зависимостей** — теперь поддерживается обработка смешанных символов окончания строк.
* **Новая строка после обратного слеша не обработана** — при обработке экранирующих символов в функции `parse_d_file`.
* **`dcr new \<invalid-name>` creates directory then fails** — validation now
happens before any file operations.
* **`dcr init` on invalid directory name** — same fix.
* **Man pages missing in installed packages** — now shipped in all formats.
* **Windows drive letter false positive** — in dependency file parser.
* **CRLF (`\r\n`) breaks dependency parser** — now handles mixed line endings.
* **Newline after backslash not consumed** — in `parse_d_file` escape handling.
## 0.7.0 (01.06.2026)
## 0.7.0 (2026-06-01)
### Added
* **Поддержка целевых платформ OpenBSD и NetBSD** — полная маршрутизация по платформам с динамически генерируемыми тройками целевых параметров с использованием `std::env::consts::ARCH` и `std::env::consts::OS`. Затрагивает команды `build`, `run`, `clean` и модуль платформы.
* **`src/platform/bsd.rs`** — новый специальный модуль платформы BSD, общий для FreeBSD, OpenBSD и NetBSD, предоставляющий `bin_path`, `lib_path`, `elf_path`, `efi_path` и `shared_lib_path`.
* **`Параметр конфигурации build.out_dir`** — настраиваемый каталог вывода, который переопределяет путь по умолчанию `target/\<triple>/\<profile>` для конечных артефактов. Поддерживается в `build`, `run` и при проверке конфигурации.
* **Команда `dcr fmt`** — новая команда CLI, которая форматирует все исходные файлы C/C++ (`*.c`, `*.cpp`, `*.h`, `*.hpp`) в `src/` и `tests/` с помощью `clang-format`.
* **Инкрементальная компоновка** — функция `needs_link()` в `common.rs`, которая проверяет, не является ли какой-либо объектный файл более новым, чем скомпонованный результат, пропуская ненужную повторную компоновку. Реализовано для всех бэкэндов (`unix_cc`, `msvc`, `gas`, `nasm`).
* **`build.kind = «none»` и `«custom»`** — два новых типа проектов для специальных сценариев сборки, при которых не создается стандартный артефакт.
* **`install_bsd.sh`** — специальный скрипт установки, совместимый с POSIX, для систем BSD (FreeBSD, OpenBSD, NetBSD) с режимами загрузки бинарных файлов и сборки из исходного кода.
* **Поддержка Linux ARM64 в `install.sh`** — добавлено определение целевой тройки `Linux:aarch64|Linux:arm64` для загрузки готовых бинарных файлов.
* **Обнаружение ОС BSD в `install.sh`** — обнаружение FreeBSD, OpenBSD, NetBSD и определение целевой тройки.
* **`rust-toolchain.toml`** — явное привязывание инструментария к каналу `stable`.
* **Интеграционные тесты** — `build_with_target_config` (проверяет `build.target = «linux»`) и `build_with_out_dir` (проверяет настраиваемый каталог вывода).
* **`get_build_string_with_profile` стал `pub`** — чтобы `run.rs` мог определять конфигурацию настраиваемого каталога вывода.
* **OpenBSD and NetBSD target support** — full platform routing with dynamic target triples using `std::env::consts::ARCH` and `std::env::consts::OS`. Affects `build`, `run`, `clean` commands and the platform module.
* **`src/platform/bsd.rs`** — new BSD platform module (shared by FreeBSD, OpenBSD, NetBSD) providing `bin_path`, `lib_path`, `elf_path`, `efi_path`, `shared_lib_path`.
* **`build.out_dir` config option** — custom output directory that overrides the default `target/\<triple>/\<profile>` path for final artifacts. Supported in `build`, `run`, and config validation.
* **`dcr fmt` command** — new CLI command that formats all C/C++ source files (`*.c`, `*.cpp`, `*.h`, `*.hpp`) in `src/` and `tests/` using `clang-format`.
* **Incremental linking** — `needs_link()` in `common.rs` checks if any object file is newer than the linked output, skipping unnecessary relinking. Implemented for all backends (`unix_cc`, `msvc`, `gas`, `nasm`).
* **`build.kind = "none"` and `"custom"`** — two new project kinds for special build scenarios that don't produce standard artifacts.
* **`install_bsd.sh`** — POSIX-compliant installation script for BSD systems (FreeBSD, OpenBSD, NetBSD) with binary download and source build modes.
* **Linux ARM64 support in `install.sh`** — added `Linux:aarch64|Linux:arm64` target detection for pre-built binary downloads.
* **BSD OS detection in `install.sh`** — detects FreeBSD, OpenBSD, NetBSD and determines target triple.
* **`rust-toolchain.toml`** — explicit toolchain pinning to `stable` channel.
* **Integration tests** — `build_with_target_config` (verifies `build.target = "linux"`) and `build_with_out_dir` (validates custom output directory).
* **`get_build_string_with_profile` made `pub`** — so `run.rs` can determine custom output directory configuration.
### Changed
* **Изменена семантика `build.target`** — теперь строго содержит тройку целей (например, `x86_64-unknown-linux-gnu`) или короткое имя (`linux`, `macos`, `windows`). Больше не используется в качестве пользовательского каталога вывода — эта функциональность перенесена в `build.out_dir`.
* **`build.standard` стал опциональным** — изменен с `String` на `Option\<String>`. Проверка обеспечивает только непустоту для языков, отличных от ASM. Пропускается в выводе `dcr.toml`, если пуст.
* **`dcr run` с `out_dir`** — теперь определяет целевой каталог с учетом `build.out_dir`, если он настроен, через `get_build_string_with_profile()` из `build.rs`.
* **`collect_sources()` возвращает пустой вектор** вместо ошибки, если не найдено ни одного исходного файла, что позволяет проектам с `kind = «none»` или `kind = «custom»` не иметь исходных файлов.
* **Рефакторинг рабочего процесса выпуска CI/CD** — `git2` стал целевым (без vendored-openssl на Windows), кросс-компиляция на основе Zig для целей Linux, отличных от x86_64, очистка версий пакетов Arch Linux (тире → точки), символьная ссылка `gmake` для NetBSD.
* **Таблица совместимости README** — статус сборки/работы на FreeBSD, OpenBSD, NetBSD повышен с «сообщество/по возможности» до «официально поддерживается».
* **Обновлена документация** — `build-section.md` описывает новые поля `build.target` и `build.out_dir`. `target-directory.md` переписан для уточнения различия.
* **`build.target` semantics changed** — now strictly contains a target triple (e.g., `x86_64-unknown-linux-gnu`) or short name (`linux`, `macos`, `windows`). No longer used as custom output directory — this functionality moved to `build.out_dir`.
* **`build.standard` made optional** — changed from `String` to `Option\<String>`. Validation only enforces non-empty for non-ASM languages. Skipped in `dcr.toml` output if empty.
* **`dcr run` with `out_dir`** — now determines target directory respecting `build.out_dir` via `get_build_string_with_profile()` from `build.rs`.
* **`collect_sources()` returns empty vector** instead of error when no sources are found, allowing `kind = "none"` or `kind = "custom"` projects with no source files.
* **CI/CD release workflow refactored** — `git2` made target-specific (no vendored-openssl on Windows), Zig-based cross-compilation for non-x86_64 Linux targets, Arch Linux package version cleanup (dashes → dots), `gmake` symlink for NetBSD.
* **README compatibility table** — FreeBSD, OpenBSD, NetBSD build/run status upgraded from "community/best-effort" to "officially supported".
* **Documentation updated** — `build-section.md` describes new `build.target` and `build.out_dir` fields. `target-directory.md` rewritten to clarify the distinction.
### Fixed
* **stdout/stderr `dcr run` не наследуются** — вывод дочернего процесса захватывался и выводился вручную, что приводило к сбоям интерактивных программ. Исправлено путем перехода на `Command::status()`.
* **Условие гонки в CI релиза** — задания матрицы сборки могли загружать ресурсы в релиз, который еще не существовал. Исправлено добавлением специального задания `create-release`.
* **Релиз GHA — переопределение стабильного набора инструментов** — устранены проблемы с переопределением набора инструментов Rust в CI.
* **Очистка версий пакетов Arch Linux** — строки версий с дефисами (например, `0.7.0-dev`) являются недопустимыми для `pkgver` в Arch Linux. Исправлено путем замены дефисов точками.
* **Права доступа GPG после Docker** — операции Docker изменяли владельца каталога GPG. Исправлено путем запуска `chown` после команд Docker.
* **Пути к артефактам пакетов RPM** — артефакты RPM размещались в `rpm/x86_64/` вместо `fedora/x86_64/`. Исправлено в рабочем процессе Dexoron Packages Index.
* **Надежность разбора JSON в `install.sh`** — добавлен `jq` в качестве основного парсера с резервным вариантом `python3` для поиска релизов в канале dev.
* **stdout/stderr not inherited in `dcr run`** — child process output was captured and manually printed, breaking interactive programs. Fixed by switching to `Command::status()`.
* **Race condition in release CI** — matrix build jobs could upload assets to a release that didn't exist yet. Fixed by adding a dedicated `create-release` job.
* **Release GHA — stable toolchain override** — fixed Rust toolchain override issues in CI.
* **Arch Linux package version sanitization** — version strings with dashes (e.g., `0.7.0-dev`) are invalid for `pkgver`. Fixed by replacing dashes with dots.
* **GPG permissions after Docker** — Docker operations changed GPG directory ownership. Fixed by running `chown` after Docker commands.
* **RPM artifact paths** — RPM artifacts were placed in `rpm/x86_64/` instead of `fedora/x86_64/`. Fixed in Dexoron Packages Index workflow.
* **JSON parsing reliability in `install.sh`** — added `jq` as primary parser with `python3` fallback for dev channel release lookup.
### Удалено:
### Removed
* **Вспомогательная функция `format_roots()`** — удалена из `common.rs`. Использовалась только старым путем обработки ошибок в `collect_sources()`.
* **Отдельные шаги загрузки артефактов для каждой дистрибуции** — три отдельных шага `actions/download-artifact` заменены на унифицированный `gh release download --clobber`.
* **`format_roots()` helper function** — removed from `common.rs`. Was only used by the old error handling path in `collect_sources()`.
* **Per-distribution artifact download steps** — three separate `actions/download-artifact` steps replaced with unified `gh release download --clobber`.

View File

@@ -1,12 +1,12 @@
---
sidebar_label: Команды сборки (build, run, clean)
sidebar_label: Build commands (build, run, clean)
---
# Команды сборки
# Build Commands
## `dcr build`
Собирает проект по `dcr.toml`.
Builds the project according to `dcr.toml`.
```bash
dcr build # debug profile
@@ -19,13 +19,13 @@ dcr build --verbose # show compilation commands
dcr build --workspace pkg-a # build specific workspace package
```
Артефакты: `target/\<triple>/\<profile>/\<binary-name>` (Linux с явным целевым объектом).
Artifacts: `target/\<triple>/\<profile>/\<binary-name>` (Linux with explicit target).
With `[archive]` in `dcr.toml`, a FAT disk image is packed after a successful build.
## `dcr run`
Собирает (если исходники новее артефакта) и запускает бинарник.
Builds (if sources are newer than artifacts) and runs the binary.
```bash
dcr run
@@ -37,11 +37,11 @@ On a **workspace-only** root: if `[run].cmd` is set, that command is used after
## `dcr clean`
Удаляет директорию `target/`(или `target/\<target>/\<profile>`).
Removes `target/` directory (or `target/\<target>/\<profile>`).
```bash
dcr clean
dcr clean --release # очистить target/release/
dcr clean --target windows # очистить target/x86_64-pc-windows-msvc/
dcr clean --all # очистить все пакеты workspace
dcr clean --release # target/release/ only
dcr clean --target windows # target/x86_64-pc-windows-msvc/
dcr clean --all # clean all workspace packages
```

View File

@@ -1,12 +1,12 @@
---
sidebar_label: Команды зависимостей (add, tree)
sidebar_label: Dependency commands (add, tree)
---
# Команды зависимостей
# Dependency Commands
## `dcr add \<name> [source]`
Добавляет зависимость в `dcr.toml`.
Adds a dependency to `dcr.toml`.
```bash
dcr add fmt # registry lookup
@@ -15,41 +15,33 @@ dcr add mylib path:./lib # explicit path prefix
dcr add mylib git:https://github.com/user/repo # explicit git prefix
dcr add mylib github:user/repo # GitHub shorthand
dcr add mylib gitlab:user/repo # GitLab shorthand
dcr add fmt pkg-config:fmt # system package via pkg-config
dcr add openssl pkg:openssl,libcrypto # multiple pkg-config packages
```
Префиксы источника:
Source prefixes:
* `path:` — локальный путь
* `git:` — URL адрес git-репозитория
* `github:` — расширение `https://github.com/\<user>/\<repo>`
* `gitlab:` — расширение `https://gitlab.com/\<user>/\<repo>`
* `pkg-config:` / `pkg:` — one or more packages resolved by `pkg-config`
* `http://` / `https://` / `git@` — полный URL
* `path:` — local path
* `git:` — generic git URL
* `github:` — expands to `https://github.com/\<user>/\<repo>`
* `gitlab:` — expands to `https://gitlab.com/\<user>/\<repo>`
* `http://` / `https://` / `git@` — full URL
Флаги:
Flags:
* `--branch \<name>` — git ветка
* `--branch \<name>` — git branch
* `--tag \<name>` — git tag
* `--rev \<hash>` — git commit
Если источник не указан — DCR выполняет поиск в подключенных реестрах. A bare relative or absolute path is accepted as a path dependency.
For `pkg-config` dependencies, the referenced packages must already be installed
and provide `.pc` files. DCR invokes `pkg-config` during the build (using
`PATH` and `PKG_CONFIG_PATH`) and forwards the returned compiler and linker
flags; it does not download or build these packages.
If source is omitted — DCR searches connected registries.
## `dcr tree`
Показывает дерево зависимостей проекта.
Displays the project dependency tree.
```bash
dcr tree
```
Пример вывода:
Example output:
```
my-app v0.1.0
@@ -58,4 +50,4 @@ my-app v0.1.0
└── catch2 (registry)
```
В случае path зависимостей, рекурсивно отображает их собственные зависимости (из файла `dcr.toml`).
For path dependencies, recursively shows their own dependencies (from their `dcr.toml`).

View File

@@ -1,12 +1,12 @@
---
sidebar_label: Gen команды (vscode, clion, ...)
sidebar_label: Gen commands (vscode, clion, ...)
---
# Gen команды
# Gen Commands
## `dcr gen \<target>`
Генерирует файл интеграции с IDE.
Generates IDE integration files.
### vscode
@@ -14,12 +14,12 @@ sidebar_label: Gen команды (vscode, clion, ...)
dcr gen vscode
```
Создаёт:
Creates:
* `.vscode/tasks.json` — `build` задача (dcr build)
* `.vscode/launch.json` — конфигурация запуска отладки
* `.vscode/settings.json` — настройки C/C++ (clangd пути, includes)
* `.vscode/extensions.json` — рекомендуемые расширения (vscode-clangd, vscode-lldb)
* `.vscode/tasks.json` — `build` task (dcr build)
* `.vscode/launch.json` — debug launch configuration
* `.vscode/settings.json` — C/C++ settings (clangd paths, includes)
* `.vscode/extensions.json` — recommended extensions (vscode-clangd, vscode-lldb)
### clion
@@ -27,12 +27,12 @@ dcr gen vscode
dcr gen clion
```
Создаёт:
Creates:
* `.idea/externalTools.xml` — внешние инструменты (build, run, clean, test)
* `.idea/customTargets.xml` — пользовательские цели сборки
* `.idea/misc.xml` — настройки C/C++ проекта
* `.idea/runConfigurations/\<name>.xml` — конфигурация запуска
* `.idea/externalTools.xml` — external tools (build, run, clean, test)
* `.idea/customTargets.xml` — custom build targets
* `.idea/misc.xml` — C/C++ project settings
* `.idea/runConfigurations/\<name>.xml` — per-binary run configurations
### compile-commands
@@ -40,7 +40,7 @@ dcr gen clion
dcr gen compile-commands
```
Генерирует `compile_commands.json` — стандартный формат для clangd, cpptools, статических анализаторов.
Generates `compile_commands.json` — standard format for clangd, cpptools, static analyzers.
### project-info
@@ -48,7 +48,7 @@ dcr gen compile-commands
dcr gen project-info
```
Выводит JSON с метаданными проекта:
Outputs JSON array with project metadata:
```json
[

View File

@@ -1,14 +1,14 @@
---
sidebar_label: Команды проекта (new, init)
sidebar_label: Project commands (new, init)
---
# Команды проекта
# Project Commands
## `dcr new \<name>`
Создает новый проект со стандартной структурой и `dcr.toml`. Аргумент `name` является обязательным.
Creates a new project with a standard structure and `dcr.toml`. The `name` argument is required.
В названии проекта допускаются только ASCII буквы, цифры и подчеркивания `_` и дефисы `-`.
Only ASCII letters, digits, underscores `_` and hyphens `-` are allowed in the project name.
```bash
dcr new my-app
@@ -19,14 +19,14 @@ Flags:
* `--vcs \<git|none>` — Initialize version control system (defaults to `git` if available, or `none`).
Генерирует:
Generates:
* `dcr.toml` с базовыми полями
* `src/main.c` с основным шаблоном
* `dcr.toml` with basic fields
* `src/main.c` with a `main` template
## `dcr init`
Инициализирует проект DCR в текущем (пустом) каталоге.
Initializes a DCR project in the current (empty) directory.
```bash
dcr init
@@ -37,4 +37,4 @@ Flags:
* `--vcs \<git|none>` — Initialize version control system (defaults to `git` if available, or `none`).
Название проекта взято из имени текущего каталога. Имя каталога должно соответствовать тем же правилам именования, что и в `dcr new`.
The project name is taken from the current directory name. The directory name must follow the same naming rules as `dcr new`.

View File

@@ -1,60 +1,60 @@
---
sidebar_label: Команды качества (test, fmt)
sidebar_label: Quality commands (test, fmt)
---
# Команды качества
# Quality Commands
## `dcr test`
Запускает тесты.
Runs tests.
```bash
dcr test # debug профиль
dcr test --release # release профиль
dcr test --debug # явный debug
dcr test --help # подробная справка
dcr test # debug profile
dcr test --release # release profile
dcr test --debug # explicit debug
dcr test --help # detailed help
```
Перед первым запуском нужно инициализировать тесты:
Before first use, initialize tests:
```bash
dcr test --init
```
Это создаёт `tests/dcr_test.h` (фреймворк) и `tests/test.c` (шаблон).
This creates `tests/dcr_test.h` (framework) and `tests/test.c` (template).
Что делает `dcr test`:
What `dcr test` does:
1. Собирает проект
2. Собирает файлы `tests/*.c` (только `.c`, не `.cpp`)
3. Компилирует и линкует каждый файл теста
4. Запускает каждый бинарник тестов
5. Вывод сводки: TOTAL, PASS, SKIP, FAIL
6. Возвращает ненулевой код при наличии FAIL
1. Builds the project
2. Collects `tests/*.c` files (`.c` only, not `.cpp`)
3. Compiles and links each test file
4. Runs each test binary
5. Prints summary: TOTAL, PASS, SKIP, FAIL
6. Returns non-zero exit code on any FAIL
## `dcr fmt`
Форматирует исходный код C/C++ через `clang-format`.
Formats C/C++ source files using `clang-format`.
```bash
dcr fmt
```
Процессы: `src/**/*.{c,cpp,cxx,cc,h,hpp,hxx,hh}` и `tests/**/*.{c,cpp,cxx,cc,h,hpp,hxx,hh}`.
Processes: `src/**/*.{c,cpp,cxx,cc,h,hpp,hxx,hh}` and `tests/**/*.{c,cpp,cxx,cc,h,hpp,hxx,hh}`.
Использует `.clang-format` в корне проекта (если таковой имеется), иначе стиль clang-format по умолчанию.
Uses `.clang-format` at the project root (if present), otherwise default clang-format style.
## `dcr lint`
Выполняет `clang-tidy` на C/C++ исходных файлах для статического анализа.
Runs `clang-tidy` on C/C++ source files for static analysis.
```bash
dcr lint # отобразить диагностику
dcr lint --fix # автоматически применить исправления
dcr lint --help # подробная справка
dcr lint # show diagnostics
dcr lint --fix # apply fixes automatically
dcr lint --help # detailed help
```
Процессы: `src/**/*.{c,cpp,cxx,cc}` и `tests/**/*.{c,cpp,cxx,cc}`.
Processes: `src/**/*.{c,cpp,cxx,cc}` and `tests/**/*.{c,cpp,cxx,cc}`.
Без параметра `--fix` clang-tidy выдает предупреждения и ошибки, не внося изменений в файлы.
При параметре `--fix` clang-tidy автоматически вносит предложения по исправлениям на месте.
Without `--fix`, clang-tidy reports warnings and errors without modifying files.
With `--fix`, clang-tidy applies automatic suggestions in place.

View File

@@ -1,18 +1,18 @@
---
sidebar_label: Системные команды (setup, --help, ...)
sidebar_label: System commands (setup, --help, ...)
---
# Системные команды
# System Commands
## `dcr setup`
`~/.dcr/config.toml` — конфигурация реестров
Shows configured registries from `~/.dcr/config.toml`.
```bash
dcr setup
```
Если файл `~/.dcr/config.toml` не найден, DCR возвращает ошибку. Создайте его вручную:
If `~/.dcr/config.toml` is not found, DCR returns an error. Create it manually:
```toml
[registry.default]
@@ -22,7 +22,7 @@ priority = 1
## `dcr --help`
Отображает справку по всем командам.
Shows help for all commands.
```bash
dcr --help
@@ -30,7 +30,7 @@ dcr --help
## `dcr --version`
Отображает версию и целевую платформу.
Shows version and target triple.
```bash
dcr --version # dcr 0.7.0 (x86_64-unknown-linux-gnu)
@@ -38,14 +38,14 @@ dcr --version # dcr 0.7.0 (x86_64-unknown-linux-gnu)
## `dcr --update`
Автоматическое обновление. Загружает последнюю версию бинарного файла из раздела «Релизы» на GitHub и заменяет текущую версию.
Self-update. Downloads the latest release binary from GitHub Releases and replaces the current one.
```bash
dcr --update
```
Возможности:
Features:
* Определяет платформу и архитектуру автоматически
* Выдает предупреждение при установке через AUR (вместо этого используйте пакетный менеджер)
* Работает на Linux, macOS, Windows
* Auto-detects platform and architecture
* Warns if installed via AUR (use package manager instead)
* Works on Linux, macOS, Windows

View File

@@ -1,53 +1,51 @@
---
sidebar_label: Вклад
sidebar_label: Contributing
---
# Вклад
# Contributing
## Настройка
## Setup
```bash
git clone https://github.com/dexoron/dcr
# or a source mirror: GitVerse / SourceCraft / SourceForge / GitLab (see README)
cd dcr
cargo build
```
## Стиль написания кода
## Code style
Весь код форматируется через `cargo fmt`:
All code must be formatted with `cargo fmt`:
```bash
формат груза
cargo fmt
```
## Линтер
## Linting
```bash
cargo clippy --all-targets -- -D warnings
```
## Тесты
## Tests
```bash
тест cargo --all-targets
cargo test --all-targets
```
## Процесс связей с общественностью
## PR process
1. Форкните репозиторий
2. Создайте ветку: `git checkout -b feature/description`
3. Внесите изменения
4. Запустите `cargo fmt && cargo clippy --all-targets -- -D warnings && cargo test --all-targets`
5. Откройте Pull Request
1. Fork the repository
2. Create a branch: `git checkout -b feature/description`
3. Make changes
4. Run `cargo fmt && cargo clippy && cargo test`
5. Open a Pull Request
## CI
CI runs (see `.github/workflows/ci.yml`):
CI runs:
* `cargo fmt --check`
* `cargo clippy` (default + `--all-features`)
* `cargo clippy --all-targets -- -D warnings`
* `cargo check --all-targets --all-features`
* Unit + integration tests on Linux, macOS, Windows
* Extra Linux job with `--features archive` (FAT images)
* Tools on runners: clang, nasm, clang-format/tidy (Linux)
* Build on Linux, macOS, Windows
* Integration tests (compilation check)

View File

@@ -1,16 +1,16 @@
---
sidebar_label: Часто задаваемые вопросы
sidebar_label: FAQ
---
# Часто задаваемые вопросы
# FAQ
## Реестр не найден
## Registry not found
```
Ошибка: реестр не найден
error: registry not found
```
**Решение:** Убедитесь, что файл `~/.dcr/config.toml` существует:
**Solution:** Make sure `~/.dcr/config.toml` exists:
```toml
[registry.default]
@@ -18,42 +18,42 @@ url = "https://index.dcr.pm"
priority = 1
```
Если реестр кастомный, проверьте `DCR_INDEX_PATH`:
And check `DCR_INDEX_PATH`:
```bash
echo $DCR_INDEX_PATH
```
## Компилятор не найден
## Compiler not found
```
Ошибка: компилятор не найден
error: compiler not found
```
**Решение:** Убедитесь, что компилятор установлен и доступен в PATH.
**Solution:** Ensure a compiler is installed and available in PATH.
```bash
какой gcc
какой clang
which gcc
which clang
```
Или укажите явно через `[toolchain]` или `DCR_COMPILER`.
Or specify explicitly via `[toolchain]` in `dcr.toml`.
## Ctrl+C во время сборки
## Ctrl+C during build
DCR корректно обрабатывает SIGINT: прерывает текущую компиляцию и завершает процесс с ненулевым кодом.
DCR handles SIGINT: interrupts the current compilation and exits with non-zero code.
## Как создать библиотеку?
## How to create a library?
[Library Recipe](/docs/recipes/library-project).
See [Library Recipe](/docs/recipes/library-project).
## Как выполнить кросс-компиляцию для Windows?
## How to cross-compile to Windows?
См. [Cross-Compile Recipe](/docs/recipes/cross-to-windows).
See [Cross-Compile Recipe](/docs/recipes/cross-to-windows).
## Как сделать мультипакетный проект?
## How to create a multi-package project?
См. [Workspace Recipe](/docs/recipes/multi-package-workspace).
See [Workspace Recipe](/docs/recipes/multi-package-workspace).
## Bootloader / pure NASM OS image
@@ -61,15 +61,6 @@ Use `kind = "flat-bin"` (NASM `-f bin`) and optional `[archive]` for a FAT disk
See [OS-dev recipe](/docs/recipes/os-flat-bin-archive).
## How do I choose a download mirror?
## Lock file
`dcrup install` uses `--mirror auto` by default and tries **cf → gh → sf → ya**.
```bash
dcrup install stable --mirror cf
export DCRUP_MIRROR=ya
```
## Lock-файл устарел
При изменении зависимостей `dcr.lock` автоматически обновляется при следующем `dcr add`. Если нужно принудительно обновить — удалите `dcr.lock` и выполните `dcr build`.
`dcr.lock` is created during builds (`dcr build`) when registry dependencies are present. To force an update — delete `dcr.lock` and run `dcr build`.

View File

@@ -1,17 +1,17 @@
---
sidebar_label: Первые шаги
sidebar_label: First steps
---
# Первые шаги
# First Steps
## Создать проект
## Create a project
```bash
dcr new my-app
cd my-app
```
Будет создана структура:
Structure:
```
my-app/
@@ -35,40 +35,40 @@ compiler = "clang"
kind = "bin"
```
## Сборка
## Build
```bash
dcr build
```
Результат — `target/\<triple>/debug/my-app` (Linux) или `target/debug/my-app.exe` (Windows).
Output — `target/\<triple>/debug/my-app` (Linux) or `target/debug/my-app.exe` (Windows).
Профиль сборки:
Build profiles:
```bash
dcr build --release # release сборка
dcr build --debug # debug (по умолчанию)
dcr build --release # release build
dcr build --debug # debug (default)
```
## Запустить
## Run
```bash
dcr run
```
Собирает (если нужно) и запускает бинарник.
Builds (if needed) and runs the binary.
## Первый тест
## First test
```bash
dcr test --init # создать шаблон теста
dcr test # запустить тесты
dcr test --init # create test template
dcr test # run tests
```
## Форматирование
## Formatting
```bash
dcr fmt # clang-format по .clang-format
dcr fmt # clang-format with .clang-format
```
## Linting

View File

@@ -1,82 +1,35 @@
---
sidebar_label: Установка
sidebar_label: Installation
---
# Установка
# Installation
## dcrup (recommended)
## Linux (Dexoron Packages)
Install and switch DCR versions (stable / dev / night, pin `0.8.2`, optional build from source).
Configure your package manager at https://pkg.dexoron.su and install:
### Linux / macOS / BSD / Windows (bash)
**Arch Linux**
```sh
curl --proto '=https' --tlsv1.2 -sSf https://sh.dcr-tool.ru | sh -s -- self-install
export PATH="$HOME/.dcr/bin:$PATH"
dcrup install stable
sudo pacman -Sy dcr
```
Non-interactive install of DCR in one shot:
**Debian/Ubuntu**
```sh
curl --proto '=https' --tlsv1.2 -sSf https://sh.dcr-tool.ru | sh -s -- install stable
export PATH="$HOME/.dcr/bin:$PATH"
sudo apt update && sudo apt install dcr
```
### Windows (PowerShell)
```powershell
& ([scriptblock]::Create((irm https://ps1.dcr-tool.ru))) self-install
# $env:Path += ";$env:USERPROFILE\.dcr\bin"
dcrup install stable
```
After `self-install`, the command is **`dcrup`** (no `.sh` / `.ps1`) and is installed in `~/.dcr/bin` (Unix) or `%USERPROFILE%\.dcr\bin` (Windows).
### Common dcrup commands
**Fedora/RHEL**
```sh
dcrup install stable # latest stable prebuilt (auto: cf → gh → sf → ya)
dcrup install 0.8.2 # pin → 0.8.2@stable
dcrup install 0.8.2@dev
dcrup install stable --libc musl # Linux: musl asset (default: gnu)
dcrup install stable --mirror cf # CloudFlare CDN
dcrup install stable --mirror ya # Yandex CDN (RU fallback)
dcrup install stable --build # cargo build --features archive
dcrup install night # always build from branch dev HEAD
dcrup default 0.8.2
dcrup update
dcrup list
dcrup show
dcrup which
dcrup uninstall 0.8.2 # remove one installed version
dcrup uninstall --all # remove all installed versions
sudo dnf install dcr
```
Layout: `~/.dcr/toolchains/\<id>/dcr` and `~/.dcr/bin/dcr` → active version.
### Download mirrors
Prebuilt installs try **cf → gh → sf → ya** unless you pin a host.
| Code | URL | Notes |
| ---- | ------------------------------------------------------------------------------------------------------------ | -------------------------- |
| `cf` | `https://cdn-global.dcr-tool.ru/\<tag>/\<asset>` | CloudFlare CDN (worldwide) |
| `gh` | `https://github.com/dexoron/dcr/releases/download/\<tag>/\<asset>` | GitHub Releases |
| `sf` | `https://sourceforge.net/projects/dcr-tool/files/\<tag>/\<asset>/download` | SourceForge |
| `ya` | `https://cdn-ru.dcr-tool.ru/\<tag>/\<asset>` | Yandex CDN (RU fallback) |
```sh
dcrup install stable --mirror auto # default
export DCRUP_MIRROR=cf # persist for this shell
```
---
## Arch Linux (AUR)
```sh
ура -S dcr
yay -S dcr
```
## macOS / Linux (Homebrew)
@@ -92,12 +45,11 @@ brew install dcr
sudo snap install dcrup
```
> If classic Snap Store publishing is unavailable, install the `.snap` from [GitHub Releases](https://github.com/dexoron/dcr/releases/latest) with `--dangerous`.
## Nix (flake)
```sh
nix run github:dexoron/dcr
# or install to profile:
nix profile install github:dexoron/dcr
```
@@ -107,37 +59,48 @@ nix profile install github:dexoron/dcr
cargo install dcr
```
Note: crates.io builds may omit optional features. For FAT disk images (`[archive]`), prefer release binaries or:
## Linux / macOS (script)
```sh
cargo install dcr --features archive
curl -fsSL https://dcr.dexoron.su/install.sh | sh
```
## Из источника
## BSD (script)
```sh
curl -fsSL https://dcr.dexoron.su/install_bsd.sh | sh
```
## Windows (PowerShell)
```powershell
irm https://dcr.dexoron.su/install.ps1 | iex
```
## From source
```sh
git clone https://github.com/dexoron/dcr.git
cd dcr
cargo build --release --features archive
cd dcr && cargo build --release
ln -sf "$PWD/target/release/dcr" ~/.local/bin/dcr
# or manage versions with dcrup install night / --build
```
## После установки
## Post-install
Verify the installation:
```bash
dcr --version
dcrup show # if installed via dcrup
```
Man pages (package installs / release assets):
Man pages are available after installation:
```bash
man dcr
man dcr-build
```
Registry (optional) — `~/.dcr/config.toml`:
To use the registry, create `~/.dcr/config.toml`:
```toml
[registry.default]

View File

@@ -1,30 +1,23 @@
---
sidebar_label: Интеграция с IDE
sidebar_label: IDE Integration
---
# Интеграция с IDE
# IDE Integration
## VS Code
Install the recommended [DCR extension by Dexoron-Labs](https://marketplace.visualstudio.com/items?itemName=Dexoron-Labs.dcr). Do not install Microsoft C/C++ extensions for DCR projects: DCR uses `clangd`. MS C/C++ is acceptable only when you need its debugger.
Recommended companion extensions:
* [Even Better TOML](https://marketplace.visualstudio.com/items?itemName=tamasfe.even-better-toml)
* [CodeLLDB](https://marketplace.visualstudio.com/items?itemName=vadimcn.vscode-lldb), or MS C/C++ for debugger support only
```bash
dcr gen vscode
```
Генерирует в `.vscode/`:
Generates in `.vscode/`:
| Файл | Назначение |
| ----------------- | ------------------------------------------- |
| `tasks.json` | Задача `build` (dcr build) |
| `launch.json` | Debug-запуск бинарника |
| `settings.json` | clangd/IntelliSense: include пути, стандарт |
| `extensions.json` | Рекомендует clangd, C/C++ |
| File | Purpose |
| ----------------- | -------------------------------------------- |
| `tasks.json` | `build` task (dcr build) |
| `launch.json` | Debug launch configuration |
| `settings.json` | clangd/IntelliSense: include paths, standard |
| `extensions.json` | Recommends vscode-clangd, vscode-lldb |
## CLion
@@ -32,27 +25,27 @@ dcr gen vscode
dcr gen clion
```
Генерирует в `.idea/`:
Generates in `.idea/`:
| Файл | Назначение |
| ----------------------------------------- | ------------------------------------------------ |
| `externalTools.xml` | Build, Run, Clean, Test как внешние инструменты |
| `customTargets.xml` | Кастомные цели сборки |
| `misc.xml` | Настройки C/C++ проекта |
| `runConfigurations/dcr_build_and_run.xml` | Конфигурации запуска для каждого бинарного файла |
| File | Purpose |
| ------------------------------------------------ | ----------------------------------------- |
| `externalTools.xml` | Build, Run, Clean, Test as external tools |
| `customTargets.xml` | Custom build targets |
| `misc.xml` | C/C++ project settings |
| `runConfigurations/\<name>.xml` | Per-binary run configurations |
## compile_commands.json
```bash
dcr gen команды компиляции
dcr gen compile-commands
```
Генерирует `compile_commands.json` в корне проекта. Стандартный формат для:
Generates `compile_commands.json` at project root. Standard format for clangd, C/C++ IntelliSense, static analyzers.
## информация о проекте
## project-info
```bash
dcr gen info-проекта
dcr gen project-info
```
Выводит JSON с метаданными проекта (см. [gen-commands](/docs/commands/gen-commands)).
Outputs JSON array with project metadata (see [gen-commands](/docs/commands/gen-commands)).

View File

@@ -1,33 +1,33 @@
---
sidebar_label: Лицензия
sidebar_label: License
---
# Лицензия
# License
## DCR
DCR распространяется под лицензией [GPL-3.0-or-later](https://spdx.org/licenses/GPL-3.0-or-later.html).
DCR itself is [GPL-3.0-or-later](https://spdx.org/licenses/GPL-3.0-or-later.html) licensed.
> **Важно:** DCR — инструмент сборки, а не библиотека. GPL распространяется только на исходный код самого DCR. Проекты, собранные с помощью DCR, не подпадают под лицензию DCR — их лицензирование определяется исключительно их собственным кодом и зависимостями.
> **Note:** DCR is a build tool, not a library. The GPL applies only to DCR's own source code. Projects built with DCR are not subject to DCR's license — their licensing is determined solely by their own code and dependencies.
## Rust-зависимости
## Rust dependencies
DCR написан на Rust. Ниже перечислены основные статически связываемые крейты:
DCR is written in Rust. The following notable Rust crates are statically linked:
| Крейт | Лицензия |
| ------------------------------------------------------- | ------------------ |
| [`ureq`](https://crates.io/crates/ureq) | MIT ИЛИ Apache-2.0 |
| [`serde`](https://crates.io/crates/serde) | MIT ИЛИ Apache-2.0 |
| [`toml`](https://crates.io/crates/toml) | MIT ИЛИ Apache-2.0 |
| [`toml_edit`](https://crates.io/crates/toml_edit) | MIT OR Apache-2.0 |
| [`serde_json`](https://crates.io/crates/serde_json) | MIT ИЛИ Apache-2.0 |
| [`sha2`](https://crates.io/crates/sha2) | MIT ИЛИ Apache-2.0 |
| [`glob`](https://crates.io/crates/glob) | MIT ИЛИ Apache-2.0 |
| [`self-replace`](https://crates.io/crates/self-replace) | MIT ИЛИ Apache-2.0 |
| [`ctrlc`](https://crates.io/crates/ctrlc) | MIT ИЛИ Apache-2.0 |
| Crate | License |
| ------------------------------------------------------- | ----------------- |
| [`ureq`](https://crates.io/crates/ureq) | MIT OR Apache-2.0 |
| [`serde`](https://crates.io/crates/serde) | MIT OR Apache-2.0 |
| [`toml`](https://crates.io/crates/toml) | MIT OR Apache-2.0 |
| [`toml_edit`](https://crates.io/crates/toml_edit) | MIT OR Apache-2.0 |
| [`serde_json`](https://crates.io/crates/serde_json) | MIT OR Apache-2.0 |
| [`sha2`](https://crates.io/crates/sha2) | MIT OR Apache-2.0 |
| [`glob`](https://crates.io/crates/glob) | MIT OR Apache-2.0 |
| [`self-replace`](https://crates.io/crates/self-replace) | MIT OR Apache-2.0 |
| [`ctrlc`](https://crates.io/crates/ctrlc) | MIT OR Apache-2.0 |
Full dependency tree is available in [`Cargo.lock`](https://github.com/dexoron/dcr/blob/main/Cargo.lock). Подавляющее большинство имеют двойную лицензию MIT OR Apache-2.0.
Full dependency tree is available in [`Cargo.lock`](https://github.com/dexoron/dcr/blob/main/Cargo.lock). The overwhelming majority are dual-licensed under MIT OR Apache-2.0.
## Дополнительные благодарности
## Additional credits
* Дизайн CLI и модель проектов DCR вдохновлены [Cargo](https://doc.rust-lang.org/cargo/).
* DCR's CLI design and project model are inspired by [Cargo](https://doc.rust-lang.org/cargo/).

View File

@@ -1,12 +1,12 @@
---
sidebar_label: Кросс-компиляция для Windows
sidebar_label: Cross-compile to Windows
---
# Кросс-компиляция для Windows на Linux
# Cross-Compile to Windows from Linux
Сборка Windows-бинаря на Linux с использованием mingw-w64.
Building a Windows binary on Linux using mingw-w64.
## Установка toolchain
## Install toolchain
```bash
# Ubuntu/Debian
@@ -16,29 +16,31 @@ sudo apt install mingw-w64
sudo dnf install mingw64-gcc mingw64-binutils
```
## Конфигурация
## Configuration
```toml
[package]
name = "my-app"
version = "0.1.0"
type = "app"
type = "none"
[build]
language = "c"
standard = "c17"
target = "windows"
standard = "c11"
compiler = "clang"
kind = "bin"
target = "x86_64-pc-windows-gnu" # explicit mingw, not msvc
```
## Сборка
## Build
```bash
dcr build --target windows --release
dcr build --target x86_64-pc-windows-gnu --release
```
Артефакт: `target/x86_64-pc-windows-gnu/release/my-app.exe`.
Artifact: `target/x86_64-pc-windows-gnu/release/my-app.exe`.
## Кастомный toolchain (опционально)
## Custom toolchain
```toml
[toolchain]

View File

@@ -1,15 +1,16 @@
---
sidebar_label: Проект библиотеки
sidebar_label: Library project
---
# Проект библиотеки
# Library Project
Создание статической библиотеки и её использование в другом проекте.
Creating a static library and using it in another project.
## Шаг 1: Создать библиотеку
## Step 1: Create the library
```bash
dcr new my-lib
cd my-lib
```
`dcr.toml`:
@@ -18,11 +19,11 @@ dcr new my-lib
[package]
name = "my-lib"
version = "0.1.0"
type = "lib"
type = "none"
[build]
language = "c"
standard = "c17"
standard = "c11"
kind = "staticlib"
```
@@ -42,29 +43,28 @@ int add(int a, int b);
int add(int a, int b) { return a + b; }
```
## Шаг 2: Собрать
## Step 2: Build
```bash
cd my-lib
dcr build --release
```
Артефакты:
Artifacts:
* `target/release/libmy-lib.a` (Linux/macOS)
* `target/\<triple>/release/libmy-lib.a` (Linux)
* `target/release/my-lib.lib` (Windows)
* `target/include/` — заголовочные файлы
* `target/include/` — header files
## Шаг 3: Использовать в проекте
## Step 3: Use in another project
```bash
dcr new my-app
cd my-app
dcr add ../my-lib
dcr add my-lib ../my-lib
```
Автоматически:
Automatically:
* Добавляется include path на `target/include/` библиотеки
* Добавляется lib path на `target/release/`
* Линкуется `libmy-lib.a` / `my-lib.lib`
* Adds include path to `target/include/` of the library
* Adds lib path to `target/\<triple>/release/`
* Links `libmy-lib.a` / `my-lib.lib`

View File

@@ -1,19 +1,19 @@
---
sidebar_label: Рабочая область с несколькими пакетами
sidebar_label: Multi-package workspace
---
# Рабочая область с несколькими пакетами
# Multi-Package Workspace
Проект из трёх пакетов: библиотека, утилита и основной бинарник.
A project with three packages: two libraries and a binary.
## Структура
## Structure
```
workspace/
├── dcr.toml # корневой workspace
├── dcr.toml # root workspace
├── lib-core/
│ ├── dcr.toml
│ └── src/lib.rs
│ └── src/core.c
├── lib-utils/
│ ├── dcr.toml
│ └── src/utils.c
@@ -22,7 +22,7 @@ workspace/
└── src/main.c
```
## Корневой dcr.toml
## Root dcr.toml
```toml
[package]
@@ -49,7 +49,7 @@ deps = ["lib-core", "lib-utils"]
main = true
```
## Пакеты
## Packages
`lib-core/dcr.toml`:
@@ -57,7 +57,7 @@ main = true
[package]
name = "lib-core"
version = "0.1.0"
type = "lib"
type = "none"
[build]
kind = "staticlib"
@@ -69,7 +69,7 @@ kind = "staticlib"
[package]
name = "lib-utils"
version = "0.1.0"
type = "lib"
type = "none"
[build]
kind = "staticlib"
@@ -81,23 +81,23 @@ kind = "staticlib"
[package]
name = "app"
version = "0.1.0"
type = "app"
type = "none"
[build]
kind = "bin"
```
## Сборка
## Build
```bash
cd workspace
dcr build # собирает всё в правильном порядке
dcr build --workspace app # только app (lib-core и lib-utils собираются как зависимости)
dcr run # собирает и запускает main-пакет
dcr build # builds everything in correct order
dcr build --workspace app # only app (lib-core and lib-utils built as deps)
dcr run # builds and runs main package
```
Порядок сборки (топологическая сортировка):
Build order (topological sort):
1. `lib-core`
2. `lib-utils` (зависит от lib-core)
3. `app` (зависит от lib-core, lib-utils)
2. `lib-utils` (depends on lib-core)
3. `app` (depends on lib-core, lib-utils)

View File

@@ -1,12 +1,12 @@
---
sidebar_label: dcr build --profile lto
sidebar_label: Build profiles
---
# Встроенные профили
# Build Profiles
Профили позволяют переопределять любые поля секции `[build]` для конкретного режима сборки.
Profiles allow overriding `[build]` fields for specific build modes.
## Конфигурация
## Configuration
```toml
[build]
@@ -18,36 +18,36 @@ cflags = ["-Wall"]
cflags = ["-O0", "-g"]
[build.release]
cflags = ["-O3", "-flto"]
cflags = ["-O3", "-DNDEBUG"]
```
## Правила
## Merge rules
Поля из `[build.\<profile>]` **мержатся поверх** `[build]`
Fields from `[build.\<profile>]` are merged on top of `[build]`:
* **Скалярные поля** (строки, числа, логические значения) — заменены
* Массивы (`cflags`, `ldflags`, ...) **заменяются полностью**, а не дополняются
* **Scalar fields** (strings, numbers, bools) — replaced
* **Arrays** (`cflags`, `ldflags`, ...) — **appended** (extend the `[build]` array)
Установите `inherit = false`, чтобы отключить наследование массивов (будут использоваться только собственные массивы профиля).
Set `inherit = false` to disable array inheritance (only profile's own arrays are used).
## Кастомные профили
## Built-in profiles
Флаги по умолчанию для каждого профиля формируются из трёх полей конфигурации:
The default flags for each profile are composed from three config fields:
| Поле | Default cflags | Профили сборки |
| ---------------- | ------------------ | -------------- |
| `opt_level` | `-O0 -g` | `"3"` |
| `debug` | `true` | `false` |
| `предупреждения` | `["all", "extra"]` | `[]` |
| Field | debug default | release default |
| ----------- | ------------------ | --------------- |
| `opt_level` | `"0"` | `"3"` |
| `debug` | `true` | `false` |
| `warnings` | `["all", "extra"]` | `[]` |
Которые генерируют соответствующие флаги компилятора:
Which produce the equivalent compiler flags:
| Профиль | Действующие флаги |
| ------- | ---------------------------------------------------------- |
| `debug` | `-O0 -g -Wall -Wextra -fno-omit-frame-pointer -DDCR_DEBUG` |
| `релиз` | `-O3 -DNDEBUG` |
| Profile | Effective flags |
| --------- | ---------------------------------------------------------- |
| `debug` | `-O0 -g -Wall -Wextra -fno-omit-frame-pointer -DDCR_DEBUG` |
| `release` | `-O3 -DNDEBUG` |
Дополнительные параметры сборки можно включать или отключать для каждого профиля:
Additional build options can be toggled per-profile:
```toml
[build.release]
@@ -63,7 +63,7 @@ debug = false
warnings = ["all", "error"]
```
## Target-specific профили
## Target-specific profiles
```toml
[build.linux]
@@ -73,10 +73,10 @@ cflags = ["-DLINUX"]
cflags = ["-DWIN32", "-O0", "-g"]
```
Порядок применения (в порядке убывания приоритета):
Application order (highest priority first):
1. `[build.\<target>.\<profile>]`
2. `[build.\<profile>.\<target>]`
3. ]`или`[build.\<target>]\`
4. `[build.\<profile>]`.
3. `[build.\<target>]`
4. `[build.\<profile>]`
5. `[build]`

View File

@@ -1,37 +1,37 @@
---
sidebar_label: Система сборки
sidebar_label: Build system
---
# Система сборки
# Build System
## Бэкенды компилятора
## Compiler Backends
DCR поддерживает 4 бэкенда компиляции. Выбор происходит автоматически на основе расширения файла и target triple.
DCR supports 7 compilation backends. Selection is automatic based on file extension and `build.compiler` value.
| Бэкенд | Файлы | Когда используется |
| --------- | --------------------------------------- | ------------------------------------- |
| `unix_cc` | `.c`, `.cpp`, `.cxx`, `.cc`, `.s`, `.S` | gcc/clang на Linux/macOS/BSD |
| `msvc` | `.c`, `.cpp`, `.cxx`, `.cc` | Windows (cl, clang-cl) |
| `газ` | `.s`, `.S` | ARM/ARM64 ассемблер |
| `nasm` | `.asm`, `.s` | x86/x86_64 ассемблер |
| `masm` | `.asm` | MASM (ml/ml64) в Windows |
| `fasm` | `.asm`, `.fasm` | Сборщик плоских деталей |
| `llvm_ir` | `.ll` | LLVM IR с помощью `llc -filetype=obj` |
| Backend | Files | When used |
| --------- | --------------------------------- | ------------------------------------- |
| `unix_cc` | `.c`, `.cpp`, `.cxx`, `.cc`, `.S` | gcc/clang on Linux/macOS/BSD |
| `msvc` | `.c`, `.cpp`, `.cxx`, `.cc` | Windows (cl, clang-cl) |
| `gas` | `.s` | ARM/ARM64 assembler (no preprocessor) |
| `nasm` | `.asm`, `.s` | x86/x86_64 NASM assembler |
| `masm` | `.asm` | MASM (ml/ml64) on Windows |
| `fasm` | `.asm`, `.fasm` | Flat Assembler |
| `llvm_ir` | `.ll` | LLVM IR via `llc -filetype=obj` |
## Поддержка Qt
## Qt Support
DCR обеспечивает встроенную поддержку Qt для автоматической обработки метаобъектов (MOC, UIC, RCC).
DCR provides native Qt support for automatic meta-object handling (MOC, UIC, RCC).
Чтобы включить эту функцию, установите значение `build.qt = true` в файле `dcr.toml`. DCR автоматически обнаружит файлы, связанные с Qt (`.ui`, `.qrc`, `.h` с `Q_OBJECT`), и обработает их.
Enable it by setting `build.qt = true` in `dcr.toml`. DCR will automatically detect Qt-related files (`.ui`, `.qrc`, `.h` with `Q_OBJECT`) and process them.
```toml
[build]
qt = true
```
*Примечание: Требуется установка модулей `qt6` (Core, Widgets, Gui, Svg) с помощью `pkg-config`.*
*Note: Requires `qt6` modules (Core, Widgets, Gui, Svg) installed via `pkg-config`.*
Если требуется специальная обработка, по-прежнему можно выполнить расширенную настройку с помощью файла `build.steps`:
Advanced customization is still possible via `build.steps` if special handling is needed:
```toml
[build.steps]
@@ -40,69 +40,69 @@ moc = "moc {in} -o {out}"
### Unix CC
* Компилятор определяется через `resolve_compiler()`: CC/CXX из [toolchain], DCR_COMPILER/env, PATH
* Поддерживает генерацию `.d` файлов для header dependency tracking
* Флаги: `-std=`, `-MMD -MF`, `-c -o`, `-I`, `-L`, `-l`
* Условные флаги, зависящие от настроек:
* `freestanding` или целевая среда «bare-metal»: `-ffreestanding` (компиляция), `-nostdlib -static` (линковка)
* `lto`: `-flto` (компиляция + линковка)
* `panic = "abort"`: `-fno-exceptions` (только для C++), `-fno-unwind-tables`, `-fno-asynchronous-unwind-tables`
* Compiler resolved via `resolve_compiler()`: `DCR_COMPILER` > `DCR_CC` > `[toolchain]` > `build.compiler` > `PATH`
* Supports `.d` files for header dependency tracking
* Flags: `-std=`, `-MMD -MF`, `-c -o`, `-I`, `-L`, `-l`
* Conditional flags based on config:
* `freestanding` or bare-metal target: `-ffreestanding` (compile), `-nostdlib -static` (link)
* `lto`: `-flto` (compile + link)
* `panic = "abort"`: `-fno-exceptions` (C++ only), `-fno-unwind-tables`, `-fno-asynchronous-unwind-tables`
### MSVC
* Поддерживает cl.exe и clang-cl.exe
* Флаги: `/std:`, `/Fo:`, `/Fe:`, `/I`, `/link`
* Supports cl.exe and clang-cl.exe
* Flags: `/std:`, `/Fo:`, `/Fe:`, `/I`, `/link`
### GAS / NASM
### GAS / NASM / MASM / FASM / LLVM-IR
* GAS: `-I`, `-c -o`, `--defsym`
* NASM: `-I`, `-o`, `-D`, `-f` (format: win64/elf64/macho64/macho32/elf32; **`bin` when `kind = "flat-bin"`**)
* MASM: `/nologo /c /Fo\<obj> <source>`
* FASM: `<source> \<output>` (путь вывода — объектный файл)
* FASM: `<source> \<output>` (output path is the object file)
* LLVM IR: `-filetype=obj <source> -o \<output>`
## Инкрементные сборки
## Incremental Builds
Три уровня инкрементальности:
Three levels of incrementality:
1. **mtime** — если выходной файл новее всех входных, файл не перекомпилируется
2. **`.d` files** — отслеживание изменений в заголовочных файлах (включая транзитивные)
3. **SHA256 fingerprint** — если флаги компиляции изменились, файл перекомпилируется (fingerprint хранится в `.dcr_fingerprint`)
1. **mtime** — if output is newer than all inputs, skip
2. **`.d` files** — header change tracking (including transitive)
3. **SHA256 fingerprint** — recompile if compiler flags changed (stored in `.dcr_fingerprint`)
## Параллельная компиляция
## Parallel Compilation
* Используется `thread::scope` для создания пула потоков
* Атомарная очередь задач (`AtomicU64`)
* Мьютекс на запись в stdout (`OUTPUT_MUTEX`)
* Количество потоков = `available_parallelism()`, ограниченное значением `build.codegen-units`, если оно задано
* `thread::scope` for thread pool
* Atomic task queue (`AtomicU64`)
* Mutex on stdout (`OUTPUT_MUTEX`)
* Thread count = `available_parallelism()`, capped by `build.codegen-units` if set
## Типы сборок
## Build Kinds
| Тип | Тип | Путь (пример для Linux) |
| ------------------ | ------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------- |
| `bin` | Исполняемый файл | `target/\<profile>/\<name>` (.exe) |
| `staticlib` | Статическая библиотека | `target/\<profile>/lib\<name>.a` (.lib) |
| `sharedlib` | Динамическая библиотека | `target/\<profile>/lib\<name>.so` (.dll/.dylib) |
| `efi` | UEFI приложение | `target/\<profile>/\<name>.efi` |
| `эльф` | ELF без стандартной библиотеки | `target/\<profile>/\<name>` |
| `нет` | Только компиляция, без линковки | — |
| `пользовательский` | Полный контроль filename + extension | `target/\<profile>/\<filename>.\<extension>` |
| `flat-bin` | Raw binary | ASM: `\<stem>.bin` (NASM `-f bin` / FASM / GAS·MASM·LLC via objcopy); C/C++: `\<name>.bin` (link + objcopy) |
| Kind | Type | Path (Linux example) |
| ----------- | ------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| `bin` | Executable | `target/\<triple>/\<profile>/\<name>` (.exe on Windows) |
| `staticlib` | Static library | `target/\<triple>/\<profile>/lib\<name>.a` (.lib) |
| `sharedlib` | Dynamic library | `target/\<triple>/\<profile>/lib\<name>.so` (.dll/.dylib) |
| `efi` | UEFI application | `target/\<triple>/\<profile>/\<name>.efi` |
| `elf` | ELF without stdlib | `target/\<triple>/\<profile>/\<name>` |
| `none` | Compile only, no link | — |
| `custom` | Full filename+extension control | `target/\<triple>/\<profile>/\<filename>.\<extension>` |
| `flat-bin` | Raw binary | ASM: `\<stem>.bin` (NASM `-f bin` / FASM / GAS·MASM·LLC via objcopy); C/C++: `\<name>.bin` (link + objcopy) |
## Disk images (`[archive]`)
After a successful build, if `[archive]` is present in `dcr.toml`, DCR formats a FAT volume and copies files from `layout` into the image. See [dcr.toml → archive](/docs/reference/dcr-toml#archive).
## Этапы сборки
## Build Steps
DCR поддерживает pre-build и post-build шаги через Qt codegen:
DCR supports pre-build and post-build steps:
* `build.steps` — команды, выполняемые перед компиляцией
* `build.post_steps` — команды, выполняемые после компиляции
* `build.steps` — commands before compilation
* `build.post_steps` — commands after compilation
Подстановки: `{stem}`, `{in}`, `{out}`.
Substitutions: `{stem}`, `{in}`, `{out}`, `{profile}`, `{version}`, `{name}`.
`rcc` — Resource Compiler: `{stem}.qrc → qrc_{stem}.cpp`
Example Qt codegen via build steps:
```toml
[build.steps]
@@ -111,26 +111,26 @@ moc = "moc {in} -o {out}"
## pkg-config
Автоматический поиск (чтение из исходного файла конфигурации):
Automatic lookup (read from raw config):
```toml
[build]
pkg_config = ["sdl2", "gl"]
```
DCR вызывает `pkg-config --cflags sdl2 gl` и `pkg-config --libs sdl2 gl` и добавляет результат в флаги компиляции/линковки.
DCR runs `pkg-config --cflags sdl2 gl` and `pkg-config --libs sdl2 gl` and adds results to compiler/linker flags.
## Подстановка переменных
## Variable Substitution
Поддерживаемые переменные:
Supported variables:
| Переменная | Описание |
| ----------------------- | ----------------------------------------- |
| `{version}` | Версия пакета |
| `{version_major}` | Часть, обозначающая основную версию |
| `{version_minor}` | Часть, обозначающая второстепенную версию |
| `{version_patch}` | Переменная |
| `{version_suffix}` | Суффикс (например, `-rc1`) |
| `{version_suffix_dash}` | Суффикс с тире |
| `{profile}` | Имя профиля (debug/release/...) |
| `{name}` | Имя пакета |
| Variable | Description |
| ----------------------- | ---------------------------- |
| `{version}` | Package version |
| `{version_major}` | Major version part |
| `{version_minor}` | Minor version part |
| `{version_patch}` | Patch version |
| `{version_suffix}` | Suffix (e.g., `-rc1`) |
| `{version_suffix_dash}` | Suffix with dash |
| `{profile}` | Profile name (debug/release) |
| `{name}` | Package name |

View File

@@ -1,34 +0,0 @@
---
sidebar_label: CLI output
---
# CLI output (experimental)
The structured output implementation is being developed incrementally.
Currently these global options apply to diagnostics emitted through the logger:
```sh
dcr --output plain build
dcr --output json build
dcr --color never build
dcr --quiet build
dcr --verbose build
```
`--output` accepts `human` (default), `plain`, or `json`.
Diagnostics are written to stderr. JSON diagnostics are newline-delimited objects
with `schema_version: 1`, `event`, and `message` fields. Command statuses use the
shared output helpers, build reporting emits structured lifecycle events, and
compiler output is represented as JSON events with its original stream and text.
The protocol is still experimental: some raw command data and subprocess stdout
remain unstructured.
`--color` accepts `auto`, `always`, or `never`. Automatic coloring requires a
terminal and respects `NO_COLOR`. Plain and JSON diagnostics never add colors.
Quiet mode preserves warnings, errors, and compiler diagnostics; verbose mode
enables debug and trace logging. Arguments following `--` are passed through
unchanged.
Remaining work includes migrating the remaining raw command data and subprocess
stdout, improving progress rendering and contextual errors, and expanding
integration coverage for stdout/stderr and closed pipes.

View File

@@ -1,50 +1,50 @@
---
sidebar_label: Кросс-компиляция
sidebar_label: Cross-compilation
---
# Кросс-компиляция
# Cross-Compilation
## Сокращённые названия
## Short Names
DCR поддерживает короткие имена платформ, которые автоматически раскрываются в полные triples:
DCR supports short platform names:
| Краткое название | Полный тройной |
| ---------------- | -------------------------- |
| `linux` | `x86_64-unknown-linux-gnu` |
| `macos` | `x86_64-apple-darwin` |
| `windows` | `x86_64-pc-windows-msvc` |
| Short Name | Full Triple |
| ---------- | -------------------------- |
| `linux` | `x86_64-unknown-linux-gnu` |
| `macos` | `x86_64-apple-darwin` |
| `windows` | `x86_64-pc-windows-msvc` |
```bash
dcr build --target windows
```
## Полные тройки
## Full Triples
```bash
dcr build --target aarch64-unknown-linux-gnu
dcr build --target x86_64-pc-windows-gnu
dcr build --target x86_64-pc-windows-gnu # mingw
dcr build --target armv7-unknown-linux-gnueabihf
```
## clang --target
При использовании clang DCR автоматически inject-ит `--target=\<triple>` в CFLAGS/CXXFLAGS.
When using clang, DCR injects `--target=\<triple>` into CFLAGS.
```toml
[build]
compiler = "clang"
target = "aarch64-unknown-linux-gnu"
# Авто: cflags = ["--target=aarch64-unknown-linux-gnu"]
# Auto: cflags += ["--target=aarch64-unknown-linux-gnu"]
```
## Bare-Metal
## Bare-Metal / Freestanding
Для целевых платформ, содержащих значения `none`, `-elf`, `eabi` или `baremetal`, DCR автоматически:
For targets containing `none`, `-elf`, `eabi`, or `baremetal`, DCR automatically:
1. Для none/elf/eabi/bare-metal target-ов отключаются DCR default флаги (нет `-I` системных путей, нет `-l` libc).
2. **Вставляет `-ffreestanding`** на этапе компиляции и `-nostdlib -static` на этапе линковки
1. **Disables default flags** — no system include paths, no `-l` libc
2. **Injects `-ffreestanding`** at compile time and `-nostdlib -static` at link time
Кроме того, можно явно включить автономный режим:
You can also enable freestanding mode explicitly:
```toml
[build]
@@ -55,7 +55,7 @@ freestanding = true
dcr build --target aarch64-none-elf
```
## Целевой каталог
## Target Directory
By default, the compilation output directories are structured as follows:

View File

@@ -1,12 +1,12 @@
---
sidebar_label: Обзор dcr.toml
sidebar_label: dcr.toml overview
---
# Обзор dcr.toml
# dcr.toml
Основной конфигурационный файл проекта. Располагается в корне проекта.
Main project configuration file. Located at the project root.
## Структура
## Structure
```toml
[package]
@@ -38,88 +38,67 @@ sidebar_label: Обзор dcr.toml
# optional: pack FAT disk image after build
```
## [пакет]
## [package]
| Поле | Обязательное | Описание |
| ------------- | ------------ | --------------------------------------------------------------------------------------------------------------- |
| `имя` | да | Имя проекта |
| `версия` | да | Semantic version of the **project** |
| `dcr-version` | no | Semver of the **dcr tool** this project targets. Written by `dcr new` / `dcr init` to the current tool version. |
| `тип` | нет | `app`, `lib`, `none` (defaults to `"none"`) |
| `лицензия` | нет | SPDX-идентификатор лицензии |
| `автор` | no | Автор |
| Field | Required | Description |
| --------- | -------- | ------------------------------------------- |
| `name` | yes | Project name |
| `version` | yes | Semantic version |
| `type` | no | `app`, `lib`, `none` (defaults to `"none"`) |
| `license` | no | SPDX license identifier |
| `author` | no | Author |
```toml
[package]
name = "my-app"
version = "0.1.0"
dcr-version = "0.8.4"
type = "app"
license = "MIT"
author = "John Doe"
```
### `package.dcr-version`
Optional pin of the DCR CLI the project was written for. On every `dcr.toml` load:
| Situation | Behaviour |
| ------------------------------ | ---------------------------------------------------------- |
| Field missing / empty | Warning: add `dcr-version` (set by `dcr new` / `dcr init`) |
| Running dcr **older** than pin | Warning: upgrade dcr (`dcr --update`) |
| Running dcr **newer** than pin | Warning: review changelog, bump the pin when ready |
| Equal | Silent |
| Invalid semver | Warning once, field ignored |
Never fails the command — warnings only. Pre-release suffixes (`1.0.0-dev`) are ignored for comparison (`1.0.0-dev` ≡ `1.0.0`).
## [сборка]
## [build]
...
* `build.qt` — (bool) Включить автоматическую обработку метаобъектов Qt (MOC, UIC, RCC). Требуется установка модулей `qt6` с помощью `pkg-config`.
* `build.qt` — (bool) Enable automatic Qt meta-object handling (MOC, UIC, RCC). Requires `qt6` modules installed via `pkg-config`.
| Поле | По умолчанию | Описание |
| ------------------------ | ------------- | --------------------------------------------------------------------------------------------------------- |
| `язык` | `"c"` | `"c"`, `"c++"`, `"cpp"`, `"cxx"`, `"asm"`, `"llvm_ir"`, `"llvm-ir"`, `"ll"` (optional, defaults to `"c"`) |
| `стандартный` | `"c11"` | Стандарт C (`c11`, `c17`, `c23`) |
| `cxx_standard` | — | Стандарт C++ (`c++17`, `c++20`, `c++23`) |
| `компилятор` | `cxxflags` | Preferred compiler (optional, defaults to `"clang"`) |
| `тип` | `"bin"` | `bin`, `staticlib`, `sharedlib`, `efi`, `elf`, `none`, `custom`, `flat-bin` |
| `target` | хост | Target triple для кросс-компиляции |
| `платформа` | `"нативный"` | `native`, `efi`, `freestanding` |
| `cflags` | `[]` | Дополнительные флаги C++ |
| `ldflags` | `[]` | Дополнительные флаги линковки |
| `имя файла` | `""` | Кастомное имя выходного файла |
| `расширение` | `""` | Custom file extension (for `flat-bin`, default is `bin`) |
| `корни` | `["src"]` | Source roots: directories and/or individual source/header files |
| `exclude` | `[]` | Паттерны исключений |
| `include` | `[]` | Дополнительные include-директории |
| `src_disable` | `false` | Отключить автоматический поиск источников |
| `наследовать` | `false` | Наследовать build от корня workspace |
| `clean` | `[]` | Шаблоны Glob для настраиваемых чистых путей |
| `out_dir` | `""` | Пользовательский каталог для вывода данных |
| `только рабочая область` | `false` | Workspace-only, not built standalone (no `language`/`compiler` required) |
| `отдельно стоящий` | `false` | Компилировать в автономном режиме (`-ffreestanding` + `-nostdlib -static`) |
| `opt_level` | — | Optimization level: `0`-`3`, `"s"`, `"z"` (derived from profile if omitted) |
| `ldscript` | profile-based | Emit debug symbols (`-g`): `true` in debug, `false` in release |
| `lto` | `false` | Оптимизация на этапе компоновки (`-flto` как для компилятора, так и для компоновщика) |
| `asflags` | `false` | Удалить символы из вывода (опция `-s` в ldflags) |
| `true` | `[]` | Warning flags (e.g. `"all"`, `"extra"`, `"pedantic"`); engine adds `-Wall -Wextra` in debug if empty |
| `panic` | `""` | Стратегия «Паника»: `"abort"` отключает исключения и таблицы развертки |
| `codegen-units` | `""` | Максимальное количество параллельных заданий компиляции (`"0"` = автоматически) |
| `qt` | `false` | Включить автоматическую обработку метаобъектов Qt (MOC, UIC, RCC) |
| Field | Default | Description |
| ---------------- | ------------- | --------------------------------------------------------------------------------------------------------- |
| `language` | `"c"` | `"c"`, `"c++"`, `"cpp"`, `"cxx"`, `"asm"`, `"llvm_ir"`, `"llvm-ir"`, `"ll"` (optional, defaults to `"c"`) |
| `standard` | `"c11"` | C standard (`c11`, `c17`, `c23`) |
| `cxx_standard` | — | C++ standard (`c++17`, `c++20`, `c++23`) |
| `compiler` | `"clang"` | Preferred compiler (optional, defaults to `"clang"`) |
| `kind` | `"bin"` | `bin`, `staticlib`, `sharedlib`, `efi`, `elf`, `none`, `custom`, `flat-bin` |
| `target` | host | Target triple for cross-compilation |
| `platform` | `"native"` | `native`, `efi` |
| `cflags` | `[]` | Additional C/C++/ASM flags |
| `ldflags` | `[]` | Additional linker flags |
| `filename` | `""` | Custom output file name |
| `extension` | `""` | Custom file extension (for `flat-bin`, default is `bin`) |
| `roots` | `["src"]` | Source roots: directories and/or individual source/header files |
| `exclude` | `[]` | Exclude patterns |
| `include` | `[]` | Additional include directories |
| `src_disable` | `false` | Disable auto source discovery |
| `inherit` | `false` | Inherit build from workspace root |
| `clean` | `[]` | Glob patterns for custom clean paths |
| `out_dir` | `""` | Custom output directory |
| `workspace_only` | `false` | Workspace-only, not built standalone (no `language`/`compiler` required) |
| `freestanding` | `false` | Compile in freestanding mode (`-ffreestanding` + `-nostdlib -static`) |
| `opt_level` | — | Optimization level: `0`-`3`, `"s"`, `"z"` (derived from profile if omitted) |
| `debug` | profile-based | Emit debug symbols (`-g`): `true` in debug, `false` in release |
| `lto` | `false` | Link-time optimization (`-flto` for both compiler and linker) |
| `strip` | `false` | Strip symbols from output (`-s` in ldflags) |
| `warnings` | `[]` | Warning flags (e.g. `"all"`, `"extra"`, `"pedantic"`); engine adds `-Wall -Wextra` in debug if empty |
| `panic` | `""` | Panic strategy: `"abort"` disables exceptions and unwind tables |
| `codegen-units` | `""` | Max parallel compilation jobs (`"0"` = auto) |
| `qt` | `false` | Enable automatic Qt meta-object handling (MOC, UIC, RCC) |
Параметры из исходного файла конфигурации (не в виде типизированной структуры):
Settings from raw config (not in typed struct):
* `pkg_config` — list of packages queried for build-wide compiler/linker flags
Dependencies can also declare a system package directly, for example
`fmt = { pkg-config = "fmt" }`. This records the package in `dcr.lock` and applies
the flags returned by `pkg-config --cflags` and `pkg-config --libs`.
* Путь к linker script
* `build.steps` / `build.post_steps` — этапы генерации кода
* `pkg_config` — list of pkg-config packages
* `ldscript` — linker script path
* `build.steps` / `build.post_steps` — codegen steps
## Per-language overrides: `[build.c]`, `[build.cxx]`, `[build.asm]`, `[build.llvm_ir]`
@@ -148,21 +127,24 @@ compiler = "llc"
The flat `[build]` acts as fallback; per-language tables take precedence for their language.
Пример:
Example:
```toml
[build]
language = ["cpp", "c"]
standard = "c17"
language = "c++"
standard = "c23"
cxx_standard = "c++23"
compiler = "clang"
kind = "sharedlib"
cflags = ["-Wall", "-Wextra"]
pkg_config = ["sdl2", "gl"]
opt_level = "z"
lto = true
strip = true
panic = "abort"
codegen-units = "2"
```
## [набор инструментов]
## [toolchain]
```toml
[toolchain]
@@ -171,43 +153,38 @@ cxx = "/usr/bin/clang++"
as = "/usr/bin/as"
ar = "/usr/bin/ar"
ld = "/usr/bin/ld.lld"
uic = "/usr/bin/uic" # Qt
moc = "/usr/bin/moc" # Qt
rcc = "/usr/bin/rcc" # Qt
```
Raw config также поддерживает `uic`, `moc` и `rcc` для генерации кода Qt.
Raw config also supports `uic`, `moc`, `rcc` for Qt codegen.
## [зависимости]
## [dependencies]
См. [dependencies](/docs/reference/dependencies).
See [dependencies](/docs/reference/dependencies).
## [запустить]
## [run]
```toml
[запустить]
[run]
cmd = "./target/{profile}/{name}"
```
Подстановки:
Substitutions:
* `{version}` — версия из [package]
* `pkg_config`
* `{profile}` — отладочная / релизная версия
* `{name}` — имя из [package]
* `{version}` — package version
* `{version_major}`, `{version_minor}`, `{version_patch}`, `{version_suffix}`, `{version_suffix_dash}` — version parts
* `{profile}` — debug / release
* `{name}` — package name
По умолчанию `cmd` вычисляется как `./target/{profile}/{name}`.
Default `cmd` = `./target/{profile}/{name}` (macOS/Windows) or `./target/\<triple>/\<profile>/\<name>` (Linux).
## [рабочая область]
## [workspace]
См. [workspaces](/docs/reference/workspaces).
See [workspaces](/docs/reference/workspaces).
## [archive]
Optional post-build step: format a FAT volume and copy built artifacts into a disk image. Runs after a successful package build (and after workspace member builds that define `[archive]`).
Requires DCR built with the `archive` Cargo feature (`cargo build --features archive`). Release binaries include this feature.
| Field | Required | Description |
| ------------ | -------- | ------------------------------------------------------------------------------------------- |
| `output` | yes | Image path relative to project root (`{profile}` allowed) |

View File

@@ -1,111 +1,65 @@
---
sidebar_label: Зависимости
sidebar_label: Dependencies
---
# Зависимости
# Dependencies
## Форматы
## Formats
The `[dependencies]` section supports registry, path, Git, and `pkg-config` dependencies:
The `[dependencies]` section supports three formats:
### Строка (реестр)
### String (registry)
```toml
[dependencies]
fmt = "10.1.1"
spdlog = "^1.12"
catch2 = ">=3.0,<4.0"
spdlog = "1.12"
catch2 = "3.4.0"
```
Строка версии используется без изменений для поиска в реестре.
The version string is used as-is for registry lookup.
### Табличный (git)
### Table (git)
```toml
[dependencies]
dcr-math = { git = "https://github.com/dexoron/dcr-math-lib.git", tag = "v0.1.0" }
fmt = { git = "https://github.com/fmtlib/fmt", tag = "10.1.1" }
```
Fields: `git`, `branch`, `tag`, `rev`, `mode`, `include`, `lib`, `libs`.
Fields: `git`, `branch`, `tag`, `rev`.
### Табличный (path)
### Table (path)
```toml
[dependencies]
mylib = { path = "../mylib" }
```
For a prebuilt external library, specify its layout explicitly. The three
arrays are paths relative to the dependency root (`include`, `lib`) and linker
names (`libs`):
## Registry
```toml
[dependencies]
dcr-math = { path = "../deps/dcr-math", include = ["include"], lib = ["lib"], libs = ["dcr-math"] }
```
### Table (`pkg-config`)
Use an installed `.pc` package when the library is provided by the operating system
or another system package manager. DCR invokes `pkg-config --cflags` and
`pkg-config --libs`, preserving include, library, linker, and other flags:
```toml
[dependencies]
fmt = { pkg-config = "fmt" }
openssl = { pkg-config = ["openssl", "libcrypto"] }
```
The `pkg-config` executable must be available in `PATH`. The named `.pc` files must
be available through pkg-config's standard search paths or via `PKG_CONFIG_PATH`.
These dependencies are not downloaded or built by DCR; they are recorded in
`dcr.lock` with a `pkg-config+...` source.
## Реестр
## RegistryDCR использует реестр пакетов для поиска зависимостей по имени.```toml
# ~/.dcr/config.toml
[registry]
main = { url = "https://github.com/dcr-ports/dcr-index", priority = 1 }
```
DCR uses a package registry for dependency lookup by name.
```toml
# ~/.dcr/config.toml
[registry.default]
url = "https://index.dcr.dexoron.tech"
url = "https://index.dcr.pm"
priority = 1
```
Приоритет реестра: порядок в файле `config.toml`. Переменная `DCR_INDEX_PATH` переопределяет путь к index.json.
Registry priority: order in `config.toml`. The `DCR_INDEX_PATH` variable overrides the path to `index.json`.
## Git-зависимости
## Git dependencies
Git dependencies are cloned into `~/.dcr/git/`; their exact checked-out commit is written to `dcr.lock`.
Git dependencies are parsed and recorded in `dcr.lock`. DCR supports specifying branch/tag/rev for git sources:
Both Git and path dependencies have two modes:
* **DCR package:** the source has `dcr.toml`. DCR builds it before the consumer and uses the package name from its manifest for linking.
* **Prebuilt library:** it provides existing headers and binaries through `include`, `lib`, and `libs`. DCR passes them to the compiler/linker without building the dependency.
The mode is normally detected automatically. Use `mode = "build"` or `mode = "prebuild"` when a source contains both a manifest and prebuilt artifacts and you need to choose explicitly.
`dcr-math-lib` publishes both forms. Select its prebuilt library explicitly:
```toml
[dependencies]
dcr-math = { git = "https://github.com/dexoron/dcr-math-lib.git", tag = "v0.1.0", mode = "prebuild", include = ["include"], lib = ["lib"], libs = ["dcr-math"] }
```
DCR supports specifying branch/tag/rev for git sources:
* `branch` — переключиться на ветку
* `tag` — переключиться на тег
* `rev` — переключиться на конкретный коммит
* `features` — флаги функций (проанализированы, но не влияют на сборку)
* `branch` — switch to a branch
* `tag` — switch to a tag
* `rev` — switch to a specific commit
* `features` — feature flags (parsed, but does not affect build)
## Path dependencies
Local paths may point at a DCR package or a prebuilt external library. A path DCR package is built before its consumer, including its own path/git dependencies. DCR detects dependency cycles. A prebuilt library is never built by DCR; it is linked from the directories declared in its dependency entry.
Local paths. DCR automatically discovers include and lib directories from the neighbor's `dcr.toml`.
```toml
[dependencies]
@@ -113,51 +67,18 @@ mylib = { path = "/abs/path/to/lib" }
mylib = { path = "../relative/path" }
```
For DCR packages, the package name from `dcr.toml` is used for linking (so the dependency key may differ from the library name). Header resolution includes the packaged `target/include` directory and link search includes `target/lib`.
### Recommended library layouts
Buildable DCR library:
```text
dcr-math-lib/
├── dcr.toml
└── src/
├── dcr_math.c
└── dcr_math.h
```
Prebuilt library:
```text
dcr-math-lib/
├── include/
│ └── dcr_math.h
└── lib/
└── libdcr-math.a # or .so / .lib
```
`libs` contains linker names without the `lib` prefix and file extension: use
`["dcr-math"]` for `libdcr-math.a`.
If one repository contains both forms, keep the prebuilt files in `include/` and `lib/` and select the mode explicitly:
```toml
[dependencies]
dcr-math = { git = "https://github.com/dexoron/dcr-math-lib.git", tag = "v0.1.0", mode = "prebuild", include = ["include"], lib = ["lib"], libs = ["dcr-math"] }
```
For a local copy, replace `git` with `path = "../dcr-math-lib"`. In `prebuild` mode DCR does not run the dependency build, even when `dcr.toml` is present.
*Note: Header resolution automatically checks the packaged `target/include` directory of path dependencies, ensuring consumer packages can find headers from compiled static or dynamic libraries.*
## dcr.lock
Dependency lock file. Contains package names and sources.
Created during `dcr build` for resolved registry, path, and Git dependencies. Not updated during `dcr add` — only on the next `dcr build`.
Created during `dcr build` when registry dependencies are present. Not updated during `dcr add` — only on the next `dcr build`.
## Resolution process
1. Resolve dependency sources (registry → git → path)
2. Fetch git dependencies into `~/.dcr/git/` and check out the requested ref
3. Build DCR package dependencies recursively
4. Collect `include_dirs`, `lib_dirs`, `libs` for the compiler
1. Load all dependencies (registry → git → path)
2. For path deps: recursively read their `dcr.toml`
3. For registry deps: search `index.json`
4. For git deps: clone to cache
5. Collect `include_dirs`, `lib_dirs`, `libs` for the compiler

View File

@@ -1,29 +1,29 @@
---
sidebar_label: Переменные среды
sidebar_label: Environment variables
---
# Переменные среды
# Environment Variables
## DCR_COMPILER
Переопределяет компилятор для всех языков. **Наивысший приоритет.**
Overrides the compiler for all languages. **Highest priority.**
```bash
export DCR_COMPILER=clang
dcr build
```
Приоритет разрешения компилятора:
Compiler resolution priority:
1. `DCR_COMPILER` (переменная среды)
2. `DCR_CC` / `DCR_CXX` / `DCR_AS` (переменная среды)
1. `DCR_COMPILER` (env)
2. `DCR_CC` / `DCR_CXX` / `DCR_AS` (env)
3. `[toolchain]` (dcr.toml)
4. `build.compiler` (dcr.toml)
5. `PATH`
## DCR_CC / DCR_CXX / DCR_AS
Приоритет: `[toolchain]` > `DCR_COMPILER` > `DCR_CC` > `PATH`.
Per-language override (lower priority than `DCR_COMPILER`, higher than `[toolchain]`).
```bash
export DCR_CC=gcc-14
@@ -33,7 +33,7 @@ export DCR_AS=arm-linux-gnueabihf-as
## DCR_LD / DCR_AR
Переопределить линкер и архиватор.
Override linker and archiver.
```bash
export DCR_LD=ld.lld
@@ -42,7 +42,7 @@ export DCR_AR=llvm-ar
## DCR_DEBUG
Включает режим отладки — печатает все команды компиляции перед выполнением.
Enables debug mode — prints all compilation commands to stderr before execution.
```bash
export DCR_DEBUG=1
@@ -51,34 +51,10 @@ dcr build
## DCR_INDEX_PATH
Переопределяет путь к index.json реестра.
Overrides the path to the registry `index.json`.
```bash
export DCR_INDEX_PATH=/custom/path/index.json
```
По умолчанию: `~/.dcr/index.json`.
## DCRUP_MIRROR
Download mirror for `dcrup` (prebuilt binaries only).
```bash
export DCRUP_MIRROR=auto # cf → gh → sf → ya (default)
export DCRUP_MIRROR=cf # CloudFlare CDN
export DCRUP_MIRROR=gh # GitHub Releases
export DCRUP_MIRROR=sf # SourceForge
export DCRUP_MIRROR=ya # Yandex CDN (RU fallback)
```
CLI override: `dcrup install stable --mirror cf`.
## DCRUP_HOME / DCRUP_BIN / DCRUP_REPO
Installer layout and source clone URL:
```bash
export DCRUP_HOME=~/.dcr
export DCRUP_BIN=~/.dcr/bin
export DCRUP_REPO=https://github.com/dexoron/dcr
```
Default: `~/.dcr/index.json`.

View File

@@ -1,12 +1,12 @@
---
sidebar_label: Поддержка платформ
sidebar_label: Platform support
---
# Поддержка платформ
# Platform Support
## Тройные цели
## Target Triples
DCR нормализует target triple через `platform_triple::normalize_triple()`. Если задано имя платформы (short name), оно раскрывается в triple.
DCR normalizes target triples. Short platform names are expanded to full triples.
### Linux
@@ -17,7 +17,7 @@ target/<arch>-unknown-linux-<env>/<profile>/
Architectures: `x86_64`, `aarch64`, `i686`, `armv7`, `riscv64` (host-detected).
Environments: `gnu` (default), `musl`.
Тип артефакта: ELF. Расширения: `.so` для sharedlib, `.a` для staticlib
Artifact type: ELF. Extensions: `.so` (sharedlib), `.a` (staticlib).
### macOS
@@ -25,9 +25,9 @@ Environments: `gnu` (default), `musl`.
target/<profile>/ (default) or target/<triple>/<profile>/ (with target)
```
Поддержка архитектур: `x86_64`, `aarch64`.
Architectures: `x86_64`, `aarch64` (host-detected).
`.dylib` для sharedlib, `.a` для staticlib
Extensions: `.dylib` (sharedlib), `.a` (staticlib).
### Windows
@@ -35,10 +35,10 @@ target/<profile>/ (default) or target/<triple>/<profile>/ (with target)
target/<profile>/ (default) or target/<triple>/<profile>/ (with target)
```
Поддержка архитектур: `x86_64`, `aarch64`.
Architectures: `x86_64`, `aarch64`.
Environments: `msvc` (default), `gnu` (MinGW).
Расширения: `.exe` (бинарный файл), `.lib` (статическая библиотека), `.dll` (общая библиотека), `.efi` (UEFI).
Extensions: `.exe` (bin), `.lib` (staticlib), `.dll` (sharedlib), `.efi` (UEFI).
### BSD
@@ -46,8 +46,8 @@ Environments: `msvc` (default), `gnu` (MinGW).
target/<arch>-unknown-<os>/<profile>/
```
Поддерживаемые системы: `freebsd`, `openbsd`, `netbsd`.
Supported systems: `freebsd`, `openbsd`, `netbsd`, `dragonfly`.
## Определение хоста
## Host Detection
`platform_triple::host_triple()` возвращает тройку текущей системы. Используется как fallback, если `target` не указан.
DCR uses `std::env::consts::ARCH` and `std::env::consts::OS` for host platform detection. Used as fallback when `target` is not specified.

View File

@@ -1,41 +1,46 @@
---
sidebar_label: Рабочие пространства
sidebar_label: Workspaces
---
# Рабочие пространства
# Workspaces
Workspaces позволяют управлять несколькими пакетами в одном репозитории.
Workspaces allow managing multiple packages in a single repository.
## Конфигурация
## Configuration
```toml
[workspace]
members = [
{ path = "pkg-a" },
{ path = "pkg-b", deps = ["pkg-a"] },
{ path = "pkg-c", deps = ["pkg-a", "pkg-b"], main = true },
]
[workspace.lib-core]
path = "lib-core"
[workspace.lib-utils]
path = "lib-utils"
deps = ["lib-core"]
[workspace.app]
path = "app"
deps = ["lib-core", "lib-utils"]
main = true
```
### Поля member
### Member fields
| Поле | Описание |
| ------ | -------------------------------------------- |
| `path` | Путь к пакету (относительно корня workspace) |
| `deps` | Зависимости от других member-ов |
| `main` | Пометить как главный пакет |
| Field | Description |
| ------ | ------------------------------------------------ |
| `path` | Path to the package (relative to workspace root) |
| `deps` | Dependencies on other members |
| `main` | Mark as the main package |
## Топологическая сортировка
## Topological sort
DCR автоматически сортирует пакеты по зависимостям: пакет A собирается раньше B, если B зависит от A.
DCR automatically sorts packages by dependencies: package A is built before B if B depends on A.
Циклические зависимости обнаруживаются и приводят к ошибке.
Cyclic dependencies are detected and cause an error.
## Сборка
## Build
```bash
dcr build # собрать все пакеты
dcr build --workspace pkg-a # собрать только pkg-a
dcr build # build all packages in dependency order
dcr build --workspace app # build only app (dependencies built automatically)
```
When building a workspace, DCR automatically injects include and library paths of dependent workspace members:
@@ -43,22 +48,25 @@ When building a workspace, DCR automatically injects include and library paths o
* **Include Paths**: Automatically resolves and injects header directories of dependencies, including the member's `src/` directory, local `include/` directory, and the packaged `target/include` directory.
* **Library Paths**: Injects compiled library search paths (`target/lib` as well as target-specific build folders) to allow automatic linking with member libraries.
## Очистка
## Clean
```bash
dcr clean # очистить только корневой target/
dcr clean --all # очистить target/ всех пакетов
dcr clean # clean only root target/
dcr clean --all # clean target/ of all packages
```
## Наследование
## Inheritance
Если у member-а нет своей секции `[build]`, а в корневом `[build]` указано `inherit = true`:
If a member has `inherit = true` in its `[build]` section, fields from the root `[build]` are merged into the member:
```toml
# root dcr.toml
[build]
inherit = true
language = "c"
standard = "c17"
# member inherits language and standard
```
## Workspace-only root (no build of its own)

View File

@@ -1,46 +1,46 @@
---
sidebar_label: Автоматическое обновление
sidebar_label: Self Update
---
# Автоматическое обновление
# Self Update
## dcr --update
Автоматическое обновление до последней версии. Загружает бинарный файл (не архив) из раздела «Релизы» на GitHub и заменяет им текущий исполняемый файл.
Automatic update to the latest version. Downloads a binary (not an archive) from GitHub Releases and replaces the current executable.
```bash
dcr --update
```
## Как это работает
## How it works
1. DCR определяет текущую платформу и архитектуру
2. Загружает последнюю версию с `api.github.com/repos/dexoron/dcr/releases/latest`
3. Сравнивает версии
4. Загружает соответствующий ресурс (прямой URL-адрес двоичного файла, а не архива)
5. Заменяет текущий исполняемый файл
1. DCR detects the current platform and architecture
2. Fetches the latest release from `api.github.com/repos/dexoron/dcr/releases/latest`
3. Compares versions
4. Downloads the matching asset (direct binary URL, not archive)
5. Replaces the current executable via `self_replace`
## Названия активов
## Asset naming
Шаблон: `dcr-\<triple>.\<ext> `
Pattern: `dcr-\<triple>` or `dcr-\<triple>.exe`
| Платформа | Название актива |
| -------------- | ------------------------------------- |
| Linux x86_64 | `dcr-x86_64-unknown-linux-gnu.tar.gz` |
| macOS x86_64 | `dcr-x86_64-apple-darwin.tar.gz` |
| macOS ARM64 | `dcr-aarch64-apple-darwin.tar.gz` |
| Windows x86_64 | `dcr-x86_64-pc-windows-msvc.zip` |
| Platform | Asset name |
| -------------- | -------------------------------- |
| Linux x86_64 | `dcr-x86_64-unknown-linux-gnu` |
| macOS x86_64 | `dcr-x86_64-apple-darwin` |
| macOS ARM64 | `dcr-aarch64-apple-darwin` |
| Windows x86_64 | `dcr-x86_64-pc-windows-msvc.exe` |
## AUR
Если DCR установлен через AUR, `--update` выводит предупреждение:
If DCR was installed via AUR, `--update` shows a warning:
```
Обновление через менеджер пакетов: yay/paru -Syu {package_name} или sudo pacman -Syu {package_name}
Update via package manager: yay/paru -Syu {package_name} or sudo pacman -Syu {package_name}
```
## Ошибки
## Errors
* Не удалось определить платформу — ошибка
* Не удалось скачать релиз — ошибка с URL
* Нет прав на запись бинарника — ошибка (нужен `sudo` или ручная установка)
* Cannot detect platform — error
* Cannot fetch release — error with URL
* No write permission — error (use `sudo` or manual install)

View File

@@ -1,45 +1,45 @@
---
sidebar_label: Запуск тестов
sidebar_label: Running tests
---
# Запуск тестов
# Running Tests
## Выполнение
## Execution
```bash
Тест DCR
dcr test
```
Выполняет сборку проекта, а затем компилирует и запускает тестовые файлы из каталога `tests/`.
Builds the project, then compiles and runs test files from `tests/`.
## Профили
## Profiles
```bash
dcr test # debug (по умолчанию)
dcr test # debug (default)
dcr test --release # release
dcr test --debug # явно debug
dcr test --debug # explicit debug
```
## Вывод
## Output
```
=====================
Сводка результатов набора тестов
Testsuite summary
=====================
ИСПОЛЬЗОВАНО: 5
ПРОЙДЕНО: 3
ПРОПУЩЕНО: 1
НЕ ПРОЙДЕНО: 1
TOTAL: 5
PASS: 3
SKIP: 1
FAIL: 1
=====================
```
## Код возврата
## Exit code
* 0 — все тесты пройдены (FAIL = 0)
* 1 — есть упавшие тесты
* 0 — all tests passed (FAIL = 0)
* 1 — test failures or build error
## Что строится
## What gets built
* Все C/C++ файлы из `tests/`
* Include path: `tests/` (для `dcr_test.h`)
* Линкуется с основным проектом (если `type = "lib"`)
* All `.c` files from `tests/` (`.cpp` not supported)
* Include path: `tests/` (for `dcr_test.h`)
* Linked with project if `package.type = "lib"` or `kind = "staticlib"`/`"sharedlib"`

View File

@@ -1,69 +1,69 @@
---
sidebar_label: Тестовая инфраструктура (EXPECT, TEST, ...)
sidebar_label: Test framework (EXPECT, TEST, ...)
---
# Тестовая инфраструктура
# Test Framework
DCR имеет встроенный минималистичный фреймворк для тестирования на C/C++.
DCR has a built-in minimal test framework for C.
## Макросы
## Macros
### `EXPECT(expr, ...)`
### `EXPECT(expr)`
Проверяет, что выражение истинно.
Asserts that an expression is true.
```c
EXPECT(1 + 1 == 2);
EXPECT(ptr != NULL, "ptr should not be NULL");
EXPECT(ptr != NULL);
```
### `SKIP(...)`
### `SKIP(reason)`
Пропускает тест с опциональным сообщением.
Skips a test with a message.
```c
SKIP("not implemented on Windows yet");
SKIP("not implemented on Windows");
```
### `TEST(имя)`
### `TEST(name)`
Определяет тест.
Defines a test.
```c
TEST(сложение) {
TEST(addition) {
EXPECT(1 + 1 == 2);
EXPECT(2 + 2 == 4);
}
```
### `TEST_CASE(name, ...)`
### `TEST_CASE(name)`
Регистрирует тестовый случай.
Registers a test case.
```c
TEST_CASE(math, a, b) {
EXPECT(a + b == b + a);
TEST_CASE(math) {
EXPECT(1 + 1 == 2);
}
```
## Инициализация
## Initialization
```bash
dcr test --init
```
Создаются файлы:
Creates:
* `tests/dcr_test.h` — заголовочный файл фреймворка
* `tests/test.c` — шаблон с примером теста
* `tests/dcr_test.h` — framework header (do not edit)
* `tests/test.c` — template with example test
## Структура tests/
## Structure
```
tests/
├── dcr_test.h # фреймворк (не редактировать)
├── test.c # основные тесты
└── ... # дополнительные .c файлы с тестами
├── dcr_test.h # framework (do not edit)
├── test.c # main tests
└── ... # additional .c test files
```
Компилируются только файлы с расширением `.c` (файлы с расширением `.cpp` не поддерживаются).
Only `.c` files are compiled (`.cpp` is not supported).

View File

@@ -8,11 +8,8 @@ sidebar_label: Introduction
<summary>Quick reference</summary>
```bash
# Installation (dcrup)
curl -fsSL https://sh.dcr-tool.ru | sh -s -- self-install
export PATH="$HOME/.dcr/bin:$PATH"
dcrup install stable # auto: cf → gh → sf → ya
# dcrup install stable --mirror cf # CloudFlare / GitHub / SourceForge / Yandex
# Installation
curl -fsSL https://dcr.dexoron.su/install.sh | sh
# Create a project
dcr new my-app

View File

@@ -4,111 +4,6 @@ sidebar_label: Changelog
# Changelog
## 0.9.5 (2026-10-21)
* **Structured CLI output** — shared helpers now provide Cargo-like human, plain, and JSON output modes.
* **Color and diagnostics policy** — `--color`, `NO_COLOR`, `--quiet`, and `--verbose` are applied consistently across commands.
* **Build reporting** — lifecycle events and compiler diagnostics are available as structured JSON events.
* **Output lab** — sandbox scenarios cover help, lifecycle commands, compiler warnings/errors, stream capture, and broken pipes.
## 0.9.1 (2026-09-13)
* **`pkg-config` dependencies** — declare `fmt = { pkg-config = "fmt" }` or multiple package names in `[dependencies]`; DCR applies `.pc` compiler/linker flags and records the resolved package in `dcr.lock`.
* **`dcr add` support for `pkg-config`** — easily add system package dependencies with `dcr add fmt pkg-config:fmt` or `dcr add openssl pkg:openssl,libcrypto`.
* **`dcr tree` & IDE integration** — `pkg-config` packages are marked in `dcr tree` and resolved into compiler flags in `dcr gen` (`compile_commands.json`).
* **Fixed `dcr new` in non-ASCII / spaced paths** — initializing projects from folders with non-ASCII characters or spaces no longer fails validation.
## 0.9.0 (2026-08-31)
* **Download mirrors in `dcrup`** — `--mirror auto|cf|gh|sf|ya` and `DCRUP_MIRROR`.
Default `auto` tries **cf → gh → sf → ya** (CloudFlare CDN, GitHub, SourceForge, Yandex CDN).
* **Complete Path/Git dependencies** — DCR packages from `path` and `git` are built before their consumer. Git sources are cached in `~/.dcr/git`, support `branch`/`tag`/`rev`, and record the exact commit in `dcr.lock`.
* **Build and prebuild modes** — `path` and `git` dependencies can build a DCR package from `dcr.toml` or link existing `include`/`lib`/`libs` artifacts; `mode = "build"` / `"prebuild"` selects explicitly when both forms are present.
* **Prebuilt dependency examples** — documentation now shows the `dcr-math-lib` Git repository and recommended build/prebuilt layouts for both `git` and `path`.
* **Transitive dependency builds and cycle reporting** — DCR recursively builds DCR packages and reports a clear dependency chain for cycles.
* **Bare path arguments for `dcr add`** — `dcr add mylib ../mylib` now works in addition to the explicit `path:` form.
* **Removed `install.sh` / `install.ps1` / `install_bsd.sh`** — superseded by `dcrup`.
## 0.8.5 (2026-08-08)
* **`package.dcr-version`** — optional CLI version pin in `dcr.toml`.
`dcr new` / `dcr init` write the current version. On config load:
* missing / empty pin → warn "add dcr-version";
* dcr older than pin → warn "update dcr";
* dcr newer than pin → warn "check changelog, update pin";
* equal → silent.
Commands do not fail, warning only (once per path per process).
## 0.8.4 (2026-08-04)
**Added:**
* **`.dcr/` directory** — shared machine-readable build facts for IDE integrations:
* `.dcr/compile_commands.json`
* `.dcr/build-info.json` (`schemaVersion`, `artifact_path`, `profile`, …)
* `.dcr/toolchain.json` (compiler/debugger paths, moc/uic/rcc)
* `.dcr/ide/` (placeholder for IDE lock files)
* **`dcr gen project-info`** — `target`, `target_dir`, `artifact_path`, `artifact_kind`, `source_roots`, `include_globs`, `exclude_globs`; absolute/canonical paths.
* **`dcr build --print-artifact-path`** — one absolute artifact path line on stdout after a successful build.
* **`dcr gen … --quiet` / `-q`** — suppress human success logs for gen subcommands.
* **`.clangd`** — created on first gen with `CompilationDatabase: .dcr` (`# managed by dcr gen`); custom `.clangd` is not overwritten.
* **Helpers** `canonicalize_path`, `atomic_write`, `ensure_dcr_dir`; pure `resolve_artifact_path` via `platform::*`.
* **`dcr new` / `dcr init`** — add `.dcr/` to `.gitignore`.
**Changed (breaking):**
* **`compile_commands.json` moved** from project root to **`.dcr/compile_commands.json`**.\
clangd discovers it via `.clangd` / `--compile-commands-dir=.dcr`.\
CLion and VSCode generators updated accordingly.
* **Atomic write** for compile_commands (tmp + rename).
* **`gen vscode` / `gen clion` launch/run** — use the same artifact path resolver as `project-info` / `build-info.json`.
**Fixed:**
* Launch configs no longer hardcode `target/\<profile>/\<name>` without the Linux triple segment.
* Symlink/mount roots: best-effort canonicalize for root and compile database paths.
## 0.8.3 (2026-08-03)
### Added
* **`dcr run -- \<args>...`** — cargo-style argument forwarding after a bare `--`\
(`dcr run --release -- --test_help`). Applies to direct binary runs and `[run].cmd`.
* **Tests** — host target section `ldflags` without CLI `--target`; run-arg forwarding; `split_double_dash` unit tests.
### Changed
* **Native builds resolve the host triple** — without `--target` / package `build.target`, host sections such as\
`[build.x86_64-unknown-linux-gnu]` apply again (`cflags` / `ldflags` / toolchain).\
Previously the target was empty and those sections were ignored while artifacts already used the host triple path.
* **Empty target** — no more `Unknown target ''` warning.
* **`dcr run --help` / man `dcr-run`** — document `--` forwarding.
### Fixed
* **Native artifact paths on Windows and macOS** — without an explicit `--target` / `build.target`, artifacts use `target/\<profile>`, so `dcr run` and flat-bin find the build output.
* Target-specific `ldflags` missing on native host builds (e.g. micro-lang + `libsct-elf`).
* Spurious empty-target warning.
## 0.8.2 (2026-07-22)
### Added
* **Compile progress `[N/M]`** — live TTY status line (`compile pkg v0.1.0 [12/41]`) so long mono-package builds do not look hung.
* **DCR status style** — fixed-width verbs: `project`, `compile`, `dep`, `ready`, `pack`, `done`, `run`.
* **Cargo feature `archive`** — optional FAT packing via `fatfs` (`cargo build --features archive`). Release CI builds with the feature; without it `[archive]` fails with a clear message.
* **Tests** — `flat_bin_nasm_build`, package `build.target` without CLI `--target`, stricter workspace `clean --all`.
* **CI expansion** — unit + integration on Linux/macOS/Windows, archive feature job, rust-cache, clippy default + all-features (see `.github/workflows/ci.yml`).
### Changed
* **No forced host triple from CLI** — without `--target`, package/member `build.target` is honored (bare-metal / ISO `post_steps` paths).
* **Relative include/lib flags** (`-I`, `-i`, `-isystem`, `-idirafter`, `-L`, `-T`) absolutized against the package root under workspace builds.
* **`dcr clean --all`** — no spam for members without a local `target/` (shared root `target/`).
* **`error` / `warn`** — red / yellow on stderr; CLI fully English (`Hint:`).
* **Help / man** — list `add`, `lint`, `setup`; unknown command exits with code 1.
* **Tool NotFound** — `linker not found: ld.lld …` / `{tool} not found …` instead of raw `os error 2`.
## 0.8.1 (2026-07-20)
### Added
@@ -119,7 +14,7 @@ sidebar_label: Changelog
* **GAS / MASM / LLC** — object → `objcopy -O binary` → `\<stem>.bin`
* **C/C++** — objects → freestanding link → `objcopy -O binary` → `\<name>.bin`
* Requires `llvm-objcopy` / `objcopy` / `gobjcopy` except for NASM/FASM direct emit
* **`[archive]` section** — FAT12/16/32 disk images after build (`output`, `format`, `size`, `offset`, `label`, `bootsector`, `layout`). From 0.8.2 requires feature `archive`.
* **`[archive]` section** — after a successful build, pack a FAT disk image (`fatfs`): `output`, `format` (`fat12`/`fat16`/`fat32`), optional `size` (default 1.44 MiB), `offset`, `label`, `bootsector`, and `layout` (`from` → `to`, supports globs). `{profile}` works in paths.
* **Single-file `build.roots`** — a root may be a single source or header file, not only a directory.
### Changed
@@ -127,6 +22,10 @@ sidebar_label: Changelog
* **`--force`** also re-runs `build.steps` and `build.post_steps`.
* **`dcr run` on workspace-only root** — if `[run].cmd` is set, run that after build; otherwise delegate to a workspace member.
### Dependencies
* `fatfs = "0.3"` for FAT image packing.
## 0.8.0 (2026-07-18)
### Added

View File

@@ -15,8 +15,6 @@ dcr add mylib path:./lib # explicit path prefix
dcr add mylib git:https://github.com/user/repo # explicit git prefix
dcr add mylib github:user/repo # GitHub shorthand
dcr add mylib gitlab:user/repo # GitLab shorthand
dcr add fmt pkg-config:fmt # system package via pkg-config
dcr add openssl pkg:openssl,libcrypto # multiple pkg-config packages
```
Source prefixes:
@@ -25,7 +23,6 @@ Source prefixes:
* `git:` — generic git URL
* `github:` — expands to `https://github.com/\<user>/\<repo>`
* `gitlab:` — expands to `https://gitlab.com/\<user>/\<repo>`
* `pkg-config:` / `pkg:` — one or more packages resolved by `pkg-config`
* `http://` / `https://` / `git@` — full URL
Flags:
@@ -34,12 +31,7 @@ Flags:
* `--tag \<name>` — git tag
* `--rev \<hash>` — git commit
If source is omitted — DCR searches connected registries. A bare relative or absolute path is accepted as a path dependency.
For `pkg-config` dependencies, the referenced packages must already be installed
and provide `.pc` files. DCR invokes `pkg-config` during the build (using
`PATH` and `PKG_CONFIG_PATH`) and forwards the returned compiler and linker
flags; it does not download or build these packages.
If source is omitted — DCR searches connected registries.
## `dcr tree`

View File

@@ -8,7 +8,6 @@ sidebar_label: Contributing
```bash
git clone https://github.com/dexoron/dcr
# or a source mirror: GitVerse / SourceCraft / SourceForge / GitLab (see README)
cd dcr
cargo build
```
@@ -43,11 +42,10 @@ cargo test --all-targets
## CI
CI runs (see `.github/workflows/ci.yml`):
CI runs:
* `cargo fmt --check`
* `cargo clippy` (default + `--all-features`)
* `cargo clippy --all-targets -- -D warnings`
* `cargo check --all-targets --all-features`
* Unit + integration tests on Linux, macOS, Windows
* Extra Linux job with `--features archive` (FAT images)
* Tools on runners: clang, nasm, clang-format/tidy (Linux)
* Build on Linux, macOS, Windows
* Integration tests (compilation check)

View File

@@ -61,15 +61,6 @@ Use `kind = "flat-bin"` (NASM `-f bin`) and optional `[archive]` for a FAT disk
See [OS-dev recipe](/docs/recipes/os-flat-bin-archive).
## How do I choose a download mirror?
`dcrup install` uses `--mirror auto` by default and tries **cf → gh → sf → ya**.
```bash
dcrup install stable --mirror cf
export DCRUP_MIRROR=ya
```
## Lock file
`dcr.lock` is created during builds (`dcr build`) when registry dependencies are present. To force an update — delete `dcr.lock` and run `dcr build`.

View File

@@ -4,75 +4,28 @@ sidebar_label: Installation
# Installation
## dcrup (recommended)
## Linux (Dexoron Packages)
Install and switch DCR versions (stable / dev / night, pin `0.8.2`, optional build from source).
Configure your package manager at https://pkg.dexoron.su and install:
### Linux / macOS / BSD / Windows (bash)
**Arch Linux**
```sh
curl --proto '=https' --tlsv1.2 -sSf https://sh.dcr-tool.ru | sh -s -- self-install
export PATH="$HOME/.dcr/bin:$PATH"
dcrup install stable
sudo pacman -Sy dcr
```
Non-interactive install of DCR in one shot:
**Debian/Ubuntu**
```sh
curl --proto '=https' --tlsv1.2 -sSf https://sh.dcr-tool.ru | sh -s -- install stable
export PATH="$HOME/.dcr/bin:$PATH"
sudo apt update && sudo apt install dcr
```
### Windows (PowerShell)
```powershell
& ([scriptblock]::Create((irm https://ps1.dcr-tool.ru))) self-install
# $env:Path += ";$env:USERPROFILE\.dcr\bin"
dcrup install stable
```
After `self-install`, the command is **`dcrup`** (no `.sh` / `.ps1`) and is installed in `~/.dcr/bin` (Unix) or `%USERPROFILE%\.dcr\bin` (Windows).
### Common dcrup commands
**Fedora/RHEL**
```sh
dcrup install stable # latest stable prebuilt (auto: cf → gh → sf → ya)
dcrup install 0.8.2 # pin → 0.8.2@stable
dcrup install 0.8.2@dev
dcrup install stable --libc musl # Linux: musl asset (default: gnu)
dcrup install stable --mirror cf # CloudFlare CDN
dcrup install stable --mirror ya # Yandex CDN (RU fallback)
dcrup install stable --build # cargo build --features archive
dcrup install night # always build from branch dev HEAD
dcrup default 0.8.2
dcrup update
dcrup list
dcrup show
dcrup which
dcrup uninstall 0.8.2 # remove one installed version
dcrup uninstall --all # remove all installed versions
sudo dnf install dcr
```
Layout: `~/.dcr/toolchains/\<id>/dcr` and `~/.dcr/bin/dcr` → active version.
### Download mirrors
Prebuilt installs try **cf → gh → sf → ya** unless you pin a host.
| Code | URL | Notes |
| ---- | ------------------------------------------------------------------------------------------------------------ | -------------------------- |
| `cf` | `https://cdn-global.dcr-tool.ru/\<tag>/\<asset>` | CloudFlare CDN (worldwide) |
| `gh` | `https://github.com/dexoron/dcr/releases/download/\<tag>/\<asset>` | GitHub Releases |
| `sf` | `https://sourceforge.net/projects/dcr-tool/files/\<tag>/\<asset>/download` | SourceForge |
| `ya` | `https://cdn-ru.dcr-tool.ru/\<tag>/\<asset>` | Yandex CDN (RU fallback) |
```sh
dcrup install stable --mirror auto # default
export DCRUP_MIRROR=cf # persist for this shell
```
---
## Arch Linux (AUR)
```sh
@@ -92,12 +45,11 @@ brew install dcr
sudo snap install dcrup
```
> If classic Snap Store publishing is unavailable, install the `.snap` from [GitHub Releases](https://github.com/dexoron/dcr/releases/latest) with `--dangerous`.
## Nix (flake)
```sh
nix run github:dexoron/dcr
# or install to profile:
nix profile install github:dexoron/dcr
```
@@ -107,37 +59,48 @@ nix profile install github:dexoron/dcr
cargo install dcr
```
Note: crates.io builds may omit optional features. For FAT disk images (`[archive]`), prefer release binaries or:
## Linux / macOS (script)
```sh
cargo install dcr --features archive
curl -fsSL https://dcr.dexoron.su/install.sh | sh
```
## BSD (script)
```sh
curl -fsSL https://dcr.dexoron.su/install_bsd.sh | sh
```
## Windows (PowerShell)
```powershell
irm https://dcr.dexoron.su/install.ps1 | iex
```
## From source
```sh
git clone https://github.com/dexoron/dcr.git
cd dcr
cargo build --release --features archive
cd dcr && cargo build --release
ln -sf "$PWD/target/release/dcr" ~/.local/bin/dcr
# or manage versions with dcrup install night / --build
```
## Post-install
Verify the installation:
```bash
dcr --version
dcrup show # if installed via dcrup
```
Man pages (package installs / release assets):
Man pages are available after installation:
```bash
man dcr
man dcr-build
```
Registry (optional) — `~/.dcr/config.toml`:
To use the registry, create `~/.dcr/config.toml`:
```toml
[registry.default]

View File

@@ -6,13 +6,6 @@ sidebar_label: IDE Integration
## VS Code
Install the recommended [DCR extension by Dexoron-Labs](https://marketplace.visualstudio.com/items?itemName=Dexoron-Labs.dcr). Do not install Microsoft C/C++ extensions for DCR projects: DCR uses `clangd`. MS C/C++ is acceptable only when you need its debugger.
Recommended companion extensions:
* [Even Better TOML](https://marketplace.visualstudio.com/items?itemName=tamasfe.even-better-toml)
* [CodeLLDB](https://marketplace.visualstudio.com/items?itemName=vadimcn.vscode-lldb), or MS C/C++ for debugger support only
```bash
dcr gen vscode
```

View File

@@ -1,34 +0,0 @@
---
sidebar_label: CLI output
---
# CLI output (experimental)
The structured output implementation is being developed incrementally.
Currently these global options apply to diagnostics emitted through the logger:
```sh
dcr --output plain build
dcr --output json build
dcr --color never build
dcr --quiet build
dcr --verbose build
```
`--output` accepts `human` (default), `plain`, or `json`.
Diagnostics are written to stderr. JSON diagnostics are newline-delimited objects
with `schema_version: 1`, `event`, and `message` fields. Command statuses use the
shared output helpers, build reporting emits structured lifecycle events, and
compiler output is represented as JSON events with its original stream and text.
The protocol is still experimental: some raw command data and subprocess stdout
remain unstructured.
`--color` accepts `auto`, `always`, or `never`. Automatic coloring requires a
terminal and respects `NO_COLOR`. Plain and JSON diagnostics never add colors.
Quiet mode preserves warnings, errors, and compiler diagnostics; verbose mode
enables debug and trace logging. Arguments following `--` are passed through
unchanged.
Remaining work includes migrating the remaining raw command data and subprocess
stdout, improving progress rendering and contextual errors, and expanding
integration coverage for stdout/stderr and closed pipes.

View File

@@ -40,39 +40,23 @@ Main project configuration file. Located at the project root.
## [package]
| Field | Required | Description |
| ------------- | -------- | --------------------------------------------------------------------------------------------------------------- |
| `name` | yes | Project name |
| `version` | yes | Semantic version of the **project** |
| `dcr-version` | no | Semver of the **dcr tool** this project targets. Written by `dcr new` / `dcr init` to the current tool version. |
| `type` | no | `app`, `lib`, `none` (defaults to `"none"`) |
| `license` | no | SPDX license identifier |
| `author` | no | Author |
| Field | Required | Description |
| --------- | -------- | ------------------------------------------- |
| `name` | yes | Project name |
| `version` | yes | Semantic version |
| `type` | no | `app`, `lib`, `none` (defaults to `"none"`) |
| `license` | no | SPDX license identifier |
| `author` | no | Author |
```toml
[package]
name = "my-app"
version = "0.1.0"
dcr-version = "0.8.4"
type = "app"
license = "MIT"
author = "John Doe"
```
### `package.dcr-version`
Optional pin of the DCR CLI the project was written for. On every `dcr.toml` load:
| Situation | Behaviour |
| ------------------------------ | ---------------------------------------------------------- |
| Field missing / empty | Warning: add `dcr-version` (set by `dcr new` / `dcr init`) |
| Running dcr **older** than pin | Warning: upgrade dcr (`dcr --update`) |
| Running dcr **newer** than pin | Warning: review changelog, bump the pin when ready |
| Equal | Silent |
| Invalid semver | Warning once, field ignored |
Never fails the command — warnings only. Pre-release suffixes (`1.0.0-dev`) are ignored for comparison (`1.0.0-dev` ≡ `1.0.0`).
## [build]
...
@@ -112,12 +96,7 @@ Never fails the command — warnings only. Pre-release suffixes (`1.0.0-dev`) ar
Settings from raw config (not in typed struct):
* `pkg_config` — list of packages queried for build-wide compiler/linker flags
Dependencies can also declare a system package directly, for example
`fmt = { pkg-config = "fmt" }`. This records the package in `dcr.lock` and applies
the flags returned by `pkg-config --cflags` and `pkg-config --libs`.
* `pkg_config` — list of pkg-config packages
* `ldscript` — linker script path
* `build.steps` / `build.post_steps` — codegen steps
@@ -206,8 +185,6 @@ See [workspaces](/docs/reference/workspaces).
Optional post-build step: format a FAT volume and copy built artifacts into a disk image. Runs after a successful package build (and after workspace member builds that define `[archive]`).
Requires DCR built with the `archive` Cargo feature (`cargo build --features archive`). Release binaries include this feature.
| Field | Required | Description |
| ------------ | -------- | ------------------------------------------------------------------------------------------- |
| `output` | yes | Image path relative to project root (`{profile}` allowed) |

View File

@@ -6,7 +6,7 @@ sidebar_label: Dependencies
## Formats
The `[dependencies]` section supports registry, path, Git, and `pkg-config` dependencies:
The `[dependencies]` section supports three formats:
### String (registry)
@@ -23,10 +23,10 @@ The version string is used as-is for registry lookup.
```toml
[dependencies]
dcr-math = { git = "https://github.com/dexoron/dcr-math-lib.git", tag = "v0.1.0" }
fmt = { git = "https://github.com/fmtlib/fmt", tag = "10.1.1" }
```
Fields: `git`, `branch`, `tag`, `rev`, `mode`, `include`, `lib`, `libs`.
Fields: `git`, `branch`, `tag`, `rev`.
### Table (path)
@@ -35,32 +35,6 @@ Fields: `git`, `branch`, `tag`, `rev`, `mode`, `include`, `lib`, `libs`.
mylib = { path = "../mylib" }
```
For a prebuilt external library, specify its layout explicitly. The three
arrays are paths relative to the dependency root (`include`, `lib`) and linker
names (`libs`):
```toml
[dependencies]
dcr-math = { path = "../deps/dcr-math", include = ["include"], lib = ["lib"], libs = ["dcr-math"] }
```
### Table (`pkg-config`)
Use an installed `.pc` package when the library is provided by the operating system
or another system package manager. DCR invokes `pkg-config --cflags` and
`pkg-config --libs`, preserving include, library, linker, and other flags:
```toml
[dependencies]
fmt = { pkg-config = "fmt" }
openssl = { pkg-config = ["openssl", "libcrypto"] }
```
The `pkg-config` executable must be available in `PATH`. The named `.pc` files must
be available through pkg-config's standard search paths or via `PKG_CONFIG_PATH`.
These dependencies are not downloaded or built by DCR; they are recorded in
`dcr.lock` with a `pkg-config+...` source.
## Registry
DCR uses a package registry for dependency lookup by name.
@@ -68,7 +42,7 @@ DCR uses a package registry for dependency lookup by name.
```toml
# ~/.dcr/config.toml
[registry.default]
url = "https://index.dcr.dexoron.tech"
url = "https://index.dcr.pm"
priority = 1
```
@@ -76,23 +50,7 @@ Registry priority: order in `config.toml`. The `DCR_INDEX_PATH` variable overrid
## Git dependencies
Git dependencies are cloned into `~/.dcr/git/`; their exact checked-out commit is written to `dcr.lock`.
Both Git and path dependencies have two modes:
* **DCR package:** the source has `dcr.toml`. DCR builds it before the consumer and uses the package name from its manifest for linking.
* **Prebuilt library:** it provides existing headers and binaries through `include`, `lib`, and `libs`. DCR passes them to the compiler/linker without building the dependency.
The mode is normally detected automatically. Use `mode = "build"` or `mode = "prebuild"` when a source contains both a manifest and prebuilt artifacts and you need to choose explicitly.
`dcr-math-lib` publishes both forms. Select its prebuilt library explicitly:
```toml
[dependencies]
dcr-math = { git = "https://github.com/dexoron/dcr-math-lib.git", tag = "v0.1.0", mode = "prebuild", include = ["include"], lib = ["lib"], libs = ["dcr-math"] }
```
DCR supports specifying branch/tag/rev for git sources:
Git dependencies are parsed and recorded in `dcr.lock`. DCR supports specifying branch/tag/rev for git sources:
* `branch` — switch to a branch
* `tag` — switch to a tag
@@ -101,7 +59,7 @@ DCR supports specifying branch/tag/rev for git sources:
## Path dependencies
Local paths may point at a DCR package or a prebuilt external library. A path DCR package is built before its consumer, including its own path/git dependencies. DCR detects dependency cycles. A prebuilt library is never built by DCR; it is linked from the directories declared in its dependency entry.
Local paths. DCR automatically discovers include and lib directories from the neighbor's `dcr.toml`.
```toml
[dependencies]
@@ -109,51 +67,18 @@ mylib = { path = "/abs/path/to/lib" }
mylib = { path = "../relative/path" }
```
For DCR packages, the package name from `dcr.toml` is used for linking (so the dependency key may differ from the library name). Header resolution includes the packaged `target/include` directory and link search includes `target/lib`.
### Recommended library layouts
Buildable DCR library:
```text
dcr-math-lib/
├── dcr.toml
└── src/
├── dcr_math.c
└── dcr_math.h
```
Prebuilt library:
```text
dcr-math-lib/
├── include/
│ └── dcr_math.h
└── lib/
└── libdcr-math.a # or .so / .lib
```
`libs` contains linker names without the `lib` prefix and file extension: use
`["dcr-math"]` for `libdcr-math.a`.
If one repository contains both forms, keep the prebuilt files in `include/` and `lib/` and select the mode explicitly:
```toml
[dependencies]
dcr-math = { git = "https://github.com/dexoron/dcr-math-lib.git", tag = "v0.1.0", mode = "prebuild", include = ["include"], lib = ["lib"], libs = ["dcr-math"] }
```
For a local copy, replace `git` with `path = "../dcr-math-lib"`. In `prebuild` mode DCR does not run the dependency build, even when `dcr.toml` is present.
*Note: Header resolution automatically checks the packaged `target/include` directory of path dependencies, ensuring consumer packages can find headers from compiled static or dynamic libraries.*
## dcr.lock
Dependency lock file. Contains package names and sources.
Created during `dcr build` for resolved registry, path, and Git dependencies. Not updated during `dcr add` — only on the next `dcr build`.
Created during `dcr build` when registry dependencies are present. Not updated during `dcr add` — only on the next `dcr build`.
## Resolution process
1. Resolve dependency sources (registry → git → path)
2. Fetch git dependencies into `~/.dcr/git/` and check out the requested ref
3. Build DCR package dependencies recursively
4. Collect `include_dirs`, `lib_dirs`, `libs` for the compiler
1. Load all dependencies (registry → git → path)
2. For path deps: recursively read their `dcr.toml`
3. For registry deps: search `index.json`
4. For git deps: clone to cache
5. Collect `include_dirs`, `lib_dirs`, `libs` for the compiler

View File

@@ -58,27 +58,3 @@ export DCR_INDEX_PATH=/custom/path/index.json
```
Default: `~/.dcr/index.json`.
## DCRUP_MIRROR
Download mirror for `dcrup` (prebuilt binaries only).
```bash
export DCRUP_MIRROR=auto # cf → gh → sf → ya (default)
export DCRUP_MIRROR=cf # CloudFlare CDN
export DCRUP_MIRROR=gh # GitHub Releases
export DCRUP_MIRROR=sf # SourceForge
export DCRUP_MIRROR=ya # Yandex CDN (RU fallback)
```
CLI override: `dcrup install stable --mirror cf`.
## DCRUP_HOME / DCRUP_BIN / DCRUP_REPO
Installer layout and source clone URL:
```bash
export DCRUP_HOME=~/.dcr
export DCRUP_BIN=~/.dcr/bin
export DCRUP_REPO=https://github.com/dexoron/dcr
```