読者です 読者をやめる 読者になる 読者になる

Erlang でのビルドを SCons で

scons erlang

Erlang Questions からぱくったもので、自分が考えた物ではないです。

import os
env = Environment(ENV=os.environ)

#######################################################################
# Erlang Builder
#ERLANG_BIN = ""
#ERLC = os.path.join(ERLANG_BIN, 'erlc')
ERLC = 'erlc'

beam_builder = Builder(
  generator =
    lambda source, target, env, for_signature:
      ERLC +
      # Append include entries
      reduce(lambda acum, path: acum+' -I'+str(path),
        [""] + env.get('ERLINCLUDE', [])) +
      # Append path entries
      reduce(lambda acum, path: acum+' -pa'+str(path),
        [""] + env.get('ERLPATH', [])) +
      ' -o $TARGET $SOURCES' ,
    suffix = '.beam',
    src_suffix = '.erl')

env.Append(BUILDERS={'Beam': beam_builder})

#######################################################################
# Example use
#env.Append(ERLINCLUDE = [Dir("."), Dir("./subsystem")])
#env.Append(ERLPATH = [Dir("/path/to/any/library"), 
#Dir("/path/to/other/library")])

erlang_sources = Split("""
spam.erl
spam_sup.erl
eggs.erl
""")
#erlang_sources = Glob('*.erl') 

beams = []

for erlang_source in erlang_sources:
  beam = env.Beam(erlang_source)
  beams.append(beam)

#DIST_BEANS="../ebin"

#install_beans = Install(DIST_BEANS, beams)
#Alias('install', install_beans)

OMake を使うべきなのか、SCons を使うべきなのか。個人的には困ったときにソースが読める SCons で頑張りたいです。

Split が面倒な場合は erlang_sources = Glob('*.erl') という技もあります。