haskell — 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?

4

Решение

Задача ещё не решена.

Другие решения