BuildOptions.pm 948 B

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