WebKit Bugzilla
New
Browse
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
RESOLVED WONTFIX
110717
[EFL] Consolidate defaults for feature flags
https://bugs.webkit.org/show_bug.cgi?id=110717
Summary
[EFL] Consolidate defaults for feature flags
Laszlo Gombos
Reported
2013-02-24 16:22:12 PST
Static (e.g. not dependent on e.g. environment sensing) defaults for feature defines for the efl port are in various places: - FeatureDefines.h (C) - Tools/Scripts/webkitperl/FeatureList.pm (Perl) - Source/cmake/OptionsEfl.cmake (CMake) The current design leads to inconsistencies and bugs like this one -
bug 110715
. This bug is part of a bigger refactoring effort to manage feature defines, but there should be an immediate win just from having the default values on a single place for EFL.
Attachments
1st take
(29.98 KB, patch)
2013-02-24 19:44 PST
,
Laszlo Gombos
no flags
Details
Formatted Diff
Diff
initialize disabled (0 value) features as well not just enabled (1 value)
(30.49 KB, patch)
2013-02-25 19:49 PST
,
Laszlo Gombos
no flags
Details
Formatted Diff
Diff
rebase
(31.60 KB, patch)
2013-03-10 15:36 PDT
,
Laszlo Gombos
no flags
Details
Formatted Diff
Diff
move the computation out to a macro
(32.62 KB, patch)
2013-03-16 21:16 PDT
,
Laszlo Gombos
no flags
Details
Formatted Diff
Diff
Patch
(35.03 KB, patch)
2013-05-15 16:51 PDT
,
Hugo Parente Lima
no flags
Details
Formatted Diff
Diff
Archive of layout-test-results from webkit-ews-14 for mac-mountainlion-wk2
(670.13 KB, application/zip)
2013-05-15 18:45 PDT
,
Build Bot
no flags
Details
Patch
(34.96 KB, patch)
2013-05-17 07:36 PDT
,
Hugo Parente Lima
no flags
Details
Formatted Diff
Diff
Patch
(34.82 KB, patch)
2013-05-23 13:56 PDT
,
Hugo Parente Lima
no flags
Details
Formatted Diff
Diff
Patch
(34.53 KB, patch)
2013-06-06 12:28 PDT
,
Hugo Parente Lima
no flags
Details
Formatted Diff
Diff
Patch
(58.66 KB, patch)
2013-06-13 12:50 PDT
,
Hugo Parente Lima
no flags
Details
Formatted Diff
Diff
Patch
(58.89 KB, patch)
2013-06-14 11:00 PDT
,
Hugo Parente Lima
no flags
Details
Formatted Diff
Diff
Show Obsolete
(9)
View All
Add attachment
proposed patch, testcase, etc.
Laszlo Gombos
Comment 1
2013-02-24 19:44:05 PST
Created
attachment 189994
[details]
1st take I find it also valuable to have a place where the _delta_ between the default project settings and the EFL port is defined - this is now FeatureDefineEfl.h. This list is used to _compute_ the full list, but the full list does not need to be specified for each port any more.
Hugo Parente Lima
Comment 2
2013-02-25 11:11:40 PST
I liked this approach, less build system dependent and more clean. In the future would be nice to have all cmake based ports using something like this to set their default features. I know this patch is only for EFL, but thinking about the future my only question is regarding to ports not using gcc and using cmake like WinCE (Blackberry?) and the gcc preprocessor call plus grep used in the patch.
Laszlo Gombos
Comment 3
2013-02-25 19:49:49 PST
Created
attachment 190187
[details]
initialize disabled (0 value) features as well not just enabled (1 value) Thanks for Hugo for spotting this.
Laszlo Gombos
Comment 4
2013-02-25 20:10:11 PST
(In reply to
comment #2
)
> I know this patch is only for EFL, but thinking about the future my only question is regarding to ports not using gcc and using cmake like WinCE (Blackberry?) and the gcc preprocessor call plus grep used in the patch.
We seems to be using the preprocessor and grep in WebKitHelpers.cmake already - but I do not know if this is actually executed for WinCE: EXEC_PROGRAM("${CMAKE_CXX_COMPILER} -E -Wp,-dM - < /dev/null | grep '#define __VERSION__' I do think that we should make gcc more generic and we could also easily replace grep with perl/pyton as well. I prefer to make those changes as we introduce this for other ports and right now I do not have any means to test it. It also might be that we use these tools in other build steps as well (e.g. generating bindings) in which case there are assumed to be available already (e.g. via Cygwin or other means) on Win as well.
Hugo Parente Lima
Comment 5
2013-02-25 20:12:27 PST
Comment on
attachment 190187
[details]
initialize disabled (0 value) features as well not just enabled (1 value) View in context:
https://bugs.webkit.org/attachment.cgi?id=190187&action=review
We may go further in the future and generate the @features dictionary based on values returned by the GCC preprocessor call, so this file would never be touched again.
> Tools/Scripts/build-webkit:93 > + my $port = "EFL"."__";
There is a function called "cmakeBasedPortName()", may be better to use it if we think in a future where other ports will use this same mechanism. IMO the "__" would go to the gcc command line string too, e.g. "-DBUILDING_${port}__".
WebKit Review Bot
Comment 6
2013-02-26 02:58:11 PST
Attachment 190187
[details]
did not pass style-queue: Failed to run "['Tools/Scripts/check-webkit-style', '--diff-files', u'ChangeLog', u'Source/WTF/ChangeLog', u'Source/WTF/wtf/FeatureDefines.h', u'Source/WTF/wtf/Platform.h', u'Source/WTF/wtf/efl/FeatureDefinesEfl.h', u'Source/cmake/OptionsEfl.cmake', u'Tools/ChangeLog', u'Tools/Scripts/build-webkit', u'Tools/Scripts/webkitperl/FeatureList.pm']" exit_code: 1 Source/cmake/OptionsEfl.cmake:58: Use lowercase command "string" [command/lowercase] [5] Source/cmake/OptionsEfl.cmake:59: Use lowercase command "string" [command/lowercase] [5] Total errors found: 2 in 9 files If any of these errors are false positives, please file a bug against check-webkit-style.
Laszlo Gombos
Comment 7
2013-03-10 15:36:52 PDT
Created
attachment 192389
[details]
rebase
Gyuyoung Kim
Comment 8
2013-03-10 22:26:40 PDT
Comment on
attachment 192389
[details]
rebase View in context:
https://bugs.webkit.org/attachment.cgi?id=192389&action=review
LGTM otherwise.
> Source/cmake/OptionsEfl.cmake:7 > +EXEC_PROGRAM("gcc -E -P -dM -DBUILDING_EFL__ -I ${CMAKE_SOURCE_DIR}/Source/WTF ${CMAKE_SOURCE_DIR}/Source/WTF/wtf/Platform.h | grep '^#define ENABLE_\\w\\+ [01]$\\|^#define WTF_USE_\\w\\+ [01]$' | cut -d' ' -f2-3 | sort" OUTPUT_VARIABLE DEFINITIONS)
As we talk on irc, I think it would be good to move to WebKitHelpers.cmake when other ports want to use this command.
> Source/cmake/OptionsEfl.cmake:63 > WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_ACCESSIBILITY ON)
It looks
Bug 110291
was cloased. So, I wonder how to move this feature definitions.
Laszlo Gombos
Comment 9
2013-03-16 21:16:49 PDT
Created
attachment 193455
[details]
move the computation out to a macro
Hugo Parente Lima
Comment 10
2013-03-18 15:07:08 PDT
LGTM, I plan to push this very same idea on Nix port after seeing this patch landed.
Gyuyoung Kim
Comment 11
2013-03-21 21:26:22 PDT
Comment on
attachment 193455
[details]
move the computation out to a macro LGTM. I hope remained feature definitions are going to be moved to from OptionEfl.cmake to FeatureDefinesEfl.h.
Gyuyoung Kim
Comment 12
2013-03-21 21:35:15 PDT
Comment on
attachment 193455
[details]
move the computation out to a macro However, someone else might have a final look, probably, Rafael ?
Gyuyoung Kim
Comment 13
2013-03-29 00:11:59 PDT
If there is no comment anymore, I think this patch can be landed.
Hugo Parente Lima
Comment 14
2013-04-01 06:52:25 PDT
Comment on
attachment 193455
[details]
move the computation out to a macro View in context:
https://bugs.webkit.org/attachment.cgi?id=193455&action=review
> Source/cmake/OptionsEfl.cmake:57 > WEBKIT_OPTION_DEFAULT_PORT_VALUE(ENABLE_LLINT ON)
Why ENABLE_LLINT, ENABLE_MEMORY_SAMPLER and ENABLE_ACCESSIBILITY weren't removed from OptionsEfl.cmake?
Daniel Bates
Comment 15
2013-04-01 22:19:41 PDT
Comment on
attachment 193455
[details]
move the computation out to a macro View in context:
https://bugs.webkit.org/attachment.cgi?id=193455&action=review
> Tools/Scripts/build-webkit:96 > + my $Definitions = `gcc -E -P -dM -D$portDefine -I Source/WTF Source/WTF/wtf/Platform.h | grep '^#define ENABLE_\\w\\+ \[01\]\$\\|^#define WTF_USE_\\w\\+ \[01\]\$' | cut -d' ' -f2-3`;
I wish there was a better way to do this. We follow the WebKit Code Style Conventions for Perl code. So, variable names should be in CamelCase and begin with a lowercase letter.
> Tools/Scripts/build-webkit:99 > + my %FeatureDefaults;
As mentioned above, variable names should be in CamelCase and begin with a lowercase letter.
> Tools/Scripts/build-webkit:100 > + foreach (split(/\n/, $Definitions)) {
Ditto.
> Tools/Scripts/build-webkit:101 > + my @MacroDefinition = split(/ /);
Ditto.
> Tools/Scripts/build-webkit:102 > + $FeatureDefaults{$MacroDefinition[0]} = $MacroDefinition[1];
Ditto.
> Tools/Scripts/build-webkit:106 > + if (exists $FeatureDefaults{$_->{define}}) {
Ditto.
Daniel Bates
Comment 16
2013-04-01 22:36:58 PDT
Comment on
attachment 193455
[details]
move the computation out to a macro View in context:
https://bugs.webkit.org/attachment.cgi?id=193455&action=review
> Tools/Scripts/build-webkit:93 > + my $port = "EFL";
Do you anticipate making use of this local variable in the near future? Otherwise, I suggest we inline its value into the definition of $portDefine (below) since that is the only expression that references $port inside this if-block.
> Tools/Scripts/build-webkit:98 > + # hash table with macro names and values
This comment doesn't add much value as it states what the code below does. I suggest you either elaborate further or remove this comment.
> Tools/Scripts/build-webkit:107 > + $_->{default} = $FeatureDefaults{$_->{define}};
The variable name $FeatureDefaults should be written in CamelCase and begin with a lowercase letter.
Hugo Parente Lima
Comment 17
2013-04-02 06:57:22 PDT
Comment on
attachment 193455
[details]
move the computation out to a macro View in context:
https://bugs.webkit.org/attachment.cgi?id=193455&action=review
>> Tools/Scripts/build-webkit:93 >> + my $port = "EFL"; > > Do you anticipate making use of this local variable in the near future? Otherwise, I suggest we inline its value into the definition of $portDefine (below) since that is the only expression that references $port inside this if-block.
I plan to use this code on Nix (an out of trunk port), so would be better to use cmakeBasedPortName() function instead of the "EFL" string to turn the code more generic.
Hugo Parente Lima
Comment 18
2013-05-15 16:51:03 PDT
Created
attachment 201895
[details]
Patch
Hugo Parente Lima
Comment 19
2013-05-15 17:03:53 PDT
I did talk with Laszlo on IRC to take over this patch because he has another priorities at the moment, so here's the patch. The only difference to the original patch is that this version doesn't use the features defined in FeatureList.pm at all, it relies only on what gcc found, this may be a initial step path to a future removal of FeatureList.pm, cmakeconfig.h, etc...
EFL EWS Bot
Comment 20
2013-05-15 17:12:10 PDT
Comment on
attachment 201895
[details]
Patch
Attachment 201895
[details]
did not pass efl-wk2-ews (efl-wk2): Output:
http://webkit-queues.appspot.com/results/483051
EFL EWS Bot
Comment 21
2013-05-15 17:12:59 PDT
Comment on
attachment 201895
[details]
Patch
Attachment 201895
[details]
did not pass efl-ews (efl): Output:
http://webkit-queues.appspot.com/results/480233
Build Bot
Comment 22
2013-05-15 18:45:25 PDT
Comment on
attachment 201895
[details]
Patch
Attachment 201895
[details]
did not pass mac-wk2-ews (mac-wk2): Output:
http://webkit-queues.appspot.com/results/471780
New failing tests: editing/pasteboard/4076267-3.html
Build Bot
Comment 23
2013-05-15 18:45:30 PDT
Created
attachment 201908
[details]
Archive of layout-test-results from webkit-ews-14 for mac-mountainlion-wk2 The attached test failures were seen while running run-webkit-tests on the mac-wk2-ews. Bot: webkit-ews-14 Port: mac-mountainlion-wk2 Platform: Mac OS X 10.8.2
Hugo Parente Lima
Comment 24
2013-05-17 07:36:59 PDT
Created
attachment 202083
[details]
Patch Now with shadow dom disabled
EFL EWS Bot
Comment 25
2013-05-17 07:56:46 PDT
Comment on
attachment 202083
[details]
Patch
Attachment 202083
[details]
did not pass efl-wk2-ews (efl-wk2): Output:
http://webkit-queues.appspot.com/results/486435
EFL EWS Bot
Comment 26
2013-05-17 08:01:03 PDT
Comment on
attachment 202083
[details]
Patch
Attachment 202083
[details]
did not pass efl-ews (efl): Output:
http://webkit-queues.appspot.com/results/487424
Laszlo Gombos
Comment 27
2013-05-17 10:40:27 PDT
Comment on
attachment 202083
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=202083&action=review
> Tools/Scripts/build-webkit:121 > + # Fix flag names not following any naming rule. > + if ($optionName eq "dialog-element") { > + $optionName = "dialog"; > + } elsif ($optionName eq "datalist-element") { > + $optionName = "datalist"; > + } elsif ($optionName eq "details-element") { > + $optionName = "details"; > + } elsif ($optionName eq "meter-element") { > + $optionName = "meter-tag"; > + }
This will be challenging to maintain in the future. Can we instead fix the optionNames to be consistent ?
Hugo Parente Lima
Comment 28
2013-05-17 10:45:36 PDT
(In reply to
comment #27
)
> (From update of
attachment 202083
[details]
) > View in context:
https://bugs.webkit.org/attachment.cgi?id=202083&action=review
> > > Tools/Scripts/build-webkit:121 > > + # Fix flag names not following any naming rule. > > + if ($optionName eq "dialog-element") { > > + $optionName = "dialog"; > > + } elsif ($optionName eq "datalist-element") { > > + $optionName = "datalist"; > > + } elsif ($optionName eq "details-element") { > > + $optionName = "details"; > > + } elsif ($optionName eq "meter-element") { > > + $optionName = "meter-tag"; > > + } > > This will be challenging to maintain in the future. Can we instead fix the optionNames to be consistent ?
Yes, we can, but maybe would be better to do the change in another patch just to have time to announce the change on webkit-dev, what do you think? The EWS (and my computer) is blaming about -Werror=maybe-unitialized, it may be a compiler error not related with this patch.
Hugo Parente Lima
Comment 29
2013-05-23 13:56:12 PDT
Created
attachment 202740
[details]
Patch Added missing WTF_USE_TILED_BACKING_STORE to options list.
Hugo Parente Lima
Comment 30
2013-06-06 12:28:33 PDT
Created
attachment 203957
[details]
Patch Rebased, removed command line renames, added new CSS_SHAPES flag.
Hugo Parente Lima
Comment 31
2013-06-13 12:50:44 PDT
Created
attachment 204637
[details]
Patch
Hugo Parente Lima
Comment 32
2013-06-13 12:53:39 PDT
New version. - Rebased to solve conflicts on FeatureLists.pm - Make Efl port free from the infamous cmakeconfig.h - Feature summary reflect the current state, nowadays it don't in some cases. Comments appreciated, if everything goes well we can forget about cmakeconfig.h and FeatureLists.pm :-)
Hugo Parente Lima
Comment 33
2013-06-14 11:00:10 PDT
Created
attachment 204722
[details]
Patch rebase
Laszlo Gombos
Comment 34
2013-06-20 12:25:48 PDT
(In reply to
comment #32
)
> New version.
> - Make Efl port free from the infamous cmakeconfig.h
I think it would make it easier to review if you did this step as a follow-up patch and not combined into the patch that is already quite big in size.
Martin Robinson
Comment 35
2013-06-20 12:52:58 PDT
Comment on
attachment 204722
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=204722&action=review
Looks pretty good to me. I have a couple questions though.
> Source/cmake/WebKitFeatures.cmake:20 > + if (${ARGC} EQUAL 1)
If the port name isn't read, why pass the port name?
> Source/cmake/WebKitFeatures.cmake:22 > + EXEC_PROGRAM("gcc -E -P -dM -DBUILDING_${ARGV0}__ -I ${CMAKE_SOURCE_DIR}/Source/WTF ${CMAKE_SOURCE_DIR}/Source/WTF/wtf/Platform.h | grep '^#define ENABLE_\\w\\+ [01]' | cut -d' ' -f2-3 | sort" OUTPUT_VARIABLE DEFINITIONS)
Hrm. CMake is a platform-independent build system, so maybe it makes sense to do this in a platform independent way? Is the idea with the preprocessor run that you want to combine compiler flags with the #defines in the file?
> Source/cmake/WebKitFeatures.cmake:30 > + set(FEATURES_GOT_FROM_HEADERS ON)
English nit: GET_FEATURES_FROM_HEADERS
> Tools/Scripts/build-webkit:96 > + my $definitions = `gcc -E -P -dM -D$portDefine -I Source/WTF Source/WTF/wtf/Platform.h | grep '^#define ENABLE_\\w\\+ \[01\]\$' | cut -d' ' -f2-3`;
Not sure if I understand why this has to happen here and in the cmake file...
Hugo Parente Lima
Comment 36
2013-06-20 13:32:31 PDT
Hi, Thanks for take a look at the patch. (In reply to
comment #35
)
> (From update of
attachment 204722
[details]
) > View in context:
https://bugs.webkit.org/attachment.cgi?id=204722&action=review
> > Looks pretty good to me. I have a couple questions though. > > > Source/cmake/WebKitFeatures.cmake:20 > > + if (${ARGC} EQUAL 1) > > If the port name isn't read, why pass the port name?
The port name is read on ${ARGV0}, the idea of this is just to keep backward compatibility with other ports using cmake but not getting the feature flags from header files, if all port agree with this approach we can get rid of all those "if(FEATURES_GOT_FROM_HEADERS)" and keep the things simpler.
> > Source/cmake/WebKitFeatures.cmake:22 > > + EXEC_PROGRAM("gcc -E -P -dM -DBUILDING_${ARGV0}__ -I ${CMAKE_SOURCE_DIR}/Source/WTF ${CMAKE_SOURCE_DIR}/Source/WTF/wtf/Platform.h | grep '^#define ENABLE_\\w\\+ [01]' | cut -d' ' -f2-3 | sort" OUTPUT_VARIABLE DEFINITIONS) > > Hrm. CMake is a platform-independent build system, so maybe it makes sense to do this in a platform independent way? Is the idea with the preprocessor run that you want to combine compiler flags with the #defines in the file?
Yes, it's. I also doesn't like too much this gcc dependent approach, but I think this can be replaced by a perl script later mainly because I guess WinCE doesn't have g++.
> > Source/cmake/WebKitFeatures.cmake:30 > > + set(FEATURES_GOT_FROM_HEADERS ON) > > English nit: GET_FEATURES_FROM_HEADERS
The meaning of this variable is to flag that the features were got from header files, not a flag to tell cmake to get the features from header files. My english grammar skills are far away from perfect, so I would ask if with this variable meaning in mind the english nit still valid.
> > Tools/Scripts/build-webkit:96 > > + my $definitions = `gcc -E -P -dM -D$portDefine -I Source/WTF Source/WTF/wtf/Platform.h | grep '^#define ENABLE_\\w\\+ \[01\]\$' | cut -d' ' -f2-3`; > > Not sure if I understand why this has to happen here and in the cmake file...
This happen here to build-webkit script be able to build a complete list of features when you type "build-webkit --efl --help" and be able to pass the correct -DENABLE_FOOBAR=1 or -DENABLE_FOOBAR=0 to cmake. This also happen on cmake, so cmake can build the cmake options (call option function for every possible feature), so -DENABLE_FOOBAR=1 will reflect on cmake scripts as expected. Nowadays all this is made by hand, we keep a list of features on FeatureList.pm, so build-webkit script can list the features on --help, etc... and we keep another list in WebKitFeatures.cmake overwritten by another one on OptionsEfl.cmake, so cmake can add the options, etc, all those lists *must* be in sync, besides all that we also must have all options (feature flags) listed on cmakeconfig.h or the changes (-DENABLE_FOOBAR=x) will not reflect on the build itself. Pretty complicated, verbose, bureaucratic and error prone IMO.
Laszlo Gombos
Comment 37
2013-06-20 18:34:05 PDT
(In reply to
comment #36
)
> > Hrm. CMake is a platform-independent build system, so maybe it makes sense to do this in a platform independent way? Is the idea with the preprocessor run that you want to combine compiler flags with the #defines in the file? > > Yes, it's. I also doesn't like too much this gcc dependent approach, but I think this can be replaced by a perl script later mainly because I guess WinCE doesn't have g++.
Alternatively all compilers (gcc, clang, MSVC, etc) can be invoked just to run the pre-processor - usually with the -E or /E option passed to the compiler - and we already rely on the compiler for the build. I find it a good approach to start with gcc first and add other environments later. According to the tile of this bug, this is initially just for EFL port and the EFL port only supports Linux and gcc at the moment.
Gyuyoung Kim
Comment 38
2013-12-25 21:03:40 PST
Comment on
attachment 204722
[details]
Patch Cleared review? from
attachment 204722
[details]
so that this bug does not appear in
http://webkit.org/pending-review
. If you would like this patch reviewed, please attach it to a new bug or this bug again.
Hugo Parente Lima
Comment 39
2013-12-26 06:46:00 PST
(In reply to
comment #38
)
> (From update of
attachment 204722
[details]
) > Cleared review? from
attachment 204722
[details]
[details] so that this bug does not appear in
http://webkit.org/pending-review
. If you would like this patch reviewed, please attach it to a new bug or this bug again.
Hi, Nix is already the used by this patch to evaluate the feature flags and it works very well, if there are interest into using this approach on Efl I could spend some time moving the CMake functions used by Nix to some general place and make a patch for EFL, otherwise I don't plan to waste my time on this. Thanks, feel free to tag the bug as WONTFIX if there's no interest on this.
Gyuyoung Kim
Comment 40
2013-12-26 17:03:09 PST
I'm not interested in this patch now. Closed.
Note
You need to
log in
before you can comment on or make changes to this bug.
Top of Page
Format For Printing
XML
Clone This Bug