# Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. import os.path import re Import('env') webcore = env.Dir('$CHROME_SRC_DIR/third_party/WebKit/WebCore') webcore_posix = webcore.abspath.replace('\\', '/') cygwin = env.Dir('$CYGWIN_DIR/bin') cygwin_posix = cygwin.abspath.replace('\\', '/') pending = env.Dir('$CHROME_SRC_DIR/webkit/pending') portroot = env.Dir('$CHROME_SRC_DIR/webkit/port') webkit_build = env.Dir('$CHROME_SRC_DIR/webkit/build') def PosixIncludes(env, prefix, files, suffix): # This is basically a custom version of the _concat() function, # which we need because the binding script needs posix style paths, # even on windows, and _concat() doesn't make that easy to do... :-( # # Note that because we're not using the RDirs function that the # normal _concat() call uses, this will only add the build # directory paths, not the paths in the underlying source directory, # to its list. posix_files = [str(env.Dir(f).abspath).replace('\\', '/') for f in files] combined = [prefix + f + suffix for f in posix_files] return ' '.join(combined) env = env.Clone( WEBCORE = webcore, PENDING = pending, PORTROOT = portroot, WEBKIT_BUILD = webkit_build, BINDINGS_SCRIPTS_DIR = '$WEBKIT_DIR/port/bindings/scripts', BINDINGS_SCRIPT = '$BINDINGS_SCRIPTS_DIR/generate-bindings.pl', PERL_INCLUDE_PATH = ['$BINDINGS_SCRIPTS_DIR', '$CHROME_SRC_DIR/third_party/WebKit/WebCore/bindings/scripts'], WEBKIT_PORT_DIR = '$WEBKIT_DIR/port', FEATURE_DEFINES = [ 'ENABLE_CROSS_DOCUMENT_MESSAGING', 'ENABLE_XSLT', 'ENABLE_XPATH', 'ENABLE_SVG', 'ENABLE_SVG_ANIMATION', 'ENABLE_SVG_AS_IMAGE', 'ENABLE_SVG_FONTS', 'ENABLE_SVG_FOREIGN_OBJECT', 'ENABLE_SVG_USE', ], SVG_FLAGS = [ 'ENABLE_SVG_ANIMATION=1', 'ENABLE_SVG_AS_IMAGE=1', 'ENABLE_SVG_FONTS=1', 'ENABLE_SVG_FOREIGN_OBJECT=1', 'ENABLE_SVG_USE=1', ], BINDINGS_INCLUDE_PATH = [ '$PENDING', '$PORTROOT/dom', '$PORTROOT/html', '$PORTROOT/page', '$PORTROOT/xml', '$WEBCORE/css', '$WEBCORE/dom', '$WEBCORE/html', '$WEBCORE/page', '$WEBCORE/svg', '$WEBCORE/xml', ], BINDINGS_INCLUDE_FLAG = '--include ', BINDINGS_INCLUDE_SUFFIX = '', _posix_includes = PosixIncludes, _BINDINGS_INCLUDE_FLAGS = '${_posix_includes(__env__, ' + \ 'BINDINGS_INCLUDE_FLAG, ' + \ 'BINDINGS_INCLUDE_PATH, ' + \ 'BINDINGS_INCLUDE_SUFFIX)}', ) env.PrependENVPath('PATH', cygwin_posix) bindings_perl_modules = env.Glob('$BINDINGS_SCRIPTS_DIR/*.pm') def BindingsEmitter(target, source, env): source.append('$BINDINGS_SCRIPT') try: idl_contents = open(source[0].rfile().abspath, 'r').read() except EnvironmentError: return target, source idl_contents = re.sub('//[^\\n]*\\n', '', idl_contents) interfaces = re.findall('interface\\s*(?:\\[[^]]+\\])?\\s*' '(\\w+)[^{]*[{]', idl_contents) new_target = [] for i in interfaces: new_cpp = '$DERIVED_DIR/${BINDINGSPREFIX}' + i + '.cpp' new_h = '$DERIVED_DIR/${BINDINGSPREFIX}' + i + '.h' new_target.extend([new_cpp, new_h]) env.Depends(new_cpp, bindings_perl_modules) env.Depends(new_h, bindings_perl_modules) return new_target, source env.Append( BUILDERS = {'Bindings': Builder( action = Action('$BINDINGSCOM', '$BINDINGSCOMSTR'), src_suffix = '.idl', emitter = BindingsEmitter, )}, ) env.Replace( # TODO(bradnelson): fix ugly hack with one include! BINDINGSCOM = '$PERL $_PERL_INCLUDE_FLAGS ' + \ '${SOURCES[1].posix} ' + \ '--defines "$FEATURE_DEFINES $BINDINGS_LANGUAGE" ' + \ '--generator $BINDINGS_GENERATOR_ARG ' + \ '$_BINDINGS_INCLUDE_FLAGS ' + \ '--outputdir ${TARGET.dir} ' + \ '${SOURCES[0].posix}', ) if env['PLATFORM'] == 'mac': # Mac OS X env['BINDINGSPREFIX'] = 'DOM' env['BINDINGS_GENERATOR_ARG'] = 'ObjC' env['BINDINGS_LANGUAGE'] = 'LANGUAGE_OBJECTIVE_C' env.Append(BINDINGS_INCLUDE_PATH = [ 'bindings/js' ]) elif False: env['BINDINGSPREFIX'] = 'JS' env['BINDINGS_GENERATOR_ARG'] = 'JS' env['BINDINGS_LANGUAGE'] = 'LANGUAGE_JAVASCRIPT' env.Append(BINDINGS_INCLUDE_PATH = [ 'bindings/js' ]) elif True: env['BINDINGSPREFIX'] = 'V8' env['BINDINGS_GENERATOR_ARG'] = 'V8' env['BINDINGS_LANGUAGE'] = 'LANGUAGE_JAVASCRIPT V8_BINDING' env.Prepend(PERL_INCLUDE_PATH = [ '$PORTROOT/bindings/scripts' ]) else: print 'I am not going to generate bindings for you!' idl_files = [ 'css/Counter.idl', 'css/CSSCharsetRule.idl', 'css/CSSFontFaceRule.idl', 'css/CSSImportRule.idl', 'css/CSSMediaRule.idl', 'css/CSSPageRule.idl', 'css/CSSPrimitiveValue.idl', 'css/CSSRule.idl', 'css/CSSRuleList.idl', 'css/CSSStyleDeclaration.idl', 'css/CSSStyleRule.idl', 'css/CSSStyleSheet.idl', 'css/CSSUnknownRule.idl', 'css/CSSValue.idl', 'css/CSSValueList.idl', 'css/CSSVariablesDeclaration.idl', 'css/CSSVariablesRule.idl', 'css/MediaList.idl', 'css/Rect.idl', 'css/RGBColor.idl', 'css/StyleSheet.idl', 'css/StyleSheetList.idl', 'css/WebKitCSSKeyframeRule.idl', 'css/WebKitCSSKeyframesRule.idl', 'css/WebKitCSSTransformValue.idl', 'dom/Attr.idl', 'dom/CDATASection.idl', 'dom/CharacterData.idl', 'dom/Clipboard.idl', 'dom/Comment.idl', 'dom/Document.idl', 'dom/DocumentFragment.idl', 'dom/DocumentType.idl', 'dom/DOMCoreException.idl', 'dom/DOMImplementation.idl', 'dom/Element.idl', 'dom/Entity.idl', 'dom/EntityReference.idl', 'dom/Event.idl', 'dom/EventException.idl', 'dom/EventListener.idl', 'dom/EventTarget.idl', 'dom/EventTargetNode.idl', 'dom/KeyboardEvent.idl', 'dom/MessageChannel.idl', 'dom/MessageEvent.idl', 'dom/MessagePort.idl', 'dom/MouseEvent.idl', 'dom/MutationEvent.idl', 'dom/NamedNodeMap.idl', 'dom/Node.idl', 'dom/NodeFilter.idl', 'dom/NodeIterator.idl', 'dom/NodeList.idl', 'dom/Notation.idl', 'dom/OverflowEvent.idl', 'dom/ProcessingInstruction.idl', 'dom/ProgressEvent.idl', 'dom/Range.idl', 'dom/RangeException.idl', 'dom/Text.idl', 'dom/TextEvent.idl', 'dom/TreeWalker.idl', 'dom/UIEvent.idl', 'dom/WebKitAnimationEvent.idl', 'dom/WebKitTransitionEvent.idl', 'dom/WheelEvent.idl', 'html/CanvasGradient.idl', 'html/CanvasPixelArray.idl', 'html/CanvasPattern.idl', 'html/CanvasRenderingContext2D.idl', 'html/File.idl', 'html/FileList.idl', 'html/HTMLAnchorElement.idl', 'html/HTMLAppletElement.idl', 'html/HTMLAreaElement.idl', 'html/HTMLAudioElement.idl', 'html/HTMLBaseElement.idl', 'html/HTMLBaseFontElement.idl', 'html/HTMLBlockquoteElement.idl', 'html/HTMLBodyElement.idl', 'html/HTMLBRElement.idl', 'html/HTMLButtonElement.idl', 'html/HTMLCanvasElement.idl', 'html/HTMLCollection.idl', 'html/HTMLDirectoryElement.idl', 'html/HTMLDivElement.idl', 'html/HTMLDListElement.idl', 'html/HTMLDocument.idl', 'html/HTMLElement.idl', 'html/HTMLEmbedElement.idl', 'html/HTMLFieldSetElement.idl', 'html/HTMLFontElement.idl', 'html/HTMLFormElement.idl', 'html/HTMLFrameElement.idl', 'html/HTMLFrameSetElement.idl', 'html/HTMLHeadElement.idl', 'html/HTMLHeadingElement.idl', 'html/HTMLHRElement.idl', 'html/HTMLHtmlElement.idl', 'html/HTMLIFrameElement.idl', 'html/HTMLImageElement.idl', 'html/HTMLInputElement.idl', 'html/HTMLIsIndexElement.idl', 'html/HTMLLabelElement.idl', 'html/HTMLLegendElement.idl', 'html/HTMLLIElement.idl', 'html/HTMLLinkElement.idl', 'html/HTMLMapElement.idl', 'html/HTMLMarqueeElement.idl', 'html/HTMLMediaElement.idl', 'html/HTMLMenuElement.idl', 'html/HTMLMetaElement.idl', 'html/HTMLModElement.idl', 'html/HTMLObjectElement.idl', 'html/HTMLOListElement.idl', 'html/HTMLOptGroupElement.idl', 'html/HTMLOptionElement.idl', 'html/HTMLOptionsCollection.idl', 'html/HTMLParagraphElement.idl', 'html/HTMLParamElement.idl', 'html/HTMLPreElement.idl', 'html/HTMLQuoteElement.idl', 'html/HTMLScriptElement.idl', 'html/HTMLSelectElement.idl', 'html/HTMLSourceElement.idl', 'html/HTMLStyleElement.idl', 'html/HTMLTableCaptionElement.idl', 'html/HTMLTableCellElement.idl', 'html/HTMLTableColElement.idl', 'html/HTMLTableElement.idl', 'html/HTMLTableRowElement.idl', 'html/HTMLTableSectionElement.idl', 'html/HTMLTextAreaElement.idl', 'html/HTMLTitleElement.idl', 'html/HTMLUListElement.idl', 'html/HTMLVideoElement.idl', 'html/ImageData.idl', 'html/MediaError.idl', 'html/TextMetrics.idl', 'html/TimeRanges.idl', 'html/UndetectableHTMLCollection.idl', 'html/VoidCallback.idl', # 'loader/appcache/DOMApplicationCache.idl', 'page/AbstractView.idl', 'page/BarInfo.idl', 'page/Console.idl', 'page/DOMSelection.idl', 'page/DOMWindow.idl', 'page/History.idl', 'page/Location.idl', 'page/Navigator.idl', 'page/Screen.idl', 'page/inspector/InspectorController.idl', 'plugins/MimeTypeArray.idl', 'plugins/MimeType.idl', 'plugins/PluginArray.idl', 'plugins/Plugin.idl', 'ksvg2/svg/SVGMatrix.idl', 'ksvg2/svg/SVGPathSegList.idl', 'ksvg2/svg/SVGPointList.idl', 'ksvg2/svg/SVGTransformList.idl', 'svg/ElementTimeControl.idl', 'svg/SVGAElement.idl', 'svg/SVGAltGlyphElement.idl', 'svg/SVGAngle.idl', 'svg/SVGAnimateColorElement.idl', 'svg/SVGAnimatedAngle.idl', 'svg/SVGAnimatedBoolean.idl', 'svg/SVGAnimatedEnumeration.idl', 'svg/SVGAnimatedInteger.idl', 'svg/SVGAnimatedLength.idl', 'svg/SVGAnimatedLengthList.idl', 'svg/SVGAnimatedNumber.idl', 'svg/SVGAnimatedNumberList.idl', 'svg/SVGAnimatedPathData.idl', 'svg/SVGAnimatedPoints.idl', 'svg/SVGAnimatedPreserveAspectRatio.idl', 'svg/SVGAnimatedRect.idl', 'svg/SVGAnimatedString.idl', 'svg/SVGAnimatedTransformList.idl', 'svg/SVGAnimateElement.idl', 'svg/SVGAnimateTransformElement.idl', 'svg/SVGAnimationElement.idl', 'svg/SVGCircleElement.idl', 'svg/SVGClipPathElement.idl', 'svg/SVGColor.idl', 'svg/SVGComponentTransferFunctionElement.idl', 'svg/SVGCursorElement.idl', 'svg/SVGDefinitionSrcElement.idl', 'svg/SVGDefsElement.idl', 'svg/SVGDescElement.idl', 'svg/SVGDocument.idl', 'svg/SVGElement.idl', 'svg/SVGElementInstance.idl', 'svg/SVGElementInstanceList.idl', 'svg/SVGEllipseElement.idl', 'svg/SVGException.idl', 'svg/SVGExternalResourcesRequired.idl', 'svg/SVGFEBlendElement.idl', 'svg/SVGFEColorMatrixElement.idl', 'svg/SVGFEComponentTransferElement.idl', 'svg/SVGFECompositeElement.idl', 'svg/SVGFEDiffuseLightingElement.idl', 'svg/SVGFEDisplacementMapElement.idl', 'svg/SVGFEDistantLightElement.idl', 'svg/SVGFEFloodElement.idl', 'svg/SVGFEFuncAElement.idl', 'svg/SVGFEFuncBElement.idl', 'svg/SVGFEFuncGElement.idl', 'svg/SVGFEFuncRElement.idl', 'svg/SVGFEGaussianBlurElement.idl', 'svg/SVGFEImageElement.idl', 'svg/SVGFEMergeElement.idl', 'svg/SVGFEMergeNodeElement.idl', 'svg/SVGFEOffsetElement.idl', 'svg/SVGFEPointLightElement.idl', 'svg/SVGFESpecularLightingElement.idl', 'svg/SVGFESpotLightElement.idl', 'svg/SVGFETileElement.idl', 'svg/SVGFETurbulenceElement.idl', 'svg/SVGFilterElement.idl', 'svg/SVGFilterPrimitiveStandardAttributes.idl', 'svg/SVGFitToViewBox.idl', 'svg/SVGFontElement.idl', 'svg/SVGFontFaceElement.idl', 'svg/SVGFontFaceFormatElement.idl', 'svg/SVGFontFaceNameElement.idl', 'svg/SVGFontFaceSrcElement.idl', 'svg/SVGFontFaceUriElement.idl', 'svg/SVGForeignObjectElement.idl', 'svg/SVGGElement.idl', 'svg/SVGGlyphElement.idl', 'svg/SVGGradientElement.idl', 'svg/SVGHKernElement.idl', 'svg/SVGImageElement.idl', 'svg/SVGLangSpace.idl', 'svg/SVGLength.idl', 'svg/SVGLengthList.idl', 'svg/SVGLinearGradientElement.idl', 'svg/SVGLineElement.idl', 'svg/SVGLocatable.idl', 'svg/SVGMarkerElement.idl', 'svg/SVGMaskElement.idl', 'svg/SVGMetadataElement.idl', 'svg/SVGMissingGlyphElement.idl', 'svg/SVGNumber.idl', 'svg/SVGNumberList.idl', 'svg/SVGPaint.idl', 'svg/SVGPathElement.idl', 'svg/SVGPathSeg.idl', 'svg/SVGPathSegArcAbs.idl', 'svg/SVGPathSegArcRel.idl', 'svg/SVGPathSegClosePath.idl', 'svg/SVGPathSegCurvetoCubicAbs.idl', 'svg/SVGPathSegCurvetoCubicRel.idl', 'svg/SVGPathSegCurvetoCubicSmoothAbs.idl', 'svg/SVGPathSegCurvetoCubicSmoothRel.idl', 'svg/SVGPathSegCurvetoQuadraticAbs.idl', 'svg/SVGPathSegCurvetoQuadraticRel.idl', 'svg/SVGPathSegCurvetoQuadraticSmoothAbs.idl', 'svg/SVGPathSegCurvetoQuadraticSmoothRel.idl', 'svg/SVGPathSegLinetoAbs.idl', 'svg/SVGPathSegLinetoHorizontalAbs.idl', 'svg/SVGPathSegLinetoHorizontalRel.idl', 'svg/SVGPathSegLinetoRel.idl', 'svg/SVGPathSegLinetoVerticalAbs.idl', 'svg/SVGPathSegLinetoVerticalRel.idl', 'svg/SVGPathSegMovetoAbs.idl', 'svg/SVGPathSegMovetoRel.idl', 'svg/SVGPatternElement.idl', 'svg/SVGPoint.idl', 'svg/SVGPolygonElement.idl', 'svg/SVGPolylineElement.idl', 'svg/SVGPreserveAspectRatio.idl', 'svg/SVGRadialGradientElement.idl', 'svg/SVGRect.idl', 'svg/SVGRectElement.idl', 'svg/SVGRenderingIntent.idl', 'svg/SVGScriptElement.idl', 'svg/SVGSetElement.idl', 'svg/SVGStopElement.idl', 'svg/SVGStringList.idl', 'svg/SVGStylable.idl', 'svg/SVGStyleElement.idl', 'svg/SVGSVGElement.idl', 'svg/SVGSwitchElement.idl', 'svg/SVGSymbolElement.idl', 'svg/SVGTests.idl', 'svg/SVGTextContentElement.idl', 'svg/SVGTextElement.idl', 'svg/SVGTextPathElement.idl', 'svg/SVGTextPositioningElement.idl', 'svg/SVGTitleElement.idl', 'svg/SVGTransform.idl', 'svg/SVGTransformable.idl', 'svg/SVGTRefElement.idl', 'svg/SVGTSpanElement.idl', 'svg/SVGUnitTypes.idl', 'svg/SVGURIReference.idl', 'svg/SVGUseElement.idl', 'svg/SVGViewElement.idl', 'svg/SVGViewSpec.idl', 'svg/SVGZoomAndPan.idl', 'svg/SVGZoomEvent.idl', 'xml/DOMParser.idl', 'xml/DOMParser.idl', 'xml/XMLHttpRequest.idl', 'xml/XMLHttpRequestException.idl', 'xml/XMLHttpRequestProgressEvent.idl', 'xml/XMLHttpRequestUpload.idl', 'xml/XMLSerializer.idl', 'xml/XPathEvaluator.idl', 'xml/XPathException.idl', 'xml/XPathExpression.idl', 'xml/XPathNSResolver.idl', 'xml/XPathResult.idl', 'xml/XSLTProcessor.idl', ] for name in idl_files: env.Bindings('$WEBKIT_DIR/port/' + name) # copy over some files i = env.Install('$SHARED_DIR', ['$WEBKIT_PORT_DIR/bindings/js/PausedTimeouts.h', '$WEBKIT_PORT_DIR/bindings/js/PausedTimeouts.cpp']) env.Alias('webkit', i) # HTML tag and attribute names # If we add ENABLE_ flags via HTML_FLAGS, we need to pass in # --extraDefines $HTML_FLAGS. env.Command(['$DERIVED_DIR/HTMLNames.cpp', '$DERIVED_DIR/HTMLNames.h'], ['$WEBKIT_PORT_DIR/dom/make_names.pl', '$WEBKIT_PORT_DIR/html/HTMLTagNames.in', '$WEBKIT_PORT_DIR/html/HTMLAttributeNames.in'], '$PERL $_PERL_INCLUDE_FLAGS ${SOURCES[0].posix} ' '--tags ${SOURCES[1].posix} ' '--attrs ${SOURCES[2].posix} ' '--wrapperFactory ' '--outputDir $DERIVED_DIR') env.Command(['$DERIVED_DIR/XMLNames.cpp', '$DERIVED_DIR/XMLNames.h'], ['$WEBKIT_PORT_DIR/dom/make_names.pl', '$WEBKIT_PORT_DIR/xml/xmlattrs.in'], '$PERL $_PERL_INCLUDE_FLAGS ${SOURCES[0].posix} ' '--attrs ${SOURCES[1].posix} ' '--outputDir $DERIVED_DIR') env.Command(['$DERIVED_DIR/SVGElementFactory.cpp', '$DERIVED_DIR/SVGElementFactory.h', '$DERIVED_DIR/SVGNames.cpp', '$DERIVED_DIR/SVGNames.h'], ['$WEBKIT_PORT_DIR/dom/make_names.pl', '$WEBKIT_PORT_DIR/svg/svgtags.in', '$WEBKIT_PORT_DIR/svg/svgattrs.in'], '$PERL $_PERL_INCLUDE_FLAGS ${SOURCES[0].posix} ' '--tags ${SOURCES[1].posix} ' '--attrs ${SOURCES[2].posix} ' '--extraDefines "$SVG_FLAGS" ' '--factory ' '--wrapperFactory ' '--outputDir $DERIVED_DIR') env.Command(['$DERIVED_DIR/XLinkNames.cpp', '$DERIVED_DIR/XLinkNames.h'], ['$WEBKIT_PORT_DIR/dom/make_names.pl', '$WEBKIT_PORT_DIR/svg/xlinkattrs.in'], '$PERL $_PERL_INCLUDE_FLAGS ${SOURCES[0].posix} ' '--attrs ${SOURCES[1].posix} ' '--outputDir $DERIVED_DIR') # Add SVG Symbols to the WebCore exported symbols file # TODO(bradnelson): fix this #WebCore.exp : WebCore.base.exp WebCore.SVG.exp # cat $^ > $@ def cat_files(target, source, env): fout = open(str(target[0]), "w") for src in source: fin = open(str(src)) fout.writelines(fin.readlines()) fin.close() fout.close() env.Command('$DERIVED_DIR/html4.css', ['$WEBKIT_PORT_DIR/css/html4.css', '$PORTROOT/css/html4-overrides.css'], cat_files) env.Command('$DERIVED_DIR/quirks.css', ['$WEBKIT_PORT_DIR/css/quirks.css', '$PORTROOT/css/quirks-overrides.css'], cat_files) env.Command(['$DERIVED_DIR/UserAgentStyleSheets.h', '$DERIVED_DIR/UserAgentStyleSheetsData.cpp'], ['$WEBKIT_PORT_DIR/css/make-css-file-arrays.pl', '$WEBKIT_PORT_DIR/css/view-source.css', '$WEBKIT_PORT_DIR/css/svg.css', '$DERIVED_DIR/html4.css', '$DERIVED_DIR/quirks.css'], '$PERL ${SOURCES[0].posix} ${TARGETS.posix} ${SOURCES[1:].posix}') def create_h_wrapper(target, source, env): """ Create a *.h file by surrounding the contents of a yacc-generated *.hpp with a #ifndef-#define-#endif guard. """ t = str(target[1]) fp = open(t, 'w') define = os.path.splitext(os.path.split(t)[1])[0] fp.write('#ifndef %s_h\n' % define) fp.write('#define %s_h\n' % define) fp.write(open(t + 'pp', 'r').read()) fp.write('#endif // %s_h\n' % define) # TODO(sgk): make this a real pseudo-Builder def BuildYacc(env, dir, name, file): env.Command(['$DERIVED_DIR/%s.cpp' % file, '$DERIVED_DIR/%s.h' % file], ['$WEBKIT_PORT_DIR/%s/%s.y' % (dir, file)], ['$YACC -d -p %s ${SOURCES[0].posix} ' % name + '-o ${TARGET.posix}', Action(create_h_wrapper), Delete('${TARGETS[1]}pp')]) BuildYacc(env, 'xml', 'xpathyy', 'XPathGrammar') BuildYacc(env, 'css', 'cssyy', 'CSSGrammar') # TODO(bradnelson): need to add in error checking env.Command('$WEBKIT_PORT_DIR/SVGCSSValueKeywords.in', '$WEBKIT_PORT_DIR/css/SVGCSSValueKeywords.in', '$PERL -ne "print lc" $SOURCES > $TARGET') env.Command('$WEBKIT_PORT_DIR/CSSValueKeywords.in', ['$WEBKIT_PORT_DIR/css/CSSValueKeywords.in', '$WEBKIT_PORT_DIR/css/SVGCSSValueKeywords.in'], '$PERL -ne "print lc" $SOURCES > $TARGET') env.Command('$WEBKIT_PORT_DIR/CSSPropertyNames.in', ['$WEBKIT_PORT_DIR/css/CSSPropertyNames.in', '$WEBKIT_PORT_DIR/css/SVGCSSPropertyNames.in'], '$PERL -ne "print lc" $SOURCES > $TARGET') env.Command(['$DERIVED_DIR/CSSValueKeywords.c', '$DERIVED_DIR/CSSValueKeywords.h'], ['$WEBKIT_PORT_DIR/css/makevalues.pl', '$WEBKIT_PORT_DIR/CSSValueKeywords.in'], ['cd ${SOURCES[1].dir} && $PERL ${str(SOURCES[0].abspath).replace("\\\\", "/")}', Move('${TARGETS[0]}', '${SOURCES[1].dir}/${TARGETS[0].file}'), Move('${TARGETS[1]}', '${SOURCES[1].dir}/${TARGETS[1].file}'), ]) env.Command(['$DERIVED_DIR/CSSPropertyNames.cpp', '$DERIVED_DIR/CSSPropertyNames.h'], ['$WEBKIT_PORT_DIR/css/makeprop.pl', '$WEBKIT_PORT_DIR/CSSPropertyNames.in'], ['cd ${SOURCES[1].dir} && $PERL ${str(SOURCES[0].abspath).replace("\\\\", "/")}', Move('${TARGETS[0]}', '${SOURCES[1].dir}/${TARGETS[0].file}'), Move('${TARGETS[1]}', '${SOURCES[1].dir}/${TARGETS[1].file}'), ]) # DOCTYPE strings env.Command('$DERIVED_DIR/DocTypeStrings.cpp', '$WEBKIT_PORT_DIR/html/DocTypeStrings.gperf', 'gperf -CEot -L ANSI-C -k "*" -N findDoctypeEntry -F ' + \ ',PubIDInfo::eAlmostStandards,PubIDInfo::eAlmostStandards ' + \ '$SOURCE > $TARGET') # color names env.Command('$DERIVED_DIR/ColorData.c', '$WEBKIT_PORT_DIR/platform/ColorData.gperf', 'gperf -CDEot -L ANSI-C -k "*" -N findColor -D -s 2 ' + \ '$SOURCE > $TARGET') # HTML entity names env.Command('$DERIVED_DIR/HTMLEntityNames.c', '$WEBKIT_PORT_DIR/html/HTMLEntityNames.gperf', 'gperf -a -L ANSI-C -C -G -c -o -t -k "*" -N findEntity ' + \ '-D -s 2 $SOURCE > $TARGET') env.Command('$DERIVED_DIR/HTMLEntityCodes.c', '$WEBKIT_PORT_DIR/html/HTMLEntityNames.gperf', 'perl $WEBKIT_BUILD/WebCore/generate_entitycodes.pl ' + \ '$SOURCE > $TARGET') # CSS tokenizer env.Command('$DERIVED_DIR/tokenizer.cpp', ['$WEBKIT_PORT_DIR/css/tokenizer.flex', '$WEBKIT_PORT_DIR/css/maketokenizer'], 'flex --nowarn -t $SOURCE | perl ${SOURCES[1]} > $TARGET')