When building the new codec2-0.8 library, I ran into a build error that I don't see in the 0.7 branch, even when the build environments are identical.

A small 'diff' is below which will allow the library to build completely, along with a short explanation.

------------------------------

$ cmake -DCMAKE_BUILD_TYPE=Release ../codec2-0.8

-- The C 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
-- codec2 version: 0.8
-- Performing Test COMPILER_SUPPORTS_GNU11
-- Performing Test COMPILER_SUPPORTS_GNU11 - Success
-- Build type is: Release
-- Compiler Flags: -O2 -march=native -mtune=native -Wall -g -O3
-- Looking for include file stdlib.h
-- Looking for include file stdlib.h - found
-- Looking for include file string.h
-- Looking for include file string.h - found
-- Looking for floor
-- Looking for floor - found
-- Looking for ceil
-- Looking for ceil - found
-- Looking for pow
-- Looking for pow - found
-- Looking for sqrt
-- Looking for sqrt - found
-- Looking for sin
-- Looking for sin - found
-- Looking for cos
-- Looking for cos - found
-- Looking for atan2
-- Looking for atan2 - found
-- Looking for log10
-- Looking for log10 - found
-- Looking for round
-- Looking for round - found
-- Looking for getopt
-- Looking for getopt - found
-- Configuring done
-- Generating done
-- Build files have been written to: /home/mattro/Projects/freedv/build-codec2

$ make
-- snip --
[ 35%] Building C object src/CMakeFiles/codec2.dir/freedv_api.c.o
/home/mattro/Projects/freedv/codec2-0.8/src/freedv_api.c: In function ‘freedv_open_advanced’: /home/mattro/Projects/freedv/codec2-0.8/src/freedv_api.c:209:9: error: ‘for’ loop initial declarations are only allowed in C99 mode
for (int i=0; i<f->interleave_frames*coded_syms_per_frame; i++) {
^
/home/mattro/Projects/freedv/codec2-0.8/src/freedv_api.c:209:9: note: use option -std=c99 or -std=gnu99 to compile your code /home/mattro/Projects/freedv/codec2-0.8/src/freedv_api.c:227:18: error: redefinition of ‘i’
for (int i=0; i<f->interleave_frames*f->n_nat_modem_samples; i++) {
^
/home/mattro/Projects/freedv/codec2-0.8/src/freedv_api.c:209:18: note: previous definition of ‘i’ was here
for (int i=0; i<f->interleave_frames*coded_syms_per_frame; i++) {
^
/home/mattro/Projects/freedv/codec2-0.8/src/freedv_api.c:227:9: error: ‘for’ loop initial declarations are only allowed in C99 mode
for (int i=0; i<f->interleave_frames*f->n_nat_modem_samples; i++) {
^
make[2]: *** [src/CMakeFiles/codec2.dir/freedv_api.c.o] Error 1
make[1]: *** [src/CMakeFiles/codec2.dir/all] Error 2
make: *** [all] Error 2

------------------------------

The equivalent build steps for 0.7 work fine. Perhaps the "int i" could be moved out of the 'for' statement for maximum compiler compatibility?

When I make that small change to lines 209 and 227, the 0.8 library builds fine.

------------------------------

diff -ur codec2-0.8/src/freedv_api.c codec2-0.8a/src/freedv_api.c
--- codec2-0.8/src/freedv_api.c    2018-05-24 04:41:22.000000000 -0500
+++ codec2-0.8a/src/freedv_api.c    2018-05-27 11:38:20.986569633 -0500
@@ -206,7 +206,8 @@
         if (f->codeword_symbols == NULL) {return NULL;}
         f->codeword_amps = (float*)malloc(sizeof(float)*f->interleave_frames*coded_syms_per_frame);
         if (f->codeword_amps == NULL) {return NULL;}
-        for (int i=0; i<f->interleave_frames*coded_syms_per_frame; i++) {
+        int i = 0;
+        for (i=0; i<f->interleave_frames*coded_syms_per_frame; i++) {
             f->codeword_symbols[i].real = 0.0;
             f->codeword_symbols[i].imag = 0.0;
             f->codeword_amps[i] = 0.0;
@@ -224,7 +225,7 @@

         f->mod_out = (COMP*)malloc(sizeof(COMP)*f->interleave_frames*f->n_nat_modem_samples);
         if (f->mod_out == NULL) { return NULL; }
-        for (int i=0; i<f->interleave_frames*f->n_nat_modem_samples; i++) {
+        for (i=0; i<f->interleave_frames*f->n_nat_modem_samples; i++) {
             f->mod_out[i].real = 0.0;
             f->mod_out[i].imag = 0.0;
         }

------------------------------

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Freetel-codec2 mailing list
Freetel-codec2@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/freetel-codec2

Reply via email to