Ada Utility Library

June 27, 2026 ยท View on GitHub

Alire Alire Alire Alire Alire Alire Ada 2012 Build Status Test Status Coverage Documentation Status Download License GitLab Commits

This Ada library contains various utility packages for building Ada applications. This includes:

  • A logging framework close to Java log4j framework,
  • Support for INI and property files,
  • A serialization/deserialization framework for XML, JSON, CSV, Forms
  • Ada beans framework,
  • Encoding/decoding framework (Base16, Base32, Base64, SHA, HMAC-SHA, AES-256),
  • A composing stream framework (raw, files, buffers, pipes, sockets, encryption, decryption, LZMA compression, LZMA decompression),
  • Several concurrency tools (reference counters, counters, pools, fifos, arrays),
  • Process creation and pipes,
  • Support for loading shared libraries (on Windows or Unix),
  • HTTP client library on top of CURL or AWS.

Ada Util also provides a small test utility library on top of Ahven or AUnit to help in writing unit tests. Ahven is the default testing framework as it provides better reports.

Version 2.9.0 - Jun 2026

  • Feature #67: Add To_Nanoseconds and To_Ada_Time to solve GNAT warnings
  • Feature #68: Log rolling file with LZMA compression

Version 2.8.2 - Oct 2025

  • Fix #61: MacOS build is broken

Version 2.8.1 - Jul 2025

  • Fix #59: Encryption of non-aligned array raises constraint error

List all versions

Using with Alire

If you are using Alire in your project, run the following command within your Alire project to use the library:

alr with utilada

Depending on your project, you may need one or some of the following other components:

alr with utilada_aws
alr with utilada_curl
alr with utilada_lzma
alr with utilada_unit
alr with utilada_xml

Using without Alire

If you don't have Alire or want to build and install the library on a specific place, run a setup command to configure the build as well as installation directory. For a detailed description on how you can configure, build and install the library refer to the Installation guide. Otherwise, you can easily configure and build the library with the steps described below.

The support for AWS, Curl, LZMA and XML/Ada are enabled only when a HAVE_XXX=yes configuration variable has defined. Run the setup command that records in the Makefile.conf the configuration you want to build.

The HAVE_ALIRE configuration allows you to build with Alire or not.

The UTIL_OS configuration is mandatory for the setup to indicate the build host configuration. It must one of the allowed values defined in utilada_conf.gpr GNAT project in the Os_Version_Type declaration:

   type Os_Version_Type is ("none", "unix", "windows",
                            "linux32", "linux64", "win32", "win64", "macos64",
                            "netbsd32", "netbsd64", "freebsd32", "freebsd64",
                            "openbsd32", "openbsd64");

The example below enables the XML/Ada and AWS components but disables the Curl and LZMA support and disables the use of Alire to build the library.

make setup BUILD=debug PREFIX=/build/install \
  UTIL_OS=linux64 \
  HAVE_XML_ADA=yes HAVE_AWS=yes \
  HAVE_CURL=no HAVE_LZMA=no HAVE_ALIRE=no

Then build, run the unit tests and install by using:

make
make test
make install

To use the installed libraries, make sure your ADA_PROJECT_PATH contains the directory where you installed the libraries (configured by the PREFIX=<path> option in the setup phase). The installed GNAT projects are the same as those used when using Alire.

Building with GNAT 14 and below

If your GNAT compiler is GNAT 14 or below, the Ada.Calendar.Conversions.To_Ada_Time_64 function is not available. You must build and use the legacy To_Ada_Time function. For this, update the configuration by running:

make setup UTIL_TIME_64=no

and follow the build instruction.

With Alire, you may add the option -XUTIL_TIME_64=no

Samples

The samples are built by using:

cd samples
alr build

or by running:

make samples
PackageExample
Util.Dates.Formatsdate.adb
Util.Beans.Objectsobjcalc.adb, jsonobj.adb, jsonread.adb
Util.Beans.Objects.Mapsjsonobj.adb, genentities.adb
Util.Beans.Objects.Vectorsdatasets.adb, jsonobj.adb
Util.Beans.Objects.Datasetsdatasets.adb
Util.Beans.Objects.Iteratorsjsonread.adb
Util.Encodersencodes.adb
Util.Encoders.AESdecrypt.adb, encrypt.adb, decrypt_array.adb, encrypt_array.adb
Util.Encoders.SHA256sha256.adb
Util.Filesrealpath.adb, gperfhash.adb
Util.Files.Rollingrolling_file.adb
Util.Files.Walktree.adb
Util.Http.Clientswget.adb
Util.Log.Loggerslog.adb, syslog_appenders.adb, multipro_refs.adb, date.adb, xmlrd.adb, gperfhash.adb, multipro.adb, mapping.adb, csv_city.adb, bundles.adb
Util.Measuresmeasures.adb
Util.Processeslaunch.adb, env.adb, popen.adb
Util.Propertiesproperties.adb, proplist.adb, bundles.adb
Util.Refsmultipro_refs.adb
Util.Streams.AESdecrypt.adb, encrypt.adb
Util.Streams.Base64lzma_encrypt_b64.adb, lzma_decrypt_b64.adb, dumpcert.adb
Util.Streams.Buffered.Partsmultipart.adb, dumpcert.adb
Util.Streams.Filescopy.adb, sha256.adb, compress.adb, decompress.adb, decrypt.adb, encrypt.adb, lzma_encrypt.adb, lzma_decrypt.adb
Util.Streams.Pipeslaunch.adb, popen.adb
Util.Serialize.IO.CSVcsv_city.adb
Util.Serialize.IO.JSONserialize.adb, json.adb, jsonobj.adb, jsonread.adb, genentities.adb
Util.Serialize.IO.XMLserialize_xml.adb, xmi.adb, xmlrd.adb
Util.Serialize.Mapperscsv_reader.adb, csv_city.adb, xmi.adb, xmlrd.adb
Util.Serialize.Mappers.Record_Mapperxmi.adb, xmlrd.adb
Util.Serialize.Mappers.Vector_Mapperjson.adb, xmlrd.adb
Util.Stringscut.adb, escape.adb
Util.Strings.Tokenizerscut.adb, escape.adb
Util.Strings.Transformsescape.adb, gperfhash.adb
Util.Strings.Vectorsgperfhash.adb

Documentation

Articles