Git commit 1d76940879043865cd1e442c6a0f5acafe1eb1ba by Michael Pyne. Committed on 10/02/2013 at 03:30. Pushed by mpyne into branch 'master'.
kde-projects: Support ignoring given implicit modules. It's kind of annoying to be unable to build all modules in a certain kde-projects module grouping, *except* for some certain chosen ones. Now you can: You can add the ignore-modules option in your module-sets using kde-projects repository. It accepts a space-separated list of module names (either kdefoo or kde/module/kdefoo style) to ignore. Although the intention is to only filter out matching modules in *that* module-set, it would actually perform the filtering even if you accidentally put it in the wrong module set due to a fluke of the implementation (I recommend not relying on this, however). The documentation has also been updated, including an example of the usage. M +52 -3 doc/index.docbook M +16 -1 kdesrc-build M +5 -2 modules/ksb/BuildContext.pm http://commits.kde.org/kdesrc-build/1d76940879043865cd1e442c6a0f5acafe1eb1ba diff --git a/doc/index.docbook b/doc/index.docbook index 6b23709..ffad67f 100644 --- a/doc/index.docbook +++ b/doc/index.docbook @@ -787,12 +787,46 @@ because &kdesrc-build; will not perform dependency handling. </orderedlist> <note><para>It is worth nothing that &kdesrc-build; will try to build modules -in the right order, but this depends on other databases being kept up-to-date. -You can manually do the right thing if necessary by using the technique -described above. +in the right order, such as if only <literal>kdegraphics/*</literal> had been +listed above, but this depends on other databases being kept up-to-date. You +can manually list modules in the proper order if necessary by using the +technique described above. </para></note> </sect2> +<sect2 id="ignoring-project-modules"> +<title>Filtering out &kde; project modules</title> + +<para>You might decide that you'd like to build all programs within a &kde; +module grouping <emphasis>except</emphasis> for a given program.</para> + +<para>For instance, the <literal>kdeutils</literal> group includes a program +named <application>kremotecontrol</application>. If your computer does not have +the proper hardware to receive the signals sent by remote controls then you may +decide that you'd rather not download, build, and install +<application>kremotecontrol</application> every time you update +<literal>kdeutils</literal>.</para> + +<para>As of &kdesrc-build; 1.16, you can achieve this by using the <link +linkend="conf-ignore-modules">ignore-modules</link> configuration option.</para> + +<example id="example-ignoring-a-module"> +<title>Example for ignoring a kde-project module in a group</title> +<programlisting> +module-set <replaceable>utils</replaceable> + <option><link linkend="conf-repository">repository</link></option> <literal>kde-projects</literal> + + # This option chooses what modules to look for in the database. + <option><link linkend="conf-use-modules">use-modules</link></option> <replaceable>kdeutils</replaceable> + + # This option "subtracts out" modules from the modules chosen by use-modules, above. + <option><link linkend="conf-ignore-modules">ignore-modules</link></option> <replaceable>kremotecontrol</replaceable> +end module-set +</programlisting> +</example> + +</sect2> + </sect1> <sect1 id="building-and-troubleshooting"> @@ -1840,6 +1874,21 @@ on also use that proxy server, if possible, by setting the </entry> </row> +<row id="conf-ignore-modules"> +<entry>ignore-modules</entry> +<entry>Can't be overridden</entry> +<entry><para>Modules named by this option, which would be chosen by &kdesrc-build; +due to a <link linkend="conf-use-modules">use-modules</link> option, are +instead skipped entirely. Use this option when you want to build an entire +<link linkend="kde-projects-module-sets">kde-projects</link> project grouping +<emphasis>except for</emphasis> some specific modules.</para> + +<tip><para>See also <xref linkend="example-ignoring-a-module"/>.</para></tip> + +<para>This option was introduced with &kdesrc-build; 1.16.</para> +</entry> +</row> + <row id="conf-install-after-build"> <entry>install-after-build</entry> <entry>Module setting overrides global</entry> diff --git a/kdesrc-build b/kdesrc-build index b012d17..8e2fb70 100755 --- a/kdesrc-build +++ b/kdesrc-build @@ -698,10 +698,15 @@ sub parse_moduleset my $moduleSetName = shift || ''; my $repoSet = $ctx->getOption('git-repository-base'); my $rcfile = $ctx->rcFile(); + my @modules; + my %ignoredModules; my %optionSet; # We read all options, and apply them to all modules my $startLine = $.; # For later error messages + # Used to strip leading parts of module name if no wildcard present + my $pathLeadersRE = qr,^.*/(?!\*),; + while($_ = readNextLogicalLine($fileReader)) { last if /^end\s+module(-?set)?$/; @@ -716,6 +721,11 @@ sub parse_moduleset die make_exception('Config', 'Invalid use-modules'); } } + elsif ($option eq 'ignore-modules') { + my @modulesToIgnore = split(' ', $value); + s,$pathLeadersRE,, foreach @modulesToIgnore; + @ignoredModules{@modulesToIgnore} = (1) x @modulesToIgnore; + } elsif ($option eq 'set-env') { Module::processSetEnvOption(\%optionSet, $option, $value); } @@ -764,7 +774,10 @@ EOF if ($usingXML) { # Remove all name components before the final /, as long as the / # isn't followed by a *. - $moduleName =~ s,^.*/(?!\*),,; + $moduleName =~ s,$pathLeadersRE,,; + + # Sometimes we just want all kde-projects modules except for a few + next if exists $ignoredModules{$moduleName}; } else { $moduleName =~ s/\.git$//; @@ -785,6 +798,8 @@ EOF } } + $ctx->addToIgnoreList(keys %ignoredModules); + if (not scalar @moduleList) { warning ("No modules were defined for the module-set in r[b[$rcfile] starting at line y[b[$startLine]"); warning ("You should use the g[b[use-modules] option to make the module-set useful."); diff --git a/modules/ksb/BuildContext.pm b/modules/ksb/BuildContext.pm index 15a4d3d..98cc47c 100644 --- a/modules/ksb/BuildContext.pm +++ b/modules/ksb/BuildContext.pm @@ -60,6 +60,7 @@ my %defaultGlobalOptions = ( "git-desired-protocol" => 'git', # protocol to grab from kde-projects "git-repository-base" => {}, # Base path template for use multiple times. "http-proxy" => '', # Proxy server to use for HTTP. + "ignore-modules" => '', # See also: use-modules, kde-projects "install-after-build" => 1, # Default to true "install-session-driver" => 0,# Default to false "kdedir" => "$ENV{HOME}/kde", @@ -161,11 +162,13 @@ sub addModule my ($self, $module) = @_; Carp::confess("No module to push") unless $module; + my $path; if (list_has($self->{modules}, $module)) { debug("Skipping duplicate module ", $module->name()); } - elsif ($module->getOption('#xml-full-path') && - list_has($self->{ignore_list}, $module->getOption('#xml-full-path'))) + elsif (($path = $module->getOption('#xml-full-path')) && + # See if the name matches any given in the ignore list. + any(sub { $path =~ /(^|\/)$_$/ }, $self->{ignore_list})) { debug("Skipping ignored module $module"); }
