Problem with automake in Fedora 36

I encountered a problem with the version of automake in Fedora 36, as this problem does not exist in 35 or RHEL9. When configuring a source project designed to build with the GNU automake tools one can specify the option --with-python_prefix in order to specify the directory where the Python packages of this project (if it has any) are supposed to be installed e.g.

./configure --prefix=/opt/apps/my-project --with-python_prefix=/opt/apps/my-project

and in this case the application will be installed in

/opt/apps/my-project/

while the Python packages will be installed in

/opt/apps/my-project/lib/python3.10/site-packages/

However, in Fedora 36 the same option results in the Python packages ending up in directory:

/opt/apps/my-project/local/lib/python3.10/site-packages/

So, automake adds the “local” folder to the prefix and this can create a lot of problems because applications may not be able to find the required Python packages.

I assume that this is a bug and not something added to automake on purpose.
Are people aware of that and is there a fix for this problem?

1 Like

The complete path is usually composed of smaller definitions. For example, the complete python package path would be something like %python_prefix/%libdir/%python_site_dir (I’m not sure of the names of the macros here, it’s just an example. So, it looks like the definition of one of the macros may have changed in a new version of automake—it’s not necessarily a bug because defaults can change between versions. You can usually set the various macros using configure. For example, the %configure macro we use in package specs actually expands to this:

# more flags are set before
  ./configure --build=x86_64-redhat-linux-gnu --host=x86_64-redhat-linux-gnu \
        --program-prefix= \
        --disable-dependency-tracking \
         \
        --prefix=/usr \
        --exec-prefix=/usr \
        --bindir=/usr/bin \
        --sbindir=/usr/sbin \
        --sysconfdir=/etc \
        --datadir=/usr/share \
        --includedir=/usr/include \
        --libdir=/usr/lib64 \
        --libexecdir=/usr/libexec \
        --localstatedir=/var \
        --sharedstatedir=/var/lib \
        --mandir=/usr/share/man \
        --infodir=/usr/share/info

So maybe check what libdir is set to to begin with? It may be set to %prefix/local/lib instead of %prefix/lib, and you should be able to set it explicitly to whatever you wish.

1 Like

The library path is set automatically from the “prefix” path to:

%prefix/lib

and so all libraries are installed in the proper directory under the prefix. The same applies to all the other directories i.e. bin, etc, include, share, libexec etc. It is only the Python path which contains this “local” folder.

1 Like

But you can override the library path using --libdir, so worth trying that first to see if it works? You can file a bug with the automake maintainers here anyway:

1 Like

Ok, I will file a bug. Thank you.

Bug Report: 2094352 – Automake adds a folder "local" on top of the Python prefix when using the --with-python_prefix flag

2 Likes