Opened 4 years ago

Closed 4 years ago

Last modified 4 years ago

#61207 closed defect (fixed)

clisp @2.49: error: implicit declaration of function 'strverscmp' is invalid in C99

Reported by: wlharvey4 (Wesley Harvey) Owned by: easye
Priority: Normal Milestone:
Component: ports Version: 2.6.3
Keywords: Cc:
Port: clisp

Description

Error: Failed to build clisp: command execution failed

Attachments (1)

main.log (503.5 KB) - added by wlharvey4 (Wesley Harvey) 4 years ago.

Download all attachments as: .zip

Change History (9)

Changed 4 years ago by wlharvey4 (Wesley Harvey)

Attachment: main.log added

comment:1 Changed 4 years ago by ryandesign (Ryan Carsten Schmidt)

Owner: set to easye
Port: @2.49_5 removed
Status: newassigned
Summary: Processing of port clisp failedclisp @2.49: error: implicit declaration of function 'strverscmp' is invalid in C99

The log shows the problem is:

.../modules/syscalls/calls.c:626:38: error: implicit declaration of function 'strverscmp' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
          begin_system_call(); ret = strverscmp(s2,s1); end_system_call();
                                     ^

Implicit declaration of function errors are new in Xcode 12 and the matching command line tools. We should work with the developers to fix them, but if you want to avoid them, downgrade to the Xcode 11.5 command line tools.

comment:2 Changed 4 years ago by easye

clisp is not really actively developed as far as I know, so it may be hard to get in touch with a developer. But I will see what I can do.

Version 0, edited 4 years ago by easye (next)

comment:3 Changed 4 years ago by jmroot (Joshua Root)

The warning will still be printed with older Xcode versions, it just won't be fatal.

comment:4 Changed 4 years ago by chrstphrchvz (Christopher Chavez)

strverscmp() is originally a Linux syscall; where do ports normally get it from? One way might be to get it from libiberty in GCC, but historically this port was able to build with clang. (For some time FreeBSD has forced clisp to build with GCC rather than clang.)

comment:5 in reply to:  4 Changed 4 years ago by easye

Replying to chrstphrchvz:

strverscmp() is originally a Linux syscall; where do ports normally get it from? One way might be to get it from libiberty in GCC, but historically this port was able to build with clang. (For some time FreeBSD has forced clisp to build with GCC rather than clang.)

I have just gotten a note from the maintainer of clisp who pointed out there is a newer version of clisp available. I am in the process of bringing that version of the Port into MacPorts to see if it makes things work under XCode 12. The newer version of clisp is compiling with XCode 11.7 for me locally: hopefully the CI builds can show us what happens under XCode 12 when I open a merge request.

<https://gitlab.com/gnu-clisp/clisp/-/issues/26#note_417034241>

comment:6 Changed 4 years ago by easye

The newer version of clisp has been merged with <https://github.com/macports/macports-ports/pull/8504>.

I don't have XCode 12 locally to test, but what I can understand of the CI the XCode 12 build succeeds.

Could somebody please verify that the port runs under XCode 12 so we can possibly close this ticket?

comment:7 Changed 4 years ago by easye

Resolution: fixed
Status: assignedclosed

wlharvey4 (Wesley Harvey) has verified this port as building under XCode 12. Thanks!

comment:8 Changed 4 years ago by chrstphrchvz (Christopher Chavez)

It builds for me with Xcode 12 command line tools.

I notice that the build output used to contain:

checking whether strverscmp is declared without a macro... no
…
           -e 's|@''GNULIB_STRVERSCMP''@|0|g' \
…
           -e 's|@''HAVE_STRVERSCMP''@|1|g' \

but now instead contains:

checking whether strverscmp is declared without a macro... no
…
checking for strverscmp... no
…
           -e 's|@''GNULIB_STRVERSCMP''@|1|g' \
…
           -e 's|@''HAVE_STRVERSCMP''@|0|g' \

So it looks like it previously wasn't getting strverscmp() from the correct place.

Note: See TracTickets for help on using tickets.