Заголовки hsc2hs C++
Я пытаюсь построить исполняемый файл Haskell с FFI против некоторых источников C++.
У меня есть заголовок C (cstuff/foo.h), как это:
#ifndef _FOO_H_
#define _FOO_H_
#include <somecppheader.c> // Some header outside of my control with C++ constructs
void foo();
#endif
Реализация foo не должна иметь значения. Он что-то делает и использует что-то объявленное в somecppheader.h.
Исполняемый раздел в файле Cabal выглядит следующим образом:
executable botprog
main-is: Main.hsc
other-extensions: ForeignFunctionInterface
build-depends: base >=4.7 && <4.8
build-tools: hsc2hs
default-language: Haskell2010
include-dirs: cstuff
c-sources: cstuff/foo.cpp
pkgconfig-depends: somelib -- The one that contains somecppheader.h
Main.hsc выглядит примерно так:
{-# LANGUAGE ForeignFunctionInterface #-}
#include <foo.h>
foreign import ccall "foo.h foo" :: IO ()
main = foo >> putStrLn "Called foo."
hsc2hs на самом деле не нужен в этом примере, он просто используется, чтобы вызвать ошибку, которую я пытаюсь описать.
Проблема в том, что somecppheader.h - это заголовок C++ со специфическими для C++ конструкциями, а включение файла foo.h, похоже, компилирует его как заголовок C, что не удается из-за конструкций C++, таких как определения классов.
Как я могу сказать hsc2hs или Cabal, что foo.h должен быть скомпилирован с g ++, а не с gcc?