from SCons.Environment import Environment as Environment
import re,fileinput,os
from string import join as sjoin
from os.path import join as pjoin

def CPP2LLVMCPPAction(target,source,env):
  funcName = os.path.splitext(os.path.basename(source[0].path))[0]
  src = source[0].path
  tgt = target[0].path
  theAction = env.Action(
    "PATH='" + env['LLVM_bin'] + "' " + env['with_llvmgxx'] + env['CXXFLAGS'] +
      " -c -emit-llvm -x c++ " + src + " -o - | " + 
    env['with_llvm2cpp'] + " " + env['LLVM2CPPFLAGS'] + " -o " + tgt
  )
  env.Depends(tgt,env['with_llvm2cpp'])
  env.Depends(tgt,env['with_llvmdis'])
  env.Execute(theAction);
  return 0

def CPP2LLVMCPPMessage(target,source,env):
  return "Generating LLVM IR C++ From C++ Input: " + source[0].path

def Cpp2LLVMCpp(env):
  a = env.Action(CPP2LLVMCPPAction,CPP2LLVMCPPMessage)
  b = env.Builder(action=a,suffix='inc',src_suffix='h',single_source=1)
  env.Append(BUILDERS = {'Cpp2LLVMCpp':b})
  env['LLVM2CPPFLAGS'] = "";
  return 1
