-- This file is part of Hoppy.
--
-- Copyright 2015-2021 Bryan Gardiner <bog@khumba.net>
--
-- Licensed under the Apache License, Version 2.0 (the "License");
-- you may not use this file except in compliance with the License.
-- You may obtain a copy of the License at
--
--     http://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an "AS IS" BASIS,
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- See the License for the specific language governing permissions and
-- limitations under the License.

-- | Package-specific utilities.
module Foreign.Hoppy.Generator.Std.Internal (
  includeHelper,
  ) where

import Foreign.Hoppy.Generator.Spec (Include, includeLocal)
import Paths_hoppy_std (getDataFileName)
import System.IO.Unsafe (unsafePerformIO)
import System.FilePath ((</>))

includeDir :: FilePath
{-# NOINLINE includeDir #-}
includeDir :: FilePath
includeDir = IO FilePath -> FilePath
forall a. IO a -> a
unsafePerformIO (IO FilePath -> FilePath) -> IO FilePath -> FilePath
forall a b. (a -> b) -> a -> b
$ FilePath -> IO FilePath
getDataFileName (FilePath -> IO FilePath) -> FilePath -> IO FilePath
forall a b. (a -> b) -> a -> b
$ FilePath
"include" FilePath -> FilePath -> FilePath
</> FilePath
"hoppy" FilePath -> FilePath -> FilePath
</> FilePath
"std"

-- | Returns a C++ include pointing to the header specified, within the
-- installed location corresponding to the @include/hoppy/std@ path in the @std@
-- sources.  (Example: @includeHelper \"utility.hpp\"@)
includeHelper :: FilePath -> Include
includeHelper :: FilePath -> Include
includeHelper FilePath
filename = FilePath -> Include
includeLocal (FilePath -> Include) -> FilePath -> Include
forall a b. (a -> b) -> a -> b
$ FilePath
includeDir FilePath -> FilePath -> FilePath
</> FilePath
filename