---
name: "Debian::Rules"
section: "3pm"
platform: "linux"
package: "libdebian-source-perl"
version: "0.128"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Debian::Rules"
---

# Debian::Rules(3pm)

handy manipulation of debian/rules

## NAME

Debian::Rules - handy manipulation of debian/rules

## SYNOPSIS

```
    my $r = Debian::Rules->new('debian/rules');
    my $r = Debian::Rules->new( { filename => 'debian/rules' } );
    $r->is_dhtiny && print "Using the latest and greatest\n";
    $r->is_quiltified && print "quilt rules the rules\n";
    # file contents changed externally
    $r->parse;
    $r->add_quilt;
    $r->drop_quilt;
    $r->write;  # or undef($r);
```

## DESCRIPTION

Some times, one needs to know whether *debian/rules* uses the [**dh**(1)](/dh/1.md) tiny variant, or whether it is integrated with [**quilt**(1)](/quilt/1.md). Debian::Rules provides facilities to check this, as well as adding/removing quilt integration.

Modified contents are written to file either vie the "write" method, or when the object reference goes out of scope (via DESTROY).

## CONSTRUCTOR

`"new"` is the standard Class::Accessor constructor, with the exception that if only one, non-reference argument is provided, it is treated as a value for the filename field.

If a file name is given, the constructor calls "read" to read the file contents into memory.

One of **filename** or **lines** is mandatory.

## FIELDS

- filename

  Contains the file name of the rules file.

- lines

  Reference to an array pointing to the rules file. Initialized by "new".

## METHODS

- parse

  Parses the rules file and stores its findings for later use. Called automatically by is\_dhtiny and is\_quiltified. The result of the parsing is cached and subsequent calls to `"is_XXX"` use the cache. To force cache refresh (for example if the contents of the file have been changed), call `"parse"` again.

- is\_dhtiny

  Returns true if the contents of the rules file seem to use the so called *tiny* variant offered by [**dh**(1)](/dh/1.md). Tiny rules are detected by the presence of the following two lines:

  ```
      %:
              dh $@
  ```

  (any options on the `"dh"` command line ignored).

- is\_quiltified

  Returns true if the contents of the rules file indicate that [**quilt**(1)](/quilt/1.md) is used. Various styles of `"quilt"` integration are detected:

  - dh --with=quilt

    - *quilt.make* with "$(QUILT\_STAMPFN)" and "unpatch" targets.

    - add\_quilt

  Integrates [**quilt**(1)](/quilt/1.md) into the rules. For [**dh**(1)](/dh/1.md) *tiny* rules (as determined by "is\_dhtiny") `"--with=quilt"` is added to every `"dh"` invocation. For the more traditional variant, quilt is integrated via *quilt.make* and its `"$(QUILT_STAMPFN)"` and `"unpatch"` targets.

- drop\_quilt

  Removes [**quilt**(1)](/quilt/1.md) integration. Both [**dh**(1)](/dh/1.md) *tiny* style (`"dh` `--with=quilt"`) and traditional (`"$(QUILT_STAMPFN)"` and `"unpatch"`) approaches are detected and removed.

- read \[*file name*\]

  Replaces the current rules content with the content of *filename*. If *filename* is not given, uses the value of the "filename" member.

- write \[*filename*\]

  Writes the in-memory contents *filename*. If not given, uses the value of the "filename" member.

  If "lines" points to an empty array, the file is removed.

## COPYRIGHT & LICENSE

- Copyright (C) 2009, 2010 Damyan Ivanov \<dmn@debian.org\>

  - Copyright (C) 2014 gregor herrmann \<gregoa@debian.org\>

  This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
