BuildOptions.pm 930 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  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. # FIXME: This is pending resolution of Debian bug #430649
  11. /^([a-z][a-z0-9_-]*)(=(\w*))?$/;
  12. my ($k, $v) = ($1, $3 || '');
  13. # Sanity checks
  14. if (!$k) {
  15. next;
  16. } elsif ($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 $env = $overwrite ? '' : $ENV{DEB_BUILD_OPTIONS}||'';
  29. if ($env) { $env .= ',' }
  30. while (my ($k, $v) = each %$opts) {
  31. if ($v) {
  32. $env .= "$k=$v,";
  33. } else {
  34. $env .= "$k,";
  35. }
  36. }
  37. $ENV{DEB_BUILD_OPTIONS} = $env if $env;
  38. return $env;
  39. }
  40. 1;