Skip to content

Fix bug #51558: shared readline build fails #15242

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Aug 5, 2024

Conversation

petk
Copy link
Member

@petk petk commented Aug 5, 2024

The 'rl_pending_input' is a variable in Readline library and checking it with PHP_CHECK_LIBRARY wouldn't find it on some systems. This should fix the build on systems where this caused issues, such as AIX.

Which works on most systems but not on AIX mentioned in the bug as it exports variables and functions differently whereas the linker couldn't resolve the variable as a function.

The library check:

char rl_pending_input ();
int main (void) {
    return rl_pending_input ();
}

The declaration check:

#include <stdio.h>
#include <readline/readline.h>
int main (void) {
#ifndef rl_pending_input
#ifdef __cplusplus
    (void) rl_pending_input;
#else
    (void) rl_pending_input;
#endif
#endif
;
    return 0;
}

Closes https://bugs.php.net/51558

The 'rl_pending_input' is a variable in Readline library and checking it
with PHP_CHECK_LIBRARY wouldn't find it on some systems. This should fix
the build on systems where this caused issues, such as AIX.

Which works on most systems but not on AIX mentioned in the bug as it
exports variables and functions differently whereas the linker couldn't
resolve the variable as a function.

The library check:

```c
char rl_pending_input ();
int main (void) {
    return rl_pending_input ();
}
```

The declaration check:

```c

int main (void) {
    (void) rl_pending_input;
    (void) rl_pending_input;

    ;
    return 0;
}
```

Closes https://bugs.php.net/51558
The realine.h is not self-contained header and needs all sorts of
adjustments including the <stdio.h> included before. This fixes the
issue on unpatched default readline installations, such as macOS.
Copy link
Member

@devnexen devnexen left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LCTM

@petk petk marked this pull request as ready for review August 5, 2024 11:53
@petk
Copy link
Member Author

petk commented Aug 5, 2024

Thanks for the review. Yes, I think this will work fine now (added also that missing <stdio.h> include). In the git commit message the # characters are comments so it wasn't visible previously what kind of declaration check this is. Edited above. And merging this...

@petk petk merged commit 0b25e26 into php:master Aug 5, 2024
1 of 2 checks passed
@petk petk deleted the patch-readline-rl_pending_input branch August 5, 2024 13:54
petk added a commit to petk/php-src that referenced this pull request Aug 6, 2024
This is a follow-up of phpGH-15242
(0b25e26)

because the usmHMAC192SHA256AuthProtocol and usmHMAC384SHA512AuthProtocol
are not functions but arrays. The AC_CHECK_DECL might be more
appropriate and portable way to find these.

[skip ci]
@petk petk mentioned this pull request Aug 6, 2024
petk added a commit to petk/php-src that referenced this pull request Aug 9, 2024
This is a follow-up of phpGH-15242
(0b25e26)

because the usmHMAC192SHA256AuthProtocol and usmHMAC384SHA512AuthProtocol
are not functions but arrays. The AC_CHECK_DECL might be more
appropriate and portable way to find these.
petk added a commit that referenced this pull request Aug 10, 2024
This is a follow-up of GH-15242
(0b25e26)

because the usmHMAC192SHA256AuthProtocol and usmHMAC384SHA512AuthProtocol
are not functions but arrays. The AC_CHECK_DECL might be more
appropriate and portable way to find these.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants