syb0rg / tritium

A free, premium quality speech synthesis engine written completely in C.
https://syb0rg.github.io/tritium.io/
MIT License
26 stars 3 forks source link

CMake PortAudio build fails #1

Closed gwald closed 8 years ago

gwald commented 8 years ago

Hi trying to build on Mint Linux 17.1 but fails. Not sure how to proceed. I'm running cmake version 2.8.12.2 Also, just wondering if it supports fixed point hardware?

~/Downloads/tritium-master/build $ cmake .. -- Found Portaudio: /usr/lib/i386-linux-gnu/libportaudio.so CMake Warning (dev) at CMakeLists.txt:10 (if): given arguments:

"TRUE"

An argument named "TRUE" appears in a conditional statement. Policy CMP0012 is not set: if() recognizes numbers and boolean constants. Run "cmake --help-policy CMP0012" for policy details. Use the cmake_policy command to set the policy and suppress this warning. This warning is for project developers. Use -Wno-dev to suppress it.

-- Could NOT find Subversion (missing: Subversion_SVN_EXECUTABLE) CMake Error at /usr/share/cmake-2.8/Modules/ExternalProject.cmake:1241 (message): error: could not find svn for checkout of PortAudio Call Stack (most recent call first): /usr/share/cmake-2.8/Modules/ExternalProject.cmake:1805 (_ep_add_download_command) CMakeLists.txt:13 (ExternalProject_Add)

syb0rg commented 8 years ago

@gwald It appears as if you don't have SVN support on your Linux machine. I'll change this dependency later tonight.

syb0rg commented 8 years ago

@gwald I should have fixed this problem with the latest commit, make sure you are running CMake 3.0.2 as that is the minimum version required to build the software properly.

gwald commented 8 years ago

Hey that's cool of you, thanks! I've upgraded cmake to 3.x I have espeak and PortAudio dev libs installed, not sure why it needs to be cloned?

cmake .. -- The C compiler identification is GNU 4.8.4 -- The CXX compiler identification is GNU 4.8.4 -- Check for working C compiler: /usr/bin/cc -- Check for working C compiler: /usr/bin/cc -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Detecting C compile features -- Detecting C compile features - done -- Check for working CXX compiler: /usr/bin/c++ -- Check for working CXX compiler: /usr/bin/c++ -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Detecting CXX compile features -- Detecting CXX compile features - done CMake Error at /usr/share/cmake-3.2/Modules/ExternalProject.cmake:1696 (message): error: could not find git for clone of PortAudio Call Stack (most recent call first): /usr/share/cmake-3.2/Modules/ExternalProject.cmake:2321 (_ep_add_download_command) CMakeLists.txt:13 (ExternalProject_Add)

-- Configuring incomplete, errors occurred!

syb0rg commented 8 years ago

@gwald What is the directory that libportaudio is stored in?

gwald commented 8 years ago

Hey, I reinstalled it, and cmake worked. But didn't compile :/

xp@XP-Desktop ~/Downloads/tritium-master/build/src $ make clean
xp@XP-Desktop ~/Downloads/tritium-master/build/src $ make
[  0%] Building C object src/audio/CMakeFiles/audio.dir/auclient.c.o
[  2%] Building C object src/audio/CMakeFiles/audio.dir/auserver.c.o
[  4%] Building C object src/audio/CMakeFiles/audio.dir/audio.c.o
/home/xp/Downloads/tritium-master/src/audio/audio.c:185:7: error: unknown type name ‘PaStreamCallbackTimeInfo’
       const PaStreamCallbackTimeInfo* timeInfo,
       ^
/home/xp/Downloads/tritium-master/src/audio/audio.c:186:7: error: unknown type name ‘PaStreamCallbackFlags’
       PaStreamCallbackFlags statusFlags,
       ^
/home/xp/Downloads/tritium-master/src/audio/audio.c: In function ‘play_wave’:
/home/xp/Downloads/tritium-master/src/audio/audio.c:220:2: error: unknown type name ‘PaStreamParameters’
  PaStreamParameters outputParameters;
  ^
/home/xp/Downloads/tritium-master/src/audio/audio.c:225:18: error: request for member ‘device’ in something not a structure or union
  outputParameters.device = Pa_GetDefaultOutputDevice();
                  ^
/home/xp/Downloads/tritium-master/src/audio/audio.c:225:2: warning: implicit declaration of function ‘Pa_GetDefaultOutputDevice’ [-Wimplicit-function-declaration]
  outputParameters.device = Pa_GetDefaultOutputDevice();
  ^
/home/xp/Downloads/tritium-master/src/audio/audio.c:226:22: error: request for member ‘device’ in something not a structure or union
  if (outputParameters.device == paNoDevice)
                      ^
/home/xp/Downloads/tritium-master/src/audio/audio.c:232:18: error: request for member ‘channelCount’ in something not a structure or union
  outputParameters.channelCount = cst_wave_num_channels(w);
                  ^
/home/xp/Downloads/tritium-master/src/audio/audio.c:233:18: error: request for member ‘sampleFormat’ in something not a structure or union
  outputParameters.sampleFormat = paInt16;
                  ^
/home/xp/Downloads/tritium-master/src/audio/audio.c:234:21: error: request for member ‘suggestedLatency’ in something not a structure or union
     outputParameters.suggestedLatency = Pa_GetDeviceInfo( outputParameters.device )->defaultLowOutputLatency;
                     ^
/home/xp/Downloads/tritium-master/src/audio/audio.c:234:75: error: request for member ‘device’ in something not a structure or union
     outputParameters.suggestedLatency = Pa_GetDeviceInfo( outputParameters.device )->defaultLowOutputLatency;
                                                                           ^
/home/xp/Downloads/tritium-master/src/audio/audio.c:235:21: error: request for member ‘hostApiSpecificStreamInfo’ in something not a structure or union
     outputParameters.hostApiSpecificStreamInfo = NULL;
                     ^
/home/xp/Downloads/tritium-master/src/audio/audio.c:242:7: error: ‘playCallback’ undeclared (first use in this function)
       playCallback,
       ^
/home/xp/Downloads/tritium-master/src/audio/audio.c:242:7: note: each undeclared identifier is reported only once for each function it appears in
/home/xp/Downloads/tritium-master/src/audio/audio.c:243:7: warning: passing argument 2 of ‘Pa_OpenStream’ makes integer from pointer without a cast [enabled by default]
       w);
       ^
In file included from /home/xp/Downloads/tritium-master/src/audio/audio.c:5:0:
/usr/include/portaudio.h:325:9: note: expected ‘PaDeviceID’ but argument is of type ‘void *’
 PaError Pa_OpenStream( PortAudioStream** stream,
         ^
/home/xp/Downloads/tritium-master/src/audio/audio.c:243:7: warning: passing argument 3 of ‘Pa_OpenStream’ makes integer from pointer without a cast [enabled by default]
       w);
       ^
In file included from /home/xp/Downloads/tritium-master/src/audio/audio.c:5:0:
/usr/include/portaudio.h:325:9: note: expected ‘int’ but argument is of type ‘int *’
 PaError Pa_OpenStream( PortAudioStream** stream,
         ^
/home/xp/Downloads/tritium-master/src/audio/audio.c:243:7: warning: passing argument 5 of ‘Pa_OpenStream’ makes pointer from integer without a cast [enabled by default]
       w);
       ^
In file included from /home/xp/Downloads/tritium-master/src/audio/audio.c:5:0:
/usr/include/portaudio.h:325:9: note: expected ‘void *’ but argument is of type ‘unsigned int’
 PaError Pa_OpenStream( PortAudioStream** stream,
         ^
/home/xp/Downloads/tritium-master/src/audio/audio.c:243:7: warning: passing argument 8 of ‘Pa_OpenStream’ makes integer from pointer without a cast [enabled by default]
       w);
       ^
In file included from /home/xp/Downloads/tritium-master/src/audio/audio.c:5:0:
/usr/include/portaudio.h:325:9: note: expected ‘PaSampleFormat’ but argument is of type ‘struct cst_wave *’
 PaError Pa_OpenStream( PortAudioStream** stream,
         ^
/home/xp/Downloads/tritium-master/src/audio/audio.c:243:7: error: too few arguments to function ‘Pa_OpenStream’
       w);
       ^
In file included from /home/xp/Downloads/tritium-master/src/audio/audio.c:5:0:
/usr/include/portaudio.h:325:9: note: declared here
 PaError Pa_OpenStream( PortAudioStream** stream,
         ^
/home/xp/Downloads/tritium-master/src/audio/audio.c:250:9: warning: implicit declaration of function ‘Pa_IsStreamActive’ [-Wimplicit-function-declaration]
         while((err = Pa_IsStreamActive(stream)) == 1) Pa_Sleep(100);
         ^
make[2]: *** [src/audio/CMakeFiles/audio.dir/audio.c.o] Error 1
make[1]: *** [src/audio/CMakeFiles/audio.dir/all] Error 2
make: *** [all] Error 2
syb0rg commented 8 years ago

@gwald What is the directory that libportaudio is stored in? Also, where is the header file stored?

gwald commented 8 years ago
/usr/include
/usr/include/portaudio.h
/usr/lib
/usr/lib/libportaudio.a
/usr/lib/libportaudio.la
/usr/lib/libportaudio.so
/usr/share
/usr/share/doc
/usr/share/doc/libportaudio-dev
/usr/share/doc/libportaudio-dev/changelog.Debian.gz
/usr/share/doc/libportaudio-dev/copyright

/.
/usr
/usr/lib
/usr/lib/libportaudio.so.0
/usr/lib/libportaudio.so.0.0.18
/usr/share
/usr/share/doc
/usr/share/doc/libportaudio0
/usr/share/doc/libportaudio0/changelog.Debian.gz
/usr/share/doc/libportaudio0/copyright

/usr/lib
/usr/lib/i386-linux-gnu
/usr/lib/i386-linux-gnu/libportaudio.so.2
/usr/lib/i386-linux-gnu/libportaudio.so.2.0.0
/usr/share
/usr/share/doc
/usr/share/doc/libportaudio2
/usr/share/doc/libportaudio2/changelog.Debian.gz
/usr/share/doc/libportaudio2/copyright
syb0rg commented 8 years ago

@gwald I've pushed a new version for you to try out, PortAudio dependencies should be handled better by tritium now.

gwald commented 8 years ago
 mkdir build
xp@XP-Desktop ~/Downloads/tritium-master $ cd build/
xp@XP-Desktop ~/Downloads/tritium-master/build $ cmake ..
-- The C compiler identification is GNU 4.8.4
-- The CXX compiler identification is GNU 4.8.4
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found Portaudio: /usr/lib/libportaudio.so
-- Configuring done
-- Generating done
-- Build files have been written to: /home/xp/Downloads/tritium-master/build
xp@XP-Desktop ~/Downloads/tritium-master/build $ make
Scanning dependencies of target cmu_us_slt
[  1%] Building C object lang/cmu_us_slt/CMakeFiles/cmu_us_slt.dir/cmu_us_slt.c.o
[  2%] Building C object lang/cmu_us_slt/CMakeFiles/cmu_us_slt.dir/cmu_us_slt_cg_single_mcep_trees.c.o
[  3%] Building C object lang/cmu_us_slt/CMakeFiles/cmu_us_slt.dir/cmu_us_slt_cg.c.o
[  4%] Building C object lang/cmu_us_slt/CMakeFiles/cmu_us_slt.dir/cmu_us_slt_cg_single_params.c.o
[  4%] Building C object lang/cmu_us_slt/CMakeFiles/cmu_us_slt.dir/cmu_us_slt_cg_durmodel.c.o
[  5%] Building C object lang/cmu_us_slt/CMakeFiles/cmu_us_slt.dir/cmu_us_slt_cg_phonestate.c.o
[  6%] Building C object lang/cmu_us_slt/CMakeFiles/cmu_us_slt.dir/cmu_us_slt_cg_f0_trees.c.o
[  6%] Built target cmu_us_slt
Scanning dependencies of target audio
[  6%] Building C object src/audio/CMakeFiles/audio.dir/auclient.c.o
[  7%] Building C object src/audio/CMakeFiles/audio.dir/auserver.c.o
[  8%] Building C object src/audio/CMakeFiles/audio.dir/audio.c.o
/home/xp/Downloads/tritium-master/src/audio/audio.c:185:7: error: unknown type name ‘PaStreamCallbackTimeInfo’
       const PaStreamCallbackTimeInfo* timeInfo,
       ^
/home/xp/Downloads/tritium-master/src/audio/audio.c:186:7: error: unknown type name ‘PaStreamCallbackFlags’
       PaStreamCallbackFlags statusFlags,
       ^
/home/xp/Downloads/tritium-master/src/audio/audio.c: In function ‘play_wave’:
/home/xp/Downloads/tritium-master/src/audio/audio.c:220:2: error: unknown type name ‘PaStreamParameters’
  PaStreamParameters outputParameters;
  ^
/home/xp/Downloads/tritium-master/src/audio/audio.c:225:18: error: request for member ‘device’ in something not a structure or union
  outputParameters.device = Pa_GetDefaultOutputDevice();
                  ^
/home/xp/Downloads/tritium-master/src/audio/audio.c:225:2: warning: implicit declaration of function ‘Pa_GetDefaultOutputDevice’ [-Wimplicit-function-declaration]
  outputParameters.device = Pa_GetDefaultOutputDevice();
  ^
/home/xp/Downloads/tritium-master/src/audio/audio.c:226:22: error: request for member ‘device’ in something not a structure or union
  if (outputParameters.device == paNoDevice)
                      ^
/home/xp/Downloads/tritium-master/src/audio/audio.c:232:18: error: request for member ‘channelCount’ in something not a structure or union
  outputParameters.channelCount = cst_wave_num_channels(w);
                  ^
/home/xp/Downloads/tritium-master/src/audio/audio.c:233:18: error: request for member ‘sampleFormat’ in something not a structure or union
  outputParameters.sampleFormat = paInt16;
                  ^
/home/xp/Downloads/tritium-master/src/audio/audio.c:234:21: error: request for member ‘suggestedLatency’ in something not a structure or union
     outputParameters.suggestedLatency = Pa_GetDeviceInfo( outputParameters.device )->defaultLowOutputLatency;
                     ^
/home/xp/Downloads/tritium-master/src/audio/audio.c:234:75: error: request for member ‘device’ in something not a structure or union
     outputParameters.suggestedLatency = Pa_GetDeviceInfo( outputParameters.device )->defaultLowOutputLatency;
                                                                           ^
/home/xp/Downloads/tritium-master/src/audio/audio.c:235:21: error: request for member ‘hostApiSpecificStreamInfo’ in something not a structure or union
     outputParameters.hostApiSpecificStreamInfo = NULL;
                     ^
/home/xp/Downloads/tritium-master/src/audio/audio.c:242:7: error: ‘playCallback’ undeclared (first use in this function)
       playCallback,
       ^
/home/xp/Downloads/tritium-master/src/audio/audio.c:242:7: note: each undeclared identifier is reported only once for each function it appears in
/home/xp/Downloads/tritium-master/src/audio/audio.c:243:7: warning: passing argument 2 of ‘Pa_OpenStream’ makes integer from pointer without a cast [enabled by default]
       w);
       ^
In file included from /home/xp/Downloads/tritium-master/src/audio/audio.c:5:0:
/usr/include/portaudio.h:325:9: note: expected ‘PaDeviceID’ but argument is of type ‘void *’
 PaError Pa_OpenStream( PortAudioStream** stream,
         ^
/home/xp/Downloads/tritium-master/src/audio/audio.c:243:7: warning: passing argument 3 of ‘Pa_OpenStream’ makes integer from pointer without a cast [enabled by default]
       w);
       ^
In file included from /home/xp/Downloads/tritium-master/src/audio/audio.c:5:0:
/usr/include/portaudio.h:325:9: note: expected ‘int’ but argument is of type ‘int *’
 PaError Pa_OpenStream( PortAudioStream** stream,
         ^
/home/xp/Downloads/tritium-master/src/audio/audio.c:243:7: warning: passing argument 5 of ‘Pa_OpenStream’ makes pointer from integer without a cast [enabled by default]
       w);
       ^
In file included from /home/xp/Downloads/tritium-master/src/audio/audio.c:5:0:
/usr/include/portaudio.h:325:9: note: expected ‘void *’ but argument is of type ‘unsigned int’
 PaError Pa_OpenStream( PortAudioStream** stream,
         ^
/home/xp/Downloads/tritium-master/src/audio/audio.c:243:7: warning: passing argument 8 of ‘Pa_OpenStream’ makes integer from pointer without a cast [enabled by default]
       w);
       ^
In file included from /home/xp/Downloads/tritium-master/src/audio/audio.c:5:0:
/usr/include/portaudio.h:325:9: note: expected ‘PaSampleFormat’ but argument is of type ‘struct cst_wave *’
 PaError Pa_OpenStream( PortAudioStream** stream,
         ^
/home/xp/Downloads/tritium-master/src/audio/audio.c:243:7: error: too few arguments to function ‘Pa_OpenStream’
       w);
       ^
In file included from /home/xp/Downloads/tritium-master/src/audio/audio.c:5:0:
/usr/include/portaudio.h:325:9: note: declared here
 PaError Pa_OpenStream( PortAudioStream** stream,
         ^
/home/xp/Downloads/tritium-master/src/audio/audio.c:250:9: warning: implicit declaration of function ‘Pa_IsStreamActive’ [-Wimplicit-function-declaration]
         while((err = Pa_IsStreamActive(stream)) == 1) Pa_Sleep(100);
         ^
make[2]: *** [src/audio/CMakeFiles/audio.dir/audio.c.o] Error 1
make[1]: *** [src/audio/CMakeFiles/audio.dir/all] Error 2
make: *** [all] Error 2
xp@XP-Desktop ~/Downloads/tritium-master/build $ 
syb0rg commented 8 years ago

@gwald So for some reason it's not finding portaudio.h at /usr/include/portaudio.h. Can you add MESSAGE(STATUS ${PORTAUDIO_INCLUDE_DIRS}) within the if (${PORTAUDIO_FOUND}) conditional in CMakeLists.txt (between lines 10 and 12)? If you add that and re-run CMake, it should post where it's trying to search for that header and give me a better idea of how to fix that, since I can't replicate this behavior on any of my build machines.

gwald commented 8 years ago

I'm on MintLinux 17.1 , it's old now I guess. Don't stress too much about it.

xp@XP-Desktop ~/Downloads/tritium-master/build $ cmake .. -- The C compiler identification is GNU 4.8.4 -- The CXX compiler identification is GNU 4.8.4 -- Check for working C compiler: /usr/bin/cc -- Check for working C compiler: /usr/bin/cc -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Detecting C compile features -- Detecting C compile features - done -- Check for working CXX compiler: /usr/bin/c++ -- Check for working CXX compiler: /usr/bin/c++ -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Detecting CXX compile features -- Detecting CXX compile features - done -- Found Portaudio: /usr/lib/libportaudio.so -- /usr/include -- Configuring done -- Generating done -- Build files have been written to: /home/xp/Downloads/tritium-master/build

syb0rg commented 8 years ago

@gwald Well, that didn't help like I was hoping it would. It looks like it should be doing everything correctly, and I'm confused since it's still breaking. I may try downloading Mint 17.1 this weekend to try and replicate the behavior.

In the meantime, you could try debugging it yourself (it should be a problem within the CMake scripts). Another possible "fix" may be to uninstall PortAudio from your system and let my CMake script try to handle it.