---
name: "Module::Install::XSUtil"
section: "3pm"
platform: "linux"
package: "libmodule-install-xsutil-perl"
version: "0.45-3"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Module::Install::XSUtil"
---

# Module::Install::XSUtil(3pm)

Utility functions for XS modules

## NAME

Module::Install::XSUtil - Utility functions for XS modules

## VERSION

This document describes Module::Install::XSUtil version 0.45.

## SYNOPSIS

```
    # in Makefile.PL
    use inc::Module::Install;
    # Enables C compiler warnings
    cc_warnings;
    # Uses ppport.h
    # No need to include it. It's created here.
    use_ppport 3.19;
    # Sets C pre-processor macros.
    cc_define q{-DUSE_SOME_FEATURE=42};
    # Sets paths for header files
    cc_include_paths 'include'; # all the header files are in include/
    # Sets paths for source files
    cc_src_paths 'src'; # all the XS and C source files are in src/
    # Installs header files
    install_headers; # all the header files in @cc_include_paths
```

## DESCRIPTION

Module::Install::XSUtil provides a set of utilities to setup distributions which include or depend on XS module.

See XS::MRO::Compat and Method::Cumulative for example.

## FUNCTIONS

### cc\_available

Returns true if a C compiler is available. YOU DO NOT NEED TO CALL THIS FUNCTION YOURSELF: it will be called for you when this module is initialized, and your Makefile.PL process will exit with 0 status. Only explicitly call if you need to do some esoteric handling when no compiler is available (for example, when you have a pure perl alternative)

### c99\_available

Returns true if a C compiler is available and it supports C99 features.

### want\_xs ?$default

Returns true if the user asked for the XS version or pure perl version of the module.

Will return true if `"--xs"` is explicitly specified as the argument to *Makefile.PL*, and false if `"--pp"` is specified. If neither is explicitly specified, will return the value specified by `$default`. If you do not specify the value of `$default`, then it will be true.

### use\_ppport ?$version

Creates *ppport.h* using `"Devel::PPPort::WriteFile()"`.

This command calls `"configure_requires 'Devel::PPPort' => $version"` and adds `"-DUSE_PPPORT"` to `"MakeMaker"`'s `"DEFINE"`.

### use\_xshelper ?-clean\|-realclean

Create s*xshelper.h*, which is a helper header file to include *EXTERN.h*, *perl.h*, *XSUB.h* and *ppport.h*, and defines some portability stuff which are not supported by *ppport.h*.

Optional argument `"-clean"` and `"-realclean"` set `"clean_files"` or `"realclean_files"` to the generated file *xshelper.h* respectably.

This command includes `"use_ppport"`.

### cc\_warnings

Enables C compiler warnings.

### cc\_define @macros

Sets `"cpp"` macros as compiler options.

### cc\_src\_paths @source\_paths

Sets source file directories which include *\*.xs* or *\*.c*.

### cc\_include\_paths @include\_paths

Sets include paths for a C compiler.

### cc\_inc\_paths @include\_paths;

This **was** an alias to `"cc_include_paths"`, but from 0.42, this is `"Module::Install::Compiler::cc_inc_paths"`, which replaces the EUMM's `"INC"` parameter.

Don't use this function. Use `"cc_include_paths"` instead.

### cc\_libs @libs

Sets `"MakeMaker"`'s `"LIBS"`. If a name starts `"-"`, it will be interpreted as is. Otherwise prefixed `"-l"`.

e.g.:

```
    cc_libs -lfoo;
    cc_libs  'foo'; # ditto.
    cc_libs qw(-L/path/to/libs foo bar); # with library paths
```

### cc\_assert\_lib %args

Checks if the given C library is installed via Devel::CheckLib. Takes exactly what Devel::CheckLib takes. Note that you must pass the path names explicitly.

### requires\_c99

Tells the build system to use C99 features.

### requires\_cplusplus

Tells the build system to use C++ language.

### install\_headers ?@header\_files

Declares providing header files, extracts functions from these header files, and adds these functions to `"MakeMaker"`'s `"FUNCLIST"`.

If *@header\_files* are omitted, all the header files in **include paths** will be installed.

### cc\_append\_to\_inc @include\_paths

Low level API.

### cc\_append\_to\_libs @libraries

Low level API.

### cc\_append\_to\_ccflags @ccflags

Low level API.

### cc\_append\_to\_funclist @funclist

Low level API.

## OPTIONS

Under the control of this module, *Makefile.PL* accepts `"-g"` option, which sets `"MakeMaker"`'s `"OPTIMIE"` `"-g"` (or something like). It will disable optimization and enable some debugging features.

## DEPENDENCIES

Perl 5.5.3 or later.

## NOTE

In *Makefile.PL*, you might want to use `"author_requires"`, which is provided by `"Module::Install::AuthorReauires"`, in order to tell co-developers that they need to install this plugin.

```
    author_requires 'Module::Install::XSUtil';
```

## BUGS

No bugs have been reported.

Please report any bugs or feature requests to the author.

## ACKNOWLEDGEMENT

Thanks to Taro Nishino for the test reports.

Tanks to lestrrat for the suggestions and patches.

## AUTHOR

Goro Fuji (gfx) \<gfuji(at)cpan.org\>.

## SEE ALSO

ExtUtils::Depends.

Module::Install.

Module::Install::CheckLib.

Devel::CheckLib.

ExtUtils::MakeMaker.

## LICENSE AND COPYRIGHT

Copyright (c) 2009-2010, Goro Fuji (gfx). All rights reserved.

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
