BuildOptions.pm 998 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package Dpkg::BuildOptions;
  2. use strict;
  3. use warnings;
  4. use Dpkg::Gettext;
  5. use Dpkg::ErrorHandling;
  6. sub parse {
  7. my ($env) = @_;
  8. $env ||= $ENV{DEB_BUILD_OPTIONS};
  9. unless ($env) { return {}; }
  10. my %opts;
  11. foreach (split(/\s+/, $env)) {
  12. unless (/^([a-z][a-z0-9_-]*)(=(\S*))?$/) {
  13. warning(_g("invalid flag in DEB_BUILD_OPTIONS: %s"), $_);
  14. next;
  15. }
  16. my ($k, $v) = ($1, $3 || '');
  17. # Sanity checks
  18. if ($k =~ /^(noopt|nostrip|nocheck)$/ && length($v)) {
  19. $v = '';
  20. } elsif ($k eq 'parallel' && $v !~ /^-?\d+$/) {
  21. next;
  22. }
  23. $opts{$k} = $v;
  24. }
  25. return \%opts;
  26. }
  27. sub set {
  28. my ($opts, $overwrite) = @_;
  29. $overwrite = 1 if not defined($overwrite);
  30. my $new = {};
  31. $new = parse() unless $overwrite;
  32. while (my ($k, $v) = each %$opts) {
  33. $new->{$k} = $v;
  34. }
  35. my $env = join(" ", map { $new->{$_} ? $_ . "=" . $new->{$_} : $_ } sort keys %$new);
  36. $ENV{DEB_BUILD_OPTIONS} = $env;
  37. return $env;
  38. }
  39. 1;