---
name: "critcl_util"
section: "3tcl"
platform: "linux"
package: "critcl"
version: "3.3.1+dfsg-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/critcl_util"
---

# critcl\_util(3tcl)

CriTcl - Utilities

```

```

## NAME

critcl::util - CriTcl - Utilities

## SYNOPSIS

package require **Tcl  8.6**

package require **critcl  ?3.2?**

package require **critcl::util  ?1.2?**

**::critcl::util::checkfun** *name* ?*label*?

**::critcl::util::def** *path* *define* ?*value*?

**::critcl::util::undef** *path* *define*

**::critcl::util::locate** *label* *paths* ?*cmd*?

```

```

## DESCRIPTION

Be welcome to the *C Runtime In Tcl* (short: *CriTcl*), a system for embedding and using C code from within *Tcl* \[http://core.tcl-lang.org/tcl\] scripts.

This document is the reference manpage for the **critcl::util** package. This package provides convenience commands for advanced functionality built on top of the core. Its intended audience are mainly developers wishing to write Tcl packages with embedded C code.

This package resides in the Core Package Layer of CriTcl.

```
+----------------+
|Applications    |
| critcl         |
| critcl::app    |
+----------------+
*================*
|Core Packages   |
| critcl         |
| critcl::util   |
*================*
+----------------+
|Support Packages|
| stubs::*       |
| md5, platform  |
|  ...           |
+----------------+
```

## API

- **::critcl::util::checkfun** *name* ?*label*?

  This command checks the build-time environment for the existence of the C function *name*. It returns **true** on success, and **false** otherwise.

- **::critcl::util::def** *path* *define* ?*value*?

  This command extends the specified configuration file *path* with a **#define** directive for the named *define*. If the *value* is not specified it will default to **1**.

  The result of the command is an empty string.

  Note that the configuration file is maintained in the **critcl::cache** directory.

- **::critcl::util::undef** *path* *define*

  This command extends the specified configuration file *path* with an **#undef** directive for the named *define*.

  The result of the command is an empty string.

  Note that the configuration file is maintained in the **critcl::cache** directory.

- **::critcl::util::locate** *label* *paths* ?*cmd*?

  This command checks the build-time environment for the existence of a file in a set of possible *paths*.

  If the option *cmd* prefix is specified it will be called with the full path of a found file as its only argument to perform further checks. A return value of **false** will reject the path and continue the search.

  The return value of the command is the found path, as listed in *paths*. As a side effect the command will also print the found path, prefixed with the *label*, using **critcl::msg**.

  Failure to find the path is reported via **critcl::error**, and a possible empty string as the result, if **critcl::error** does not terminate execution. A relative path is resolved relative to the directory containing the *CriTcl script*.

## AUTHORS

Andreas Kupries

## BUGS, IDEAS, FEEDBACK

This document, and the package it describes, will undoubtedly contain bugs and other problems. Please report such at *https://github.com/andreas-kupries/critcl*. Please also report any ideas for enhancements you may have for either package and/or documentation.

## KEYWORDS

C code, Embedded C Code, code generator, compile & run, compiler, dynamic code generation, dynamic compilation, generate package, linker, on demand compilation, on-the-fly compilation

## CATEGORY

Glueing/Embedded C code

## COPYRIGHT

```
Copyright (c) 2011-2024 Andreas Kupries
```
