1
1
mirror of https://github.com/urbit/shrub.git synced 2024-12-24 20:47:27 +03:00
shrub/pkg/urcrypt/configure.ac
2021-12-30 04:16:37 +00:00

120 lines
4.2 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
# There are two versions numbers that must be updated on each public release.
# 1. The libtool version (useful to the linker)
# 2. The semantic version (useful to humans)
# Follow these instructions sequentially for the libtool version:
# 1. If the library source code has changed at all since the last update,
# then increment revision (c:r:a becomes c:r+1:a).
# 2. If any interfaces have been added, removed, or changed since the last
# update, increment current, and set revision to 0.
# 3. If any interfaces have been added since the last public release,
# then increment age.
# 4. If any interfaces have been removed or changed since the last public
# release, then set age to 0.
m4_define([urcrypt_lt_current], [0])
m4_define([urcrypt_lt_revision], [0])
m4_define([urcrypt_lt_age], [0])
# The package version uses semantic versioning (semver.org).
# In summary,increment the:
# 1. MAJOR version when you make incompatible API changes,
# 2. MINOR version when you add functionality in a backwards compatible manner, and
# 3. PATCH version when you make backwards compatible bug fixes.
m4_define([urcrypt_sv_major], [0])
m4_define([urcrypt_sv_minor], [1])
m4_define([urcrypt_sv_patch], [0])
# Initialize autoconf
AC_PREREQ([2.69])
AC_INIT([urcrypt], [urcrypt_sv_major.urcrypt_sv_minor.urcrypt_sv_patch])
AC_SUBST([URCRYPT_API_VERSION], [urcrypt_sv_major])
AC_SUBST([URCRYPT_LT_VERSION],
[urcrypt_lt_current:urcrypt_lt_revision:urcrypt_lt_age])
AC_CONFIG_SRCDIR([urcrypt/util.c])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_AUX_DIR([build-aux])
AC_CONFIG_MACRO_DIR([build-aux/m4])
AC_CANONICAL_HOST
# Initialize automake
AM_INIT_AUTOMAKE([foreign subdir-objects -Wall -Werror])
# Initialize libtool
AM_PROG_AR
LT_INIT
# Initialize pkgconfig
PKG_PROG_PKG_CONFIG
PKG_INSTALLDIR
# Checks for programs
AC_PROG_CC
# Checks for pkg-config capable libraries
PKG_CHECK_MODULES([LIBSECP256K1], [libsecp256k1])
AC_CHECK_HEADER([secp256k1_recovery.h], [],
[AC_MSG_ERROR([libsecp256k1 must have recovery enabled.])])
AC_CHECK_HEADER([secp256k1_schnorrsig.h], [],
[AC_MSG_ERROR([libsecp256k1 must have Schnorr signatures enabled.])])
PKG_CHECK_MODULES([LIBCRYPTO], [libcrypto])
AS_IF([test "$enable_shared" == "yes"],
[# ensure crypto will be shared for shared object (see README.md)
save_LDFLAGS=$LDFLAGS
save_CLAGS=$CFLAGS
LDFLAGS=$LIBCRYPTO_LIBS
CFLAGS=$LIBCRYPTO_CFLAGS
AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <openssl/sha.h>],
[[unsigned char sha[32];
SHA256("hello", 5, sha);]])],
[AC_PROG_GREP
AC_CHECK_TOOL([NM], [nm])
AC_MSG_CHECKING([for shared libcrypto])
AS_IF(
[$NM conftest$EXEEXT | $GREP 'U .*SHA256' 2>&1 >/dev/null],
[AC_MSG_RESULT([yes])],
[AC_MSG_ERROR([cannot find shared object for libcrypto.])])],
[AC_MSG_ERROR([unable to link libcrypto.])])
LDFLAGS=$save_LDFLAGS
CFLAGS=$save_CFLAGS])
# Checks for non pkg-config libraries
AC_CHECK_LIB([aes_siv], [AES_SIV_CTX_new],
[AC_SUBST([LIBAES_SIV_LIBS], "-laes_siv")],
[AC_MSG_ERROR([libaes_siv is required.])],
[-lcrypto])
# Checks for header files.
AC_CHECK_HEADERS([limits.h stddef.h stdint.h stdlib.h string.h])
# Checks for typedefs, structures, and compiler characteristics.
AC_CHECK_HEADER_STDBOOL
AC_TYPE_INT32_T
AC_TYPE_INT64_T
AC_TYPE_SIZE_T
AC_TYPE_UINT32_T
AC_TYPE_UINT64_T
AC_TYPE_UINT8_T
# Checks for library functions.
AC_CHECK_FUNCS([memset])
# Checks for CPU architecture, uses SSE instructions if on X86_64
AS_CASE([$host_cpu],
[x86_64], [ARCH=x86_64
AC_MSG_WARN("Architecture x86_64: Building libargon2 with optimizations")],
[ARCH=generic
AC_MSG_WARN("Architecture $host_cpu is not x86_64: Building libargon2 without optimizations")]
)
AC_SUBST([ARCH])
AM_CONDITIONAL([ARCH_X86_64], [test "$ARCH" = 'x86_64'])
AM_CONDITIONAL([ARCH_GENERIC], [test "$ARCH" = 'generic'])
# Finish and output
AC_CONFIG_FILES([Makefile liburcrypt-$URCRYPT_API_VERSION.pc:liburcrypt.pc.in])
AC_OUTPUT