Den mån 10 juni 2024 kl 21:56 skrev Timofey Zhakov <t...@chemodax.net>:
> On Sun, Jun 9, 2024 at 10:32 PM Daniel Sahlberg > <daniel.l.sahlb...@gmail.com> wrote: > > > > Hi, > > > > I'm trying to wrap my head around building APR on Windows. > > > > The website [1] contains instructions on running for running msdev on > aprutil.dsw or to open aprutil.dsw in Visual Studio. However I don't have > msdev on my installation (Visual Studio Community 2022) and the support for > .dsw files was deprecated in Visual Studio 2022. > > > > The README file suggests to run nmake but that failed out of the box > with an error in apr_arch_misc.h: > > > > [[[ > > C:\Devel\apr_1.7.4\apr\include\arch\win32\apr_arch_misc.h(507): error > C2143: syntax error: missing ')' before '*' > > C:\Devel\apr_1.7.4\apr\include\arch\win32\apr_arch_misc.h(507): error > C2143: syntax error: missing '{' before '*' > > C:\Devel\apr_1.7.4\apr\include\arch\win32\apr_arch_misc.h(507): error > C2059: syntax error: ')' > > C:\Devel\apr_1.7.4\apr\include\arch\win32\apr_arch_misc.h(510): error > C2061: syntax error: identifier 'apr_winapi_pfn_if_indextoname' > > C:\Devel\apr_1.7.4\apr\include\arch\win32\apr_arch_misc.h(510): error > C2059: syntax error: ';' > > C:\Devel\apr_1.7.4\apr\include\arch\win32\apr_arch_misc.h(507): error > C2513: ' ': no variable declared before '=' > > C:\Devel\apr_1.7.4\apr\include\arch\win32\apr_arch_misc.h(510): error > C2065: 'apr_winapi_pfn_if_indextoname': undeclared identifier > > C:\Devel\apr_1.7.4\apr\include\arch\win32\apr_arch_misc.h(507): warning > C4047: '=': 'int' differs in levels of indirection from 'int *(__cdecl > *)(NET_IFINDEX,PCHAR)' > > C:\Devel\apr_1.7.4\apr\include\arch\win32\apr_arch_misc.h(510): error > C2146: syntax error: missing ';' before identifier 'apr_load_dll_func' > > C:\Devel\apr_1.7.4\apr\include\arch\win32\apr_arch_misc.h(507): error > C2100: illegal indirection > > C:\Devel\apr_1.7.4\apr\include\arch\win32\apr_arch_misc.h(507): error > C2064: term does not evaluate to a function taking 0 arguments > > C:\Devel\apr_1.7.4\apr\include\arch\win32\apr_arch_misc.h(507): warning > C4033: 'apr_winapi_if_indextoname' must return a value > > ]]] > > > > Editing include\apr.hw and changing _WIN32_WINNT to 0x0601 made the > build go a lot further but it ended with: > > > > [[[ > > link.exe /nologo /debug /subsystem:console /incremental:no > /out:"LibR\testall.exe" LibR\testutil.obj LibR\testtime.obj > LibR\teststr.obj LibR\testvsn.obj LibR\testipsub.obj LibR\testmmap.obj > LibR\testud.obj LibR\testtable.obj LibR\testsleep.obj LibR\testpools.obj > LibR\testfmt.obj LibR\testfile.obj LibR\testdir.obj LibR\testfileinfo.obj > LibR\testrand.obj LibR\testdso.obj LibR\testoc.obj LibR\testdup.obj > LibR\testsockets.obj LibR\testproc.obj LibR\testpoll.obj LibR\testlock.obj > LibR\testsockopt.obj LibR\testpipe.obj LibR\testthread.obj > LibR\testhash.obj LibR\testargs.obj LibR\testnames.obj LibR\testuser.obj > LibR\testpath.obj LibR\testenv.obj LibR\testprocmutex.obj > LibR\testfnmatch.obj LibR\testatomic.obj LibR\testflock.obj > LibR\testshm.obj LibR\testsock.obj LibR\testglobalmutex.obj > LibR\teststrnatcmp.obj LibR\testfilecopy.obj LibR\testtemp.obj > LibR\testlfs.obj LibR\testcond.obj LibR\testescape.obj > LibR\testskiplist.obj LibR\testencode.obj LibR\abts.obj ..\LibR\apr-1.lib > kernel32.lib advapi32.lib ws2_32.lib wsock32.lib ole32.lib shell32.lib > rpcrt4.lib > > testutil.obj : error LNK2019: unresolved external symbol > __imp__CrtSetReportFile referenced in function initialize > > testutil.obj : error LNK2019: unresolved external symbol > __imp__CrtSetReportMode referenced in function initialize > > LibR\testall.exe : fatal error LNK1120: 2 unresolved externals > > NMAKE : fatal error U1077: 'link.exe /nologo /debug /subsystem:console > /incremental:no /out:"LibR\testall.exe" LibR\testutil.obj LibR\testtime.obj > LibR\teststr.obj LibR\testvsn.obj LibR\testipsub.obj LibR\testmmap.obj > LibR\testud.obj LibR\testtable.obj LibR\testsleep.obj LibR\testpools.obj > LibR\testfmt.obj LibR\testfile.obj LibR\testdir.obj LibR\testfileinfo.obj > LibR\testrand.obj LibR\testdso.obj LibR\testoc.obj LibR\testdup.obj > LibR\testsockets.obj LibR\testproc.obj LibR\testpoll.obj LibR\testlock.obj > LibR\testsockopt.obj LibR\testpipe.obj LibR\testthread.obj > LibR\testhash.obj LibR\testargs.obj LibR\testnames.obj LibR\testuser.obj > LibR\testpath.obj LibR\testenv.obj LibR\testprocmutex.obj > LibR\testfnmatch.obj LibR\testatomic.obj LibR\testflock.obj > LibR\testshm.obj LibR\testsock.obj LibR\testglobalmutex.obj > LibR\teststrnatcmp.obj LibR\testfilecopy.obj LibR\testtemp.obj > LibR\testlfs.obj LibR\testcond.obj LibR\testescape.obj > LibR\testskiplist.obj LibR\testencode.obj LibR\abts.obj ..\LibR\apr-1.lib > kernel32.lib advapi32.lib ws2_32.lib wsock32.lib ole32.lib shell32.lib > rpcrt4.lib' : return code '0x460' > > Stop. > > ]]] > > > > I'm surely doing something wrong here... appreciating any advice and/or > pointers! > > > > Kind regards, > > Daniel Sahlberg > > > > > > [1] https://apr.apache.org/compiling_win32.html > > [2] > https://learn.microsoft.com/en-us/cpp/porting/upgrading-projects-from-earlier-versions-of-visual-cpp?view=msvc-170 > > > > Hello Daniel, > > I want to recommend you to use CMake for building APR on Windows. I > think it is simpler and more supported nowadays. > > The only commands you need to build: > > ``` > # Configure > cmake -B out -G "Visual Studio 17 2022" > > # Build > cmake --build out --config Release > > # Install > cmake --install out > # The default install dir is `C:/Program Files (x86)/APR` on Windows, > but you can choose another by specifying the `--prefix` ARG. > ``` > > The script above is similar to the vcpkg port [1] and to the GitHub > Actions script [2]. Additionally, as a follow-up to Stephen's answer, > you can pass `-disableMetrics` ARG to the bootstrap-vcpkg command, if > you want to prevent telemetry. > > If you are building APR Util, you have to do the same as for APR, but > you have to specify the directory where APR is installed. You can do > this by adding the `-DCMAKE_INSTALL_PREFIX=/apr/install/dir` argument > to your CMake configure command. > > [1] vcpkg APR port: > > https://github.com/microsoft/vcpkg/blob/ad25766aefb5313b6bc4e2a4b78a2946f84fbf66/ports/apr/portfile.cmake#L23 > [2] https://github.com/apache/apr/blob/1.7.x/.github/workflows/windows.yml > > -- > Timofei Zhakov > Thanks Timofei, I will try this tomorrow! Kind regards, Daniel (If only someone could commit a CMake build system to Subversion... oh, wait, seems you recently submitted a patch for that - thanks! - now I have the APR to review your patch ;-) )