title: Why can't I compile with OpenBSD?
body: <p>My program used to compile fine with OpenBSD before I added the lemon parser. Now it compiles on Linux but on OpenBSD I get an error I don't understand. </p>
  
  <pre><code>$ cmake ..
  -- The C compiler identification is GNU 4.2.1
  -- The CXX compiler identification is GNU 4.2.1
  -- 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
  -- Configuring done
  -- Generating done
  -- Build files have been written to: /home/dac/test/openshell/build
  $ make
  Scanning dependScanning dependencies of target shell
  [ 28%] Building C object CMakeFiles/shell.dir/main.c.o
  /home/dac/test/openshell/main.c: In function 'main':
  /home/dac/test/openshell/main.c:788: warning: implicit declaration of function 'add_history'
  /home/dac/test/openshell/main.c: In function 'command':
  /home/dac/test/openshell/main.c:573: warning: passing argument 1 of 'expandVariable' discards qualifiers from pointer target type
  cc: -ledit: linker input file unused because linking not done
  cc: -lncurses: linker input file unused because linking not done
  cc: -lcurses: linker input file unused because linking not done
  cc: -ltermcap: linker input file unused because linking not done
  [ 42%] Building C object CMakeFiles/shell.dir/shellparser.c.o
  /home/dac/test/openshell/shellparser.c:280: error: expected expression before '%' token
  /home/dac/test/openshell/shellparser.c:288: error: expected expression before '%' token
  /home/dac/test/openshell/shellparser.c:288: error: initializer element is not constant
  /home/dac/test/openshell/shellparser.c:288: error: (near initialization for 'yyRuleName[0]')
  /home/dac/test/openshell/shellparser.c: In function 'yy_destructor':
  /home/dac/test/openshell/shellparser.c:370: error: expected expression before '%' token
  /home/dac/test/openshell/shellparser.c:370: warning: statement with no effect
  /home/dac/test/openshell/shellparser.c: In function 'yyStackOverflow':
  /home/dac/test/openshell/shellparser.c:551: error: expected expression before '%' token
  /home/dac/test/openshell/shellparser.c:551: warning: statement with no effect
  /home/dac/test/openshell/shellparser.c: At top level:
  /home/dac/test/openshell/shellparser.c:609: error: expected expression before '%' token
  /home/dac/test/openshell/shellparser.c:609: warning: missing braces around initializer
  /home/dac/test/openshell/shellparser.c:609: warning: (near initialization for 'yyRuleInfo[0]')
  /home/dac/test/openshell/shellparser.c:609: error: initializer element is not constant
  /home/dac/test/openshell/shellparser.c:609: error: (near initialization for 'yyRuleInfo[0].lhs')
  /home/dac/test/openshell/shellparser.c: In function 'yy_reduce':
  /home/dac/test/openshell/shellparser.c:664: error: expected expression before '%' token
  /home/dac/test/openshell/shellparser.c:664: warning: statement with no effect
  /home/dac/test/openshell/shellparser.c: In function 'yy_parse_failed':
  /home/dac/test/openshell/shellparser.c:710: error: expected expression before '%' token
  /home/dac/test/openshell/shellparser.c:710: warning: statement with no effect
  /home/dac/test/openshell/shellparser.c: In function 'yy_syntax_error':
  /home/dac/test/openshell/shellparser.c:726: error: expected expression before '%' token
  /home/dac/test/openshell/shellparser.c:726: warning: statement with no effect
  /home/dac/test/openshell/shellparser.c: In function 'yy_accept':
  /home/dac/test/openshell/shellparser.c:745: error: expected expression before '%' token
  /home/dac/test/openshell/shellparser.c:745: warning: statement with no effect
  /home/dac/test/openshell/shellparser.c: At top level:
  /home/dac/test/openshell/shellparser.c:918: error: expected identifier or '(' before string constant
  /home/dac/test/openshell/shellparser.c:929: error: expected identifier or '(' before ',' token
  </code></pre>
  
  <p>Why is is happening and what can I do about it? Did I forget to include a library? My cmake file is </p>
  
  <pre><code>cmake_minimum_required(VERSION 3.0)
  project(shell.test)
  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -L/usr/local/include/ -L/usr/include -std=c99 -pedantic -O3 -g -Wall -pedantic -ledit -lncurses -lcurses -ltermcap")
  include_directories(/usr/local/include/ /usr/include)
  link_directories(/usr/lib)
  link_directories(/usr/local/lib)
  add_executable(shell main.c shellparser.c errors.c util.c)
  target_link_libraries(shell edit readline)
  add_custom_target(shellparser DEPENDS ${CMAKE_SOURCE_DIR}/shellparser.c)
  add_custom_command(OUTPUT ${CMAKE_SOURCE_DIR}/shellparser.c COMMAND lemon -s ${CMAKE_SOURCE_DIR}/shellparser.y DEPENDS ${CMAKE_SOURCE_DIR}/shellparser.y)
  add_dependencies(shell shellparser)
  set_property(TARGET shell PROPERTY C_STANDARD 99)$ 
  </code></pre>
  
  <p>On Ubuntu I can build it successfully:</p>
  
  <pre><code>$ git clone http://github.com/montao/openshell
  Cloning into 'openshell'...
  remote: Counting objects: 1439, done.
  remote: Compressing objects: 100% (184/184), done.
  remote: Total 1439 (delta 124), reused 0 (delta 0), pack-reused 1255
  Receiving objects: 100% (1439/1439), 405.08 KiB | 117.00 KiB/s, done.
  Resolving deltas: 100% (973/973), done.
  Checking connectivity... done.
  dac@dac-Latitude-E7450:~/montao/test$ cd openshell/
  dac@dac-Latitude-E7450:~/montao/test/openshell$ mkdir build
  dac@dac-Latitude-E7450:~/montao/test/openshell$ cd build/
  dac@dac-Latitude-E7450:~/montao/test/openshell/build$ cmake ..
  -- The C compiler identification is GNU 5.3.1
  -- The CXX compiler identification is GNU 5.3.1
  -- 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
  -- Configuring done
  -- Generating done
  -- Build files have been written to: /home/dac/montao/test/openshell/build
  dac@dac-Latitude-E7450:~/montao/test/openshell/build$ make
  Scanning dependencies of target shellparser
  [ 14%] Generating ../shellparser.c
  Parser statistics:
    terminal symbols...................     9
    non-terminal symbols...............     3
    total symbols......................    12
    rules..............................     8
    states.............................    14
    conflicts..........................     0
    action table entries...............    32
    total table size (bytes)...........   100
  [ 14%] Built target shellparser
  Scanning dependencies of target shell
  [ 28%] Building C object CMakeFiles/shell.dir/main.c.o
  /home/dac/montao/test/openshell/main.c: In function ‘free_pipeline’:
  /home/dac/montao/test/openshell/main.c:337:6: note: the ABI of passing struct with a flexible array member has changed in GCC 4.4
   void free_pipeline(struct pipeline pipe) {
        ^
  [ 42%] Building C object CMakeFiles/shell.dir/shellparser.c.o
  [ 57%] Building C object CMakeFiles/shell.dir/errors.c.o
  [ 71%] Building C object CMakeFiles/shell.dir/util.c.o
  /home/dac/montao/test/openshell/util.c: In function ‘make_args’:
  /home/dac/montao/test/openshell/util.c:1100:52: warning: operation on ‘jc’ may be undefined [-Wsequence-point]
               char *str = concat((char *) *retArgv[jc++], (char *) *retArgv[jc]);
                                                      ^
  /home/dac/montao/test/openshell/util.c:1100:19: warning: unused variable ‘str’ [-Wunused-variable]
               char *str = concat((char *) *retArgv[jc++], (char *) *retArgv[jc]);
                     ^
  [ 85%] Linking C executable shell
  [100%] Built target shell
  </code></pre>
  
  <p>No matter what I do, the error is there when I compile with OpenBSD. I tried everything. </p>