| Differences between
and this patch
- a/Source/JavaScriptCore/ChangeLog +17 lines
Lines 1-3 a/Source/JavaScriptCore/ChangeLog_sec1
1
2017-11-17  Mark Salisbury  <mark.salisbury@hp.com>
2
3
        [Win] forwarding headers should not be copies
4
        https://bugs.webkit.org/show_bug.cgi?id=179814
5
6
        Reviewed by Konstantin Tokarev.
7
8
        Forwarding headers created by JavaScriptCore are currently copies
9
        of files, not files which have a #include path to the real header file.
10
11
        The problem with this approach is that if the same file ends up being
12
        included twice, but at different paths, the #pragma once does nothing
13
        and compile errors occur from multiply defined symbols.
14
15
        * PlatformWin.cmake:
16
        * Scripts/make-forwarding-headers.pl: Added.
17
1
2017-11-15  Ryan Haddad  <ryanhaddad@apple.com>
18
2017-11-15  Ryan Haddad  <ryanhaddad@apple.com>
2
19
3
        Unreviewed, rolling out r224863.
20
        Unreviewed, rolling out r224863.
- a/Source/JavaScriptCore/PlatformWin.cmake -5 / +6 lines
Lines 34-48 file(COPY a/Source/JavaScriptCore/PlatformWin.cmake_sec1
34
)
34
)
35
35
36
file(MAKE_DIRECTORY ${FORWARDING_HEADERS_DIR}/JavaScriptCore)
36
file(MAKE_DIRECTORY ${FORWARDING_HEADERS_DIR}/JavaScriptCore)
37
38
set(JavaScriptCore_PRE_BUILD_COMMAND "${CMAKE_BINARY_DIR}/DerivedSources/JavaScriptCore/preBuild.cmd")
37
set(JavaScriptCore_PRE_BUILD_COMMAND "${CMAKE_BINARY_DIR}/DerivedSources/JavaScriptCore/preBuild.cmd")
39
file(REMOVE "${JavaScriptCore_PRE_BUILD_COMMAND}")
38
file(REMOVE "${JavaScriptCore_PRE_BUILD_COMMAND}")
40
foreach (_directory ${JavaScriptCore_FORWARDING_HEADERS_DIRECTORIES})
39
foreach (_directory ${JavaScriptCore_FORWARDING_HEADERS_DIRECTORIES})
41
    file(APPEND "${JavaScriptCore_PRE_BUILD_COMMAND}" "@xcopy /y /d /f \"${JAVASCRIPTCORE_DIR}/${_directory}/*.h\" \"${FORWARDING_HEADERS_DIR}/JavaScriptCore\" >nul 2>nul\n")
40
    file(APPEND "${JavaScriptCore_PRE_BUILD_COMMAND}" "perl ${JAVASCRIPTCORE_DIR}/Scripts/make-forwarding-headers.pl --search-path=\"${JAVASCRIPTCORE_DIR}/${_directory}/*.h\" --include-path=\"${JAVASCRIPTCORE_DIR}/${_directory}\" --forwarding-dir=\"${FORWARDING_HEADERS_DIR}/JavaScriptCore\"\n")
41
    file(APPEND "${JavaScriptCore_PRE_BUILD_COMMAND}" "if %errorlevel% NEQ 0 exit /b 1\n")
42
endforeach ()
42
endforeach ()
43
44
set(JavaScriptCore_POST_BUILD_COMMAND "${CMAKE_BINARY_DIR}/DerivedSources/JavaScriptCore/postBuild.cmd")
43
set(JavaScriptCore_POST_BUILD_COMMAND "${CMAKE_BINARY_DIR}/DerivedSources/JavaScriptCore/postBuild.cmd")
45
file(WRITE "${JavaScriptCore_POST_BUILD_COMMAND}" "@xcopy /y /d /f \"${DERIVED_SOURCES_DIR}/JavaScriptCore/*.h\" \"${FORWARDING_HEADERS_DIR}/JavaScriptCore\" >nul 2>nul\n")
44
file(WRITE "${JavaScriptCore_POST_BUILD_COMMAND}" "perl ${JAVASCRIPTCORE_DIR}/Scripts/make-forwarding-headers.pl --search-path=\"${DERIVED_SOURCES_DIR}/JavaScriptCore/*.h\" --include-path=\"${DERIVED_SOURCES_DIR}/JavaScriptCore\" --forwarding-dir=\"${FORWARDING_HEADERS_DIR}/JavaScriptCore\"\n")
46
file(APPEND "${JavaScriptCore_POST_BUILD_COMMAND}" "@xcopy /y /d /f \"${DERIVED_SOURCES_DIR}/JavaScriptCore/inspector/*.h\" \"${FORWARDING_HEADERS_DIR}/JavaScriptCore\" >nul 2>nul\n")
45
file(APPEND "${JavaScriptCore_POST_BUILD_COMMAND}" "if %errorlevel% NEQ 0 exit /b 1\n")
46
file(APPEND "${JavaScriptCore_POST_BUILD_COMMAND}" "perl ${JAVASCRIPTCORE_DIR}/Scripts/make-forwarding-headers.pl --search-path=\"${DERIVED_SOURCES_DIR}/JavaScriptCore/inspector/*.h\" --include-path=\"${DERIVED_SOURCES_DIR}/JavaScriptCore/inspector\" --forwarding-dir=\"${FORWARDING_HEADERS_DIR}/JavaScriptCore\"\n")
47
file(APPEND "${JavaScriptCore_POST_BUILD_COMMAND}" "if %errorlevel% NEQ 0 exit /b 1\n")
47
48
48
set(JavaScriptCore_OUTPUT_NAME JavaScriptCore${DEBUG_SUFFIX})
49
set(JavaScriptCore_OUTPUT_NAME JavaScriptCore${DEBUG_SUFFIX})
- a/Source/JavaScriptCore/Scripts/make-forwarding-headers.pl -1 / +36 lines
Line 0 a/Source/JavaScriptCore/Scripts/make-forwarding-headers.pl_sec1
0
- 
1
use strict;
2
use warnings;
3
4
use File::Basename;
5
use File::Spec;
6
use Getopt::Long;
7
8
my $searchPath;
9
my $includePath;
10
my $forwardingDir;
11
12
my %options = (
13
    'search-path=s' => \$searchPath,
14
    'include-path=s' => \$includePath,
15
    'forwarding-dir=s' => \$forwardingDir,
16
);
17
GetOptions (%options);
18
19
my @headers = glob($searchPath);
20
foreach my $header (@headers) {
21
    my $file = basename($header);
22
    my $forwardingHeader = File::Spec->join($forwardingDir, $file);
23
    my $fileContent = "#include \"$includePath/$file\"";
24
    if (-e $forwardingHeader) {
25
        open (my $fh, '<', $forwardingHeader) or die("Unable to open $forwardingHeader ($!)");
26
        my $existingContent = <$fh>;
27
        close($fh);
28
        $fileContent eq $existingContent or die("$forwardingHeader already exists and has content:\n  $existingContent\nexpected:\n  $fileContent\n");
29
    }
30
    else {
31
        open(my $fh, '>', $forwardingHeader);
32
        print "Creating forwarding header $forwardingHeader with #include \"$includePath/$file\"\n";
33
        print $fh $fileContent;
34
        close($fh) or die("Failed to close $forwardingHeader ($!)");
35
    }
36
}

Return to Bug 179814