---
name: "pmkfile"
section: "5"
platform: "linux"
package: "pmk"
version: "0.10.4-1"
release: "Debian 8 (Jessie)"
platforms: ["linux"]
url: "https://new.carta.tech/pmkfile"
---

# pmkfile(5)

pmk specification file

## NAME

**pmkfile** – pmk specification file

## DESCRIPTION

**pmkfile** is a file containing specifications that help configuring a package build on a given platform.

## SYNTAX

See pmksyntax.5 to have an overview of the basic syntax of pmkfiles.

## SPECIFIC COMMANDS

The following commands have no label.

- **SETTINGS**

  This command sets pmk parameters.

  Arguments:

  - AC\_COMPAT

    type is 'quoted', enable autoconf compatibility (empty string or filename).

  - LANG

    type is 'quoted', global default language.

  - TARGET

    type is 'list', list of target's filenames.

  - DETECT

    type is 'list', list of languages (compilers to identify).

    For example:

    ```
    SETTINGS {
    	AC_COMPAT="config.h"
    	LANG="C"
    	TARGET=("src/file.c","src/file.h")
    	DETECT=("CC")
    }
    ```

- **DEFINE**

  This command permits to define variables.

  Arguments:

  ```
  Those are the variables to be defined (quote data type only).
  ```

  For example:

  ```
  DEFINE {
  	PACKAGE="my_prog"
  	VERSION="0.1"
  }
  ```

- **SWITCHES**

  This command is setting dependency switches (see further DEPEND definition).

  Arguments:

  For example:

  ```
  SWITCHES {
  	use_curses=TRUE
  	use_gtk=FALSE
  }
  ```

## STANDARD COMMANDS

All these commands need a label.

They can all have the following optional arguments:

- **REQUIRED**

  Specify if this test is required to achieve the configuration. Type is 'bool'. If not specified, it is TRUE by default.

- **DEPEND**

  Specify check dependencies. Type is 'list'. A dependency is a label or a switch name. The value of each dependency can be negated by adding a leading '!' sign. If at least one of the dependencies is false then the check will be disabled.

  For example:

  ```
  DEPEND = ("header_gtk","!header_qt")
  ```

- **DEFS**

  Specify additional defines. Type is 'list'. If the check succeeds then the given defines are also recorded else they are ignored.

Some of these commands can also have the following arguments:

- **LANG**

  Specify the language used in the following list:

  - C, C++

    Type is 'quoted', by default \\"C\\" is the used language.

Here the list of commands:

- **CHECK\_BINARY**

  Check if a binary is in the path.

  Arguments:

  - REQUIRED

    - DEPEND

    - DEFS

    - NAME

    type is 'quoted', name of the binary.

  - VARIABLE

    type is 'quoted', variable name to store the path.

- **CHECK\_HEADER**

  Check language header and optionally a function.

  Arguments:

  - REQUIRED

    - DEPEND

    - DEFS

    - LANG

    - NAME

    type is 'quoted', name of the header.

  - MACRO

    type is 'list', list of one or more compiler macros to check, optional.

  - FUNCTION

    type is 'quoted' or 'list', name or list of functions to check, optional.

  - CFLAGS

    type is 'quoted', variable name to store CFLAGS values, optional.

  - SUBHDR

    type is 'list', list of header dependencies, optional.

- **CHECK\_LIB**

  Check a library and optionally a function.

  Arguments:

  - REQUIRED

    - DEPEND

    - DEFS

    - LANG

    - NAME

    type is 'quoted', name of the library to check.

  - FUNCTION

    type is 'quoted' or 'list', name or list of functions to check, optional.

  - LIBS

    type is 'quoted', variable name to store LIBS values, optional.

- **CHECK\_CONFIG**

  Check using a \*-config tool.

  Arguments:

  - REQUIRED

    - DEPEND

    - DEFS

    - NAME

    type is 'quoted', config tool name.

  - VERSION

    type is 'quoted', minimal version needed, optional.

  - CFLAGS

    type is 'quoted', variable name to store CFLAGS values, optional.

  - LIBS

    type is 'quoted', variable name to store LIBS values, optional.

  - VARIABLE

    type is 'quoted', variable name to store the path of the config tool, optional.

- **CHECK\_PKG\_CONFIG**

  Check a package using pkg-config.

  Arguments:

  - REQUIRED

    - DEPEND

    - DEFS

    - NAME

    type is 'quoted', package name.

  - VERSION

    type is 'quoted', minimal version needed, optional.

  - CFLAGS

    type is 'quoted', variable name to store CFLAGS values, optional.

  - LIBS

    type is 'quoted', variable name to store LIBS values, optional.

- **CHECK\_TYPE**

  Check if the given type exists.

  Arguments:

  - REQUIRED

    - DEPEND

    - DEFS

    - LANG

    - NAME

    type is 'quoted', name of the type to check.

  - HEADER

    type is quoted, name of the header where to find the given type.

  - MEMBER

    type is quoted, name of a member of the structure given in NAME to be checked.

- **CHECK\_VARIABLE**

  Check if the given variable does exist and optionally its value.

  Arguments:

  - REQUIRED

    - DEPEND

    - DEFS

    - NAME

    type is 'quoted', name of the variable to check.

  - VALUE

    type is 'quoted', value to check with the variable, optional.

## CONDITIONAL COMMANDS

- **IF(expression)**

  It contains other commands that will be executed only if the given expression is true.

  Arguments:

  For example:

  ```
  IF(header_gtk) {
  	DEFINE {
  		HAVE_GTK = "1"
  	}
  }
  ```

- **ELSE(expression)**

  It contains other commands that will be executed only if the given expression is false.

  Arguments:

  For example:

  ```
  ELSE(header_glib) {
  	DEFINE {
  		HAVE_GLIB = "0"
  	}
  }
  ```

## LIBRARY NAME BUILDING

- **BUILD\_LIB\_NAME**

  This command helps you to build static and/or shared library name(s) depending on the rules of the host operanding system.

  Arguments:

  - NAME

    type is 'quoted', name of the library (without leading 'lib').

  - MAJOR

    type is 'quoted', major number for the version, optional.

  - MINOR

    type is 'quoted', minor number for the version, optional.

  - SHARED

    type is 'quoted', variable that will be set with the shared library name, optional.

  - STATIC

    type is 'quoted', variable that will be set with the static library name, optional.

  - VERSION

    type is 'boolean', boolean value for library version processing , optional.

    For example:

    ```
    BUILD_LIB_NAME {
    	NAME = "test"
    	STATIC = "TESTLIB_STATIC"
    	SHARED = "TESTLIB_SHARED"
    	MAJOR = "0"
    	MINOR = "2"
    	VERSION = TRUE
    }
    ```

- **BUILD\_SHLIB\_NAME**

  This command has been obsoleted by the BUILD\_LIB\_NAME command.

## SEE ALSO

[pmk(1)](/pmk/1.md), [pmkscan(1)](/pmkscan/1.md), pmksyntax.5
