Changeset 224566 in webkit


Ignore:
Timestamp:
Nov 7, 2017 11:23:38 PM (6 years ago)
Author:
Carlos Garcia Campos
Message:

[GTK][WPE] Build inspector resources using copy-user-interface-resources.pl script
https://bugs.webkit.org/show_bug.cgi?id=179317

Reviewed by Michael Catanzaro.

Source/WebKit:

This is the script used by Apple and it has several advantages:

  • It allows to combine and minify most of the js and css files, which improves performance and binary size.
  • It removes the debug resources and assertions in production builds.
  • It allows to remove the test resources in production builds.

The patch also moves the common cmake code to generate the resources to a new file InspectorGResources.cmake included
by GTK+ and WPE platform cmake files.

  • InspectorGResources.cmake: Added.
  • PlatformGTK.cmake:
  • PlatformWPE.cmake:

Tools:

Move generate-inspector-gresource-manifest.py to glib dir to be shared by GTK+ and WPE ports and update it to
receive an input directory instead of a list of patterns.
File::Copy::Recursive is required by copy-user-interface-resources.pl, so make sure it's installed.

  • glib/generate-inspector-gresource-manifest.py: Renamed from Tools/gtk/generate-inspector-gresource-manifest.py.

(get_filenames):
(get_filenames.should_ignore_resource):

  • gtk/install-dependencies:
  • wpe/generate-inspector-gresource-manifest.py: Removed.
  • wpe/install-dependencies:
Location:
trunk
Files:
2 added
1 deleted
6 edited
1 moved

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r224558 r224566  
     12017-11-07  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        [GTK][WPE] Build inspector resources using copy-user-interface-resources.pl script
     4        https://bugs.webkit.org/show_bug.cgi?id=179317
     5
     6        Reviewed by Michael Catanzaro.
     7
     8        This is the script used by Apple and it has several advantages:
     9
     10          - It allows to combine and minify most of the js and css files, which improves performance and binary size.
     11          - It removes the debug resources and assertions in production builds.
     12          - It allows to remove the test resources in production builds.
     13
     14        The patch also moves the common cmake code to generate the resources to a new file InspectorGResources.cmake included
     15        by GTK+ and WPE platform cmake files.
     16
     17        * InspectorGResources.cmake: Added.
     18        * PlatformGTK.cmake:
     19        * PlatformWPE.cmake:
     20
    1212017-11-07  Jeremy Jones  <jeremyj@apple.com>
    222
  • trunk/Source/WebKit/PlatformGTK.cmake

    r224229 r224566  
     1include(InspectorGResources.cmake)
     2
    13set(WebKit_OUTPUT_NAME webkit2gtk-${WEBKITGTK_API_VERSION})
    24set(WebKit_WebProcess_OUTPUT_NAME WebKitWebProcess)
     
    721723)
    722724
    723 set(InspectorFiles
    724     ${CMAKE_SOURCE_DIR}/Source/WebInspectorUI/UserInterface/*.html
    725     ${CMAKE_SOURCE_DIR}/Source/WebInspectorUI/UserInterface/Base/*.js
    726     ${CMAKE_SOURCE_DIR}/Source/WebInspectorUI/UserInterface/Controllers/*.css
    727     ${CMAKE_SOURCE_DIR}/Source/WebInspectorUI/UserInterface/Controllers/*.js
    728     ${CMAKE_SOURCE_DIR}/Source/WebInspectorUI/UserInterface/Debug/*.css
    729     ${CMAKE_SOURCE_DIR}/Source/WebInspectorUI/UserInterface/Debug/*.js
    730     ${CMAKE_SOURCE_DIR}/Source/WebInspectorUI/UserInterface/External/CodeMirror/*.css
    731     ${CMAKE_SOURCE_DIR}/Source/WebInspectorUI/UserInterface/External/CodeMirror/*.js
    732     ${CMAKE_SOURCE_DIR}/Source/WebInspectorUI/UserInterface/External/ESLint/*.js
    733     ${CMAKE_SOURCE_DIR}/Source/WebInspectorUI/UserInterface/External/Esprima/*.js
    734     ${CMAKE_SOURCE_DIR}/Source/WebInspectorUI/UserInterface/External/three.js/*.js
    735     ${CMAKE_SOURCE_DIR}/Source/WebInspectorUI/UserInterface/Models/*.js
    736     ${CMAKE_SOURCE_DIR}/Source/WebInspectorUI/UserInterface/Protocol/*.js
    737     ${CMAKE_SOURCE_DIR}/Source/WebInspectorUI/UserInterface/Proxies/*.js
    738     ${CMAKE_SOURCE_DIR}/Source/WebInspectorUI/UserInterface/Test/*.js
    739     ${CMAKE_SOURCE_DIR}/Source/WebInspectorUI/UserInterface/Views/*.css
    740     ${CMAKE_SOURCE_DIR}/Source/WebInspectorUI/UserInterface/Views/*.js
    741     ${CMAKE_SOURCE_DIR}/Source/WebInspectorUI/UserInterface/Workers/Formatter/*.js
    742     ${CMAKE_SOURCE_DIR}/Source/WebInspectorUI/UserInterface/Workers/HeapSnapshot/*.js
    743     ${CMAKE_SOURCE_DIR}/Source/WebInspectorUI/UserInterface/Images/gtk/*.png
    744     ${CMAKE_SOURCE_DIR}/Source/WebInspectorUI/UserInterface/Images/gtk/*.svg
    745     ${CMAKE_SOURCE_DIR}/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js
    746 )
    747 
    748 file(GLOB InspectorFilesDependencies
    749     ${InspectorFiles}
    750 )
    751 
    752 # DerivedSources/JavaScriptCore/inspector/InspectorBackendCommands.js is
    753 # expected in DerivedSources/WebInspectorUI/UserInterface/Protocol/.
    754 add_custom_command(
    755     OUTPUT ${DERIVED_SOURCES_WEBINSPECTORUI_DIR}/UserInterface/Protocol/InspectorBackendCommands.js
    756     DEPENDS ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/inspector/InspectorBackendCommands.js
    757     COMMAND cp ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/inspector/InspectorBackendCommands.js ${DERIVED_SOURCES_WEBINSPECTORUI_DIR}/UserInterface/Protocol/InspectorBackendCommands.js
    758 )
    759 
    760725# This is necessary because of a conflict between the GTK+ API WebKitVersion.h and one generated by WebCore.
    761726list(INSERT WebKit_INCLUDE_DIRECTORIES 0
     
    877842    VERBATIM)
    878843
    879 add_custom_command(
    880     OUTPUT ${DERIVED_SOURCES_WEBKIT2GTK_DIR}/InspectorGResourceBundle.xml
    881     DEPENDS ${InspectorFilesDependencies}
    882             ${DERIVED_SOURCES_WEBINSPECTORUI_DIR}/UserInterface/Protocol/InspectorBackendCommands.js
    883             ${TOOLS_DIR}/gtk/generate-inspector-gresource-manifest.py
    884     COMMAND ${PYTHON_EXECUTABLE} ${TOOLS_DIR}/gtk/generate-inspector-gresource-manifest.py --output=${DERIVED_SOURCES_WEBKIT2GTK_DIR}/InspectorGResourceBundle.xml ${InspectorFiles} ${DERIVED_SOURCES_WEBINSPECTORUI_DIR}/UserInterface/Protocol/InspectorBackendCommands.js
    885     VERBATIM
    886 )
    887 
    888 add_custom_command(
    889     OUTPUT ${DERIVED_SOURCES_WEBKIT2GTK_DIR}/InspectorGResourceBundle.c
    890     DEPENDS ${DERIVED_SOURCES_WEBKIT2GTK_DIR}/InspectorGResourceBundle.xml
    891     COMMAND glib-compile-resources --generate --sourcedir=${CMAKE_SOURCE_DIR}/Source/WebInspectorUI --sourcedir=${DERIVED_SOURCES_WEBINSPECTORUI_DIR} --target=${DERIVED_SOURCES_WEBKIT2GTK_DIR}/InspectorGResourceBundle.c ${DERIVED_SOURCES_WEBKIT2GTK_DIR}/InspectorGResourceBundle.xml
    892     VERBATIM
    893 )
     844WEBKIT_BUILD_INSPECTOR_GRESOURCES(${DERIVED_SOURCES_WEBKIT2GTK_DIR})
    894845
    895846set(WebKitResources
  • trunk/Source/WebKit/PlatformWPE.cmake

    r224489 r224566  
     1include(InspectorGResources.cmake)
     2
    13set(WebKit_OUTPUT_NAME WPEWebKit)
    24set(WebKit_WebProcess_OUTPUT_NAME WPEWebProcess)
     
    447449)
    448450
    449 set(InspectorFiles
    450     ${CMAKE_SOURCE_DIR}/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js
    451     ${CMAKE_SOURCE_DIR}/Source/WebInspectorUI/UserInterface/*.html
    452     ${CMAKE_SOURCE_DIR}/Source/WebInspectorUI/UserInterface/Base/*.js
    453     ${CMAKE_SOURCE_DIR}/Source/WebInspectorUI/UserInterface/Controllers/*.css
    454     ${CMAKE_SOURCE_DIR}/Source/WebInspectorUI/UserInterface/Controllers/*.js
    455     ${CMAKE_SOURCE_DIR}/Source/WebInspectorUI/UserInterface/Debug/*.css
    456     ${CMAKE_SOURCE_DIR}/Source/WebInspectorUI/UserInterface/Debug/*.js
    457     ${CMAKE_SOURCE_DIR}/Source/WebInspectorUI/UserInterface/External/CodeMirror/*.css
    458     ${CMAKE_SOURCE_DIR}/Source/WebInspectorUI/UserInterface/External/CodeMirror/*.js
    459     ${CMAKE_SOURCE_DIR}/Source/WebInspectorUI/UserInterface/External/ESLint/*.js
    460     ${CMAKE_SOURCE_DIR}/Source/WebInspectorUI/UserInterface/External/Esprima/*.js
    461     ${CMAKE_SOURCE_DIR}/Source/WebInspectorUI/UserInterface/External/three.js/*.js
    462     ${CMAKE_SOURCE_DIR}/Source/WebInspectorUI/UserInterface/Images/gtk/*.png
    463     ${CMAKE_SOURCE_DIR}/Source/WebInspectorUI/UserInterface/Images/gtk/*.svg
    464     ${CMAKE_SOURCE_DIR}/Source/WebInspectorUI/UserInterface/Models/*.js
    465     ${CMAKE_SOURCE_DIR}/Source/WebInspectorUI/UserInterface/Protocol/*.js
    466     ${CMAKE_SOURCE_DIR}/Source/WebInspectorUI/UserInterface/Proxies/*.js
    467     ${CMAKE_SOURCE_DIR}/Source/WebInspectorUI/UserInterface/Test/*.js
    468     ${CMAKE_SOURCE_DIR}/Source/WebInspectorUI/UserInterface/Views/*.css
    469     ${CMAKE_SOURCE_DIR}/Source/WebInspectorUI/UserInterface/Views/*.js
    470     ${CMAKE_SOURCE_DIR}/Source/WebInspectorUI/UserInterface/Workers/Formatter/*.js
    471     ${CMAKE_SOURCE_DIR}/Source/WebInspectorUI/UserInterface/Workers/HeapSnapshot/*.js
    472 )
    473 
    474 file(GLOB InspectorFilesDependencies
    475     ${InspectorFiles}
    476 )
    477 
    478 # DerivedSources/JavaScriptCore/inspector/InspectorBackendCommands.js is
    479 # expected in DerivedSources/WebInspectorUI/UserInterface/Protocol/.
    480 add_custom_command(
    481     OUTPUT ${DERIVED_SOURCES_WEBINSPECTORUI_DIR}/UserInterface/Protocol/InspectorBackendCommands.js
    482     DEPENDS ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/inspector/InspectorBackendCommands.js
    483     COMMAND cp ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/inspector/InspectorBackendCommands.js ${DERIVED_SOURCES_WEBINSPECTORUI_DIR}/UserInterface/Protocol/InspectorBackendCommands.js
    484 )
    485 
    486 add_custom_command(
    487     OUTPUT ${DERIVED_SOURCES_WEBINSPECTORUI_DIR}/InspectorGResourceBundle.xml
    488     DEPENDS ${InspectorFilesDependencies}
    489             ${DERIVED_SOURCES_WEBINSPECTORUI_DIR}/UserInterface/Protocol/InspectorBackendCommands.js
    490             ${TOOLS_DIR}/wpe/generate-inspector-gresource-manifest.py
    491     COMMAND ${TOOLS_DIR}/wpe/generate-inspector-gresource-manifest.py --output=${DERIVED_SOURCES_WEBINSPECTORUI_DIR}/InspectorGResourceBundle.xml ${InspectorFiles} ${DERIVED_SOURCES_WEBINSPECTORUI_DIR}/UserInterface/Protocol/InspectorBackendCommands.js
    492     VERBATIM
    493 )
    494 
    495 add_custom_command(
    496     OUTPUT ${DERIVED_SOURCES_WEBINSPECTORUI_DIR}/InspectorGResourceBundle.c
    497     DEPENDS ${DERIVED_SOURCES_WEBINSPECTORUI_DIR}/InspectorGResourceBundle.xml
    498     COMMAND glib-compile-resources --generate --sourcedir=${CMAKE_SOURCE_DIR}/Source/WebInspectorUI --sourcedir=${DERIVED_SOURCES_WEBINSPECTORUI_DIR} --target=${DERIVED_SOURCES_WEBINSPECTORUI_DIR}/InspectorGResourceBundle.c ${DERIVED_SOURCES_WEBINSPECTORUI_DIR}/InspectorGResourceBundle.xml
    499     VERBATIM
    500 )
    501 
     451WEBKIT_BUILD_INSPECTOR_GRESOURCES(${DERIVED_SOURCES_WEBINSPECTORUI_DIR})
    502452list(APPEND WPEWebInspectorResources_DERIVED_SOURCES
    503453    ${DERIVED_SOURCES_WEBINSPECTORUI_DIR}/InspectorGResourceBundle.c
  • trunk/Tools/ChangeLog

    r224560 r224566  
     12017-11-07  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        [GTK][WPE] Build inspector resources using copy-user-interface-resources.pl script
     4        https://bugs.webkit.org/show_bug.cgi?id=179317
     5
     6        Reviewed by Michael Catanzaro.
     7
     8        Move generate-inspector-gresource-manifest.py to glib dir to be shared by GTK+ and WPE ports and update it to
     9        receive an input directory instead of a list of patterns.
     10        File::Copy::Recursive is required by copy-user-interface-resources.pl, so make sure it's installed.
     11
     12        * glib/generate-inspector-gresource-manifest.py: Renamed from Tools/gtk/generate-inspector-gresource-manifest.py.
     13        (get_filenames):
     14        (get_filenames.should_ignore_resource):
     15        * gtk/install-dependencies:
     16        * wpe/generate-inspector-gresource-manifest.py: Removed.
     17        * wpe/install-dependencies:
     18
    1192017-11-07  Don Olmstead  <don.olmstead@sony.com>
    220
  • trunk/Tools/glib/generate-inspector-gresource-manifest.py

    r224565 r224566  
    1717
    1818import argparse
    19 import glob
    2019import os
    2120import sys
    2221
     22VALID_EXTENSIONS = ['.html', '.js', '.css', '.svg', '.png']
    2323COMPRESSIBLE_EXTENSIONS = ['.html', '.js', '.css', '.svg']
    2424BASE_DIR = 'WebInspectorUI/'
    2525
    2626
    27 def get_filenames(args):
     27def get_filenames(directory):
    2828    filenames = []
    2929
    30     for pattern in args:
    31         paths = sorted(glob.glob(pattern))
    32         for filename in paths:
     30    def should_ignore_resource(resource):
     31        if resource.startswith('Images') and 'gtk' not in resource:
     32            return True
     33        if resource.startswith(os.path.join('Protocol', 'Legacy')):
     34            return True
     35        if os.path.splitext(resource)[1] not in VALID_EXTENSIONS:
     36            return True
     37
     38    for root, dirs, files in os.walk(directory):
     39        for file in files:
     40            filename = os.path.join(root, file)
    3341            base_dir_index = filename.rfind(BASE_DIR)
    34             if base_dir_index != -1:
    35                 name = filename[base_dir_index + len(BASE_DIR):]
    36                 # The result should use forward slashes, thus make sure any os-specific
    37                 # separator, added by the glob.glob() call, is properly replaced
    38                 if os.sep != '/':
    39                     name = name.replace(os.sep, '/')
     42            if base_dir_index == -1:
     43                continue
     44
     45            name = filename[base_dir_index + len(BASE_DIR):]
     46            # The result should use forward slashes, thus make sure any os-specific
     47            # separator, is properly replaced
     48            if os.sep != '/':
     49                name = name.replace(os.sep, '/')
     50            if not should_ignore_resource(name):
    4051                filenames.append(name)
     52
    4153    return filenames
    4254
     
    4860if __name__ == "__main__":
    4961    parser = argparse.ArgumentParser(description='Generate a GResources file for the inspector.')
     62    parser.add_argument('--input', type=str,
     63                        help='the input directory')
    5064    parser.add_argument('--output', nargs='?', type=argparse.FileType('w'), default=sys.stdout,
    5165                        help='the output file')
    52     parser.add_argument('filenames', metavar='FILES', nargs='+',
    53                         help='the list of files to include')
    5466
    5567    args = parser.parse_args(sys.argv[1:])
     
    6173""")
    6274
    63     for filename in get_filenames(args.filenames):
     75    for filename in get_filenames(args.input):
    6476        line = '            <file'
    6577        if is_compressible(filename):
    6678            line += ' compressed="true"'
    67         if 'Images/gtk/' in filename:
    68             line += ' alias="%s"' % filename.replace('gtk/', '')
     79        if not filename.startswith('Localization'):
     80            alias = 'UserInterface/' + filename
     81            if 'Images/gtk/' in alias:
     82                alias = alias.replace('gtk/', '')
     83            line += ' alias="%s"' % alias
    6984        line += '>%s</file>\n' % filename
    7085
     
    7590</gresources>
    7691""")
    77 
  • trunk/Tools/gtk/install-dependencies

    r224084 r224566  
    109109        libfaad-dev \
    110110        libffi-dev \
     111        libfile-copy-recursive-perl \
    111112        $(aptIfElse libgcrypt20-dev libgcrypt11-dev) \
    112113        libgirepository1.0-dev \
     
    280281        opus \
    281282        pango \
     283        perl-file-copy-recursive \
    282284        libgcrypt \
    283285        libnotify \
     
    436438        patch \
    437439        pcre-devel \
     440        perl-File-Copy-Recursive \
    438441        perl-JSON-PP \
    439442        perl-Switch \
  • trunk/Tools/wpe/install-dependencies

    r224084 r224566  
    5353
    5454function installDependenciesWithApt {
    55     # These are dependencies necessary for building WPE+.
     55    # These are dependencies necessary for building WPE.
    5656    packages=" \
    5757        autoconf \
     
    7474        libicu-dev \
    7575        libjpeg-dev \
     76        libfile-copy-recursive-perl \
    7677        $(aptIfElse libpng-dev libpng12-dev) \
    7778        libsqlite3-dev \
     
    133134
    134135function installDependenciesWithPacman {
    135     # These are dependencies necessary for building WebKitGTK+.
     136    # These are dependencies necessary for building WPE.
    136137    packages=" \
    137138        autoconf \
     
    166167        ninja \
    167168        patch \
     169        perl-file-copy-recursive \
    168170        pkg-config \
    169171        ruby
     
    248250        ninja-build \
    249251        patch \
     252        perl-File-Copy-Recursive \
    250253        perl-Time-HiRes \
    251254        perl-version \
Note: See TracChangeset for help on using the changeset viewer.