This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author TIGirardi
Recipients TIGirardi, christian.heimes, devnexen, koobs
Date 2020-06-13.23:03:23
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1592089404.96.0.626566413361.issue40900@roundup.psfhosted.org>
In-reply-to
Content
The problem isn't exclusive to FreeBSD. There are at least 3 problems here (see also: issue 32627).

-First is that there are 2 low-level uuid interfaces (3 if you count Windows but that is isolated and not a problem here) supposed to be declared on the headers below:

1) uuid/uuid.h which is supposed to maybe declare
uuid_generate_time_safe and declare uuid_generate_time, and probably must be linked with '-luuid'.

2) uuid.h: which is supposed to declare uuid_create and maybe uuid_enc_be (which as I understand is libc on FreeBSD an some others).

The way it currently works (I guess, 'configure' conspicuously doesn't end in '.py'), 'configure' tries to find uuid/uuid.h, if it succeeds, it `#define HAVE_UUID_UUID_H 1`, then it tries to find 'uuid.h', which on success `#define HAVE_UUID_H 1`.

Then it tries to compile with `#include <uuid/uuid.h>` and getting the address of `uuid_generate_time_safe`. On success, `#define HAVE_UUID_GENERATE_TIME_SAFE 1.`

Next, `#include <uuid.h>` and first tries to compile a code that gets `uuid_create`'s adress (on success `#define HAVE_UUID_CREATE 1`), then compile to get `uuid_enc_be` adress (on success `#define HAVE_UUID_ENC_BE 1`).

The last two ignores header detection information.

-The second problem is on `make build` and 'setup.py':

Then 'setup.py' proceeds to ignore all that and tries to find 'uuid.h' on `Py_build_ext(dist).inc_dirs` or in '/usr/include/uuid', which doesn't work if the user has 'uuid/uuid.h' in `inc_dirs` but not in '/usr/include/uuid'. (It should get the macros from sysconfig and see which header it is looking for and not put '/usr/include/uuid' on the search path, 'configure' already found or not and already disabled the include if not.)

If it finds it, it tries to find the uuid library, and adds it to linking on success, else assumes it doesn't need to do anything else and succeeds.

If it doesn't find the header (which it may not, even if 'configure' did it), it gives up on the module and warns the user in the end of `make build`.

-Third, Modules/_uuidmodule.c (see issue 32627):

Inspect the `#includes` and `py_uuid_generate_time_safe()` and you can probably guess how this happens, and you can probably see another bug waiting to to happen: neither 'configure', nor 'setup.py' actually do what '_uuidmodule.c' is expecting, and `py_uuid_generate_time_safe()` will fallback to `uuid_generate_time()` which may not be declared (which gives you another bug, but on linking time, because you may not have passed '-luuid').

At least on Linux (CentOS) on a custom --prefix, with custom libuuid.so, this proccess fails on Python 3.8.3. I edited 'setup.py' to correctly find the header and the library (for my case, anyway, I have no idea on FreeBSD) and it worked. (You don't support this use case, but that's another issue, just adding more info.)

OP's patch (which appears to be to check the functions only on detection of the respective modules) may work for his specific case, but I suspect that for a more stable solution we need to change _uuidmodule.c and at least one of 'configure(.ac)' and 'setup.py':
 - the module directives should behave as 'configure' tests;
 - which should ideally test for `uuid_generate_time()`;
 -'setup.py' should listen to 'configure' the same way the module directives do.

(and by 'we' I mean I'm volunteering to help, but I will need help on that).

Maybe what I'm saying should be another issue entirely, though I'm adding build to components (and I think we should include 3.8 and 3.9 too). Please advise.
History
Date User Action Args
2020-06-13 23:03:25TIGirardisetrecipients: + TIGirardi, christian.heimes, koobs, devnexen
2020-06-13 23:03:24TIGirardisetmessageid: <1592089404.96.0.626566413361.issue40900@roundup.psfhosted.org>
2020-06-13 23:03:24TIGirardilinkissue40900 messages
2020-06-13 23:03:23TIGirardicreate