As cool AM_COND_IF sounds, it takes a bit of exercise to make it work as you intend due to lack of documentation. At least for those not savvy enough with m4 macro language. Now, let's get down to business. These are the rules:
- AM_COND_IF cannot be invoked twice with the same Makefile output (assuming you're using AC_CONFIG_FILES with AM_COND_IF).
- You need to create automake conditionals first before using AM_COND_IF
# Platform specific checks libevent_test_on_linux="no" # For host type checks AC_CANONICAL_HOST # OS-specific tests case "${host_os}" in *linux*) # Define we are on Linux AC_DEFINE(HAVE_LINUX, 1, [Current OS is Linux]) libevent_test_on_linux="yes" ;; esac AM_CONDITIONAL(ON_LINUX, test "x$libevent_test_on_linux" = "xyes") # Generate Makefile based on current OS AC_CONFIG_FILES([Makefile lib1/Makefile lib2/Makefile experiment_2/Makefile]) AM_COND_IF([ON_LINUX], [AC_CONFIG_FILES([linux_specific_lib/Makefile])])As you can see, the first invocation of AC_CONFIG_FILES instructs automake to generate Makefile for used by all build platforms. The second invocation of AC_CONFIG_FILES (inside AM_COND_IF), only generate Makefile if the target operating system is Linux. If, for example, you want to support other operating system via a different set of OS-specific Makefiles, you can just copy the Linux implementation and add it to configure.ac, modify the Linux implementation to suit your need.
That's it. Hopefully, this helps those playing around with using AM_COND_IF. The key takeaway is: never ever call AC_CONFIG_FILES with the same target Makefile output twice! Even from inside AM_COND_IF. Autotools will complain if you do so and you won't be able to generate the Makefile via autoreconf. You must invent a way to make AC_CONFIG_FILES conform to this rule.
Post a Comment
No comments:
Post a Comment