Hi,

On Tue, Sep 17, 2024 at 6:45 AM Jun Omae <jun6...@gmail.com> wrote:
>
> On 2024/09/16 21:41, rin...@apache.org wrote:
> > Author: rinrab
> > Date: Mon Sep 16 12:41:13 2024
> > New Revision: 1920717
> >
> > URL: http://svn.apache.org/viewvc?rev=1920717&view=rev
> > Log:
> > Merge the `cmake` branch to trunk.
>
> I'm trying to build all programs, tools, tests, swig-* bindings and apache
> modules with cmake on Windows. However, building swig-pl stopped with the
> following errors:
>
> [[[
>     22>Link:
>             Creating library 
> C:/usr/src/subversion/trunk-py312/out/Release/libperl_core.lib and object 
> C:/usr/src/subversion/trunk-py312/out/Release/libperl_core.exp
>     22>corePERL_wrap.obj : error LNK2019: unresolved external symbol 
> svn_swig_pl_thunk_ssl_server_trust_prompt referenced in function 
> _wrap_svn_auth_get_ssl_server_trust_prompt_provider 
> [C:\usr\src\subversion\trunk-py312\out\perl_core.vcxproj]
>     22>corePERL_wrap.obj : error LNK2019: unresolved external symbol 
> svn_swig_pl_thunk_ssl_client_cert_prompt referenced in function 
> _wrap_svn_auth_get_ssl_client_cert_prompt_provider 
> [C:\usr\src\subversion\trunk-py312\out\perl_core.vcxproj]
>     22>corePERL_wrap.obj : error LNK2019: unresolved external symbol 
> svn_swig_pl_thunk_ssl_client_cert_pw_prompt referenced in function 
> _wrap_svn_auth_get_ssl_client_cert_pw_prompt_provider 
> [C:\usr\src\subversion\trunk-py312\out\perl_core.vcxproj]
> ]]]

Wait... Oh, I've reproduced it.

> It is caused by that libsvn_swig_perl.def is not same between vcnet and cmake.
> The .def files directly are generated from CMakeLists.txt instead of
> build/generator/extractor.py, but the pattern for the exported symbols is
> changed. It is the root cause. The pattern should be same.
>
> In CMakeLists.txt:
> [[[
>     set(func_regex "^([A-Za-z0-9_][A-Za-z0-9_* ]+[ *])?(svn[A-Za-z0-9_]+)\\(")
> ]]]
>
> In build/generator/extractor.py:
> [[[
> _funcs = re.compile(r'^(?:(?:(?:\w+|\*) 
> )+\*?)?((?:svn|apr)_[a-z_0-9]+)\s*\(', re.M)
> ]]]
>
> The REGEX feature in cmake is poor but we could revise like the following
> changes, otherwise we should use extractor.py:

Yeah, it is incomplete, so I rewrote this regex from a blank when
implementing the extractor in CMake, and forgot to check for Perl
bindings.

> [[[
> Index: CMakeLists.txt
> ===================================================================
> --- CMakeLists.txt      (revision 1920717)
> +++ CMakeLists.txt      (working copy)
> @@ -412,15 +412,16 @@
>      set(def_file_path ${CMAKE_BINARY_DIR}/${target_name}.def)
>
>      # see build/generator/extractor.py
> -    set(func_regex "^([A-Za-z0-9_][A-Za-z0-9_* ]+[ 
> *])?(svn[A-Za-z0-9_]+)\\(")
> +    set(func_regex "(^|\n)((([A-Za-z0-9_]+|[*]) 
> )+[*]?)?((svn|apr)_[a-z_0-9]+)[ \t\r\n]*\\(")
>
>      set(defs)
>      foreach(file ${ARGN})
> -      file(STRINGS ${file} funcs REGEX "${func_regex}")
> +      file(READ ${file} contents)
> +      string(REGEX MATCHALL "${func_regex}" funcs ${contents})
>
>        foreach(func_string ${funcs})
> -        string(REGEX REPLACE "${func_regex}.*$" "\\2" func_name 
> ${func_string})
> -
> +        string(REGEX MATCH "[A-Za-z0-9_]+[ \t\r\n]*\\($" func_name 
> ${func_string})
> +        string(REGEX REPLACE "[ \t\r\n]*\\($" "" func_name ${func_name})
>          list(APPEND defs "${func_name}")
>        endforeach()
>
> ]]]
>
> Thoughts?

This patch seems to be working and it resolves the issue. I think it's
okay to commit it. Would you like to do it, or should I commit it?


--
Timofei Zhakov

Reply via email to