# vim: set sts=2 ts=8 sw=2 tw=99 et ft=python:
import os.path

# Build the packing binary garbage.
scpack = AMXX.Program(builder, 'scpack')
if builder.target_platform == 'windows':
  scpack.compiler.linkflags.remove('/SUBSYSTEM:WINDOWS')
  scpack.compiler.linkflags.append('/SUBSYSTEM:CONSOLE')
scpack.sources = ['scpack.c']
scpack = builder.Add(scpack)

# Generate pack files.
packed_files = ['sc5', 'sc7']
packed_includes = []
for packed_file in packed_files:
  # The absolute path to sc5-in.scp etc.
  in_path = os.path.join(builder.currentSourcePath, '{0}-in.scp'.format(packed_file))

  # The output file relative to the output folder, i.e. sourcepawn/compiler/sc5.scp.
  out_path = os.path.join(builder.buildFolder, '{0}.scp'.format(packed_file))

  # The absolute path to the build folder, i.e. /Users/.../sourcepawn/compiler.
  build_folder = os.path.join(builder.buildPath, builder.buildFolder)

  # scpack runs in ./sourcepawn/compiler/scpack/ so we build relative paths
  # from there.
  scpack_argv = [
    os.path.join(builder.buildPath, scpack.binary.path),
    os.path.relpath(in_path, build_folder),
    os.path.relpath(os.path.join(builder.buildPath, out_path), build_folder),
  ]

  _, (entry,) = builder.AddCommand(
    inputs = [scpack.binary, in_path],
    argv = scpack_argv,
    outputs = ['{0}.scp'.format(packed_file)],
  )
  packed_includes += [entry]
  
binary = AMXX.Library(builder, 'amxxpc32')

binary.compiler.includes += [
  builder.currentSourcePath,
  os.path.join(builder.buildPath, builder.buildFolder),
]

binary.compiler.sourcedeps += packed_includes

if builder.target_platform in ['mac', 'linux']:
  binary.compiler.defines += ['ENABLE_BINRELOC']
  binary.compiler.postlink += ['-lm', '-lpthread']

binary.compiler.defines += [
  'NO_MAIN',
  'PAWNC_DLL',
  'HAVE_STDINT_H',
  '_GNU_SOURCE',
]

binary.sources = [
  'sc1.c',
  'sc2.c',
  'sc3.c',
  'sc4.c',
  'sc5.c',
  'sc6.c',
  'sc7.c',
  'scvars.c',
  'scmemfil.c',
  'scstate.c',
  'sclist.c',
  'sci18n.c',
  'scexpand.c',
  'pawncc.c',
  'libpawnc.c',
  'prefix.c',
  'memfile.c',
  'sp_symhash.c',
]

if builder.target_platform == 'windows':
  binary.sources+= ['libpawnc.rc']

AMXX.libpc300 = builder.Add(binary)
