14.1.1 Description of test suite

The test suite uses keywords to classify certain test groups:

CXX
F77
FC
GCJ

The test group exercises one of these libtool language tags.

autoconf
automake

These keywords denote that the respective external program is needed by the test group. The tests are typically skipped if the program is not installed. The ‘automake’ keyword may also denote use of the aclocal program.

interactive

This test group may require user interaction on some systems. Typically, this means closing a popup window about a DLL load error on Windows.

libltdl

Denote that the libltdl library is exercised by the test group.

libtool
libtoolize

Denote that the libtool or libtoolize scripts are exercised by the test group, respectively.

recursive

Denote that this test group may recursively re-invoke the test suite itself, with changed settings and maybe a changed libtool script. You may use the INNER_TESTSUITEFLAGS variable to pass additional settings to this recursive invocation. Typically, recursive invocations delimit the set of tests with another keyword, for example by passing -k libtool right before the expansion of the INNER_TESTSUITEFLAGS variable (without an intervening space, so you get the chance for further delimitation).

Test groups with the keyword ‘recursive’ should not be denoted with keywords, in order to avoid infinite recursion. As a consequence, recursive test groups themselves should never require user interaction, while the test groups they invoke may do so.

There is a convenience target ‘check-noninteractive’ that runs all tests from both test suites that do not cause user interaction on Windows. Conversely, the target ‘check-interactive’ runs the complement of tests and might require closing popup windows about DLL load errors on Windows.

Here is a list of the some of the current files in the test suite, and what they test for:

tests/am-subdirs.at

Tests that a binary can be built and ran from outside of the sub-directory that it is built and ran in.

tests/archive-in-archive.at

Tests convenience archive within another convenience archive. Compiles foo() in libfoo, then compiles libfoo (and bar() function) into libbar.

tests/bindir.at

Tests include a demonstration of various scenarios related to using the -bindir option with libtool, verifying that installed files are correctly linked and executed, and demonstrating flexibility in handling different installation paths and adapting to changing directory structures.

tests/bug_42313.at

Tests that there are no conflicting warnings about AC_PROG_RANLIB by verifying no autoscan AC_PROG_RANLIB warning and checking that AC_PROG_RANLIB declaration has a warning.

tests/bug_62343.at

Tests that the -no-canonical-prefixes flag is not removed from the linking command, but it is instead passed through to the linker.

tests/bug_71489.at

Tests that the local version of an installed program is used both with and without an external library.

tests/cdemo.at

Tests include a demonstration of libtool convenience libraries, a mechanism that allows build-time static libraries to be created, in a way that their components can be later linked into programs or other libraries, even shared ones.

tests/cmdline_wrap.at

Tests include a verification that libtool operates properly when the maximum command line length is very small.

tests/configure-funcs.at

Tests creation of shell functions shared with configure and libtool.

tests/configure-iface.at

Tests that exercise the configure interface to libltdl.

tests/convenience.at

Tests demonstrate libtool’s convenience archive capabilities for C, C++, Fortran, and Java languages.

tests/ctor.at

Test that libtool can handle code with C++ constructors.

tests/cwrapper.at

Test cwrapper compliance with standards for uninstalled executables, string length, and installed shared libraries.

tests/darwin.at

Tests for macOS X including compilation, concurrent library extraction, GDB debug information, ld warnings, and verifying .dylib and .so files can be used with lt_dlopen.

tests/demo.at

Tests include a demonstration of a trivial package that uses libtool. The tests include scenarios to build both static and shared libraries, only static libraries, only shared libraries, disabling fast-install mode, building PIC code, and building non-PIC code.

tests/depdemo.at

Tests include a demonstration of inter-library dependencies with libtool. The test programs link some interdependent libraries under different scenarios.

tests/deplib-in-subdir.at

Tests building and linking various libraries within various directories and sub-directories while changing directories as well. It should be possible to use a nontrivial relative path to the output file name when creating libraries and programs. The deplibs of these might have relative paths as well. When executing uninstalled programs, the paths relative to $PWD at build time needs to be translated to a path valid at execution time. Also test installing these libraries and programs; however, use consistent relative paths between libtool --mode=link and libtool --mode=install in this test.

tests/deplibs-ident.at

Tests the correct detection and handling of identical dependency libraries when using libtool.

tests/deplibs-mingw.at

Tests include various scenarios related to detecting deplibs correctly, including cases where there is no file command installed as well as the host OS being MinGW.

tests/destdir.at

Installs some libs in $DESTDIR, moves them to a different dir, then installs some false libraries in $DESTDIR that should not be linked against. If the program refers to these false libraries, there is a bug.

tests/dlloader-api.at

Tests that lt_dlopen can open a shared library and call a function from the library, verifies that lt_dlsym can find a symbol in the opened library, and make sure that lt_dlclose can properly close the library.

tests/dumpbin-symbols.at

Tests whether on Windows a convenience symbol in a section of a .lib file is present even if that section is hidden in the .obj file.

tests/duplicate_conv.at

Tests two convenience archives with the same name, and also containing an object with the same name.

tests/duplicate_deps.at

Tests circular call of dependencies between two libraries, liba and libb. Function a1() from liba calls b1() from libb and function b1() from libb calls a2() from liba.

tests/duplicate_members.at

Tests a library with multiple files of the same name (from different directories), such as 1/a.c, 2/a.c, 3/a.c, etc.

tests/early-libtool.at

Tests building binaries using libtool using two configure approaches.

tests/exceptions.at

Tests C++ exception handling with libtool.

tests/execute-mode.at

Tests the --mode=execute feature of libtool.

tests/exeext.at

Tests ensure that $EXEEXT handling works by linking and installing an executable.

tests/export.at

Tests symbol exports if shared libraries are enabled.

tests/export-def.at

Test exporting from a DLL with module definition (.def files). This test only runs if shared libraries are enabled and building a DLL is supported.

tests/f77demo.at

Tests test Fortran 77 support in libtool by creating libraries from Fortran 77 sources, and mixed Fortran and C sources, and a Fortran 77 program to use the former library, and a C program to use the latter library.

tests/fail.at

Tests to ensure that libtool really fails when it should, including after compile failure, program creation failure, and shared library creation failure.

tests/fcdemo.at

Tests are similar to the tests/f77demo.at tests, except that Fortran 90 is used in combination with the ‘FC’ interface provided by Autoconf and Automake.

tests/flags.at

Tests include checks that compile and linker flags get passed through libtool. Tests flags for C, C++, Fortran 77, and Fortran 90.

tests/help.at

Tests a variety of mode commands, including mode short-hands, to ensure basic command line functionality. Also verify that the --debug flag is handled correctly in each mode.

tests/indirect_deps.at

Tests indirect dependencies (or nested dependencies). libd depends on libconv, which depends on libb, which depends on liba.

tests/infer-tag.at

Tests that func_infer_tag works by compiling various code snippets in various languages (C, C++, Fortran, Java) without a --tag flag.

tests/inherited_flags.at

Tests the functionality of the inherited_linker_flags variable in libtool library files.

tests/install.at

Tests install mode and ensures that install_override_mode overrides the mode of the shared library (and only the shared library).

tests/lalib-syntax.at

Tests parsing of .la files including both correctly formed .la files and malformed or bogus .la files.

tests/libtool.at

Tests basic libtool functionality including shell meta-character removal, lack of supplied mode option, file extension handling, simple linking, objectlist flag usage, and LT_SUPPORTED_TAG usage.

tests/libtoolize.at

Tests that errors and warnings are reported for invalid and unknown LIBTOOLIZE_OPTIONS as well as checking the --no-warn flag suppresses libtoolize warnings.

tests/link-order2.at

Tests to make sure that depdepls are added right after the libraries that pull them in which is necessary at least for static linking and on systems where libraries do not link against other libraries.

tests/link-order.at

Tests for problems with linking libraries in different order.

tests/loadlibrary.at

Tests libltdl (a libdl API for dlopen) support of LoadLibrary for dynamically linking DLLs in Windows environments.

tests/localization.at

Tests to verify that invoking C compiler language localization options do not cause problems with libtool.

tests/lt_dladvise.at

Tests libltdl (a libdl API for dlopen) module loading advisor functions.

tests/lt_dlexit.at

Tests libltdl (a libdl API for dlopen) for a memory use after free bug in lt_dlexit.

tests/lt_dlopen_a.at

Tests lt_dlopen with an archive file. Verifies that lt_dlopen can load an archive file and successfully return a handle to it.

tests/lt_dlopen.at

Tests libltdl (a libdl API for dlopen) with a basic C example.

tests/lt_dlopenext.at

Tests libltdl (a libdl API for dlopen) with an extern C++ function.

tests/ltdl-api.at

Tests that libtool doesn’t mangle gnulib argv names.

tests/ltdl-libdir.at

Tests if ltdl can find an installed module using the libdir variable in the .la file. Tests also include a MinGW test which uses a Windows-style libdir name.

tests/mdemo.at

Tests include a demonstration of a package that uses libtool and the system independent dlopen wrapper libltdl to load modules. The library libltdl provides a dlopen wrapper for various platforms (POSIX) including support for dlpreopened modules (see Dlpreopening).

tests/need_lib_prefix.at

Tests to check for failures on systems that require libraries to be prefixed with lib.

tests/nocase.at

Tests the want_nocaseglob configuration option to search for libraries regardless of case.

tests/no-executables.at

Tests AC_NO_EXECUTABLES macro with gcc.

tests/nonrecursive.at

Tests non-recursive DLL libraries with nonrecursive Automake libltdl (a libdl API for dlopen) build.

tests/old-m4-iface.at

Tests various aspects of libtool’s old m4 interface.

tests/pic_flag.at

Tests the -fpic flag with gcc and g++.

tests/recursive.at

Tests recursive DLL libraries with recursive Automake libltdl (a libdl API for dlopen) build.

tests/resident.at

Tests that resident modules are not unloaded at program exit, as they need to be able to invoke atexit handlers. A module being a resident module means it is prevented from being lt_dlclosed.

tests/runpath-in-lalib.at

Tests the runpath configuration options in libtool (-R and -rpath) and that the resulting .la files are installed in the directory appended to their respective library’s dependency_libs by -R.

tests/search-path.at

Tests sys_lib_search_path_spec, which is an expression to get the compile-time system library search path. Tests include determining if it is possible to link an executable to system libraries and if sys_lib_search_path_spec also works on MSVC (Microsoft Visual C++).

tests/shlibpath.at

Tests include verifying proper behaviour of the shlibpath_var, which is the variable responsible for telling the linker where to find shared libraries. Additionally, this tests the behaviour of the shlibpath_overrides_runpath variable, which determines if it possible to override an executable’s hardcoded library search path with an environment variable.

tests/slist.at

Tests the functionality of the SList datastructure, which is an implementation of singly linked lists. Tests include verifying the usual linked list functions such as finding, removing, deleting, reversing, and sorting the element(s) in SLists.

tests/standalone.at

Tests libltdl functionality as a standalone tool. Tests include compiling a symlinked version of libltdl and a copied version of libltdl. Next libltdl is installed locally and linked in a project without the use of Autoconf or Automake.

tests/static.at

Tests various flags related to static and dynamic linking including -Bstatic and -Bdynamic.

tests/stresstest.at

Tests various libtool flag and option combinations, tests linking various types of objects in different sections, and tests regular expressions to cover edge cases and unusual configurations over multiple iterations.

tests/subproject.at

Tests the libltdl flag for building subprojects in individual directories. Tests cover soft-linked libltdl trees, copied libltdl trees, and linking libltdl without Autotools.

tests/sysroot.at

Tests that libtool runs properly in sandboxed sysroot directories.

tests/tagdemo.at

Tests include a demonstration of a package that uses libtool’s multi-language support through configuration tags. It generates a library from C++ sources, which is then linked to a C++ program.

tests/template.at

Tests that libtool can handle C++ code utilizing templates.

tests/testsuite.at

Main testsuite framework file processed by autom4te processes enable running the libtool test cases.

tests/versioning.at

Tests libtool’s versioning system. Tests begin with verifying the behaviour of libtool versioning flags -version-info and -version-number. Next, this tests installing a library, then updating the library with a new revision, a compatible update, and an incompatible update. In each case, the tests verify that the original library will link and install as expected.

tests/with_pic.at

Tests the function of the --enable-pic flag. The --enable-pic flag is used to specify whether or not libtool uses PIC objects. This includes tests for setting --enable-pic to no, yes, or a comma delimited list of package names.