Currently cmake uses WITH_XXX, WITHOUT_XXX, WITH_XXX_STORAGE_ENGINE, WITHOUT_XXX_STORAGE_ENGINE to specify what plugins should be compiled and how. They are
mixed in the GUI with WITH_PCRE, WITH_JEMALLOC, WITH_PIC, and the such, plugin variables are not easy to spot
redundant and confusing, one can have any subset (including empty) of WITH_XXX, WITHOUT_XXX, WITH_XXX_STORAGE_ENGINE, WITHOUT_XXX_STORAGE_ENGINE defined, it's not immediately clear what the behavior is in these cases
they do not necessarily exist in a GUI, some of them are. E.g to disable innodb one needs to do cmake -DWITHOUT_INNOBASE=1 (creating the option), one cannot do it in a GUI, because there is no WITHOUT_INNOBASE option to change)
This is the current behavior (ignoring *_STORAGE_ENGINE variants):
WITH_XXX
WITHOUT_XXX
plugin XXX supports
result
OFF
OFF
static builds only
not built
OFF
ON
static builds only
not built
ON
OFF
static builds only
built statically
ON
ON
static builds only
built statically
OFF
OFF
dynamic builds only
built dynamically
OFF
ON
dynamic builds only
not built
ON
OFF
dynamic builds only
built dynamically
ON
ON
dynamic builds only
not built
OFF
OFF
both
built dynamically
OFF
ON
both
not built
ON
OFF
both
built statically
ON
ON
both
built statically
In this task we implement a set of BUILD_PLUGIN_XXX options:
they will sort in a distinct group, all together, not intermixed with other non-plugin options
the values will be STATIC, DYNAMIC, NO, which (hopefully) clearly specifies whether a plugin will be built and how.
WITH_XXX, WITHOUT_XXX, etc values are recognized (if defined on the command line) and work as before, but they are never set in our cmake files, so they never show up in a GUI.
This is the new behavior:
BUILD_PLUGIN_XXX
plugin XXX supports
result
STATIC
static builds only
built statically
DYNAMIC
static builds only
not built
NO
static builds only
not built
STATIC
dynamic builds only
built dynamically
DYNAMIC
dynamic builds only
built dynamically
NO
dynamic builds only
not built
STATIC
both
built statically
DYNAMIC
both
built dynamically
NO
both
not built
Thus BUILD_PLUGIN_XXX can be explained as «the highest desired plugin integration level». For example, if it is set to STATIC, but plugin does not support static builds — okay, it'll be built dynamically. But if we want at most DYNAMIC integration level and the plugin only supports static, it will not be built at all.
I think the semantics is not flawless, and I expect there will be some confusion (and probably bug reports), particularly due to this combination:
STATIC dynamic builds only built dynamically
The problem is, comparing to the old semantics, awful as it was, we are losing one value. Previously we had 4:
both dynamic and static are allowed (WITH=ON, WITHOUT=OFF) => build static if possible, dynamic otherwise;
only static is allowed (WITH=ON, WITHOUT=ON) => build static if possible, none otherwise;
only dynamic is allowed (WITH=OFF, WITHOUT=OFF) => build dynamic if possible, none otherwise;
nothing is allowed (WITH=OFF, WITHOUT=ON) => do not build.
With the new values, we have
BUILD=NO equals WITH=OFF, WITHOUT=ON
BUILD=DYNAMIC equals WITH=OFF, WITHOUT=OFF
BUILD=STATIC equals WITH=ON, WITHOUT=OFF.
Thus, we have lost WITH=ON, WITHOUT=ON, and semantics of the last line is wrong.
BUILD=STATIC should be equal to WITH=ON, WITHOUT=ON.
And for WITH=ON, WITHOUT=OFF, we should have a 4th value, BUILD="yes", or "auto", or something, which would be the default and which would mean choosing the best possible option.
IIRC we have a similar thing for SSL (yes/system/bundled/no).
Elena Stepanova
added a comment - I think the semantics is not flawless, and I expect there will be some confusion (and probably bug reports), particularly due to this combination:
STATIC dynamic builds only built dynamically
The problem is, comparing to the old semantics, awful as it was, we are losing one value. Previously we had 4:
both dynamic and static are allowed (WITH=ON, WITHOUT=OFF) => build static if possible, dynamic otherwise;
only static is allowed (WITH=ON, WITHOUT=ON) => build static if possible, none otherwise;
only dynamic is allowed (WITH=OFF, WITHOUT=OFF) => build dynamic if possible, none otherwise;
nothing is allowed (WITH=OFF, WITHOUT=ON) => do not build.
With the new values, we have
BUILD=NO equals WITH=OFF, WITHOUT=ON
BUILD=DYNAMIC equals WITH=OFF, WITHOUT=OFF
BUILD=STATIC equals WITH=ON, WITHOUT=OFF.
Thus, we have lost WITH=ON, WITHOUT=ON, and semantics of the last line is wrong.
BUILD=STATIC should be equal to WITH=ON, WITHOUT=ON.
And for WITH=ON, WITHOUT=OFF, we should have a 4th value, BUILD="yes", or "auto", or something, which would be the default and which would mean choosing the best possible option.
IIRC we have a similar thing for SSL (yes/system/bundled/no).
Right. I considered the case when both WITH and WITHOUT are used as "undefined
behavior", I'm a bit surprised it actually provided consistent results
I don't know whether it was intentionally implemented to "allow only static"
or it just happened to behave this way. So, I didn't try to replicate this
case in the new implementation.
But ok, I can do it your way too.
Sergei Golubchik
added a comment - Right. I considered the case when both WITH and WITHOUT are used as "undefined
behavior", I'm a bit surprised it actually provided consistent results
I don't know whether it was intentionally implemented to "allow only static"
or it just happened to behave this way. So, I didn't try to replicate this
case in the new implementation.
But ok, I can do it your way too.
Currently, if user specifies eg. -DWITH_CASSANDRA_STORAGE_ENGINE=1, but some dependency is missing and Cassandra cannot be built, the cmake run will still succeed. It does give a warning about not using the option, but since the exit code is zero, this might easily be missed by following outputs from eg. build scripts.
So if the new options could be made to fail the cmake run if the requested plugin could not be built, that might be a better semantics.
Kristian Nielsen
added a comment - We discussed on IRC the following idea:
Currently, if user specifies eg. -DWITH_CASSANDRA_STORAGE_ENGINE=1, but some dependency is missing and Cassandra cannot be built, the cmake run will still succeed. It does give a warning about not using the option, but since the exit code is zero, this might easily be missed by following outputs from eg. build scripts.
So if the new options could be made to fail the cmake run if the requested plugin could not be built, that might be a better semantics.
The original design was based on preserving the same functionality we had with WITH_ and WITHOUT_ but in a GUI-friendly and logically consistent matter. Adding new functionality was not the goal. But If I'll list all possible preference and combinations, I'd get something like
do not compile the plugin at all
compile statically, if possible, otherwise not at all
compile dynamically, if possible, otherwise not at all
compile statically, if possible, otherwise dynamically, if possible
compile dynamically, if possible, otherwise statically, if possible
compile statically, if possible, otherwise abort
compile dynamically, if possible, otherwise abort
compile statically, if possible, otherwise dynamically, if possible, otherwise abort
compile dynamically, if possible, otherwise statically, if possible, otherwise abort
Those in bold were possible in 5.5 and 10.0. They are supported in my current implementation, with the values NO, STATIC, DYNAMIC, AUTO.
But I don't really know how to support all nine variants without making this option too confusing to use. And I don't know whether it makes sense to do that.
Sergei Golubchik
added a comment - The original design was based on preserving the same functionality we had with WITH_ and WITHOUT_ but in a GUI-friendly and logically consistent matter. Adding new functionality was not the goal. But If I'll list all possible preference and combinations, I'd get something like
do not compile the plugin at all
compile statically, if possible, otherwise not at all
compile dynamically, if possible, otherwise not at all
compile statically, if possible, otherwise dynamically, if possible
compile dynamically, if possible, otherwise statically, if possible
compile statically, if possible, otherwise abort
compile dynamically, if possible, otherwise abort
compile statically, if possible, otherwise dynamically, if possible, otherwise abort
compile dynamically, if possible, otherwise statically, if possible, otherwise abort
Those in bold were possible in 5.5 and 10.0. They are supported in my current implementation, with the values NO , STATIC , DYNAMIC , AUTO .
But I don't really know how to support all nine variants without making this option too confusing to use. And I don't know whether it makes sense to do that.
Where NO is, basically, a noise word, always ignored. It's added for readability. Otherwise, all 9 variants as above can be specified as
NO (or the empty string)
STATIC,NO (or simply STATIC)
DYNAMIC (I will omit NO from now on)
STATIC,DYNAMIC
DYNAMIC,STATIC
STATIC,ABORT
DYNAMIC,ABORT
STATIC,DYNAMIC,ABORT
DYNAMIC,STATIC,ABORT
also, I could allow abbreviating them to the first letter. Making it simply D,A or S,D, for example.
Sergei Golubchik
added a comment - Suggestion:
BUILD_PLUGIN_X= {NO|STATIC|DYNAMIC} [, {NO|STATIC|DYNAMIC}] [, {NO|ABORT}]
Where NO is, basically, a noise word, always ignored. It's added for readability. Otherwise, all 9 variants as above can be specified as
NO (or the empty string)
STATIC,NO (or simply STATIC )
DYNAMIC (I will omit NO from now on)
STATIC,DYNAMIC
DYNAMIC,STATIC
STATIC,ABORT
DYNAMIC,ABORT
STATIC,DYNAMIC,ABORT
DYNAMIC,STATIC,ABORT
also, I could allow abbreviating them to the first letter. Making it simply D,A or S,D , for example.
Alternatively, we can keep the list of NO, STATIC, DYNAMIC, AUTO. And add the value of FORCE (which means the same as AUTO, but aborts if the plugin cannot be build. It'd be S,D,A in the previous comment). This FORCE matches the behavior of --plugin-XXX=FORCE as the server command-line option
Sergei Golubchik
added a comment - Alternatively, we can keep the list of NO , STATIC , DYNAMIC , AUTO . And add the value of FORCE (which means the same as AUTO , but aborts if the plugin cannot be build. It'd be S,D,A in the previous comment). This FORCE matches the behavior of --plugin-XXX=FORCE as the server command-line option
Use PLUGIN_xxx cmake variables. They can be set on the command line with -DPLUGIN_xxx=value or in the cmake gui. Supported values are
Value
Effect
NO
the plugin will be not compiled at all
STATIC
the plugin will be compiled statically, if supported. Otherwise it will be not compiled.
DYNAMIC
the plugin will be compiled dynamically, if supported. Otherwise it will be not compiled. This is the default behavior.
AUTO
the plugin will be compiled statically, if supported. Otherwise it will be compiled dynamically.
YES
same as AUTO, but if plugin prerequisites (for example, specific libraries) are missing, it will not be skipped, it will abort cmake with an error.
Elena Stepanova
added a comment - Final implementation is described in the KB: https://mariadb.com/kb/en/mariadb/specifying-which-plugins-to-build/
Use PLUGIN_xxx cmake variables. They can be set on the command line with -DPLUGIN_xxx=value or in the cmake gui. Supported values are
Value
Effect
NO
the plugin will be not compiled at all
STATIC
the plugin will be compiled statically, if supported. Otherwise it will be not compiled.
DYNAMIC
the plugin will be compiled dynamically, if supported. Otherwise it will be not compiled. This is the default behavior.
AUTO
the plugin will be compiled statically, if supported. Otherwise it will be compiled dynamically.
YES
same as AUTO, but if plugin prerequisites (for example, specific libraries) are missing, it will not be skipped, it will abort cmake with an error.
People
Sergei Golubchik
Sergei Golubchik
Votes:
0Vote for this issue
Watchers:
3Start watching this issue
Dates
Created:
Updated:
Resolved:
Git Integration
Error rendering 'com.xiplink.jira.git.jira_git_plugin:git-issue-webpanel'. Please contact your Jira administrators.
{"report":{"fcp":971.3999996185303,"ttfb":266.69999980926514,"pageVisibility":"visible","entityId":36919,"key":"jira.project.issue.view-issue","isInitial":true,"threshold":1000,"elementTimings":{},"userDeviceMemory":8,"userDeviceProcessors":64,"apdex":0.5,"journeyId":"cd5ffc47-582a-48ff-9c47-68ccac2e03bd","navigationType":0,"readyForUser":1050,"redirectCount":0,"resourceLoadedEnd":1348.5999994277954,"resourceLoadedStart":271.5999994277954,"resourceTiming":[{"duration":176.70000076293945,"initiatorType":"link","name":"https://jira.mariadb.org/s/2c21342762a6a02add1c328bed317ffd-CDN/lu2cib/820016/12ta74/0a8bac35585be7fc6c9cc5a0464cd4cf/_/download/contextbatch/css/_super/batch.css","startTime":271.5999994277954,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":271.5999994277954,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":448.30000019073486,"responseStart":0,"secureConnectionStart":0},{"duration":176.80000019073486,"initiatorType":"link","name":"https://jira.mariadb.org/s/7ebd35e77e471bc30ff0eba799ebc151-CDN/lu2cib/820016/12ta74/2bf333562ca6724060a9d5f1535471f6/_/download/contextbatch/css/jira.browse.project,project.issue.navigator,jira.view.issue,jira.general,jira.global,atl.general,-_super/batch.css?agile_global_admin_condition=true&jag=true&jira.create.linked.issue=true&slack-enabled=true","startTime":271.8999996185303,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":271.8999996185303,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":448.69999980926514,"responseStart":0,"secureConnectionStart":0},{"duration":192.30000019073486,"initiatorType":"script","name":"https://jira.mariadb.org/s/0917945aaa57108d00c5076fea35e069-CDN/lu2cib/820016/12ta74/0a8bac35585be7fc6c9cc5a0464cd4cf/_/download/contextbatch/js/_super/batch.js?locale=en","startTime":272.19999980926514,"connectEnd":272.19999980926514,"connectStart":272.19999980926514,"domainLookupEnd":272.19999980926514,"domainLookupStart":272.19999980926514,"fetchStart":272.19999980926514,"redirectEnd":0,"redirectStart":0,"requestStart":272.19999980926514,"responseEnd":464.5,"responseStart":464.5,"secureConnectionStart":272.19999980926514},{"duration":287.5,"initiatorType":"script","name":"https://jira.mariadb.org/s/2d8175ec2fa4c816e8023260bd8c1786-CDN/lu2cib/820016/12ta74/2bf333562ca6724060a9d5f1535471f6/_/download/contextbatch/js/jira.browse.project,project.issue.navigator,jira.view.issue,jira.general,jira.global,atl.general,-_super/batch.js?agile_global_admin_condition=true&jag=true&jira.create.linked.issue=true&locale=en&slack-enabled=true","startTime":272.30000019073486,"connectEnd":272.30000019073486,"connectStart":272.30000019073486,"domainLookupEnd":272.30000019073486,"domainLookupStart":272.30000019073486,"fetchStart":272.30000019073486,"redirectEnd":0,"redirectStart":0,"requestStart":272.30000019073486,"responseEnd":559.8000001907349,"responseStart":559.8000001907349,"secureConnectionStart":272.30000019073486},{"duration":291.20000076293945,"initiatorType":"script","name":"https://jira.mariadb.org/s/a9324d6758d385eb45c462685ad88f1d-CDN/lu2cib/820016/12ta74/c92c0caa9a024ae85b0ebdbed7fb4bd7/_/download/contextbatch/js/atl.global,-_super/batch.js?locale=en","startTime":272.5999994277954,"connectEnd":272.5999994277954,"connectStart":272.5999994277954,"domainLookupEnd":272.5999994277954,"domainLookupStart":272.5999994277954,"fetchStart":272.5999994277954,"redirectEnd":0,"redirectStart":0,"requestStart":272.5999994277954,"responseEnd":563.8000001907349,"responseStart":563.8000001907349,"secureConnectionStart":272.5999994277954},{"duration":291.6000003814697,"initiatorType":"script","name":"https://jira.mariadb.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/lu2cib/820016/12ta74/1.0/_/download/batch/jira.webresources:calendar-en/jira.webresources:calendar-en.js","startTime":272.69999980926514,"connectEnd":272.69999980926514,"connectStart":272.69999980926514,"domainLookupEnd":272.69999980926514,"domainLookupStart":272.69999980926514,"fetchStart":272.69999980926514,"redirectEnd":0,"redirectStart":0,"requestStart":272.69999980926514,"responseEnd":564.3000001907349,"responseStart":564.3000001907349,"secureConnectionStart":272.69999980926514},{"duration":291.80000019073486,"initiatorType":"script","name":"https://jira.mariadb.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/lu2cib/820016/12ta74/1.0/_/download/batch/jira.webresources:calendar-localisation-moment/jira.webresources:calendar-localisation-moment.js","startTime":273,"connectEnd":273,"connectStart":273,"domainLookupEnd":273,"domainLookupStart":273,"fetchStart":273,"redirectEnd":0,"redirectStart":0,"requestStart":273,"responseEnd":564.8000001907349,"responseStart":564.8000001907349,"secureConnectionStart":273},{"duration":337.5,"initiatorType":"link","name":"https://jira.mariadb.org/s/b04b06a02d1959df322d9cded3aeecc1-CDN/lu2cib/820016/12ta74/a2ff6aa845ffc9a1d22fe23d9ee791fc/_/download/contextbatch/css/jira.global.look-and-feel,-_super/batch.css","startTime":273.0999994277954,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":273.0999994277954,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":610.5999994277954,"responseStart":0,"secureConnectionStart":0},{"duration":292,"initiatorType":"script","name":"https://jira.mariadb.org/rest/api/1.0/shortcuts/820016/47140b6e0a9bc2e4913da06536125810/shortcuts.js?context=issuenavigation&context=issueaction","startTime":273.30000019073486,"connectEnd":273.30000019073486,"connectStart":273.30000019073486,"domainLookupEnd":273.30000019073486,"domainLookupStart":273.30000019073486,"fetchStart":273.30000019073486,"redirectEnd":0,"redirectStart":0,"requestStart":273.30000019073486,"responseEnd":565.3000001907349,"responseStart":565.3000001907349,"secureConnectionStart":273.30000019073486},{"duration":337.19999980926514,"initiatorType":"link","name":"https://jira.mariadb.org/s/3ac36323ba5e4eb0af2aa7ac7211b4bb-CDN/lu2cib/820016/12ta74/d176f0986478cc64f24226b3d20c140d/_/download/contextbatch/css/com.atlassian.jira.projects.sidebar.init,-_super,-project.issue.navigator,-jira.view.issue/batch.css?jira.create.linked.issue=true","startTime":273.5,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":273.5,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":610.6999998092651,"responseStart":0,"secureConnectionStart":0},{"duration":292.30000019073486,"initiatorType":"script","name":"https://jira.mariadb.org/s/5d5e8fe91fbc506585e83ea3b62ccc4b-CDN/lu2cib/820016/12ta74/d176f0986478cc64f24226b3d20c140d/_/download/contextbatch/js/com.atlassian.jira.projects.sidebar.init,-_super,-project.issue.navigator,-jira.view.issue/batch.js?jira.create.linked.issue=true&locale=en","startTime":273.69999980926514,"connectEnd":273.69999980926514,"connectStart":273.69999980926514,"domainLookupEnd":273.69999980926514,"domainLookupStart":273.69999980926514,"fetchStart":273.69999980926514,"redirectEnd":0,"redirectStart":0,"requestStart":273.69999980926514,"responseEnd":566,"responseStart":566,"secureConnectionStart":273.69999980926514},{"duration":459.30000019073486,"initiatorType":"script","name":"https://jira.mariadb.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/lu2cib/820016/12ta74/1.0/_/download/batch/jira.webresources:bigpipe-js/jira.webresources:bigpipe-js.js","startTime":279.0999994277954,"connectEnd":279.0999994277954,"connectStart":279.0999994277954,"domainLookupEnd":279.0999994277954,"domainLookupStart":279.0999994277954,"fetchStart":279.0999994277954,"redirectEnd":0,"redirectStart":0,"requestStart":279.0999994277954,"responseEnd":738.3999996185303,"responseStart":738.3999996185303,"secureConnectionStart":279.0999994277954},{"duration":1044.5999994277954,"initiatorType":"script","name":"https://jira.mariadb.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/lu2cib/820016/12ta74/1.0/_/download/batch/jira.webresources:bigpipe-init/jira.webresources:bigpipe-init.js","startTime":289.30000019073486,"connectEnd":289.30000019073486,"connectStart":289.30000019073486,"domainLookupEnd":289.30000019073486,"domainLookupStart":289.30000019073486,"fetchStart":289.30000019073486,"redirectEnd":0,"redirectStart":0,"requestStart":289.30000019073486,"responseEnd":1333.8999996185303,"responseStart":1333.8999996185303,"secureConnectionStart":289.30000019073486},{"duration":116.30000019073486,"initiatorType":"xmlhttprequest","name":"https://jira.mariadb.org/rest/webResources/1.0/resources","startTime":622.8999996185303,"connectEnd":622.8999996185303,"connectStart":622.8999996185303,"domainLookupEnd":622.8999996185303,"domainLookupStart":622.8999996185303,"fetchStart":622.8999996185303,"redirectEnd":0,"redirectStart":0,"requestStart":622.8999996185303,"responseEnd":739.1999998092651,"responseStart":739.1999998092651,"secureConnectionStart":622.8999996185303},{"duration":435.6000003814697,"initiatorType":"link","name":"https://jira.mariadb.org/s/d5715adaadd168a9002b108b2b039b50-CDN/lu2cib/820016/12ta74/be4b45e9cec53099498fa61c8b7acba4/_/download/contextbatch/css/jira.project.sidebar,-_super,-project.issue.navigator,-jira.general,-jira.browse.project,-jira.view.issue,-jira.global,-atl.general,-com.atlassian.jira.projects.sidebar.init/batch.css?agile_global_admin_condition=true&jag=true&jira.create.linked.issue=true&slack-enabled=true","startTime":899.0999994277954,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":899.0999994277954,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":1334.6999998092651,"responseStart":0,"secureConnectionStart":0},{"duration":442.80000019073486,"initiatorType":"script","name":"https://jira.mariadb.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/lu2cib/820016/12ta74/e65b778d185daf5aee24936755b43da6/_/download/contextbatch/js/browser-metrics-plugin.contrib,-_super,-project.issue.navigator,-jira.view.issue,-atl.general/batch.js?agile_global_admin_condition=true&jag=true&jira.create.linked.issue=true&slack-enabled=true","startTime":901.0999994277954,"connectEnd":901.0999994277954,"connectStart":901.0999994277954,"domainLookupEnd":901.0999994277954,"domainLookupStart":901.0999994277954,"fetchStart":901.0999994277954,"redirectEnd":0,"redirectStart":0,"requestStart":901.0999994277954,"responseEnd":1343.8999996185303,"responseStart":1343.8999996185303,"secureConnectionStart":901.0999994277954},{"duration":447.0999994277954,"initiatorType":"script","name":"https://jira.mariadb.org/s/097ae97cb8fbec7d6ea4bbb1f26955b9-CDN/lu2cib/820016/12ta74/be4b45e9cec53099498fa61c8b7acba4/_/download/contextbatch/js/jira.project.sidebar,-_super,-project.issue.navigator,-jira.general,-jira.browse.project,-jira.view.issue,-jira.global,-atl.general,-com.atlassian.jira.projects.sidebar.init/batch.js?agile_global_admin_condition=true&jag=true&jira.create.linked.issue=true&locale=en&slack-enabled=true","startTime":901.5,"connectEnd":901.5,"connectStart":901.5,"domainLookupEnd":901.5,"domainLookupStart":901.5,"fetchStart":901.5,"redirectEnd":0,"redirectStart":0,"requestStart":901.5,"responseEnd":1348.5999994277954,"responseStart":1348.5999994277954,"secureConnectionStart":901.5},{"duration":403.0999994277954,"initiatorType":"script","name":"https://www.google-analytics.com/analytics.js","startTime":964.3000001907349,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":964.3000001907349,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":1367.3999996185303,"responseStart":0,"secureConnectionStart":0}],"fetchStart":0,"domainLookupStart":0,"domainLookupEnd":0,"connectStart":0,"connectEnd":0,"requestStart":89,"responseStart":267,"responseEnd":289,"domLoading":270,"domInteractive":1370,"domContentLoadedEventStart":1370,"domContentLoadedEventEnd":1420,"domComplete":1796,"loadEventStart":1797,"loadEventEnd":1797,"userAgent":"Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)","marks":[{"name":"bigPipe.sidebar-id.start","time":1335.6999998092651},{"name":"bigPipe.sidebar-id.end","time":1336.5},{"name":"bigPipe.activity-panel-pipe-id.start","time":1336.6999998092651},{"name":"bigPipe.activity-panel-pipe-id.end","time":1339.1999998092651},{"name":"activityTabFullyLoaded","time":1437.8999996185303}],"measures":[],"correlationId":"6afa2e1392e839","effectiveType":"4g","downlink":9.3,"rtt":0,"serverDuration":113,"dbReadsTimeInMs":8,"dbConnsTimeInMs":16,"applicationHash":"9d11dbea5f4be3d4cc21f03a88dd11d8c8687422","experiments":[]}}
I think the semantics is not flawless, and I expect there will be some confusion (and probably bug reports), particularly due to this combination:
STATIC dynamic builds only built dynamically
The problem is, comparing to the old semantics, awful as it was, we are losing one value. Previously we had 4:
With the new values, we have
BUILD=NO equals WITH=OFF, WITHOUT=ON
BUILD=DYNAMIC equals WITH=OFF, WITHOUT=OFF
BUILD=STATIC equals WITH=ON, WITHOUT=OFF.
Thus, we have lost WITH=ON, WITHOUT=ON, and semantics of the last line is wrong.
BUILD=STATIC should be equal to WITH=ON, WITHOUT=ON.
And for WITH=ON, WITHOUT=OFF, we should have a 4th value, BUILD="yes", or "auto", or something, which would be the default and which would mean choosing the best possible option.
IIRC we have a similar thing for SSL (yes/system/bundled/no).