Skip to content
This repository was archived by the owner on Dec 23, 2024. It is now read-only.

Commit 966bd7f

Browse files
authored
fix rebuild of files (dotnet#3614)
* fix rebuild of files * don't rebuild project system
1 parent 194fa62 commit 966bd7f

File tree

3 files changed

+39
-29
lines changed

3 files changed

+39
-29
lines changed

build.cmd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -639,7 +639,7 @@ if "%OSARCH%"=="AMD64" set SYSWOW64=SysWoW64
639639

640640
if not "%OSARCH%"=="x86" set REGEXE32BIT=%WINDIR%\syswow64\reg.exe
641641

642-
echo SDK environment vars from Registry
642+
echo SDK environment vars from Registry (note: ignore "ERROR: The system was unable to find ....")
643643
echo ==================================
644644
FOR /F "tokens=2* delims= " %%A IN ('%REGEXE32BIT% QUERY "HKLM\Software\WOW6432Node\Microsoft\Microsoft SDKs\NETFXSDK\4.6.2\WinSDK-NetFx40Tools" /v InstallationFolder') DO SET WINSDKNETFXTOOLS=%%B
645645
if "%WINSDKNETFXTOOLS%"=="" FOR /F "tokens=2* delims= " %%A IN ('%REGEXE32BIT% QUERY "HKLM\Software\WOW6432Node\Microsoft\Microsoft SDKs\NETFXSDK\4.6.1\WinSDK-NetFx40Tools" /v InstallationFolder') DO SET WINSDKNETFXTOOLS=%%B

src/fsharp/FSharp.Build/FSharpEmbedResourceText.fs

Lines changed: 37 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -341,12 +341,21 @@ open Printf
341341

342342
let generateResxAndSource (filename:string) =
343343
try
344-
let printMessage message = printfn "FSharpEmbedResourceText: %s" message
345-
let justfilename = Path.GetFileNameWithoutExtension(filename) // .txt
346-
if justfilename |> Seq.exists (System.Char.IsLetterOrDigit >> not) then
347-
Err(filename, 0, sprintf "The filename '%s' is not allowed; only letters and digits can be used, as the filename also becomes the namespace for the SR class" justfilename)
348-
let outFilename = Path.Combine(_outputPath, justfilename + ".fs")
349-
let outXmlFilename = Path.Combine(_outputPath, justfilename + ".resx")
344+
let printMessage message = printfn "FSharpEmbedResourceText: %s" message
345+
let justfilename = Path.GetFileNameWithoutExtension(filename) // .txt
346+
if justfilename |> Seq.exists (System.Char.IsLetterOrDigit >> not) then
347+
Err(filename, 0, sprintf "The filename '%s' is not allowed; only letters and digits can be used, as the filename also becomes the namespace for the SR class" justfilename)
348+
let outFilename = Path.Combine(_outputPath, justfilename + ".fs")
349+
let outXmlFilename = Path.Combine(_outputPath, justfilename + ".resx")
350+
351+
if File.Exists(outFilename) &&
352+
File.Exists(outXmlFilename) &&
353+
File.Exists(filename) &&
354+
File.GetLastWriteTime(filename) <= File.GetLastWriteTime(outFilename) &&
355+
File.GetLastWriteTime(filename) <= File.GetLastWriteTime(outXmlFilename) then
356+
printMessage (sprintf "Skipping generation of %s and %s since up-to-date" outFilename outXmlFilename)
357+
Some (outFilename, outXmlFilename)
358+
else
350359

351360
printMessage (sprintf "Reading %s" filename)
352361
let lines = File.ReadAllLines(filename)
@@ -472,27 +481,28 @@ open Printf
472481
with get() = _hostObject
473482
and set(value) = _hostObject <- value
474483
member this.Execute() =
475-
let sourceItem (source:string) (originalItem:string) =
476-
let item = TaskItem(source)
477-
item.SetMetadata("AutoGen", "true")
478-
item.SetMetadata("DesignTime", "true")
479-
item.SetMetadata("DependentUpon", originalItem)
480-
item :> ITaskItem
481-
let resxItem (resx:string) =
482-
let item = TaskItem(resx)
483-
item.SetMetadata("ManifestResourceName", Path.GetFileNameWithoutExtension(resx))
484-
item :> ITaskItem
485-
let generatedFiles, generatedResult =
484+
485+
let generatedFiles =
486486
this.EmbeddedText
487-
|> Array.fold (fun (resultList, aggregateResult) item ->
488-
match generateResxAndSource item.ItemSpec with
489-
| Some (source, resx) -> (((source, resx) :: resultList), aggregateResult)
490-
| None -> (resultList, false)
491-
) ([], true)
487+
|> Array.choose (fun item -> generateResxAndSource item.ItemSpec)
488+
492489
let generatedSource, generatedResx =
493-
generatedFiles
494-
|> List.map (fun (source, resx) -> (sourceItem source resx, resxItem resx))
495-
|> List.fold (fun (sources, resxs) (source, resx) -> (source :: sources, resx:: resxs)) ([], [])
496-
_generatedSource <- generatedSource |> List.rev |> List.toArray
497-
_generatedResx <- generatedResx |> List.rev |> List.toArray
490+
[| for (source, resx) in generatedFiles do
491+
let sourceItem =
492+
let item = TaskItem(source)
493+
item.SetMetadata("AutoGen", "true")
494+
item.SetMetadata("DesignTime", "true")
495+
item.SetMetadata("DependentUpon", resx)
496+
item :> ITaskItem
497+
let resxItem =
498+
let item = TaskItem(resx)
499+
item.SetMetadata("ManifestResourceName", Path.GetFileNameWithoutExtension(resx))
500+
item :> ITaskItem
501+
yield (sourceItem, resxItem) |]
502+
|> Array.unzip
503+
504+
let generatedResult = (generatedFiles.Length = this.EmbeddedText.Length)
505+
506+
_generatedSource <- generatedSource
507+
_generatedResx <- generatedResx
498508
generatedResult

vsintegration/src/FSharp.ProjectSystem.FSharp/ProjectSystem.fsproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
<PropertyGroup>
4343
<Win32Resource>$(IntermediateOutputPath)\ProjectResources.rc.res</Win32Resource>
4444
</PropertyGroup>
45-
<Target Name="BeforeBuild">
45+
<Target Name="BeforeBuild" Condition="!Exists('$(IntermediateOutputPath)$(RCResourceFile).res')">
4646
<Exec Command="&quot;$(ProgramFiles)\Windows Kits\8.1\bin\x86\rc.exe&quot; /fo $(IntermediateOutputPath)$(RCResourceFile).res $(RCResourceFile)" Condition="Exists('$(ProgramFiles)\Windows Kits\8.1\bin\x86\rc.exe')" />
4747
<Exec Command="&quot;$(ProgramFiles)\Windows Kits\10\bin\x86\rc.exe&quot; /fo $(IntermediateOutputPath)$(RCResourceFile).res $(RCResourceFile)" Condition="Exists('$(ProgramFiles)\Windows Kits\10\bin\x86\rc.exe')" />
4848
<Exec Command="&quot;$(ProgramFiles)\Windows Kits\10\bin\10.0.15063.0\x86\rc.exe&quot; /fo $(IntermediateOutputPath)$(RCResourceFile).res $(RCResourceFile)" Condition="Exists('$(ProgramFiles)\Windows Kits\10\bin\10.0.15063.0\x86\rc.exe')" />

0 commit comments

Comments
 (0)