Re: local build problem on Windows

"Leland" <[email protected]> Tue, 11 May 2021 15:00:54 -0500
Newsgroups gmane.comp.audio.audacity.devel
Message-ID <[email protected]>
Patch is attached.  I don’t feel like hassling with a pull request just for this…times are a changing.  😊

 

diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt

index 3ff5911fb..e3443ce81 100644

--- a/src/CMakeLists.txt

+++ b/src/CMakeLists.txt

@@ -1316,7 +1316,15 @@ if( CMAKE_VERSION VERSION_GREATER_EQUAL "3.16" AND NOT CCACHE_PROGRAM )

 

    if( ${_OPT}use_pch )

       message( STATUS "Using precompiled headers" )

-      target_precompile_headers( ${TARGET} PRIVATE AudacityHeaders.h )

+      target_precompile_headers( ${TARGET}

+         PRIVATE

+            # The way CMake generates the project file on Windows, the normal

+            # "force include" of configwin.h will happen AFTER AudacityHeaders.h

+            # is included.  So, anything depending on the configwin.h variables

+            # will not be properly defined.

+            $<$<CXX_COMPILER_ID:MSVC>:"${CMAKE_BINARY_DIR}/src/private/configwin.h">

+            AudacityHeaders.h

+      )

    else()

       message( STATUS "Not using precompiled headers" )

    endif()

 

 

 

From: Leland <[email protected]> 
Sent: Tuesday, May 11, 2021 1:12 PM
To: [email protected]
Subject: Re: [Audacity-devel] local build problem on Windows

 

Honestly, I don’t know what’s going on.  It builds if I configure with:

 

cmake -Daudacity_use_pch=no

 

It doesn’t build if I configure with:

 

cmake -Daudacity_use_pch=yes

 

I thought I understood why, but every “workaround” I’ve tried so far has failed…grrrrrr

 

From: Leland <[email protected] <mailto:[email protected]> > 
Sent: Tuesday, May 11, 2021 1:02 PM
To: [email protected] <mailto:[email protected]> 
Subject: Re: [Audacity-devel] local build problem on Windows

 

Hold off…this may be incorrect.  Still digging.

 

From: Leland <[email protected] <mailto:[email protected]> > 
Sent: Tuesday, May 11, 2021 12:44 PM
To: [email protected] <mailto:[email protected]> 
Subject: Re: [Audacity-devel] local build problem on Windows

 

Paul, the problem is that using “/FI” to force include configwin.h overrides the method used by CMake to include the precompiled headers. I’m trying to devise some sort of workaround, but I don’t think it’s gonna be pretty.

 

From: Leland <[email protected] <mailto:[email protected]> > 
Sent: Tuesday, May 11, 2021 11:35 AM
To: [email protected]
Subject: Re: [Audacity-devel] local build problem on Windows

 

Yea, it broke the use of precompiled headers on Windows.  Looking into it…

 

From: David Bailes <[email protected] <mailto:[email protected]> > 
Sent: Tuesday, May 11, 2021 3:50 AM
To: Audacity Development <[email protected] <mailto:[email protected]> >
Subject: [Audacity-devel] local build problem on Windows

 

Problems with my local build, using VS 2019, and using VS's cmake, as in the build instructions in win/build.txt.

Starting with the recent commit: 794f4e5877195e28afb230f2cdff166410fd5e37,

I'm getting the build errors shown below,

David.

 

    cmake_pch.cxx
U:\audacity\src\AudioIO.h(95,24): error C3646: 'midiTracks': unknown override specifier 
U:\audacity\src\AudioIO.h(95,34): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
U:\audacity\src\AudioIO.h(270,16): error C3646: 'MidiTime': unknown override specifier 
U:\audacity\src\AudioIO.h(270,24): error C2059: syntax error: '(' 
U:\audacity\src\AudioIO.h(270,26): error C2238: unexpected token(s) preceding ';' 
U:\audacity\src\AudioIO.h(368,20): error C2143: syntax error: missing ';' before '*' 
U:\audacity\src\AudioIO.h(368,20): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
U:\audacity\src\AudioIO.h(368,32): error C2238: unexpected token(s) preceding ';' 
U:\audacity\src\AudioIO.h(392,16): error C3646: 'mMaxMidiTimestamp': unknown override specifier 
U:\audacity\src\AudioIO.h(392,33): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
U:\audacity\src\AudioIO.h(415,17): error C2143: syntax error: missing ';' before '*' 
U:\audacity\src\AudioIO.h(415,17): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
U:\audacity\src\AudioIO.h(415,22): error C2238: unexpected token(s) preceding ';' 
U:\audacity\src\AudioIO.h(416,20): error C2065: 'Alg_iterator': undeclared identifier 
U:\audacity\src\AudioIO.h(416,9): error C2923: 'std::unique_ptr': 'Alg_iterator' is not a valid template type argument for parameter '_Ty' 
U:\audacity\src\AudioIO.h(416,9): error C2976: 'std::unique_ptr': too few template arguments 
  C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29910\include\memory(3319): message : see declaration of 'std::unique_ptr' [U:\audacity\out\build\x86-Debug\src\Audacity.vcxproj]
U:\audacity\src\AudioIO.h(418,17): error C2143: syntax error: missing ';' before '*' 
U:\audacity\src\AudioIO.h(418,17): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
U:\audacity\src\AudioIO.h(418,28): error C2238: unexpected token(s) preceding ';' 
U:\audacity\src\AudioIO.h(428,21): error C2143: syntax error: missing ';' before '*' 
U:\audacity\src\AudioIO.h(428,21): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
U:\audacity\src\AudioIO.h(428,37): error C2238: unexpected token(s) preceding ';' 
U:\audacity\src\AudioIO.h(434,24): error C3646: 'mMidiPlaybackTracks': unknown override specifier 
U:\audacity\src\AudioIO.h(434,43): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 

Build All failed.

_______________________________________________
audacity-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/audacity-devel
fix_windows_build.patch (application/octet-stream, 939 B)
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 3ff5911fb..e3443ce81 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -1316,7 +1316,15 @@ if( CMAKE_VERSION VERSION_GREATER_EQUAL "3.16" AND NOT CCACHE_PROGRAM )
 
    if( ${_OPT}use_pch )
       message( STATUS "Using precompiled headers" )
-      target_precompile_headers( ${TARGET} PRIVATE AudacityHeaders.h )
+      target_precompile_headers( ${TARGET}
+         PRIVATE
+            # The way CMake generates the project file on Windows, the normal
+            # "force include" of configwin.h will happen AFTER AudacityHeaders.h
+            # is included.  So, anything depending on the configwin.h variables
+            # will not be properly defined.
+            $<$<CXX_COMPILER_ID:MSVC>:"${CMAKE_BINARY_DIR}/src/private/configwin.h">
+            AudacityHeaders.h
+      )
    else()
       message( STATUS "Not using precompiled headers" )
    endif()