Skip to content

Commit 11cc36d

Browse files
committed
Fixed self-call recursion in built-in GetNuTool 1.9+
1 parent e224c66 commit 11cc36d

File tree

3 files changed

+46
-11
lines changed

3 files changed

+46
-11
lines changed

.vssbe

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -708,6 +708,9 @@
708708
" content = Regex.Replace(content, \"(@echo off&)\", \"$1set \"+ defvMSBuild +\"=MSBuild&\");",
709709
" }",
710710
" ",
711+
" //F-80, protect built-in GetNuTool's core from self-invoking on hMSBuild.bat",
712+
" content = Regex.Replace(content, @\"(%.{1,2}%)\\s+(-only-path)\", \"$1.cmd $2\");",
713+
"",
711714
" //F-78, shift correction due to LF",
712715
" content = Regex.Replace(content, @\"(>nul`\\)) (do \\(if)\", \"$1$2\");",
713716
"",

Readme.md

Lines changed: 42 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ Today's [hMSBuild](https://github.com/3F/hMSBuild) provides the most flexible wa
4646

4747
* Single *.bat file, no less, no more.
4848
* Manage all versions, including before install-API/2017+
49-
* *Visual Studio* versions support: VS2022+, VS2019, VS2017, VS2015, VS2013, VS2012, VS2010
49+
* *Visual Studio* versions support: VS2026+, VS2022, VS2019, VS2017, VS2015, VS2013, VS2012, VS2010
5050
* *.NET Framework* versions support: 4.0 (2010), 3.5, 2.0
5151
* Lightweight and text-based, about ~8 KB + ~11 KB
5252
* Does not require *powershell* or *dotnet-cli* or even local [*vswhere.exe* [?]](https://github.com/Microsoft/vswhere/issues/41)
@@ -65,7 +65,7 @@ The basic process is to provide the most suitable instance by explicitly elimina
6565
**2.0+**
6666

6767
* Versions:
68-
* VS2022, ..., VS2017 ➟ VS2015, VS2013, ... ➟ .netfx
68+
* VS2026+, VS2022, ..., VS2017 ➟ VS2015, VS2013, ... ➟ .netfx
6969
* Instance Architecture (configure via `-notamd64` key):
7070
* x64 ➟ x32
7171

@@ -111,14 +111,24 @@ Any value for specific key must be protected inside `"..."` if contains either w
111111
hmsbuild ~p "Any CPU"
112112
```
113113

114+
### LF / CRLF
115+
116+
Starting with 2.5, *hMSBuild.bat* edition now fully supports LF and uses this by default instead of CRLF.
117+
118+
It means *.gitattributes* control for CRLF in *hMSBuild.bat* is not necessary anymore in cases when *core.autocrlf=input* etc.
119+
See related: https://github.com/3F/hMSBuild/issues/2
120+
121+
However, this will not affect users who used the full edition *hMSBuild.full.bat*
122+
(related https://github.com/3F/hMSBuild/pull/11)
123+
which is still not protected due to incorrect shiftings in cmd processor when switching to LF.
124+
114125
### -help
115126

116127
For the most up-to-date information, use `hMSBuild -h`
117128

118-
```
119-
hMSBuild 2.4.1.54329+caba551
120-
Copyright (c) 2017-2024 Denis Kuzmin <x-3F@outlook.com> github/3F
121-
Copyright (c) hMSBuild contributors https://github.com/3F/hMSBuild
129+
```java
130+
Copyright (c) 2017-2025 Denis Kuzmin <x-3F@outlook.com> github/3F
131+
Copyright (c) hMSBuild contributors
122132

123133
Under the MIT License https://github.com/3F/hMSBuild
124134

@@ -148,10 +158,14 @@ Keys
148158
~c {name} - Alias to p:Configuration={name}
149159
~p {name} - Alias to p:Platform={name}
150160
~x - Alias to m:NUMBER_OF_PROCESSORS-1 v:m
151-
-notamd64 - To use 32bit version of found msbuild.exe if it's possible.
161+
-notamd64 - Prefer 32-bit instead of 64-bit MSBuild.exe.
152162
-stable - It will ignore possible beta releases in last attempts.
153163
-eng - Try to use english language for all build messages.
154-
-GetNuTool {args} - Access to GetNuTool core. https://github.com/3F/GetNuTool
164+
165+
-GetNuTool {args} - Access to GetNuTool (built-in) https://github.com/3F/GetNuTool
166+
hMSBuild -GetNuTool -help
167+
hMSBuild -GetNuTool ~/p:use=documentation
168+
155169
-only-path - Only display fullpath to found MSBuild.
156170
-force - Aggressive behavior for -priority, -notamd64, etc.
157171
-vsw-as "args..." - Reassign default commands to vswhere if used.
@@ -205,9 +219,10 @@ set __p_call=1
205219

206220
```bat
207221
:: evaluate argument
208-
:eva {in:unevaluated} {out:evaluated}
209-
:: &(1) - Input via a variable. Use ` sign to apply " double quotes inside "...".
222+
:eva {in:unevaluated} {out:evaluated} {in:option}
223+
:: &(1) - Input via a variable. Use ` to apply " quotes inside "..." if [3]==1.
210224
:: *&(2) - Evaluated output via a variable.
225+
:: [3] - Option to enable support for extra quotes. Values: 1 == ` as "
211226
:: !!0
212227
```
213228

@@ -236,6 +251,23 @@ set /a "idx+=1" & call :eval arg[!idx!] v
236251
exit /B
237252
```
238253

254+
## Full hMSBuild edition
255+
256+
In case you need the full edition (related https://github.com/3F/hMSBuild/pull/11)
257+
258+
Access using built-in core:
259+
260+
```bat
261+
hMSBuild -GetNuTool ~hMSBuild /p:use=full
262+
```
263+
264+
or:
265+
266+
```bat
267+
gnt ~hMSBuild /p:use=full
268+
```
269+
note: `hMSBuild -GetNuTool ~` (`hMSBuild -GetNuTool ~& gnt ...`) or visit https://github.com/3F/GetNuTool
270+
239271
## Build & Tests
240272

241273
build and tests was based on batch and [vssbe](https://github.com/3F/vsSolutionBuildEvent) scripts. You don't need to do anything else, just build and test it

hMSBuild.nuspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
Open source https://github.com/3F/hMSBuild
1919

2020
All Visual Studio and .NET Framework versions:
21-
* VS2022+, VS2019, VS2017, VS2015, VS2013, VS2012, VS2010
21+
* VS2026+, VS2022, VS2019, VS2017, VS2015, VS2013, VS2012, VS2010
2222
* 4.0 (2010), 3.5, 2.0
2323

2424
```

0 commit comments

Comments
 (0)