Jan 292012
 

In a previous post I outlined a detailed description of how to build WebKit on Windows XP. My aim was to share with everyone the long and rather tricky process of building the beast that WebKit is. There are many pitfalls, gotchas and critical requirements to get from code to binary to execution. I also did away with the standard and default requirement of VS2005 and opted to go with the newer and less-buggy VS2008. Besides the improvements in this newer version, there was only 1 update to install (SP1) as opposed to the 5 or so that VS2005 required (in addition to QuickTime SDK, Windows 2003 SDK and DirectX SDK), it had a better compiler and, in my experience, caused much less problems (consider for example that newer DirectX SDK doesn’t support VS2005) to build WebKit than VS2005 did.

But that was VS2008 and Windows XP. Now, we’ll attempt to build WebKit with VS2010 and on Windows 7. This adds two groups of issues to the mix: One on the compiler/environment level and the other on the OS level. Regarding the issues that Windows 7 brings to the table, see the previous post and here. As before, I’ll build only WinCairo, but you should be well-advised to try the default – CoreGraphics.

Note: While this walk-through should be complete, obviously there are many concepts specific to WebKit and/or the tools, these I won’t repeat here. You don’t need to read the previous post, but if you find some reference that isn’t clear, search for the keyword in question in the previous post. If that doesn’t help, don’t shy from asking in the comments; I’ll get back to you.

Summary (TL;DR)

This is a detailed walk-through of getting WebKit built on Windows 7 with VS2010. For the bottom-line and an automated patch just skip the details and jump here. There is a very easy, virtually flawless, two-step, five-click procedure to get from code to binary.

Motivation

This project took my spare time during a whole week and almost two weekends. That’s an estimated 20 hours. So why do it? VS2005, which is the officially supported version, is outdated, has a painfully large number of updates and the end-user must install all its updated/patched runtime libraries and is notorious in losing/reseting the Include and Library paths. On top of that, it’s not supported on Windows 7. Since I upgraded my workstation to Win7 I couldn’t and didn’t want to install VS2005 (nor VS2008 for that matter). I could either build WebKit in a VM on WinXP (actually my old system is now turned into a cosy VM, so I could use that,) but then WebKit is too huge for a VM. The adventure of attempting a build on VS2010 was intimidating enough, considering that a single unsupported/incompatible issue could mushroom into 100s of thousands of errors that might actually require a sizable code change, which would be far more than what I bid for. To top it, I knew that Windows 7 had its own set of issues related to UAC and Cygwin’s Fork implementation, which conflicted with Windows’ randomized image mapping and other security features.

Ultimately, I wanted a clean build with the latest tools on the latest Windows incarnation. WebKit.org might not be tempted to force its development team to shell out for VS2010 or Windows 7, not to mention spend all that time to upgrade both their machines and code, but, eventually, they will. So, here it is. A complete walkthrough documenting every step of the way, from code download to environment setup to successful build. In addition, all changes to fix errors are automated with just two scripts… read on.

Environment

WebKit has a lot of dependencies and requirements. So first we need to setup everything that is expected by the code before we even try to build.

Getting the Code

As with the tip from the previous post, I avoided the Trunk and used the prepackaged sources of r106194 (but relatively recent packages should also work). While the trunk may often be broken, the nightly build isn’t guaranteed to build. To increase your odds, pick a revision of the sources that has a Mac or Windows nightly build as well. From the 7 nightly builds I picked (r105569-r106194) 2 were broken. A considerable time is wasted figuring out whether or not the errors are our fault or the source code’s.

Cygwin

The first hurdle was to setup Cygwin. Get the download instructions from the previous post. (Read and use the Cygwin downloader from here is the gist of it.) Since WebKit expects the sources to be within the user’s home directory of Cygwin, I decided to avoid placing the 100s of thousands of files and the gigabytes that a single source working-copy is within Cygwin. Instead, I can have WebKit sources anywhere and Cygwin elsewhere and get them both together using symbolic links.

My Cygwin installation is in my Tools folder, which hosts a rather large number of portable programs and scripts, including MinGW. Tools is in the root of my system drive. To make things easy for me, I’d like to have Cygwin in the system drive as well (it’s a fast drive). So the first thing is to setup symbolic links where from the original folders to where we’d like to see our environment setup. This is done using the mklink command, but before executing it we delete any directories in that path, so make sure your target path is safe!

Visual Studio 2010

With VS2005 and VS2008 the Express editions worked fine. Since I don’t have VS2010 Express, I can’t vouch the same guarantee. Regardless, it’s probably reasonable to expect it to work. At any rate, we need to install a functional version. We also need to install SP1 and Windows SDK. Microsoft deserves some scolding for releasing Windows SDK that reverts Visual Studio updates for yet another time. So, to avoid stepping on your own feet, here is how you need to proceed with the VS2010 and WinSDK installations:

  1. Visual Studio 2010.
  2. Windows SDK 7.1.
  3. Visual Studio 2010 SP1.
  4. Visual C++ 2010 SP1 Compiler Update for the Windows SDK 7.1.

Interestingly, I didn’t change the toolchain from VC100 to Windows SDK 7.1. I also didn’t install QuickTime or DirectX SDKs. It seems that the Windows and DirectX headers that come with VS2010 were enough that I didn’t have to go through any settings as I had to with VS2005. However, QuickTime’s missing SDK, while didn’t break the build, might mean that there wouldn’t be full media support in the resulting build. Actually, I suspect QuickTime SDK is needed for the CoreGraphics build. Nevertheless, that’s a minor issue that can be remedied later.

Environment Variables

Next we need to setup the WEBKITLIBRARIESDIR and WEBKITOUTPUTDIR environment variables, add scripts folder on the path and setup VS2010. WebKit build scripts expect VSINSTALLDIR environment variable, which, it seems, VS2010 installation isn’t creating. I found only VS100COMNTOOLS on my system, so I added a make-shift VSINSTALLDIR to my build environment setup script. Once that is done, we need to ask VS to setup its own environment variables and fire-up Cygwin.

I want to automate as much as possible, including the ability to run the same boiler-plate setup script for any revision of WebKit. The script is designed to be thrown into the source code folder of WebKit and run as administrator. The only missing thing is your Cygwin installation folder. But don’t worry, if you don’t provide this folder (or is invalid,) of you don’t run as admin, the script will warn you and stop.

Here is the cmd script I use to do the magic of setting up the build environment:

vs2010-build-env.cmd:

@rem Setup the Cygwin environment to build WebKit.
@rem Copyright 2012 Ashod Nakashian
@rem Your are free to use this however you see fit,
@rem provided you give credit where credit is due.

@rem Comment to debug and see what is being set exactly.
@echo off
@echo.

echo Setting up Cygwin directory...
@rem Change CYGWIN_SOURCE_DIR to where Cygwin is installed.
set CYGWIN_SOURCE_DIR=C:\Tools\cygwin
set CYGWIN_DIR=C:\Cygwin
if not exist "%CYGWIN_SOURCE_DIR%" (@echo Error: Please specify the correct Cygwin installation folder in '%0' @ CYGWIN_SOURCE_DIR.
goto exit)
if exist "%CYGWIN_DIR%" rmdir "%CYGWIN_DIR%"
mklink /D "%CYGWIN_DIR%" "%CYGWIN_SOURCE_DIR%"
if not %ERRORLEVEL%==0 (@echo Error: Please run this script as administrator.
goto exit)

echo Setting up WebKit directory...
set WEBKIT_SOURCE_DIR=%~dp0%
set CURRENT_DIR=%WEBKIT_SOURCE_DIR%
if "%CURRENT_DIR:~-1%"=="\" set CURRENT_DIR=%CURRENT_DIR:~0,-1%
for /R "delims=\" %%a in (%CURRENT_DIR%) do set WEBKIT_DIR_NAME=%%~nxa
set WEBKIT_DIR=%CYGWIN_DIR%\home\%username%\%WEBKIT_DIR_NAME%
if exist "%WEBKIT_DIR%" rmdir "%WEBKIT_DIR%"
mklink /D "%WEBKIT_DIR%" "%WEBKIT_SOURCE_DIR%"

echo Exporting environment varibles...
set WEBKITOUTPUTDIR=%WEBKIT_DIR%\WebKitBuild
set WEBKITLIBRARIESDIR=%WEBKIT_DIR%\WebKitLibraries\win
set VSINSTALLDIR=%VS100COMNTOOLS%..\..
set PATH=%WEBKIT_DIR%\Tools\Scripts;%PATH%
set PATH=%CYGWIN_DIR%\bin;%PATH%

@rem Uncomment if you want to execute VC tools from the shell.
@rem call "%VSINSTALLDIR%\VC\vcvarsall.bat" x86

echo Note: Remember to set devenv.exe to run as administrator!

echo Running Cygwin...
call "%CYGWIN_DIR%\Cygwin.bat"

:exit

This should be straight forward. All we do is setup the Cygwin and source-code folders and the environment variables. Take your time to read it and don’t forget to set your Cygwin installation folder to CYGWIN_SOURCE_DIR.

Building

First, download the source code and extract it in any folder you like. Next, place this script in the extracted folder. What you need to edit are: CYGWIN_SOURCE_DIR to point to your cygwin folder. The other settings should be automatically set. Note: You must run this script as Administrator!

Here is a sample of the output you should expect:

Setting up Cygwin directory...
symbolic link created for C:\Cygwin <> C:\Tools\cygwin
Setting up WebKit directory...
symbolic link created for C:\Cygwin\home\Ash\WebKit-r105582 <> C:\prj\WebKit\WebKit\WebKit-r105582\
Exporting environment varibles...
Running Cygwin...

Ash@Bull ~
#

If you get the prompt as I did above, then you’re good to go. But before we try to build, we need to let the build scripts know about VS2010, which isn’t really supported. Go to Tools\Scripts within the source folder and open the pdevenv file for editing. On the 18th line you should add a case for VS100COMNTOOLS and make it the first, next VS90COMNTOOLS followed by VS80COMNTOOLS. This way VS2010 will be preferred, followed by VS2008 then by 2005 if neither is found. Here is how lines 17-31 should look:

my $vsToolsVar;
if ($ENV{'VS100COMNTOOLS'}) {
    $vsToolsVar = "VS100COMNTOOLS";
} elsif ($ENV{'VS90COMNTOOLS'}) {
    $vsToolsVar = "VS90COMNTOOLS";
} elsif ($ENV{'VS80COMNTOOLS'}) {
    $vsToolsVar = "VS80COMNTOOLS";
} else {
    print "*************************************************************\n";
    print "Cannot find Visual Studio tools dir.\n";
    print "Please ensure that \$VS80COMNTOOLS or \$VS90COMNTOOLS\n";
    print "is set to a valid location.\n";
    print "*************************************************************\n";
    die;
}

Let’s do an initial run of the build script so it’d download the WinCairo files and install them (no change is done outside the WebKit source folder).

Here is an initial run…

# build-webkit --wincairo
Checking Last-Modified date of WinCairoRequirements.zip...
Downloading WinCairoRequirements.zip...

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 14.0M  100 14.0M    0     0   320k      0  0:00:44  0:00:44 --:--:--  480k

Installing WinCairoRequirements...
The WinCairoRequirements has been sucessfully installed in
 /cygdrive/c/Cygwin/home/Ash/WebKit-r105582/WebKitLibraries/win
Building results into: /cygdrive/c/Cygwin/home/Ash/WebKit-r105582/WebKitBuild
WEBKITOUTPUTDIR is set to: C:\prj\WebKit\WebKit\WebKit-r105582\WebKitBuild
WEBKITLIBRARIESDIR is set to: C:\Cygwin\home\Ash\WebKit-r105582\WebKitLibraries\win
/cygdrive/c/Cygwin/home/Ash/WebKit-r105582/Tools/Scripts/pdevenv win\WebKit.vcproj\WebKit.sln /build Release_Cairo_CFLite
Setting environment for using Microsoft Visual Studio 2010 x86 tools.

Microsoft (R) Visual Studio Version 10.0.40219.1.
Copyright (C) Microsoft Corp. All rights reserved.

Solution file 'C:\prj\WebKit\WebKit\WebKit-r105582\Source\WebKit\win\WebKit.vcproj\WebKit.sln' is from a previous version of this application and must be converted in order to build in this version of the application. To convert the solution, open the solution in this version of the application.

===== BUILD FAILED ======

Please ensure you have run ../../../../Cygwin/home/Ash/WebKit-r105582/Tools/Scripts/update-webkit to install dependencies.

You can view build errors by checking the BuildLog.htm files located at:
/cygdrive/c/Cygwin/home/Ash/WebKit-r105582/WebKitBuild/obj//.

Ash@Bull ~
#

Great! So far so good. We downloaded and installed WinCairoRequirements (to redownload, just delete WebKitLibraries\win\WinCairoRequirements.headers) and we got VS2010 to run and try to load (and complain of) the solution file. Let’s upgrade it.

Open the solution file located at Source\WebKit\win\WebKit.vcproj\WebKit.sln in VS2010. (The easiest way to run VS2010 is to simply run pdevenv from the shell.) You’ll be prompted to convert the solution and all 40 projects. Now we should save the solution and close VS. (Alternatively you can use the /upgrade command.) Let’s go back and try to build again. Run build-webkit --wincairo from the shell. You should see the projects getting built and fail with more errors than you can count. Let’s Fix the errors.

Windows 7 UAC

Here is a generic error that’s omnipresent:

Microsoft (R) Visual Studio Version 10.0.40219.1.
Copyright (C) Microsoft Corp. All rights reserved.
1>------ Build started: Project: JavaScriptCoreGenerated, Configuration: Release_Cairo_CFLite Win32 ------
2>------ Build started: Project: WTF, Configuration: Release_Cairo_CFLite Win32 ------
2>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.Targets(153,5): error MSB6006: "CL.exe" exited with code -1073741819.

The above error actually means “CL.exe” failed to execute. It’s a general failure. The culprit here is UAC of Windows 7. To fix this issue, navigate to the VSINSTALLDIR folder, in Common7\IDE\ there should be devenv.exe (not devenv.com). Select the file, open properties then Compatibility tab. At the bottom under “Privilege Level” check “Run this program as an administrator”. Now VS2010 should run with full privileges and executing CL.exe (the C++ compiler) should work.

Microsoft (R) Visual Studio Version 10.0.40219.1.
Copyright (C) Microsoft Corp. All rights reserved.
1>------ Build started: Project: JavaScriptCoreGenerated, Configuration: Release_Cairo_CFLite Win32 ------
1>EXEC : cygwin warning :
2>------ Build started: Project: WTF, Configuration: Release_Cairo_CFLite Win32 ------
2>LINK : fatal error LNK1181: cannot open input file 'C:\Cygwin\home\Ash\WebKit-r105582\WebKitBuild\Release_Cairo_CFLite\obj\WTF\MainThreadWin.obj'

This time the Linker is complaining of not finding an OBJ file. Here we notice a couple of things. First, since CL no longer complains, it’s safe to assume our UAC fix worked and CL ran. Second, and more importantly, we see no CPP file compilation output before the linker error. Checking the output folder clearly shows no OBJ files. May be the output folder is different, so we need to see more details. Changing the log-level from Visual Studio (Tools > Options > Projects and Solutions > Build and Run. Change “MSBuild project build output verbosity” from “Quiet” to “Detailed” or higher) shows that CL is not compiling anything at all! After some investigation, it turns out the culprit is the parallelcl script (in Tools/Scripts). This middleware gets called from Tools/vcbin/cl.exe, which is what is actually called by VS2010 since it’s found first on the path. The purpose of this script is to parallelize the build by executing multiple concurrent instances of the compiler.

The older Visual Studio versions used to dump all command-line parameters passed to CL in a compiler response file. VS2010 isn’t using response files and is passing the params in the classical way. This behavior may be specific to Windows 7 as its shell supports a larger command-line param buffer than previous versions, but I haven’t checked either way. Bottom line is that parallelcl needs to accomodate this fact because as-is it’s simply failing to pass anything to CL, which is why nothing is actually getting compiled.

We can of course bypass this script altogether. Unfortunately, this will cost us much in terms of build time (which is significant to start with) because VS2010 (and 2008 as well) support only project-level parallelization, which isn’t much help for WebKit. The fix is to directly call the real CL. We may later try to do a better fix and support compiler-level parallelization, which is what this script was actually doing. To disable this custom script all we have to do is simply rename the CL.exe in Tools\vcbin\cl.exe.

mv Tools/vcbin/cl.exe Tools/vcbin/cl-.exe

Warnings (as Error)

Building again we see source files getting compiled. This time the errors come from the warnings. We resolved this issue by removing the “warnings as errors” options. Fire up VS2010 (which can be done by running pdevenv from the shell) then load the WebKit solution. Select every C++ solution (either one at a time, or all together) and open their properties. From the C/C++ > General node, change “Treat Warnings As Errors” to “No (/WX-)”. You probably want to do this for “All Configurations”. Save the solution and lets build again from the shell. To change settings, we’ll use property sheets (quick into here and here, more details here) which not only is the correct way to share common settings between large number of projects and configurations, but also WebKit heavily utilizes anyway.

Output showing “warning as error” and some superfluous warnings:

Microsoft (R) Visual Studio Version 10.0.40219.1.
Copyright (C) Microsoft Corp. All rights reserved.
1>------ Build started: Project: JavaScriptCoreGenerated, Configuration: Release_Cairo_CFLite Win32 ------
2>------ Build started: Project: WTF, Configuration: Release_Cairo_CFLite Win32 ------
2>c:\prj\webkit\webkit\webkit-r105582\source\javascriptcore\wtf\PassRefPtr.h(86): error C2220: warning treated as error - no 'object' file generated
2>c:\prj\webkit\webkit\webkit-r105582\source\javascriptcore\wtf\PassRefPtr.h(86): warning C4396: 'WTF::adoptRef' : the inline specifier cannot be used when a friend declaration refers to a specialization of a function template
2>C:\prj\WebKit\WebKit\WebKit-r105582\Source\JavaScriptCore\wtf/HashSet.h(96): warning C4396: 'WTF::deleteAllValues' : the inline specifier cannot be used when a friend declaration refers to a specialization of a function template

The property sheet file format was changed in VS2010. As with the C++ project file names, which changed from vcproj to vcxproj, the property sheet file names have also changed from vsprops to props. The reason for this is because now C++ projects are now built using MSBuild and not VCBuild. Old vcproj files, for example, contained file filters (which defined the folder structure shown in Visual Studio) as well as build instructions. New vcxproj files now contain only build instructions and filters are now in vcxproj.filters. Since property sheets contain compiler switches and flags, the format must also comform to the MSBuild format. The same is true for vcxproj files.

To disable “warnings as errors” open WebKitLibraries\win\tools\vsprops\common.props and change the code TreatWarningAsError from true to false. We also see a lot of compiler warning C4396 and linker warning LNK4221, so let’s disable them as well.

Lines 13-23 of common.props:

<ClCompile>
<AdditionalOptions>/bigobj /GS %(AdditionalOptions)</AdditionalOptions>
<PreprocessorDefinitions>WIN32;_WINDOWS;WINVER=0x502;_WIN32_WINNT=0x502;_WIN32_IE=0x603;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1;_HAS_EXCEPTIONS=0;BUILDING_$(ProjectName);%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ExceptionHandling>
</ExceptionHandling>
<RuntimeTypeInfo>false</RuntimeTypeInfo>
<WarningLevel>Level4</WarningLevel>
<TreatWarningAsError>false</TreatWarningAsError>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<DisableSpecificWarnings>4396;4018;4068;4099;4100;4127;4138;4180;4189;4201;4244;4251;4275;4288;4291;4305;4344;4355;4389;4481;4503;4505;4510;4512;4610;4706;4800;4951;4952;4996;6011;6031;6211;6246;6255;6387;%(DisableSpecificWarnings)</DisableSpecificWarnings>
</ClCompile>

Fixing Errors

nullptr

VS2010′s C++ compiler supports the new nullptr keyword. This was previously simulated in WTF\NullPtr.cpp/h as class std::nullptr_t; which isn’t simulated for VS2010 and newer (WTF\Compiler.h disables nullptr simulation for _MSC_VER >= 1600). Unfortunately, the simulated class, unlike a native one, needs to be exported so that it may be consumed by other projects. JavaScriptCore exports it, and since it’s not simulated, it can’t be found. From Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def we need to remove “?nullptr@@3Vnullptr_t@std@@A”.

MIDL

Like CL, there is a MIDL wrapper in Tools/vcbin. The purpose of this wrapper is to wrap command-line parameters in double-quotes. What it does wrong is that it, like the CL wrapper, assumes that the only parameter is a response file. Unfortunately, VS2010 doesn’t feel obliged to pass a response file in every case, so the wrapper ends up double-quotting every parameter and thus ends up passing invalid parameters to the real MIDL. Two solutions: we can temporarily rename the wrapper file to by-pass it (it works for me) or we can improve the MIDL wrapper to support both cases. For now, let’s simply rename the wrapper to bypass it.

mv Tools/vcbin/midl.exe Tools/vcbin/midl-.exe

Link Errors

If you got thus far, then you compiled everything until WebKit proper. Your biggest milestones were JavaScriptCore, Interfaces and WebCore. WebCore, however, seems to be missing a dozen or so definitions. Turns out that during the project conversion VS2010 set the Item Type (under General settings) to “Custom Build Tool” instead of “C/C++ compiler” thereby getting ignored by the C++ compiler. The culprit here is the VS2005 project file, which has incorrect Item Type for these files, one the original project file is fixed, the conversion should produce valid output. These files are:

Source\WebCore\platform\network\curl\CookieJarCurl.cpp
Source\WebCore\platform\image-decoders\ImageDecoder.cpp

Just change their Item Type to “C/C++ compiler” from their properties and rebuild. If all goes well, you should get no error and everything should build successfully.

Wrapping up

Summary

Here is what we did so far:

  1. Install Cygwin.
  2. Installed VS2010 Sp1 (and Windows SDK 7.1).
  3. Set WEBKITLIBRARIESDIR and WEBKITOUTPUTDIR environment variables.
  4. Make devenv.exe run as administrator.
  5. Change Tools\Scripts\pdevenv to recognize VS100COMNTOOLS.
  6. Remove the nullptr_t export from Source\JavaScriptCore\JavaScriptCore.vcproj\JavaScriptCore\JavaScriptCore.def.
  7. Disable CL and MIDL wrappers (the files may be renamed or their folder removed from the path).
  8. Disable Warning as Error from WebKitLibraries\win\tools\vsprops\common.props (optionally disable warning C4396 and enable MultiProcessor Compilation).
  9. Change the Item Type of Source\WebCore\platform\network\curl\CookieJarCurl.cpp and Source\WebCore\platform\image-decoders\ImageDecoder.cpp to C/C++ compiler.

Of course it would be great if one didn’t have to make all the code changes every time they updated the source code. Also, VS2010 project and props files have a different extension and format than the older ones. This means that any changes done to these files won’t get reflected in our converted files. The fix to that is to delete the converted Solution file and VS2010 will convert the files again. But even the conversion is a manual process. Let’s automate these changes…

Automating

Every modification we make to the source code, is a departure from the mainline and therefore a pain in maintaining it. I wanted somethin maintainable. This meant minimal change. I didn’t want to add new scripts, if any at all. Not only that, but I also wanted to support VS2005/VS2008 builds as well. That is, I plan to send this patch to become part of the mainline codebase. Turns out, we only need to modify one script in the WebKit proper source code: pdevenv.

We must modify pdevenv anyway to add support for VS2010 toolchain, no escape to that. So, here is what we can also do. First, add the VS100COMNTOOLS check, then, we need to convert the project, edit JavaScriptCore.def to remove the nullptr_t reference. We don’t need to rename the CL and MIDL wrappers; it’s enough to remove their folder from the path. Next, we need to edit common.props to disable warning as error, disable warning C4396 (which is optional) and enable MultiProcessor Compilation (again optional). Finally, we need to find all .cpp files and change their type to ClCompiler.

All of the editing tasks can be done using perlre (Perl Regex). In fact, they are simple one-line scripts. The tricky part was to generate Windows Batch file with the perl calls from pdevenv, which is a perl script itself. The reason for this is because that’s how Visual Studio is called; it’s a separate CMD shell. As you can see, the regex code is pretty twisted. Here is the updated pdevenv script:

#!/usr/bin/perl -w

use strict;
use warnings;

use File::Temp qw/tempfile/;
use File::Copy;
use FindBin;

use lib $FindBin::Bin;
use webkitdirs;

my ($fh, $path) = tempfile(UNLINK => 0, SUFFIX => '.cmd') or die;

chomp(my $vcBin = `cygpath -w "$FindBin::Bin/../vcbin"`);
chomp(my $scriptsPath = `cygpath -w "$FindBin::Bin"`);

my $command = join(" ", @ARGV);
my $vsToolsVar;
if ($ENV{'VS100COMNTOOLS'}) {
    $vsToolsVar = "VS100COMNTOOLS";
    $vcBin = ''; # We no longer need cl and midl wrappers.
	print $fh "\@echo Using VS2010 toolchain.\r\n";
	# If there is no vs2010 solution, upgrade.
	my $solution = $ARGV[0];
	$solution =~ s/WebKit.sln/WebKit-vs2010.sln/g;
	print $fh "\@echo off\r\n";
	print $fh "if not exist ..\\..\\WebKitLibraries ( \@echo This is not a WebKit directory! Stopping.\n goto exit )\r\n";
	print $fh "if not exist " . $solution . " (\r\n";
	print $fh "copy " . $ARGV[0] . " " . $solution . "\r\n";
	print $fh ")\r\n"; # If no vs2010 solution.
	print $fh "\@echo Upgrading solution file @ " . $solution . ". Build will resume when done. Please be patient.\r\n";
	print $fh "call \"\%" . $vsToolsVar . "\%\\vsvars32.bat\"\r\n";
	print $fh "IF EXIST \"\%VSINSTALLDIR\%\\Common7\\IDE\\devenv.com\" (devenv.com /useenv /upgrade " . join(" ", $solution) . ") ELSE ";
	print $fh "VCExpress.exe /useenv /upgrade " . join(" ", $solution) . "\r\n";

	# Correct the solution file name.
	$command = '';
    foreach my $arg (@ARGV) {
		$arg =~ s/WebKit.sln/WebKit-vs2010.sln/g;
        $command = $command . ' ' . $arg;
    }

	print $fh "\@echo Patching common.props...\r\n";	
	my $props_filename = "..\\..\\WebKitLibraries\\win\\tools\\vsprops\\common.props";
	chomp($props_filename = `cygpath -w '$props_filename'`);
	print $fh "\@echo  Disabling warning as error.\r\n";	
	my $replace_string = "s/\\true\\/\\false\\/g";
	print $fh "perl -p -i -e \"" . $replace_string . "\" \"" . $props_filename . "\"\r\n";
	print $fh "\@echo  Disabling warning C4396.\r\n";	
	$replace_string = "s/\\4396;/\\/g"; # Delete disabled warning 4396.
	print $fh "perl -p -i -e \"" . $replace_string . "\" \"" . $props_filename . "\"\r\n";
	$replace_string = "s/\\/\\4396;/g";
	print $fh "perl -p -i -e \"" . $replace_string . "\" \"" . $props_filename . "\"\r\n"; # Disable warning 4396.
	print $fh "\@echo  Enabling multiprocess compile.\r\n";	
	$replace_string = "s/\\(.*?)\\//g"; # Delete MP compilation.
	print $fh "perl -p -i -e \"" . $replace_string . "\" \"" . $props_filename . "\"\r\n";
	$replace_string = "s/\\/\\\\n      \\true\\/g";
	print $fh "perl -p -i -e \"" . $replace_string . "\" \"" . $props_filename . "\"\r\n"; # Enable MP compilation.

	my $jsdef_filename = "..\\..\\Source\\JavaScriptCore\\JavaScriptCore.vcproj\\JavaScriptCore\\JavaScriptCore.def";
	chomp($jsdef_filename = `cygpath -w '$jsdef_filename'`);
	print $fh "if not exist \"" . $jsdef_filename . ".orig\" (\r\n";
	print $fh "\@echo Patching JavaScriptCore.def...\r\n";	
	print $fh "move \"" . $jsdef_filename . "\" \"" . $jsdef_filename . ".orig\" \r\n";
	print $fh "findstr /V ?nullptr\@\@3Vnullptr_t\@std\@\@A \"" . $jsdef_filename . ".orig\" > \"" . $jsdef_filename . "\"\r\n";
	print $fh ")\r\n"; # If no JavaScriptCore.def.orig.

	my $webcore_filename = "..\\..\\Source\\WebCore\\WebCore.vcproj\\WebCore.vcxproj";
	chomp($webcore_filename = `cygpath -w '$webcore_filename'`);
	print $fh "\@echo Correcting WebCore.vcxproj...\r\n";	
	$replace_string = "undef \$/; s/\\/\\/msgi";
	print $fh "perl -0pi -e \"" . $replace_string . "\" \"" . $webcore_filename . "\"\r\n";
} elsif ($ENV{'VS90COMNTOOLS'}) {
    $vsToolsVar = "VS90COMNTOOLS";
} elsif ($ENV{'VS80COMNTOOLS'}) {
    $vsToolsVar = "VS80COMNTOOLS";
} else {
    print "*************************************************************\n";
    print "Cannot find Visual Studio tools dir.\n";
    print "Please ensure that \$VS80COMNTOOLS or \$VS90COMNTOOLS\n";
    print "is set to a valid location.\n";
    print "*************************************************************\n";
    die;
}

print $fh "\@echo off\r\n";
print $fh "call \"\%" . $vsToolsVar . "\%\\vsvars32.bat\"\r\n";
print $fh "set PATH=$vcBin;$scriptsPath;\%PATH\%\r\n";

print $fh "IF EXIST \"\%VSINSTALLDIR\%\\Common7\\IDE\\devenv.com\" (devenv.com /useenv " . join(" ", $command) . ") ELSE ";
print $fh "VCExpress.exe /useenv " . join(" ", $command) . "\r\n";
print $fh ":exit\n";

close $fh;
chmod 0755, $path;
chomp($path = `cygpath -w -s '$path'`);

exec("cmd /c \"call $path\"");

One-Command Build

Having installed Cygwin and Visual Studio, we need to change devenv.exe to run as administrator. Beyond that, just download the source code and the patch. Extract the source code anywhere you like, then extract the patch in the same folder. You should get a new vs2010-build-env.cmd file in the root of that folder and replace pdevenv in the Tools/Scripts folder.

Right-click vs2010-build-env.cmd and Run as Administrator. In the shell, simply execute build-webkit --wincairo and go read something, exercise or eat some healthy meal… Be back in an hour or so. Your station won’t be much usable during the build anyway.

Complete run of a patched nightly build for reference and completeness:

Setting up Cygwin directory...
symbolic link created for C:\Cygwin <> C:\Tools\cygwin
Setting up WebKit directory...
symbolic link created for C:\Cygwin\home\Ash\WebKit-r106194 <> C:\prj\WebKit\WebKit-r106194\
Exporting environment varibles...
Note: Remember to set devenv.exe to run as administrator!
Running Cygwin...

Ash@Bull ~
$ build-webkit --wincairo
Checking Last-Modified date of WinCairoRequirements.zip...
Downloading WinCairoRequirements.zip...

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 14.0M  100 14.0M    0     0   400k      0  0:00:35  0:00:35 --:--:--  407k

Installing WinCairoRequirements...
The WinCairoRequirements has been sucessfully installed in
 /cygdrive/c/Cygwin/home/Ash/WebKit-r106194/WebKitLibraries/win
Building results into: /cygdrive/c/Cygwin/home/Ash/WebKit-r106194/WebKitBuild
WEBKITOUTPUTDIR is set to: C:\prj\WebKit\WebKit-r106194\WebKitBuild
WEBKITLIBRARIESDIR is set to: C:\Cygwin\home\Ash\WebKit-r106194\WebKitLibraries\win
/cygdrive/c/Cygwin/home/Ash/WebKit-r106194/Tools/Scripts/pdevenv win\WebKit.vcproj\WebKit.sln /build Release_Cairo_CFLite
Using VS2010 toolchain.
        1 file(s) copied.
Upgrading solution file @ win\WebKit.vcproj\WebKit-vs2010.sln. Build will resume when done. Please be patient.
Setting environment for using Microsoft Visual Studio 2010 x86 tools.

Microsoft (R) Visual Studio Version 10.0.40219.1.
Copyright (C) Microsoft Corp. All rights reserved.

Upgrade completed successfully. Results can be seen in the
upgrade report:
C:\prj\WebKit\WebKit-r106194\Source\WebKit\win\WebKit.vcproj\UpgradeLog.XML
Patching common.props...
 Disabling warning as error.
 Disabling warning C4396.
 Enabling multiprocess compile.
Patching JavaScriptCore.def...
        1 file(s) moved.
Correcting WebCore.vcxproj...
Setting environment for using Microsoft Visual Studio 2010 x86 tools.

Microsoft (R) Visual Studio Version 10.0.40219.1.
Copyright (C) Microsoft Corp. All rights reserved.
1>------ Build started: Project: JavaScriptCoreGenerated, Configuration: Release_Cairo_CFLite Win32 ------
2>------ Build started: Project: WTF, Configuration: Release_Cairo_CFLite Win32 ------
2>StringExtras.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
2>SizeLimits.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
2>NullPtr.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
2>HashTable.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
2>DynamicAnnotations.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
2>BinarySemaphore.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
3>------ Build started: Project: JavaScriptCore, Configuration: Release_Cairo_CFLite Win32 ------
3>JSGlobalObject.obj : warning LNK4197: export '?s_globalObjectMethodTable@JSGlobalObject@JSC@@1UGlobalObjectMethodTable@2@B' specified multiple times; using first specification
3>PropertyDescriptor.obj : warning LNK4197: export '?defaultAttributes@PropertyDescriptor@JSC@@0IA' specified multiple times; using first specification
3>MachineStackMarker.obj : warning LNK4049: locally defined symbol ?staticData@WTFThreadData@WTF@@0PAV?$ThreadSpecific@VWTFThreadData@WTF@@@2@A (private: static class WTF::ThreadSpecific * WTF::WTFThreadData::staticData) imported
3>Heap.obj : warning LNK4049: locally defined symbol ?staticData@WTFThreadData@WTF@@0PAV?$ThreadSpecific@VWTFThreadData@WTF@@@2@A (private: static class WTF::ThreadSpecific * WTF::WTFThreadData::staticData) imported
3>JSValueRef.obj : warning LNK4049: locally defined symbol ?staticData@WTFThreadData@WTF@@0PAV?$ThreadSpecific@VWTFThreadData@WTF@@@2@A (private: static class WTF::ThreadSpecific* WTF::WTFThreadData::staticData) imported
3>JSWeakObjectMapRefPrivate.obj : warning LNK4049: locally defined symbol ?staticData@WTFThreadData@WTF@@0PAV?$ThreadSpecific@VWTFThreadData@WTF@@@2@A (private: static class WTF::ThreadSpecific * WTF::WTFThreadData::staticData) imported
3>BytecodeGenerator.obj : warning LNK4049: locally defined symbol ?staticData@WTFThreadData@WTF@@0PAV?$ThreadSpecific@VWTFThreadData@WTF@@@2@A (private: static class WTF::ThreadSpecific * WTF::WTFThreadData::staticData) imported
3>Parser.obj : warning LNK4049: locally defined symbol ?staticData@WTFThreadData@WTF@@0PAV?$ThreadSpecific@VWTFThreadData@WTF@@@2@A (private: static class WTF::ThreadSpecific * WTF::WTFThreadData::staticData) imported
3>JSCallbackObject.obj : warning LNK4049: locally defined symbol ?staticData@WTFThreadData@WTF@@0PAV?$ThreadSpecific@VWTFThreadData@WTF@@@2@A (private: static class WTF::ThreadSpecific * WTF::WTFThreadData::staticData) imported
3>JSClassRef.obj : warning LNK4049: locally defined symbol ?staticData@WTFThreadData@WTF@@0PAV?$ThreadSpecific@VWTFThreadData@WTF@@@2@A (private: static class WTF::ThreadSpecific* WTF::WTFThreadData::staticData) imported
3>JSContextRef.obj : warning LNK4049: locally defined symbol ?staticData@WTFThreadData@WTF@@0PAV?$ThreadSpecific@VWTFThreadData@WTF@@@2@A (private: static class WTF::ThreadSpecific * WTF::WTFThreadData::staticData) imported
3>JSObjectRef.obj : warning LNK4049: locally defined symbol ?staticData@WTFThreadData@WTF@@0PAV?$ThreadSpecific@VWTFThreadData@WTF@@@2@A (private: static class WTF::ThreadSpecific * WTF::WTFThreadData::staticData) imported
3>JSGlobalData.obj : warning LNK4049: locally defined symbol ?staticData@WTFThreadData@WTF@@0PAV?$ThreadSpecific@VWTFThreadData@WTF@@@2@A (private: static class WTF::ThreadSpecific * WTF::WTFThreadData::staticData) imported
3>JSBase.obj : warning LNK4049: locally defined symbol ?staticData@WTFThreadData@WTF@@0PAV?$ThreadSpecific@VWTFThreadData@WTF@@@2@A (private: static class WTF::ThreadSpecific * WTF::WTFThreadData::staticData) imported
3>JSCallbackConstructor.obj : warning LNK4049: locally defined symbol ?staticData@WTFThreadData@WTF@@0PAV?$ThreadSpecific@VWTFThreadData@WTF@@@2@A (private: static class WTF::ThreadSpecific * WTF::WTFThreadData::staticData) imported
3>JSCallbackFunction.obj : warning LNK4049: locally defined symbol ?staticData@WTFThreadData@WTF@@0PAV?$ThreadSpecific@VWTFThreadData@WTF@@@2@A (private: static class WTF::ThreadSpecific * WTF::WTFThreadData::staticData) imported
4>------ Build started: Project: WebCoreGenerated, Configuration: Release_Cairo_CFLite Win32 ------
4>C:\prj\WebKit\WebKit-r106194\Source\WebCore\WebCore.vcproj\WebCoreGeneratedCairo.props(4,5): warning MSB4011: "C:\prj\WebKit\WebKit-r106194\WebKitLibraries\win\tools\vsprops\common.props" cannot be imported again. It was already imported at "C:\prj\WebKit\WebKit-r106194\Source\WebCore\WebCore.vcproj\WebCoreGeneratedCommon.props (4,5)". This is most likely a build authoring error. This subsequent import wi
ll be ignored. [C:\prj\WebKit\WebKit-r106194\Source\WebCore\WebCore.vcproj\WebCoreGenerated.vcxproj]
5>------ Skipped Build: Project: QTMovieWin, Configuration: Release_Cairo_CFLite Win32 ------
5>Project not selected to build for this solution configuration
6>------ Build started: Project: WebCore, Configuration: Release_Cairo_CFLite Win32 ------
6>..\platform\graphics\cairo\DrawErrorUnderline.h(24): warning C4067: unexpected tokens following preprocessor directive - expected a newline
6>..\platform\graphics\cairo\DrawErrorUnderline.h(24): warning C4067: unexpected tokens following preprocessor directive - expected a newline
6>InspectorIndexedDBAgent.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>InspectorFileSystemAgent.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>StorageInfo.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>IDBTransaction.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>IDBRequest.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>IDBObjectStoreBackendImpl.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>IDBObjectStore.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>IDBKeyRange.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>IDBKey.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>IDBIndexBackendImpl.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>IDBIndex.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>IDBFactoryBackendInterface.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>IDBFactoryBackendImpl.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>IDBFactory.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>IDBDatabaseBackendImpl.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>IDBDatabase.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>IDBCursorBackendImpl.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>IDBCursor.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>IDBAny.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>PluginDebug.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>JSFileReaderCustom.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>JSEntrySyncCustom.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>JSEntryCustom.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>JSDirectoryEntrySyncCustom.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>JSDirectoryEntryCustom.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>ProgressShadowElement.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>MediaControls.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>MediaControlRootElement.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>MediaControlElements.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>WeekInputType.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>TimeInputType.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>OperationNotAllowedException.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>MonthInputType.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>MicroDataItemValue.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>MediaFragmentURIParser.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>MediaDocument.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>MediaController.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>LocalFileSystem.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>HTMLPropertiesCollection.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>HTMLParserErrorCodes.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>FileWriterSync.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>FileWriterBase.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>FileWriter.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>FileThread.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>FileSystemCallbacks.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>FileStreamProxy.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>FileReaderSync.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>FileReaderLoader.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>FileReader.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>FileException.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>FileEntrySync.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>FileEntry.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>EntrySync.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>EntryArraySync.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>EntryArray.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>Entry.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>DOMURL.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>DOMFileSystemSync.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>DOMFileSystemBase.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>DOMFileSystem.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>DOMFilePath.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>DirectoryReaderSync.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>DirectoryReader.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>DirectoryEntrySync.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>DirectoryEntry.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>DateTimeLocalInputType.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>DateTimeInputType.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>DateInputType.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>ColorInputType.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>NotificationCenter.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>Notification.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>ScriptedAnimationController.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>StyleCachedShader.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>RenderLayerBacking.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>RenderFullScreen.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>WebKitCSSShaderValue.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>WebKitCSSFilterValue.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>SpeechInputClientMock.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>LoaderRunLoopCF.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>BlobResourceHandle.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>BlobRegistryImpl.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>MediaPlayerPrivateAVFoundationCF.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>MediaPlayerPrivateAVFoundation.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>WKCACFViewLayerTreeHost.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>PlatformCALayerWinInternal.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>PlatformCALayerWin.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>PlatformCAAnimationWin.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>LegacyCACFLayerTreeHost.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>TransformationMatrixCA.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>GraphicsLayerCA.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>FilterOperations.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>FilterOperation.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>FELightingNEON.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>FEGaussianBlurNEON.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>FECustomFilter.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>FECompositeArithmeticNEON.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>CustomFilterShader.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>CustomFilterProgram.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>CustomFilterOperation.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>CustomFilterMesh.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>FullScreenController.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>MediaPlayer.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>GraphicsLayer.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>WebCorePrefix.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>ScrollbarThemeSafari.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>GDIObjectCounter.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>ScrollAnimatorWin.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>PlatformEvent.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>FileStream.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>CalculationValue.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>AsyncFileSystem.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>CachedShader.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>MHTMLParser.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>MHTMLArchive.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>SpeechInput.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>PerformanceTiming.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>PerformanceNavigation.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>Performance.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>PageVisibilityState.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>JSStorageInfoUsageCallback.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>JSStorageInfoQuotaCallback.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>JSStorageInfoErrorCallback.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>JSStorageInfo.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>JSOperationNotAllowedException.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>JSFileWriterCallback.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>JSFileReaderSync.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>JSFileException.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>JSFileEntrySync.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>JSFileEntry.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>JSFileCallback.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>JSEntrySync.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>JSEntryArraySync.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>JSDOMFileSystemSync.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>JSDirectoryReaderSync.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>JSDirectoryEntrySync.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
6>DerivedSources.obj : warning LNK4006: "protected: void __thiscall WebCore::JSWebKitCSSRegionRule::finishCreation(class JSC::JSGlobalData &)" (?finishCreation@JSWebKitCSSRegionRule@WebCore@@IAEXAAVJSGlobalData@JSC@@@Z) already defined in JSWebKitCSSRegionRule.obj; second definition ignored
6>DerivedSources.obj : warning LNK4006: "private: __thiscall WebCore::JSWebKitCSSRegionRuleConstructor::JSWebKitCSSRegionRuleConstructor(class JSC::Structure *,class WebCore::JSDOMGlobalObject *)" (??0JSWebKitCSSRegionRuleConstructor@WebCore@@AAE@PAVStructure@JSC@@PAVJSDOMGlobalObject@1@@Z) already defined in JSWebKitCSSRegionRule.obj; second definition ignored
6>DerivedSources.obj : warning LNK4006: "public: static bool __cdecl WebCore::JSWebKitCSSRegionRuleConstructor::getOwnPropertyDescriptor(class JSC::JSObject *,class JSC::ExecState *,class JSC::Identifier const &,class JSC::PropertyDescriptor &)" (?getOwnPropertyDescriptor@JSWebKitCSSRegionRuleConstructor@WebCore@@SA_NPAVJSObject@JSC@@PAVExecState@4@ABVIdentifier@4@AAVPropertyDescriptor@4@@Z) already defined in JSWebKitCSSRegionRule.obj; second definition ignored
6>DerivedSources.obj : warning LNK4006: "protected: __thiscall WebCore::JSWebKitCSSRegionRule::JSWebKitCSSRegionRule(class JSC::Structure *,class WebCore::JSDOMGlobalObject *,class WTF::PassRefPtr)" (??0JSWebKitCSSRegionRule@WebCore@@IAE@PAVStructure@JSC@@PAVJSDOMGlobalObject@1@V?$PassRefPtr@VWebKitCSSRegionRule@WebCore@@@WTF@@@Z) already defined in JSWebKitCSSRegionRule.obj; second definition ignored
6>DerivedSources.obj : warning LNK4006: "public: static bool __cdecl WebCore::JSWebKitCSSRegionRuleConstructor::getOwnPropertySlot(class JSC::JSCell *,class JSC::ExecState *,class JSC::Identifier const &,class JSC::PropertySlot &)" (?getOwnPropertySlot@JSWebKitCSSRegionRuleConstructor@WebCore@@SA_NPAVJSCell@JSC@@PAVExecState@4@ABVIdentifier@4@AAVPropertySlot@4@@Z) already defined in JSWebKitCSSRegionRule.obj; second definition ignored
6>DerivedSources.obj : warning LNK4006: "public: static bool __cdecl WebCore::JSWebKitCSSRegionRule::getOwnPropertyDescriptor(class JSC::JSObject *,class JSC::ExecState *,class JSC::Identifier const &,class JSC::PropertyDescriptor &)" (?getOwnPropertyDescriptor@JSWebKitCSSRegionRule@WebCore@@SA_NPAVJSObject@JSC@@PAVExecState@4@ABVIdentifier@4@AAVPropertyDescriptor@4@@Z) already defined in JSWebKitCSSRegionRule.obj; second definition ignored
6>DerivedSources.obj : warning LNK4006: "public: static bool __cdecl WebCore::JSWebKitCSSRegionRule::getOwnPropertySlot(class JSC::JSCell *,class JSC::ExecState *,class JSC::Identifier const &,class JSC::PropertySlot &)" (?getOwnPropertySlot@JSWebKitCSSRegionRule@WebCore@@SA_NPAVJSCell@JSC@@PAVExecState@4@ABVIdentifier@4@AAVPropertySlot@4@@Z) already defined in JSWebKitCSSRegionRule.obj; second definition ignored
6>DerivedSources.obj : warning LNK4006: "public: static class JSC::JSObject * __cdecl WebCore::JSWebKitCSSRegionRule::createPrototype(class JSC::ExecState *,class JSC::JSGlobalObject *)" (?createPrototype@JSWebKitCSSRegionRule@WebCore@@SAPAVJSObject@JSC@@PAVExecState@4@PAVJSGlobalObject@4@@Z) already defined in JSWebKitCSSRegionRule.obj; second definition ignored
6>DerivedSources.obj : warning LNK4006: "public: static class JSC::JSObject * __cdecl WebCore::JSWebKitCSSRegionRulePrototype::self(class JSC::ExecState *,class JSC::JSGlobalObject *)" (?self@JSWebKitCSSRegionRulePrototype@WebCore@@SAPAVJSObject@JSC@@PAVExecState@4@PAVJSGlobalObject@4@@Z) already defined in JSWebKitCSSRegionRule.obj; second definition ignored
6>DerivedSources.obj : warning LNK4006: "private: void __thiscall WebCore::JSWebKitCSSRegionRuleConstructor::finishCreation(class JSC::ExecState *,class WebCore::JSDOMGlobalObject *)" (?finishCreation@JSWebKitCSSRegionRuleConstructor@WebCore@@AAEXPAVExecState@JSC@@PAVJSDOMGlobalObject@2@@Z) already defined in JSWebKitCSSRegionRule.obj; second definition ignored
6>DerivedSources.obj : warning LNK4006: "public: static class JSC::JSValue __cdecl WebCore::JSWebKitCSSRegionRule::getConstructor(class JSC::ExecState *,class JSC::JSGlobalObject *)" (?getConstructor@JSWebKitCSSRegionRule@WebCore@@SA?AVJSValue@JSC@@PAVExecState@4@PAVJSGlobalObject@4@@Z) already defined in JSWebKitCSSRegionRule.obj; second definition ignored
6>DerivedSources.obj : warning LNK4006: "class JSC::JSValue __cdecl WebCore::jsWebKitCSSRegionRuleCssRules(class JSC::ExecState *,class JSC::JSValue,class JSC::Identifier const &)" (?jsWebKitCSSRegionRuleCssRules@WebCore@@YA?AVJSValue@JSC@@PAVExecState@3@V23@ABVIdentifier@3@@Z) already defined in JSWebKitCSSRegionRule.obj; second definition ignored
6>DerivedSources.obj : warning LNK4006: "class JSC::JSValue __cdecl WebCore::jsWebKitCSSRegionRuleConstructor(class JSC::ExecState *,class JSC::JSValue,class JSC::Identifier const &)" (?jsWebKitCSSRegionRuleConstructor@WebCore@@YA?AVJSValue@JSC@@PAVExecState@3@V23@ABVIdentifier@3@@Z) already defined in JSWebKitCSSRegionRule.obj; second definition ignored
6>DerivedSources.obj : warning LNK4006: "public: static struct JSC::ClassInfo const WebCore::JSWebKitCSSRegionRuleConstructor::s_info" (?s_info@JSWebKitCSSRegionRuleConstructor@WebCore@@2UClassInfo@JSC@@B) already defined in JSWebKitCSSRegionRule.obj; second definition ignored
6>DerivedSources.obj : warning LNK4006: "public: static struct JSC::ClassInfo const WebCore::JSWebKitCSSRegionRulePrototype::s_info" (?s_info@JSWebKitCSSRegionRulePrototype@WebCore@@2UClassInfo@JSC@@B) already defined in JSWebKitCSSRegionRule.obj; second definition ignored
6>DerivedSources.obj : warning LNK4006: "public: static struct JSC::ClassInfo const WebCore::JSWebKitCSSRegionRule::s_info" (?s_info@JSWebKitCSSRegionRule@WebCore@@2UClassInfo@JSC@@B) already defined in JSWebKitCSSRegionRule.obj; second definition ignored
7>------ Build started: Project: Interfaces, Configuration: Release_Cairo_CFLite Win32 ------
8>------ Build started: Project: WebKitGUID, Configuration: Release_Cairo_CFLite Win32 ------
9>------ Build started: Project: WebKitLib, Configuration: Release_Cairo_CFLite Win32 ------
9>WebDesktopNotificationsDelegate.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
9>FullscreenVideoController.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
10>------ Build started: Project: WebKit2Generated, Configuration: Release_Cairo_CFLite Win32 ------
11>------ Build started: Project: WebKit, Configuration: Release_Cairo_CFLite Win32 ------
11>libjpeg.lib(jdapimin.obj) : warning LNK4099: PDB 'libjpeg.pdb' was not found with 'libjpeg.lib(jdapimin.obj)' or at 'C:\prj\WebKit\WebKit-r106194\WebKitBuild\Release_Cairo_CFLite\bin\libjpeg.pdb'; linking object as if no debug info
11>libjpeg.lib(jdapistd.obj) : warning LNK4099: PDB 'libjpeg.pdb' was not found with 'libjpeg.lib(jdapistd.obj)' or at 'C:\prj\WebKit\WebKit-r106194\WebKitBuild\Release_Cairo_CFLite\bin\libjpeg.pdb'; linking object as if no debug info
11>libjpeg.lib(jdmarker.obj) : warning LNK4099: PDB 'libjpeg.pdb' was not found with 'libjpeg.lib(jdmarker.obj)' or at 'C:\prj\WebKit\WebKit-r106194\WebKitBuild\Release_Cairo_CFLite\bin\libjpeg.pdb'; linking object as if no debug info
11>libjpeg.lib(jerror.obj) : warning LNK4099: PDB 'libjpeg.pdb' was not found with 'libjpeg.lib(jerror.obj)' or at 'C:\prj\WebKit\WebKit-r106194\WebKitBuild\Release_Cairo_CFLite\bin\libjpeg.pdb'; linking object as if no debug info
11>libjpeg.lib(jdmaster.obj) : warning LNK4099: PDB 'libjpeg.pdb' was not found with 'libjpeg.lib(jdmaster.obj)' or at 'C:\prj\WebKit\WebKit-r106194\WebKitBuild\Release_Cairo_CFLite\bin\libjpeg.pdb'; linking object as if no debug info
11>libjpeg.lib(jcomapi.obj) : warning LNK4099: PDB 'libjpeg.pdb' was not found with 'libjpeg.lib(jcomapi.obj)' or at 'C:\prj\WebKit\WebKit-r106194\WebKitBuild\Release_Cairo_CFLite\bin\libjpeg.pdb'; linking object as if no debug info
11>libjpeg.lib(jdinput.obj) : warning LNK4099: PDB 'libjpeg.pdb' was not found with 'libjpeg.lib(jdinput.obj)' or at 'C:\prj\WebKit\WebKit-r106194\WebKitBuild\Release_Cairo_CFLite\bin\libjpeg.pdb'; linking object as if no debug info
11>libjpeg.lib(jmemmgr.obj) : warning LNK4099: PDB 'libjpeg.pdb' was not found with 'libjpeg.lib(jmemmgr.obj)' or at 'C:\prj\WebKit\WebKit-r106194\WebKitBuild\Release_Cairo_CFLite\bin\libjpeg.pdb'; linking object as if no debug info
11>libjpeg.lib(jutils.obj) : warning LNK4099: PDB 'libjpeg.pdb' was not found with 'libjpeg.lib(jutils.obj)' or at 'C:\prj\WebKit\WebKit-r106194\WebKitBuild\Release_Cairo_CFLite\bin\libjpeg.pdb'; linking object as if no debug info
11>libjpeg.lib(jdhuff.obj) : warning LNK4099: PDB 'libjpeg.pdb' was not found with 'libjpeg.lib(jdhuff.obj)' or at 'C:\prj\WebKit\WebKit-r106194\WebKitBuild\Release_Cairo_CFLite\bin\libjpeg.pdb'; linking object as if no debug info
11>libjpeg.lib(jquant1.obj) : warning LNK4099: PDB 'libjpeg.pdb' was not found with 'libjpeg.lib(jquant1.obj)' or at 'C:\prj\WebKit\WebKit-r106194\WebKitBuild\Release_Cairo_CFLite\bin\libjpeg.pdb'; linking object as if no debug info
11>libjpeg.lib(jddctmgr.obj) : warning LNK4099: PDB 'libjpeg.pdb' was not found with 'libjpeg.lib(jddctmgr.obj)' or at 'C:\prj\WebKit\WebKit-r106194\WebKitBuild\Release_Cairo_CFLite\bin\libjpeg.pdb'; linking object as if no debug info
11>libjpeg.lib(jdsample.obj) : warning LNK4099: PDB 'libjpeg.pdb' was not found with 'libjpeg.lib(jdsample.obj)' or at 'C:\prj\WebKit\WebKit-r106194\WebKitBuild\Release_Cairo_CFLite\bin\libjpeg.pdb'; linking object as if no debug info
11>libjpeg.lib(jdarith.obj) : warning LNK4099: PDB 'libjpeg.pdb' was not found with 'libjpeg.lib(jdarith.obj)' or at 'C:\prj\WebKit\WebKit-r106194\WebKitBuild\Release_Cairo_CFLite\bin\libjpeg.pdb'; linking object as if no debug info
11>libjpeg.lib(jdcolor.obj) : warning LNK4099: PDB 'libjpeg.pdb' was not found with 'libjpeg.lib(jdcolor.obj)' or at 'C:\prj\WebKit\WebKit-r106194\WebKitBuild\Release_Cairo_CFLite\bin\libjpeg.pdb'; linking object as if no debug info
11>libjpeg.lib(jdcoefct.obj) : warning LNK4099: PDB 'libjpeg.pdb' was not found with 'libjpeg.lib(jdcoefct.obj)' or at 'C:\prj\WebKit\WebKit-r106194\WebKitBuild\Release_Cairo_CFLite\bin\libjpeg.pdb'; linking object as if no debug info
11>libjpeg.lib(jquant2.obj) : warning LNK4099: PDB 'libjpeg.pdb' was not found with 'libjpeg.lib(jquant2.obj)' or at 'C:\prj\WebKit\WebKit-r106194\WebKitBuild\Release_Cairo_CFLite\bin\libjpeg.pdb'; linking object as if no debug info
11>libjpeg.lib(jdmerge.obj) : warning LNK4099: PDB 'libjpeg.pdb' was not found with 'libjpeg.lib(jdmerge.obj)' or at 'C:\prj\WebKit\WebKit-r106194\WebKitBuild\Release_Cairo_CFLite\bin\libjpeg.pdb'; linking object as if no debug info
11>libjpeg.lib(jdmainct.obj) : warning LNK4099: PDB 'libjpeg.pdb' was not found with 'libjpeg.lib(jdmainct.obj)' or at 'C:\prj\WebKit\WebKit-r106194\WebKitBuild\Release_Cairo_CFLite\bin\libjpeg.pdb'; linking object as if no debug info
11>libjpeg.lib(jdpostct.obj) : warning LNK4099: PDB 'libjpeg.pdb' was not found with 'libjpeg.lib(jdpostct.obj)' or at 'C:\prj\WebKit\WebKit-r106194\WebKitBuild\Release_Cairo_CFLite\bin\libjpeg.pdb'; linking object as if no debug info
11>libjpeg.lib(jmemnobs.obj) : warning LNK4099: PDB 'libjpeg.pdb' was not found with 'libjpeg.lib(jmemnobs.obj)' or at 'C:\prj\WebKit\WebKit-r106194\WebKitBuild\Release_Cairo_CFLite\bin\libjpeg.pdb'; linking object as if no debug info
11>libjpeg.lib(jidctint.obj) : warning LNK4099: PDB 'libjpeg.pdb' was not found with 'libjpeg.lib(jidctint.obj)' or at 'C:\prj\WebKit\WebKit-r106194\WebKitBuild\Release_Cairo_CFLite\bin\libjpeg.pdb'; linking object as if no debug info
11>libjpeg.lib(jidctflt.obj) : warning LNK4099: PDB 'libjpeg.pdb' was not found with 'libjpeg.lib(jidctflt.obj)' or at 'C:\prj\WebKit\WebKit-r106194\WebKitBuild\Release_Cairo_CFLite\bin\libjpeg.pdb'; linking object as if no debug info
11>libjpeg.lib(jidctfst.obj) : warning LNK4099: PDB 'libjpeg.pdb' was not found with 'libjpeg.lib(jidctfst.obj)' or at 'C:\prj\WebKit\WebKit-r106194\WebKitBuild\Release_Cairo_CFLite\bin\libjpeg.pdb'; linking object as if no debug info
11>libjpeg.lib(jaricom.obj) : warning LNK4099: PDB 'libjpeg.pdb' was not found with 'libjpeg.lib(jaricom.obj)' or at 'C:\prj\WebKit\WebKit-r106194\WebKitBuild\Release_Cairo_CFLite\bin\libjpeg.pdb'; linking object as if no debug info
11>libpng.lib(pngerror.obj) : warning LNK4099: PDB 'libpng.pdb' was not found with 'libpng.lib(pngerror.obj)' or at 'C:\prj\WebKit\WebKit-r106194\WebKitBuild\Release_Cairo_CFLite\bin\libpng.pdb'; linking object as if no debug info
11>libpng.lib(pngread.obj) : warning LNK4099: PDB 'libpng.pdb' was not found with 'libpng.lib(pngread.obj)' or at 'C:\prj\WebKit\WebKit-r106194\WebKitBuild\Release_Cairo_CFLite\bin\libpng.pdb'; linking object as if no debug info
11>libpng.lib(pngpread.obj) : warning LNK4099: PDB 'libpng.pdb' was not found with 'libpng.lib(pngpread.obj)' or at 'C:\prj\WebKit\WebKit-r106194\WebKitBuild\Release_Cairo_CFLite\bin\libpng.pdb'; linking object as if no debug info
11>libpng.lib(pngget.obj) : warning LNK4099: PDB 'libpng.pdb' was not found with 'libpng.lib(pngget.obj)' or at 'C:\prj\WebKit\WebKit-r106194\WebKitBuild\Release_Cairo_CFLite\bin\libpng.pdb'; linking object as if no debug info
11>libpng.lib(pngtrans.obj) : warning LNK4099: PDB 'libpng.pdb' was not found with 'libpng.lib(pngtrans.obj)' or at 'C:\prj\WebKit\WebKit-r106194\WebKitBuild\Release_Cairo_CFLite\bin\libpng.pdb'; linking object as if no debug info
11>libpng.lib(pngrtran.obj) : warning LNK4099: PDB 'libpng.pdb' was not found with 'libpng.lib(pngrtran.obj)' or at 'C:\prj\WebKit\WebKit-r106194\WebKitBuild\Release_Cairo_CFLite\bin\libpng.pdb'; linking object as if no debug info
11>libpng.lib(pngset.obj) : warning LNK4099: PDB 'libpng.pdb' was not found with 'libpng.lib(pngset.obj)' or at 'C:\prj\WebKit\WebKit-r106194\WebKitBuild\Release_Cairo_CFLite\bin\libpng.pdb'; linking object as if no debug info
11>libpng.lib(png.obj) : warning LNK4099: PDB 'libpng.pdb' was not found with 'libpng.lib(png.obj)' or at 'C:\prj\WebKit\WebKit-r106194\WebKitBuild\Release_Cairo_CFLite\bin\libpng.pdb'; linking object as if no debug info
11>libpng.lib(pngrio.obj) : warning LNK4099: PDB 'libpng.pdb' was not found with 'libpng.lib(pngrio.obj)' or at 'C:\prj\WebKit\WebKit-r106194\WebKitBuild\Release_Cairo_CFLite\bin\libpng.pdb'; linking object as if no debug info
11>libpng.lib(pngrutil.obj) : warning LNK4099: PDB 'libpng.pdb' was not found with 'libpng.lib(pngrutil.obj)' or at 'C:\prj\WebKit\WebKit-r106194\WebKitBuild\Release_Cairo_CFLite\bin\libpng.pdb'; linking object as if no debug info
11>libpng.lib(pngmem.obj) : warning LNK4099: PDB 'libpng.pdb' was not found with 'libpng.lib(pngmem.obj)' or at 'C:\prj\WebKit\WebKit-r106194\WebKitBuild\Release_Cairo_CFLite\bin\libpng.pdb'; linking object as if no debug info
12>------ Build started: Project: WebKit2WebProcess, Configuration: Release_Cairo_CFLite Win32 ------
13>------ Build started: Project: testapi, Configuration: Release_Cairo_CFLite Win32 ------
14>------ Build started: Project: jsc, Configuration: Release_Cairo_CFLite Win32 ------
15>------ Build started: Project: testRegExp, Configuration: Release_Cairo_CFLite Win32 ------
16>------ Build started: Project: WinLauncher, Configuration: Release_Cairo_CFLite Win32 ------
17>------ Build started: Project: WinLauncherLauncher, Configuration: Release_Cairo_CFLite Win32 ------
17>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets(990,5): warning MSB8012: TargetPath(C:\prj\WebKit\WebKit-r106194\WebKitBuild\Release_Cairo_CFLite\bin\WinLauncherLauncher.exe) does not match the Linker's OutputFile property value (C:\prj\WebKit\WebKit-r106194\WebKitBuild\Release_Cairo_CFLite\bin\WinLauncher.exe). This may cause your project to build incorrectly. To correct this, please make sure that $(OutDir), $(TargetName) and $(TargetExt) property values match the value specified in %(Link.OutputFile).
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets(992,5): warning MSB8012: TargetName(WinLauncherLauncher) does not match the Linker's OutputFile property value (WinLauncher). This may cause your project to build incorrectly. To correct this, please make sure that $(OutDir), $(TargetName) and $(TargetExt) property values match the value specified in %(Link.OutputFile).
18>------ Build started: Project: TestNetscapePlugin, Configuration: Release_Cairo_CFLite Win32 ------
18>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets(990,5): warning MSB8012: TargetPath(C:\prj\WebKit\WebKit-r106194\WebKitBuild\Release_Cairo_CFLite\bin\TestNetscapePlugin.dll) does not match the Linker's OutputFile property value (C:\prj\WebKit\WebKit-r106194\WebKitBuild\Release_Cairo_CFLite\bin\TestNetscapePlugin\npTestNetscapePlugin.dll). This may cause your project to build incorrectly. To correct this, please make sure that $(OutDir), $(TargetName) and $(TargetExt) property values match the value specified in %(Link.OutputFile).
18>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets(992,5): warning MSB8012: TargetName(TestNetscapePlugin) does not match the Linker's OutputFile property value (npTestNetscapePlugin). This may cause your project to build incorrectly. To correct this, please make sure that $(OutDir), $(TargetName) and $(TargetExt) property values match the value specified in %(Link.OutputFile).
19>------ Build started: Project: ImageDiff, Configuration: Release_Cairo_CFLite Win32 ------
19>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets(990,5): warning MSB8012: TargetPath(C:\prj\WebKit\WebKit-r106194\WebKitBuild\Release_Cairo_CFLite\bin\ImageDiff.dll) does not match the Linker's OutputFile property value (C:\prj\WebKit\WebKit-r106194\WebKitBuild\Release_Cairo_CFLite\bin\ImageDiff.exe). This may cause your project to build incorrectly. To correct this, please make sure that $(OutDir), $(TargetName) and $(TargetExt) property values match the value specified in %(Link.OutputFile).
19>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets(991,5): warning MSB8012: TargetExt(.dll) does not match the Linker's OutputFile property value (.exe). This may cause your project to build incorrectly. To correct this, please make sure that $(OutDir), $(TargetName) and $(TargetExt) property values match the value specified in %(Link.OutputFile).
20>------ Build started: Project: ImageDiffLauncher, Configuration: Release_Cairo_CFLite Win32 ------
20>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets(990,5): warning MSB8012: TargetPath(C:\prj\WebKit\WebKit-r106194\WebKitBuild\Release_Cairo_CFLite\bin\ImageDiffLauncher.exe) does not match the Linker's OutputFile property value (C:\prj\WebKit\WebKit-r106194\WebKitBuild\Release_Cairo_CFLite\bin\ImageDiff.exe). This may cause your project to build incorrectly. To correct this, please make sure that $(OutDir), $(TargetName) and $(TargetExt) property values match the value specified in %(Link.OutputFile).
20>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets(992,5): warning MSB8012: TargetName(ImageDiffLauncher) does not match the Linker's OutputFile property value (ImageDiff). This may cause your project to build incorrectly. To correct this, please make sure that $(OutDir), $(TargetName) and $(TargetExt) property values match the value specified in %(Link.OutputFile).
21>------ Build started: Project: WebCoreTestSupport, Configuration: Release_Cairo_CFLite Win32 ------
22>------ Build started: Project: DumpRenderTree, Configuration: Release_Cairo_CFLite Win32 ------
23>------ Build started: Project: DumpRenderTreeLauncher, Configuration: Release_Cairo_CFLite Win32 ------
23>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets(990,5): warning MSB8012: TargetPath(C:\prj\WebKit\WebKit-r106194\WebKitBuild\Release_Cairo_CFLite\bin\DumpRenderTreeLauncher.exe) does not match the Linker's OutputFile property value (C:\prj\WebKit\WebKit-r106194\WebKitBuild\Release_Cairo_CFLite\bin\DumpRenderTree.exe). This may cause your project to build incorrectly. To correct this, please make sure that $(OutDir), $(TargetName) and $(TargetExt) property values match the value specified in %(Link.OutputFile).
23>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets(992,5): warning MSB8012: TargetName(DumpRenderTreeLauncher) does not match the Linker's OutputFile property value (DumpRenderTree). This may cause your project to build incorrectly. To correct this, please make sure that $(OutDir), $(TargetName) and $(TargetExt) property values match the value specified in %(Link.OutputFile).
24>------ Build started: Project: WebKitLauncherWin, Configuration: Release_Cairo_CFLite Win32 ------
24>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets(990,5): warning MSB8012: TargetPath(C:\prj\WebKit\WebKit-r106194\WebKitBuild\Release_Cairo_CFLite\bin\WebKitLauncherWin.exe) does not match the Linker's OutputFile property value (C:\prj\WebKit\WebKit-r106194\WebKitBuild\Release_Cairo_CFLite\bin\WebKit.exe). This may cause your project to build incorrectly. To correct this, please make sure that $(OutDir), $(TargetName) and $(TargetExt) property values match the value specified in %(Link.OutputFile).
24>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets(992,5): warning MSB8012: TargetName(WebKitLauncherWin) does not match the Linker's OutputFile property value (WebKit). This may cause your project to build incorrectly. To correct this, please make sure that $(OutDir), $(TargetName) and $(TargetExt) property values match the value specified in %(Link.OutputFile).
25>------ Build started: Project: record-memory-win, Configuration: Release_Cairo_CFLite Win32 ------
26>------ Build started: Project: InjectedBundleGenerated, Configuration: Release_Cairo_CFLite Win32 ------
27>------ Build started: Project: InjectedBundle, Configuration: Release_Cairo_CFLite Win32 ------
28>------ Build started: Project: WebKitTestRunner, Configuration: Release_Cairo_CFLite Win32 ------
29>------ Build started: Project: WebKitTestRunnerLauncher, Configuration: Release_Cairo_CFLite Win32 ------
29>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets(990,5): warning MSB8012: TargetPath(C:\prj\WebKit\WebKit-r106194\WebKitBuild\Release_Cairo_CFLite\bin\WebKitTestRunnerLauncher.exe) does not match the Linker's OutputFile property value (C:\prj\WebKit\WebKit-r106194\WebKitBuild\Release_Cairo_CFLite\bin\WebKitTestRunner.exe). This may cause your project to build incorrectly. To correct this, please make sure that $(OutDir), $(TargetName) and $(TargetExt) property values match the value specified in %(Link.OutputFile).
29>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets(992,5): warning MSB8012: TargetName(WebKitTestRunnerLauncher) does not match the Linker's OutputFile property value (WebKitTestRunner). This may cause your project to build incorrectly. To correct this, please make sure that $(OutDir), $(TargetName) and $(TargetExt) property values match the value specified in %(Link.OutputFile)
.
30>------ Build started: Project: gtest-md, Configuration: Release_Cairo_CFLite Win32 ------
30>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets(1151,5): warning MSB8012: TargetPath(C:\prj\WebKit\WebKit-r106194\WebKitBuild\Release_Cairo_CFLite\lib\gtest-md.lib) does not match the Library's OutputFile property value (C:\prj\WebKit\WebKit-r106194\WebKitBuild\Release_Cairo_CFLite\lib\gtest.lib). This may cause your project to build incorrectly. To correct this, please make sure that $(OutDir), $(TargetName) and $(TargetExt) property values match the value specified in %(Lib.OutputFile).
30>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets(1153,5): warning MSB8012: TargetName(gtest-md) does not match the Library's OutputFile property value (gtest). This may cause your project to build incorrectly. To correct this, please make sure that $(OutDir), $(TargetName) and $(TargetExt) property values match the value specified in %(Lib.OutputFile).
31>------ Build started: Project: TestWebKitAPIGenerated, Configuration: Release_Cairo_CFLite Win32 ------
32>------ Build started: Project: TestWebKitAPI, Configuration: Release_Cairo_CFLite Win32 ------
33>------ Build started: Project: TestWebKitAPIInjectedBundle, Configuration: Release_Cairo_CFLite Win32 ------
34>------ Build started: Project: MiniBrowser, Configuration: Release_Cairo_CFLite Win32 ------
35>------ Build started: Project: MiniBrowserLauncher, Configuration: Release_Cairo_CFLite Win32 ------
35>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets(990,5): warning MSB8012: TargetPath(C:\prj\WebKit\WebKit-r106194\WebKitBuild\Release_Cairo_CFLite\bin\MiniBrowserLauncher.exe) does not match the Linker's OutputFile property value (C:\prj\WebKit\WebKit-r106194\WebKitBuild\Release_Cairo_CFLite\bin\MiniBrowser.exe). This may cause your project to build incorrectly. To correct this, please make sure that $(OutDir), $(TargetName) and $(TargetExt) property values match the value specified in %(Link.OutputFile).
35>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets(992,5): warning MSB8012: TargetName(MiniBrowserLauncher) does not match the Linker's OutputFile property value (MiniBrowser). This may cause your project to build incorrectly. To correct this, please make sure that $(OutDir), $(TargetName) and $(TargetExt) property values match the value specified in %(Link.OutputFile).
========== Build: 34 succeeded, 0 failed, 0 up-to-date, 1 skipped ==========

===========================================================
 WebKit is now built (49m:07s).
 To run Safari with this newly-built code, use the
 "../../../Cygwin/home/Ash/WebKit-r106194/Tools/Scripts/run-safari" script.
===========================================================

Ash@Bull ~
$

The Patch

The Patch: WebKit-vs2010-Patch.zip
Good luck and happy hacking.

  69 Responses to “Building WebKit on Windows 7 with VS2010”

  1. Hi Ashod,

    Nice job! This will be very useful.

    Quick question: I followed your instructions and it looked like the pdevenv script converted everything OK. But then I got a bunch of errors right at the start in the WTF Project – as shown below.

    I’m using build r105742.

    Any ideas?

    Thanks in advance.

    Ed Connor

    2>—— Build started: Project: WTF, Configuration: Release_Cairo_CFLite Win32
    ——
    2> /usr/bin/bash
    2> XXWTFXX
    2> MainThreadWin.cpp
    2> OwnPtrWin.cpp
    2> UTF8.cpp
    2> CollatorICU.cpp
    2> AtomicString.cpp
    2> CString.cpp
    2> StringBuilder.cpp
    2> StringImpl.cpp
    2>..\..\wtf\win\MainThreadWin.cpp : fatal error C1083: Cannot open include file:
    ‘ICUVersion.h’: No such file or directory
    2>..\..\wtf\win\OwnPtrWin.cpp : fatal error C1083: Cannot open include file: ‘IC
    UVersion.h’: No such file or directory
    2> StringStatics.cpp
    2>..\..\wtf\unicode\UTF8.cpp : fatal error C1083: Cannot open include file: ‘ICU
    Version.h’: No such file or directory

    Like or Dislike: Thumb up 0 Thumb down 0 (0)

  2. Hi Ashod,

    Sorry to keep bugging you… one more question

    I synced up to r106194 and now I getting the following errors.

    Any thoughts?

    Thanks,

    Ed

    WEBKITOUTPUTDIR is set to: C:\WebKit-r106194\WebKitBuild
    WEBKITLIBRARIESDIR is set to: C:\Cygwin\home\connore\WebKit-r106194\WebKitLibrar
    ies\win
    /cygdrive/c/Cygwin/home/connore/WebKit-r106194/Tools/Scripts/pdevenv win\WebKit.
    vcproj\WebKit.sln /build Release_Cairo_CFLite
    Using VS2010 toolchain.
    1 file(s) copied.
    Upgrading solution file @ win\WebKit.vcproj\WebKit-vs2010.sln. Build will resume
    when done. Please be patient.
    Setting environment for using Microsoft Visual Studio 2010 x86 tools.

    Microsoft (R) Visual Studio Version 10.0.40219.1.
    Copyright (C) Microsoft Corp. All rights reserved.

    Upgrade completed successfully. Results can be seen in the
    upgrade report:
    C:\WebKit-r106194\Source\WebKit\win\WebKit.vcproj\UpgradeLog.XML
    Patching common.props…
    Disabling warning as error.
    cygwin warning:
    MS-DOS style path detected: C:\WebKit-r106194\WebKitLibraries\win\tools\vsprop
    s\common.props
    Preferred POSIX equivalent is: /cygdrive/c/WebKit-r106194/WebKitLibraries/win/
    tools/vsprops/common.props
    CYGWIN environment variable option “nodosfilewarning” turns off this warning.
    Consult the user’s guide for more details about POSIX paths:
    http://cygwin.com/cygwin-ug-net/using.html#using-pathnames
    Disabling warning C4396.
    Enabling multiprocess compile.
    Patching JavaScriptCore.def…
    1 file(s) moved.
    Correcting WebCore.vcxproj…
    Setting environment for using Microsoft Visual Studio 2010 x86 tools.

    Microsoft (R) Visual Studio Version 10.0.40219.1.
    Copyright (C) Microsoft Corp. All rights reserved.
    1>—— Build started: Project: JavaScriptCoreGenerated, Configuration: Release
    _Cairo_CFLite Win32 ——
    1> 0 [main] which 1752 tty_list::allocate: No tty allocated
    1> /usr/bin/bash
    1> touch “%ConfigurationBuildDir%\buildfailed”
    1> 0 [main] touch 7032 tty_list::allocate: No tty allocated
    1> bash build-generated-files.sh “%ConfigurationBuildDir%” “C:\Cygwin\home\
    connore\WebKit-r106194\WebKitLibraries\win”
    1> 0 [main] bash 4004 tty_list::allocate: No tty allocated
    1> build-generated-files.sh: line 2: $’\r’: command not found
    1> build-generated-files.sh: line 48: syntax error: unexpected end of file
    1>NMAKE : fatal error U1077: ‘bash’ : return code ’0×2′
    1> Stop.
    1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.MakeFile.Targets(3
    8,5): error MSB3073: The command “C:\cygwin\bin\which.exe bash
    1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.MakeFile.Targets(3
    8,5): error MSB3073: if errorlevel 1 set PATH=C:\cygwin\bin;;C:\Cygwin\home\conn
    ore\WebKit-r106194\Tools\Scripts;c:\Program Files (x86)\Microsoft F#\v4.0\;c:\Pr
    ogram Files (x86)\Microsoft Visual Studio 10.0\VSTSDB\Deploy;c:\Program Files (x
    86)\Microsoft Visual Studio 10.0\Common7\IDE\;c:\Program Files (x86)\Microsoft V
    isual Studio 10.0\VC\BIN;c:\Program Files (x86)\Microsoft Visual Studio 10.0\Com
    mon7\Tools;c:\Windows\Microsoft.NET\Framework\v4.0.30319;c:\Windows\Microsoft.NE
    T\Framework\v3.5;c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\VCPackag
    es;C:\Program Files (x86)\HTML Help Workshop;C:\Program Files (x86)\HTML Help Wo
    rkshop;c:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Performanc
    e Tools;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools;
    C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin;c:\Program Files (x86)\M

    Like or Dislike: Thumb up 0 Thumb down 0 (0)

    • Hi Ed,

      You got unlucky with the make file run by nmake. The output of nmake isn’t visible here. What you need to do is go to the output directory\obj\JavaScriptCore\Release…. and dig the tlog files. They aren’t very intuitively named, but if you open a few and read you’ll figure them out.

      The tlog files contain the output of intermediate tools executed by MSBuild. So you’ll see very shell script as well as perl and python script’s output. Among them, you should find what nmake is complaining from.

      Let me know if you find more info and need help.

      Like or Dislike: Thumb up 2 Thumb down 0 (+2)

  3. Hi Ashod,

    I got it!

    Looks like the problem was due line endings. I first extracted the WebKit-r106194.tar using WinZip and it appears some files like build-generated-files.sh did not have the proper line endings.

    I then extracted using “7-Zip” and everthing built just fine.

    My next step is now to build Debug and Release builds for both x86 and x64. I’ll tackle this tomorrow but I’m thinking I can just modify the pdevenv script to accomplish this. If you have any advice, please send me a quick message.

    Thanks for all the work you did on this VS2010 procedure and for posting it. It will certainly save a lot of time.

    Best regards.

    Ed

    Like or Dislike: Thumb up 0 Thumb down 0 (0)

    • Glad it worked. Btw, x64 isn’t supported. I’d also like to get it building, that’d certainly be something. But it seems that there are more complications than one would like to have. Either way, if you share your findings, it’d be highly appreciated.

      Like or Dislike: Thumb up 0 Thumb down 0 (0)

      • Thanks Ashod.

        When you get a chance could you make some suggestions about how you would go about implementing x64 bit build?

        Ed

        Like or Dislike: Thumb up 0 Thumb down 0 (0)

        • Hi Ashod/Ed,

          I’m also interested in building the x64 version of 64-bit. Have any of you made any progress? Can you point me to it? If not, what are the roadblocks you’re hitting in that? I’d like to be looped on it as well.

          Thanks

          Like or Dislike: Thumb up 0 Thumb down 0 (0)

          • Hi ND,

            Building a 64bit version is a project that depends largely on the configuration and target. WebKit has many flavors and configurations that change the required external libraries. Obviously, all these libraries must also first be built in 64bits. Unfortunately, my time lately has been a very scarce resource, so I couldn’t devote much time to the project. I did try to build some of the WinCairo port subprojects in 64bits successfully, but I didn’t finish the job.

            On an important note, I don’t think there are 64bit CoreGraphics libraries (provided by Apple) so you’re probably left with the Qt or the WinCairo ports for 64bit candidates. Let me know if you get any progress, I’d like to keep track.

            Good Luck.

            Like or Dislike: Thumb up 0 Thumb down 0 (0)

  4. [...] Building WebKit on Windows 7 with VS2010 – Ashod Nakashian [...]

    Like or Dislike: Thumb up 0 Thumb down 0 (0)

  5. [...] Building WebKit on Windows 7 with VS2010 [...]

    Like or Dislike: Thumb up 0 Thumb down 0 (0)

  6. Hi Ashod,

    error MSB6001: “CL.exe” command switch invalid。added option。keyword in the dictionary:“tmp”added keyword:“TMP”

    Visual Studio 2010 10.0.30319.1 RTMRel

    But WITHOUT installed Windows SDK 7.1, Visual Studio 2010 SP1, nor Visual C++ 2010 SP1 Compiler Update for the Windows SDK 7.1

    Did the error occurred due to without installation?

    Like or Dislike: Thumb up 0 Thumb down 0 (0)

    • Hi,

      I have never tried without the service pack or SDK, but the error looks unexpected. I don’t see any reason why you should get such an error without the updates. Look in the .tlog files (find them in the obj folder in the build output folder) for more information and the full command-line. May be something else is messing up the command passed to CL.

      -Ash

      Like or Dislike: Thumb up 0 Thumb down 0 (0)

      • error MSB3073 shown in the .log file such as WebKit-r108038\WebKitBuild\Release_Cairo_CFLite\obj\WebKit\WebKit2.log

        I found Ed replied the same error MSB but perhaps due to different reason.

        What I set
        set CYGWIN_SOURCE_DIR=C:\cygwin
        set CYGWIN_DIR=C:\cygwin_dir

        and WebKit2.log shown as below:

        … 2012/2/23 9:24:53。
        1>… “D:\project\local\WebKit-r108038\Source\WebKit2\win\WebKit2.vcxproj”…。
        1>InitializeBuildStatus:
        … “C:\cygwin_dir\home\zhaixiang\WebKit-r108038\WebKitBuild\Release_Cairo_CFLite\obj\WebKit\WebKit.unsuccessfulbuild” Touch…。
        PreBuildEvent:
        REM Do not edit from the Visual Studio IDE! Customize via a WebKitPreBuild.cmd file.
        if not exist “D:\project\local\WebKit-r108038\Source\WebKit2\win\WebKitPreBuild.cmd” exit /b

        set CONFIGURATIONBUILDDIR=C:\cygwin_dir\home\zhaixiang\WebKit-r108038\WebKitBuild\Release_Cairo_CFLite
        set CONFIGURATIONNAME=Release_Cairo_CFLite
        set INPUTDIR=D:\project\local\WebKit-r108038\Source\WebKit2\win\
        set INPUTFILENAME=WebKit
        set INPUTPATH=D:\project\local\WebKit-r108038\Source\WebKit2\win\WebKit
        set INTDIR=C:\cygwin_dir\home\zhaixiang\WebKit-r108038\WebKitBuild\Release_Cairo_CFLite\obj\WebKit\
        set LIBRARYCONFIGSUFFIX=
        set OUTDIR=C:\cygwin_dir\home\zhaixiang\WebKit-r108038\WebKitBuild\Release_Cairo_CFLite\bin\
        set PLATFORMNAME=Win32
        set PROJECTDIR=D:\project\local\WebKit-r108038\Source\WebKit2\win\
        set PROJECTFILENAME=WebKit2.vcxproj
        set PROJECTNAME=WebKit
        set PROJECTPATH=D:\project\local\WebKit-r108038\Source\WebKit2\win\WebKit2.vcxproj
        set SOLUTIONDIR=D:\project\local\WebKit-r108038\Source\WebKit\win\WebKit.vcproj\
        set SOLUTIONFILENAME=WebKit.sln
        set SOLUTIONNAME=WebKit
        set SOLUTIONPATH=D:\project\local\WebKit-r108038\Source\WebKit\win\WebKit.vcproj\WebKit.sln
        set TARGETDIR=C:\cygwin_dir\home\zhaixiang\WebKit-r108038\WebKitBuild\Release_Cairo_CFLite\bin\
        set TARGETEXT=.dll
        set TARGETFILENAME=WebKit.dll
        set TARGETPATH=C:\cygwin_dir\home\zhaixiang\WebKit-r108038\WebKitBuild\Release_Cairo_CFLite\bin\WebKit.dll
        set WEBKITCONFIGSUFFIX=
        set WEBKITDLLCONFIGSUFFIX=

        REM If any of the above variables didn’t exist previously and
        REM were set to an empty string, set will set the errorlevel to 1,
        REM which will cause the project-specific script to think the build
        REM has failed. This cmd /c call will clear the errorlevel.
        cmd /c

        “D:\project\local\WebKit-r108038\Source\WebKit2\win\WebKitPreBuild.cmd”

        :VCEnd
        /usr/bin/bash
        1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(103,5): error MSB3073: “REM Do not edit from the Visual Studio IDE! Customize via a WebKitPreBuild.cmd file.
        C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(103,5): error MSB3073: if not exist “D:\project\local\WebKit-r108038\Source\WebKit2\win\WebKitPreBuild.cmd” exit /b
        C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(103,5): error MSB3073:
        C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(103,5): error MSB3073: set CONFIGURATIONBUILDDIR=C:\cygwin_dir\home\zhaixiang\WebKit-r108038\WebKitBuild\Release_Cairo_CFLite
        C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(103,5): error MSB3073: set CONFIGURATIONNAME=Release_Cairo_CFLite
        C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(103,5): error MSB3073: set INPUTDIR=D:\project\local\WebKit-r108038\Source\WebKit2\win\
        C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(103,5): error MSB3073: set INPUTFILENAME=WebKit
        C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(103,5): error MSB3073: set INPUTPATH=D:\project\local\WebKit-r108038\Source\WebKit2\win\WebKit
        C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(103,5): error MSB3073: set INTDIR=C:\cygwin_dir\home\zhaixiang\WebKit-r108038\WebKitBuild\Release_Cairo_CFLite\obj\WebKit\
        C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(103,5): error MSB3073: set LIBRARYCONFIGSUFFIX=
        C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(103,5): error MSB3073: set OUTDIR=C:\cygwin_dir\home\zhaixiang\WebKit-r108038\WebKitBuild\Release_Cairo_CFLite\bin\
        C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(103,5): error MSB3073: set PLATFORMNAME=Win32
        C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(103,5): error MSB3073: set PROJECTDIR=D:\project\local\WebKit-r108038\Source\WebKit2\win\
        C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(103,5): error MSB3073: set PROJECTFILENAME=WebKit2.vcxproj
        C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(103,5): error MSB3073: set PROJECTNAME=WebKit
        C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(103,5): error MSB3073: set PROJECTPATH=D:\project\local\WebKit-r108038\Source\WebKit2\win\WebKit2.vcxproj
        C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(103,5): error MSB3073: set SOLUTIONDIR=D:\project\local\WebKit-r108038\Source\WebKit\win\WebKit.vcproj\
        C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(103,5): error MSB3073: set SOLUTIONFILENAME=WebKit.sln
        C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(103,5): error MSB3073: set SOLUTIONNAME=WebKit
        C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(103,5): error MSB3073: set SOLUTIONPATH=D:\project\local\WebKit-r108038\Source\WebKit\win\WebKit.vcproj\WebKit.sln
        C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(103,5): error MSB3073: set TARGETDIR=C:\cygwin_dir\home\zhaixiang\WebKit-r108038\WebKitBuild\Release_Cairo_CFLite\bin\
        C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(103,5): error MSB3073: set TARGETEXT=.dll
        C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(103,5): error MSB3073: set TARGETFILENAME=WebKit.dll
        C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(103,5): error MSB3073: set TARGETPATH=C:\cygwin_dir\home\zhaixiang\WebKit-r108038\WebKitBuild\Release_Cairo_CFLite\bin\WebKit.dll
        C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(103,5): error MSB3073: set WEBKITCONFIGSUFFIX=
        C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(103,5): error MSB3073: set WEBKITDLLCONFIGSUFFIX=
        C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(103,5): error MSB3073:
        C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(103,5): error MSB3073: REM If any of the above variables didn’t exist previously and
        C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(103,5): error MSB3073: REM were set to an empty string, set will set the errorlevel to 1,
        C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(103,5): error MSB3073: REM which will cause the project-specific script to think the build
        C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(103,5): error MSB3073: REM has failed. This cmd /c call will clear the errorlevel.
        C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(103,5): error MSB3073: cmd /c
        C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(103,5): error MSB3073:
        C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(103,5): error MSB3073: “D:\project\local\WebKit-r108038\Source\WebKit2\win\WebKitPreBuild.cmd”
        C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(103,5): error MSB3073:
        C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(103,5): error MSB3073: :VCEnd” QUIT, RETURN 1。
        1>… “D:\project\local\WebKit-r108038\Source\WebKit2\win\WebKit2.vcxproj”… FAILURE。

        Like or Dislike: Thumb up 0 Thumb down 0 (0)

        • WebKit2 is failing because a previous project failed to build. That’s where you need to look. Build again, and this time look for the log of the first project that fails. You’ll find that it’s not WebKit2. It’s most probably WebCore. Let me know your findings.

          Like or Dislike: Thumb up 0 Thumb down 0 (0)

        • I have same issues. Have you found a way to overcome it?

          Like or Dislike: Thumb up 0 Thumb down 0 (0)

    • Hi Ashod / xzhai ,

      “error MSB6001: “CL.exe” command switch invalid。added option。keyword in the dictionary:“tmp”added keyword:“TMP” ”
      After reading some forums online, I found that TMP env var is present in WINDOWS and is also created by cygwin causing this error of duplicate vars. I commented the code to set new TMP var in cygwin installation folder – FILENAME : “c:/cygwin/etc/profile” search for TMP and comment the lines where it is reassigned.

      Hope it helps.

      Like or Dislike: Thumb up 1 Thumb down 0 (+1)

      • which lines are “the lines where it is reassigned.”?
        i commented line 44 to 50:

        ORIGINAL_TMP=$TMP
        ORIGINAL_TEMP=$TEMP
        unset TMP TEMP
        tmp=$(cygpath -w “$ORIGINAL_TMP” 2> /dev/null)
        temp=$(cygpath -w “$ORIGINAL_TEMP” 2> /dev/null)
        TMP=”/tmp”
        TEMP=”/tmp”

        but it seems doesn’t work. wait for your reply~

        Like or Dislike: Thumb up 2 Thumb down 0 (+2)

        • Hi LZL,

          I got the same error, you also have to consider the line-133, which is

          export PATH MANPATH INFOPATH USER TMP TEMP PRINTER HOSTNAME PS1 SHELL tmp temp

          Besides what you have done, I also remove the TMP and TEMP from the line, which would be

          #export PATH MANPATH INFOPATH USER TMP TEMP PRINTER HOSTNAME PS1 SHELL tmp temp
          export PATH MANPATH INFOPATH USER PRINTER HOSTNAME PS1 SHELL tmp temp

          And it works (but I still don’t know why it works..)

          Like or Dislike: Thumb up 0 Thumb down 0 (0)

          • Hi Xujie,

            I do remember writing about this particular conflict. It has to do with the fact that Cygwin (and *ix, of course) is case-sensitive but Windows isn’t. So TMP and tmp end up overwriting one another, depending on order.

            Like or Dislike: Thumb up 0 Thumb down 0 (0)

    • Hi,

      I’ve got the same error:

      2>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.Targets(153,5): error MSB6001: Invalid command line switch for “CL.exe”. Item has already been added. Key in dictionary: ‘TMP’ Key being added: ‘tmp’
      2>Done executing task “CL” — FAILED. (TaskId:18)

      And I have not installed Windows SDK 7.1 too. I’ve install Visual Studio 2010 SP1 only

      Did you find any solution of this problem?

      Like or Dislike: Thumb up 0 Thumb down 0 (0)

      • Alexei,

        Please see Priyanka’s suggestion. It might help.

        Like or Dislike: Thumb up 0 Thumb down 0 (0)

      • I got it :) Thanks for this great article.

        ========== Build: 34 succeeded, 0 failed, 0 up-to-date, 1 skipped ==========

        ===========================================================
        WebKit is now built (13m:34s).
        To run Safari with this newly-built code, use the
        “../../../../home/AlexeiBykov/webkit-r106194/Tools/Scripts/run-safari” script.
        ===========================================================

        The solution of my problem is here: http://social.msdn.microsoft.com/Forums/en-US/msbuild/thread/9d8b9d4a-c453-4f17-8dc6-838681af90f4
        I just killed all instances of MSBuild.exe before start to build Webkit.

        Like or Dislike: Thumb up 0 Thumb down 0 (0)

        • you mean that i should kill all MSBuild.exe in my taskmgr before building webkit?
          before i build webkit, i didn’t see any msbuild.exe in taskmgr. during the building, i can see only one msbuild.exe…..
          how should i solve my problem……..

          Build started 2012/9/24 18:28:14.
          InitializeBuildStatus:
          Creating “C:\WebKit-r128959\WebKitBuild\Debug\obj\MiniBrowserLauncher\MiniBrow
          serLauncher.unsuccessfulbuild” because “AlwaysCreate” was specified.
          C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.
          Targets(153,5): error MSB6001: Invalid command line switch for “CL.exe”. Item ha
          s already been added. Key in dictionary: ‘tmp’ Key being added: ‘TMP’

          Like or Dislike: Thumb up 0 Thumb down 0 (0)

  7. [...] 建议使用 VS2005,毕竟是 webkit 使用的版本,如果使用 vs2008,2010 的话亦可,只是要做修改,我之后有时间会补上。如果你已经等不及了,可以先参考这位仁兄的文章:http://blog.ashodnakashian.com/2012/01/building-webkit-on-windows-7-with-vs2010/ [...]

    Like or Dislike: Thumb up 0 Thumb down 0 (0)

  8. Hi,
    Your version of pdevenv script inserts empty lines into WebKitLibraries\win\tools\vsprops\common.props before each build.
    I have replaced line 56
    $replace_string = “s/\\(.*?)\\//g”; # Delete MP compilation.

    by this code:
    $replace_string = “s/^\\s*\\(.*?)\\[\\r\\n]+//gm”; # Delete MP compilation.

    Like or Dislike: Thumb up 0 Thumb down 0 (0)

  9. Hi,
    I have built webkit successfully on my own machine. Today I tried to build webkit on a different machine and got this error:

    4> VTableSpectrum.cpp
    4>e:\pa\git\webkit\source\javascriptcore\heap\CopiedBlock.h(46): error C3861: ‘is8ByteAligned’: identifier not found
    4>e:\pa\git\webkit\source\javascriptcore\heap\CopiedAllocator.h(60): error C3861: ‘is8ByteAligned’: identifier not found
    4>e:\pa\git\webkit\source\javascriptcore\heap\CopiedAllocator.h(64): error C3861: ‘is8ByteAligned’: identifier not found
    4> MarkStack.cpp

    is8ByteAligned identifier is defined in the file wtf/StdLibExtras.h but this file is included after CopiedBlock.h Now I can’t understand how this is work on my machine. How I can eliminate this error?

    Like or Dislike: Thumb up 0 Thumb down 0 (0)

    • Hi Alexei,

      Check that you are working on the exact same revision. I doubt that this is the reason in your case, but sometimes different revisions may have broken code. On a more notable point, check that you have (and are using) the same compiler and tools versions with the same settings (including SP, SDK, Cygwin and project settings).

      After checking the above, see if there is a project before javascriptcore that is failing. If so, then you need to fix that first. Chances are you’re on Win7 (or vista) and some of the perl scripts are failing. These scripts generate some of the header files. If you try to rebuild you might not see these errors. It’s best that you do a clean build and look through the logs.

      Good Luck.

      Like or Dislike: Thumb up 0 Thumb down 0 (0)

  10. I have the same problem. and.. i haven’t installed Windows SDK 7.1, Visual Studio 2010 SP1, nor Visual C++ 2010 SP1 Compiler Update for the Windows SDK 7.1. Did you find any solution of this problem?

    Like or Dislike: Thumb up 0 Thumb down 0 (0)

  11. Hi,

    I am reading your article and I think you should use Visual Studio command prompt and not normal prompt if you want the right var env like VSINSTALLDIR.

    Like or Dislike: Thumb up 0 Thumb down 0 (0)

  12. [...] it’d be fun to taste my own dog food. Starting with a newly installed Windows 7 64-bit and my previous walk-through I set to build WebKit.In this writing:Software SetupPreparationElevated ModeBuildingSuccess, At [...]

    Like or Dislike: Thumb up 0 Thumb down 0 (0)

  13. Hi thank you for this post. Very useful and saved me a lot of time. I used a different revision and had a few issues, figured that this might help someone else:

    1. I used webkit source r120264
    2. I had an compile issue in webcore where “\StorageInfo.xx” wasn’t found. Quick/dirty fix:
    move files under “C:\Cygwin\home\\WebKit-r120264\Source\WebCore\Modules\quota” into “C:\Cygwin\home\\WebKit-r120264\Source\WebCore\storage”
    3. When trying to run “WinLauncher” after build completes, a dependency on safari/apple exist.
    Solution: In /Tools/win/DllLaunchermain.cpp Comment out:


    //if (!modifyPath(programName))
    // return 1;
    To not check for apple products.

    All was good at this point, but … if you try to deploy on a clean (none dev) machine you might get into side-by-side assembly trouble. This is because many of the downloaded requirement dlls have embedded manifests requiring a particular version of microsoft’s runtime.
    I figured you have three choices:
    1. Install the required runtime (i couldn’t get this to work without install VS2005 and security patches onto my nice clean win7 box … yuck and not something you can expect end users to do)
    2. Change the manifest info and/or recompile requirements libs (nice but have fun with that one)
    3. Obtain the required files and add a manifest file of your own.

    So option #3:

    Tha version embedded in the requirement lib dlls (at the time I downloaded) was: 8.0.50727.6195. So you’ll have to find the required files (i pulled them off a system which had VS2005 express installed)

    step #1 look in: \windows\winsxs\x86_Microsoft.VC80.CRT_* and copy msvcr80.dll, msvcp80.dll, msvcm80.dll into whereever you want to run “winlauncher.exe” from

    step #2 Add the following text into a file named “Microsoft.VC80.CRT.manifest” also located in the same directory as “winlauncher.exe”


    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <noInheritable></noInheritable>
    <assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50727.6195" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    <file name="msvcr80.dll" hash="4be3fcf046c4941d7b439da6eb642431b5ff497a" hashalg="SHA1"><asmv2:hash xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"><dsig:Transforms><dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity"></dsig:Transform></dsig:Transforms><dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></dsig:DigestMethod><dsig:DigestValue>Q4Uf5GRMCh6zH+gPQnd38fABXvo=</dsig:DigestValue></asmv2:hash></file>
    <file name="msvcp80.dll" hash="f96d6d587819a28ad84cd32783968c7f75169a49" hashalg="SHA1"><asmv2:hash xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"><dsig:Transforms><dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity"></dsig:Transform></dsig:Transforms><dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></dsig:DigestMethod><dsig:DigestValue>lzYUrJYi1eqc3Wj+vOMljRlkCLY=</dsig:DigestValue></asmv2:hash></file>
    <file name="msvcm80.dll" hash="b8f788f913a88543f10e1b400e9ae3896676c903" hashalg="SHA1"><asmv2:hash xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"><dsig:Transforms><dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity"></dsig:Transform></dsig:Transforms><dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></dsig:DigestMethod><dsig:DigestValue>BMaQ6zIuI2qb7Sk3oEQwxv2jsT0=</dsig:DigestValue></asmv2:hash></file>
    </assembly>

    All this is kinda hacky, but I hope this saves someone the time.

    Like or Dislike: Thumb up 0 Thumb down 0 (0)

    • Thanks Chris.

      Some of the issues you hit are covered in my newer post Building WebKit with VS2012. The issue with WinLaunch checking for Safari even in WinCairo is submitted on WebKit bugzilla and there is a patch. As for the DLL hell, it was one my reasons for moving away from VS2005 in the first place.

      Cheers!

      Like or Dislike: Thumb up 0 Thumb down 0 (0)

  14. Hi,
    do i have to use –wincairo? i cannot reach dl.dropbox, so i cannot check last-modified date of the zip file relating to wincairo..
    what is the –wincairo for?
    can i go through the build with build-webkit only?

    Like or Dislike: Thumb up 0 Thumb down 0 (0)

    • I’ve downloaded the WinCairoRequirements.zip but the website is still blocked which means it’s not reachable for me.
      Maybe i should find another way ? looking forward to your reply.

      Like or Dislike: Thumb up 0 Thumb down 0 (0)

  15. Could i have your email address, Ashod? if i comment on here, it always says “Your comment is awaiting moderation.”…mine is [removed]
    i would be glad to have your mail~i’ve work on this for one week, but still cannot build it …. i really need some help~

    Like or Dislike: Thumb up 0 Thumb down 0 (0)

    • LZL,

      You can reach me from the Contract page. I’ll get back to you by mail. You can download the missing zip file from elsewhere I think. You can also get the sources, build them and place them manually in the right folder. As an advice, don’t bother fixing what’s not broken. If you don’t run into a specific problem that I ran into and fixed, then just ignore it (until you run into it). For example, no need to kill any process, that’s an issue you almost certainly won’t hit because I fixed it in my patch.

      Good luck!

      Like or Dislike: Thumb up 0 Thumb down 0 (0)

  16. Mr. ashod,
    Could you kindly help me?
    In the script, vs2010-build-env.cmd
    which folder should be set as ‘CYGWIN_SOURCE_DIR’ ?

    After extracting ‘cygwin-downloader.zip’, \cygwin-downloader should be CYGWIN_SOURCE_DIR??

    thanks in advance.

    Like or Dislike: Thumb up 0 Thumb down 0 (0)

  17. [...] Windows 7 and created a guide and an automated patch file in order to do it. The guide can be found here. As of yet I haven’t quite been able to succeed my build yet, however I have seen progress as [...]

    Like or Dislike: Thumb up 0 Thumb down 0 (0)

  18. Hi

    I faced the below compilation issue. Please kindly help me to resolve this issue.

    Administrator@Client_408 ~/WebKit-r106194
    $ build-webkit –wincairo
    Checking Last-Modified date of WinCairoRequirements.zip…
    Couldn’t check Last-Modified date of new WinCairoRequirements.zip.
    Please ensure that http://idisk.mac.com/bfulgham-Public/WinCairoRequirements.zip
    is reachable.
    Unable to check Last-Modified date and no version of WinCairoRequirements to fal
    l back to.
    Died at Tools/Scripts/update-webkit-wincairo-libs line 40.
    Died at /home/Administrator/WebKit-r106194/Tools/Scripts/build-webkit line 561.

    Best regards,
    vinose.

    Like or Dislike: Thumb up 0 Thumb down 0 (0)

    • Hi vinose,

      Please find a description and solution to this problem in more recent posts on building WebKit. In particular, that URL is no longer valid. You will find a patch that I created that solves this issue in newer posts.

      Like or Dislike: Thumb up 1 Thumb down 0 (+1)

  19. Hi Ashod,

    thanks for the input. I commented the line in as per the note & move ahead.

    facing the below errors.

    sss_eng@Client_408 ~/WebKit-r106194
    $ build-webkit –wincairo
    sh: -c: line 0: unexpected EOF while looking for matching `”‘
    sh: -c: line 1: syntax error: unexpected end of file
    *************************************************************
    Cannot find ‘/Common7/IDE/VCExpress.exe’
    Please execute the file ‘vcvars32.bat’ from
    ‘C:\Program Files (x86)\Microsoft Visual Studio 8\VC\bin\’
    to setup the necessary environment variables.
    *************************************************************
    Died at /home/sss_eng/WebKit-r106194/Tools/Scripts/webkitdirs.pm line 1501.

    Please suggest me to resolve this issue.

    Best Regards,
    Vinose.

    Like or Dislike: Thumb up 0 Thumb down 0 (0)

    • In the pdevenv file, you will need to add a case for loading the vcvars32.bat file as suggested by the error message. Since you are using the express edition, I think it’s not supported automatically. Read the pdevenv file thoroughly and you’ll find it not too difficult to add support for express.

      I wish I could help more, but I don’t have an express edition handy to use.

      Like or Dislike: Thumb up 1 Thumb down 0 (+1)

  20. Hi Ashod,

    thanks for the quick response.

    I will check the pdevenv file. But i am using Microsoft Visual Studio 10.0 not express edition.

    Please advise if i missed any env setup.

    Best Regards,
    Vinose.

    Like or Dislike: Thumb up 0 Thumb down 0 (0)

    • In that case, it seems that the scripts are unable to identify that you have VS2010 and they are falling back on express as a last resort. Please go through the post again and don’t forget to apply the patch correctly. Most probably you are missing something, or have a broken VS installation (correct environment variables must be in place for the scripts to detect the installation and folders).

      Like or Dislike: Thumb up 0 Thumb down 0 (0)

  21. Hi Ashod,

    Problem is due to the $vsInstallDir variable not has valid path after the below line is executed in webkitdirs.pm
    chomp($vsInstallDir = `cygpath “$vsInstallDir”`)# if isCygwin();

    I just commented the above line & directly assign it as shown below it resolved the above error.
    $vsInstallDir = “/cygdrive/c/Program Files (x86)/Microsoft Visual Studio 10.0/”;

    Please advice.

    Best Regards,
    Vinose.

    Like or Dislike: Thumb up 0 Thumb down 0 (0)

    • As suspected, the path isn’t found. Please look in the same script where the vsInstallDir is first set. Something is missing on your system or the script doesn’t support yet. You might need to change the script to detect it for you.

      Like or Dislike: Thumb up 0 Thumb down 0 (0)

  22. Hi Ashod,

    After this above modification. Build continues & produced the below error.

    sss_eng@Client_408 ~/WebKit-r106194
    $

    sss_eng@Client_408 ~/WebKit-r106194
    $ build-webkit –wincairo

    Before chomp………………………………………..
    ENV-VSINSTALLDIR ‘C:\Program Files (x86)\Microsoft Visual Studio 10.0\’
    VSINSTALLDIR ‘C:\Program Files (x86)\Microsoft Visual Studio 10.0\’
    After chomp………………………………………..
    VSINSTALLDIR ‘/cygdrive/c/Program Files (x86)/Microsoft Visual Studio 10.0/’
    VSINSTALLDIR ‘/cygdrive/c/Program Files (x86)/Microsoft Visual Studio 10.0/’
    BUILDPATH ‘/cygdrive/c/Program Files (x86)/Microsoft Visual Studio 10.0/Common7/IDE/devenv.com’
    Building results into: /home/sss_eng/WebKit-r106194/WebKitBuild
    WEBKITOUTPUTDIR is set to: E:\cygwin\home\sss_eng\WebKit-r106194\WebKitBuild
    WEBKITLIBRARIESDIR is set to: E:\cygwin\home\sss_eng\WebKit-r106194\WebKitLibraries\win
    /home/sss_eng/WebKit-r106194/Tools/Scripts/pdevenv win\WebKit.vcproj\WebKit.sln /build Release_Cairo_CFLite
    Using VS2010 toolchain.
    Upgrading solution file @ win\WebKit.vcproj\WebKit-vs2010.sln. Build will resume when done. Please be patient.
    Setting environment for using Microsoft Visual Studio 2010 x86 tools.

    Microsoft (R) Visual Studio Version 10.0.40219.1.
    Copyright (C) Microsoft Corp. All rights reserved.

    Information:
    This project/solution does not require conversion.
    Patching common.props…
    Disabling warning as error.
    Disabling warning C4396.
    Enabling multiprocess compile.
    Correcting WebCore.vcxproj…
    Setting environment for using Microsoft Visual Studio 2010 x86 tools.

    Microsoft (R) Visual Studio Version 10.0.40219.1.
    Copyright (C) Microsoft Corp. All rights reserved.
    1>—— Build started: Project: JavaScriptCoreGenerated, Configuration: Release_Cairo_CFLite Win32 ——
    1>Build started 2/1/2013 10:47:00 AM.
    1>Build:
    1> ‘C:\cygwin\bin\which.exe’ is not recognized as an internal or external command,
    1> operable program or batch file.
    1> touch “%ConfigurationBuildDir%\buildfailed”
    1>EXEC : cygwin warning :
    1> MS-DOS style path detected: E:\cygwin\home\sss_eng\WebKit-r106194\WebKitBuild\Release_Cairo_CFLite\buildfailed
    1> Preferred POSIX equivalent is: /cygdrive/e/cygwin/home/sss_eng/WebKit-r106194/WebKitBuild/Release_Cairo_CFLite/bui
    ldfailed
    1> CYGWIN environment variable option “nodosfilewarning” turns off this warning.
    1> Consult the user’s guide for more details about POSIX paths:
    1> http://cygwin.com/cygwin-ug-net/using.html#using-pathnames
    1> bash build-generated-files.sh “%ConfigurationBuildDir%” “E:\cygwin\home\sss_eng\WebKit-r106194\WebKitLibraries\w
    in”
    1> build-generated-files.sh: ../../../../Tools/Scripts/num-cpus: /usr/bin/perl: bad interpreter: Permission denied
    1> perl /cygdrive/d/WEBKIT~2/WEBKIT~2/Source/JAVASC~1/docs/make-bytecode-docs.pl /cygdrive/d/WEBKIT~2/WEBKIT~2/Source/J
    AVASC~1/interpreter/Interpreter.cpp docs/bytecode.html
    1> Can’t locate strict.pm in @INC (@INC contains: /usr/lib/perl5/site_perl/5.14/i686-cygwin-threads-64int /usr/lib/perl
    5/site_perl/5.14 /usr/lib/perl5/vendor_perl/5.14/i686-cygwin-threads-64int /usr/lib/perl5/vendor_perl/5.14 /usr/lib/perl
    5/5.14/i686-cygwin-threads-64int /usr/lib/perl5/5.14 /usr/lib/perl5/site_perl/5.10 /usr/lib/perl5/vendor_perl/5.10 /usr/
    lib/perl5/site_perl/5.8 .) at /cygdrive/d/WEBKIT~2/WEBKIT~2/Source/JAVASC~1/docs/make-bytecode-docs.pl line 3.
    1> BEGIN failed–compilation aborted at /cygdrive/d/WEBKIT~2/WEBKIT~2/Source/JAVASC~1/docs/make-bytecode-docs.pl line 3
    .
    1> /cygdrive/d/WEBKIT~2/WEBKIT~2/Source/JAVASC~1/DerivedSources.make:73: recipe for target `docs/bytecode.html’ failed
    1> make: *** [docs/bytecode.html] Error 2
    1>NMAKE : fatal error U1077: ‘bash’ : return code ’0×1′
    1> Stop.
    [/snip]

    Best Regards,
    Vinose.

    Like or Dislike: Thumb up 0 Thumb down 0 (0)

    • Look at the first error you got. That’s what you need to solve and try building again.

      > ‘C:\cygwin\bin\which.exe’ is not recognized as an internal or external command, operable program or batch file.

      Did you install Cygwin in the recommended way?

      Like or Dislike: Thumb up 0 Thumb down 0 (0)

  23. I got the source revision 145063 (webkit-1.11.91) and I tried to build using Win7 x64 / VS2010. For some reason, I VS2010 was not able to convert one of the projects. The XML report gave me this error.


    Conversion Report - ........ToolsWinLauncherWinLauncher.vcproj:
    Converting project file 'Z:Data_CodeWebkitToolsWinLauncherWinLauncher.vcproj'.
    Fail to convert 'Z:Data_CodeWebkitToolsWinLauncherWinLauncher.vcproj' to 'Z:Data_CodeWebkitToolsWinLauncherWinLauncher.vcxproj'. Please make sure that you have sufficient permissions for the source and destination file.
    Project upgrade failed.

    When I tried to use command-line /upgrade option, I got this output.

    $ pdevenv /upgrade 'Z:Data_CodeWebkitToolsWinLauncherWinLauncher.vcproj'
    Setting environment for using Microsoft Visual Studio 2010 x86 tools.

    Microsoft (R) Visual Studio Version 10.0.40219.1.
    Copyright (C) Microsoft Corp. All rights reserved.

    Some errors occurred during conversion. For more information, see the
    Conversion Report.

    I looked at the .vcproj file, but I couldn't find the file that was missing. Various internet searches suggest that the error happens when VS2010 can't find one of its own executables. I'm very confused about the cause of this error.

    If I keep WinLauncher in the solution, the VS2010 gives me this error.


    Setting environment for using Microsoft Visual Studio 2010 x86 tools.

    Microsoft (R) Visual Studio Version 10.0.40219.1.
    Copyright (C) Microsoft Corp. All rights reserved.

    Solution file 'Z:Data_CodeWebkitSourceWebKitwinWebKit.vcprojWebKit.sln' is from a previous version of this appli
    cation and must be converted in order to build in this version of the application. To convert the solution, open the sol
    ution in this version of the application.

    ===== BUILD FAILED ======

    I I remove WinLauncher from the solution, I get a bunch of different build errors, but it's clear that VS2010 is trying to build the solution.

    Do you have any advice or experience with the error that I'm seeing?

    Like or Dislike: Thumb up 0 Thumb down 0 (0)

    • sorry about lack of [snip] or other textual clues. i thought the ‘code’ tag would have made the text segments a bit more distinct.

      Like or Dislike: Thumb up 0 Thumb down 0 (0)

    • Hi Nelson Kidd,

      Unfortunately, I don’t have much to go on. There could be many reasons for this problem. I suggest you try reading the upgrade log and report more closely for clues as to what failed to convert exactly. Also, this is a small utility that is no more than a frame to host the WebKit COM for testing purposes. It should have no dependencies (AFAIR) and you should remove it from the solution without problems. Try to see what breaks when you remove it and take that as a hint. There might be other problems with your VS installation, but I wouldn’t be too paranoid without more evidence.

      Like or Dislike: Thumb up 0 Thumb down 0 (0)

  24. hello, i want build webkit on xp with vs2010
    did the vs2010-build-env.cmd can work?

    Like or Dislike: Thumb up 0 Thumb down 0 (0)

  25. Hi – I am an old style proggy, mainframe Cobol vintage. Now unemployed / early retired.
    For learning I built a Visual Basic bot for the Betfair trading platform. Then adapted it to also use Betdaq.
    For learning with C, I built Firefox – but there no VS project to play with after compilation.
    .
    Just spent a lot of time over 2 weeks trying to compile QtWeb – gave up today.
    It appears to me that MS have managed to sabotage it – so that QT Framework people can only use ActiveX – and not Webkit.
    I would be interested to know if you have any knowledge of what happened to end to QtWeb project ?
    Hate to admit defeat !

    So I will now try your instructions for Webkit :-)

    Carl Goldsworthy

    Like or Dislike: Thumb up 0 Thumb down 0 (0)

    • Hi Carl,

      WebKit builds into a core (static) library and a COM DLL. ActiveX is essentially COM with a fancy name. I’m fairly certain you can load and call COM from Qt, so WebKit shouldn’t be any different. There is a learning curve with COM in general. In fact it’s not the most trivial of frameworks, but with Qt samples and googling around, you should be fine.

      I don’t know what QtWeb is (looks like a browser project using/for Qt) but there used to be a Qt public source code that one could browse to see the implementation and actually compile themselves. That might be helpful to see what is the problem.

      Let me know how it goes and if you need more help. Good luck!

      Like or Dislike: Thumb up 0 Thumb down 0 (0)

      • Yes, WebKit was a browser project in Qt Framework using the webkit engine.
        At some point during a company takeover, it was quietly dropped, without any reason given.

        I was looking for a lightweight browser – with code to play with, and found QtWeb.
        http://www.techsupportalert.com/best-free-web-browser-lightweight.htm
        The Qtweb zip was 13mb.
        However the expanded Webkit source is 15,000 files and 215mb.
        Their are also external Qt dependencies to consider.

        After compilation Firefox was 111,000 files and 2.7gb in build directory.
        But then, any amount of the source files may not be coding.

        But neither looks lightweight !?
        I am developing my own multi language IDE – and wanted working code to use as a test bed.
        And yes , I know, an A4 pad and pencil does that !
        Ideally able to rework at least some, but preferrably all the code then compile,link and go in a minute.
        Firefox is 3 hours full compile – sounds like Webkit is in the same ballpark.
        My feeling is that the development process is overly complex.

        Thankyou for the info, I will consider my options.

        Carl Goldsworthy

        Like or Dislike: Thumb up 0 Thumb down 0 (0)

        • I guess any browser that can show modern webpages correctly will not be lightweight by definition. So that word now really means “without extras.”

          I don’t know how fast FF compiles, but it should be comparable to WebKit, which incidentally takes less than 8 minutes on my dev machine. I expect an average (a few years old) quad-core machine to build it in under an hour. Haven’t built FF since it was still called Mozilla (yup, a decade ago).

          You botched the name of the browser project in Qt. I’m interested in learning its name. Browsers aren’t toy projects, so you might want to find something more manageable if you don’t have a particular reason.

          Like or Dislike: Thumb up 0 Thumb down 0 (0)

  26. The QtWeb project –
    http://www.qtweb.net/
    https://code.google.com/p/qtweb/

    What I was looking for is a complex multi person, multi language project – to aid in the development of a new IDE.
    An OS is difficult to test – a browser seems a / (more than) sufficient challenge.
    I will experiment with manual partial compilation – before importing code to IDE.

    Carl Goldsworthy

    Like or Dislike: Thumb up 0 Thumb down 0 (0)

  27. Hi, Ashod. I tried your approach and I get the error below when I run the vs2010-build-env.cmd script. It seems like it still wants the 2003 R2 SDK even though I have the Windows 7.1 Platform SDK installed. Is there something I need to do to tell webkit not to look for 2003 R2 SDK?

    Cannot find registry entry ‘HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/MicrosoftSDK/nstalledSDKs/D2FF9F89-8AA2-4373-8A31-C838BF4DBBE1′.
    Please download and install the Microsoft Windows Server 2003 R2
    Platform SDK from .

    Like or Dislike: Thumb up 0 Thumb down 0 (0)

  28. Hello,

    I’m not sure why but I followed your article to a T and I am using your build cmd file. (Minus the part with the linking/stuff for cygwin as my webkit is inside my home folder). But no matter what I add as an environment variable my build results always end up at C: rather then the WebKit build directory I specify.

    That appears to be causing a ton of errors of which are probably related to paths.

    I have a brand new Windows 7 machine with 2010 ultimate on it. I’ve added…

    WEBKIT_OUTPUTDIR
    WEBKITOUTPUTDIR
    WEBKITLIBRARIESDIR
    WEBKIT_LIBRARIESDIR
    WEBKIT_SOURCE
    WEBKITSOURCE
    VSINSTALLDIR

    I don’t know what I am missing +_+

    Like or Dislike: Thumb up 0 Thumb down 0 (0)

    • Steve,

      I suspect you set the output folder incorrectly. Please see my batch file and how I set it up. I strongly suggest you get the latest patch from the vs2012 article (it’ll work with 2010) and at most just comment the lines that sym-link the folder, making sure everything else is correct.

      Like or Dislike: Thumb up 0 Thumb down 0 (0)

  29. hi, I got the same problem as below:
    8>C:Program Files (x86)MSBuildMicrosoft.Cpp 4.0Microsoft.MakeFile.Targets(38,5): error MSB3073: The command “C:cygwininwhich.exe bash
    you solved the problem by extracting the source file by “7-zip”. I did the same thing, re-extracted with “7-zip”, and re-builded, the same error occured. I compared the files extracted with two different way, no difference found.

    Like or Dislike: Thumb up 0 Thumb down 0 (0)

  30. help!! win7 64bit complie error below:
    ./CSSGrammar.y:62.1: error: syntax error, unexpected end of file

    source svn version:157783 https://svn.webkit.org/repository/webkit/trun
    IDE: VS2010

    Like or Dislike: Thumb up 0 Thumb down 0 (0)

 Leave a Reply

(required)

(required, not public)

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

 

QR Code Business Card