# pcb-rnd hacking - plugin .pup fields

The pup file holds all metadata for a plugin that is required for ./configure and for puplug to load the plugin run-time. Fields starting with $ are pcb-rnd-specific fields, the rest are common puplug fields that will behave the same in other puplug modularized projects as well.

Each field is a single-line and can not contain semicolon (';').

The fields in use for pcb-rnd plugins:

- $class the same as the plugin name prefix (see conventions. ) or (feature) for feature plugins; it's redundant but is kept for supporting external plugins - see mods3 for a short list of all classes
- $short short description - should be less than 32 characters; this shows up in the configure summary
- $long long description - used for documentation; no length limitation, but must be a single line
- $state works, WIP, abandoned or deprecated - see mods3 for explanation
- $lstate [optional] a chance to explain why the value of default is what it is; e.g. why a plugin is disabled
- $package when pcb-rnd is packaged for a distribution or OS, which package this plugin should end up in (see also: packaging howto)
- $fmt-native only for io_ plugins: whether this format is considered native (see also: io_lihata's pup)
- $fmt-feature-r only for io_ plugins: a read/load feature supported by the plugin (multiple entries of this should be added; see also: io_lihata's pup)
- $fmt-feature-w only for io_ plugins: a write/save feature supported by the plugin (multiple entries of this should be added; see also: io_lihata's pup)
- default disable-all or disable or buildin or plugin; see below
- dep [optional] a single plugin name on which plg depends; multiple dep lines can be added
- conflict [optional] a single plugin name on which plg conflicts with; multiple dep lines can be added
- autoload [optional] when 1, the plugin is automatically loaded and initialized (when not disabled); do not set this on libs and other code that are accessible only as a dependency of other plugins; set this 1 on HID, io, import, export, feature plugins

Values of default:

- buildin - unless the user requests otherwise, your plugin is linked into the executable
- plugin - unless the user requests otherwise, your plugin is dynamically linked; not recommended: the policy is to let users explicitly request dynamic linking
- disable - unless the user requests otherwise, your plugin is not compiled (recommended until the plugin gets some user testing)
- disable-all - the plugin stays disabled even with ./configure --all=* and the only way to enable it is to explicitly name it