Closed Bug 471357 Opened 13 years ago Closed 11 years ago

VC9 and redist

Categories

(Firefox Build System :: General, defect)

x86
Windows XP
defect
Not set
normal

Tracking

(Not tracked)

RESOLVED DUPLICATE of bug 569268
mozilla3.6a1

People

(Reporter: bengt.erik.soderstrom, Unassigned)

Details

I have noticed that with Visual Studio 2008 SP1 (VC9) that the Microsoft redistribution files msvcr90.dll, msvcp90.dll, msvcm90.dll and Microsoft.VC90.CRT.manifest are not copied into the installer or into a zip created by ../obj-dir/make installer or make package. 

If you set the variable WIN32_REDIST_DIR properly when building, the files will correctly appear in the ../obj-dir/dist/bin but as the installer scripts are looking for the 80 version, the VC9 runtimes will be skipped:

>>
Warning: package error or possible missing or unnecessary file: bin/Microsoft.VC80.CRT.manifest (packages-static, 38).
Warning: package error or possible missing or unnecessary file: bin/msvcm80.dll (packages-static, 39).
Warning: package error or possible missing or unnecessary file: bin/msvcp80.dll (packages-static, 40).
Warning: package error or possible missing or unnecessary file: bin/msvcr80.dll (packages-static, 41).
>>
I made an experiment to convince myself: I renamed the 90 files into 80 and then the installer scripts work properly. Of course this is neither a fix nor a workaround. The installer scripts need to be adapted to recognize which version of compiler you have.

Also see bug 368711 and bug 426887 where these topics are discussed.

For me, and perhaps many more, it is important that you can build on one machine and also use the result on another computer as well.
Component: Installer → Build Config
QA Contact: installer → build.config
Just needs to be added to packages-static:
http://mxr.mozilla.org/mozilla-central/source/browser/installer/windows/packages-static#46

I guess the packaging patch on that other bug was not to the right file. (Or maybe it was just for SeaMonkey)
s/SeaMonkey/SeaMonkey 1.x non-static/

A solution that didn't involve adding a spew of "package error or possible missing or unnecessary file" to absolutely every single build log including the tinderbox logs (since nobody's going to have both) would be extra-nice.
I wish it was that easy, but nevertheless Vista machines may give 'side-by-side' errors. Microsoft is aware of that problem and they recommend the following solution: Download and install Microsoft Visual C++ 2008 SP1 Redistributable Package (x86). That must first be installed on the machine that does not have any Visual Studio installed - in my case the Vista machine.

Note that there are different redistributable packages for different versions of Visual Studio.

Googling for side-by-side errors reveals tons of similar cases where various programs no longer work in Vista. To me this is a real screw-up by Microsoft.
Do you have a reference for this? Have you tried it on Vista? It doesn't really matter to me, as I don't expect us to ever ship official releases with VC9.
(In reply to comment #4)
> Do you have a reference for this? Have you tried it on Vista? It doesn't really
> matter to me, as I don't expect us to ever ship official releases with VC9.

There is more to read here:

http://www.microsoft.com/downloads/details.aspx?FamilyID=9b2da534-3e03-4391-8a4d-074b9f2bc1bf&DisplayLang=en

http://msdn.microsoft.com/en-us/library/ms235299.aspx


And here a bit more background:

http://blogs.msdn.com/dsvc/archive/tags/Side+by+Side+Error/default.aspx
Uh, none of those links tell me anything but "you need to redistribute the CRT with your application". This is a solved problem, and it's exactly what the WIN32_REDIST_DIR variable accomplishes. You just need to fix the packaging manifest to properly package the DLLs (and .manifest file). As far as I can tell, there's no difference between VC8 and VC9 in this regard. We shipped a few Firefox 3 betas with the CRT DLLs in Side-by-Side and they worked fine.
(In reply to comment #6)
> Uh, none of those links tell me anything but "you need to redistribute the CRT
> with your application". This is a solved problem, and it's exactly what the
> WIN32_REDIST_DIR variable accomplishes. You just need to fix the packaging
> manifest to properly package the DLLs (and .manifest file). As far as I can
> tell, there's no difference between VC8 and VC9 in this regard. We shipped a
> few Firefox 3 betas with the CRT DLLs in Side-by-Side and they worked fine.

Right. There should not be any difference. It should work exactly as you describe above: But nevertheless the Vista machine would not run unless the Microsoft redist package (comment #3) was first installed there.
Nevertheless with only the dll:s and .manifest from my Visual Studio 2008, (which indeed were in correct version and in the correct place), the Vista just did not recognize them.

Nevertheless, I have pointed on a potential (Microsoft/Vista-caused) problem which just might cause some trouble for us in the future.

Anyhow the ../browser/installer/windows/packages-static needs to contain also the msvcm90.dll, msvcp90.dll, msvcr90.dll and Microsoft.VC90.CRT.manifest
Reopen if there is anything left to do here.
Status: NEW → RESOLVED
Closed: 11 years ago
Resolution: --- → DUPLICATE
Duplicate of bug: 569268
Component: Build Config → General
Product: Firefox → Firefox Build System
Target Milestone: Firefox 3.6a1 → mozilla3.6a1
You need to log in before you can comment on or make changes to this bug.