wesnoth/utils/SConstruct

106 lines
3.2 KiB
Python

# vi: syntax=python
import glob
"""
Runs this as:
scons -f utils/SConstruct [editor=1] [server=1]
from within the wesnoth toplevel directory. It expects to have all kinds of
windows dependencies in the parent directory, like this:
../wesnoth/(you are here)
../win-deps/...
and it will create/use a build directory in the parent folder as well:
../build/...
For details see the cross-compiling instructions on the Wiki.
"""
editor = ARGUMENTS.get("editor", "")
wesnothd = ARGUMENTS.get("server", "")
#sources = glob.glob("src/*.cpp") +\
# glob.glob("src/widgets/*.cpp") +\
# glob.glob("src/serialization/*.cpp") +\
# glob.glob("src/sdl_ttf/*.c")
#sources.remove("src/loadscreen_empty.cpp")
#sources.remove("src/animated_editor.cpp")
def parse_automake(filename, variable):
"""Crude helper function to parse an automake file."""
sources = []
am = file(filename).read()
x = am.find(variable)
while 1:
done = False
while am[x] != '\\':
if am[x] == '\n':
done = True
break
x += 1
if done: break
x += 1
while am[x].isspace(): x += 1
name = ""
while not am[x].isspace():
name += am[x]
x += 1
sources.append("src/" + name)
return sources
# read the sources from the automake file
sources = parse_automake("src/Makefile.am", "libwesnoth_core_a_SOURCES")
sources += parse_automake("src/Makefile.am", "wesnoth_SOURCES")
# there shouldn't be doubles, but well, let's remove them :)
sources = list(set(sources))
# read editor sources from automake file
editor_sources = parse_automake("src/Makefile.am", "libwesnoth_core_a_SOURCES")
editor_sources += parse_automake("src/Makefile.am", "wesnoth_editor_SOURCES")
editor_sources = list(set(editor_sources))
# read the server sources from the automake file
wesnothd_sources = parse_automake("src/Makefile.am", "libwesnoth_core_a_SOURCES")
wesnothd_sources += parse_automake("src/Makefile.am", "wesnothd_SOURCES")
wesnothd_sources = list(set(wesnothd_sources))
env = Environment()
# The cross compiler to use
env["CC"] = "i586-mingw32msvc-gcc"
env["CXX"] = "i586-mingw32msvc-g++"
# Dependencies: SDL, SDL_net, SDL_mixer, SDL_image, freetype, libintl, python
# This is where I put the dependency headers
env.Append(CPPPATH = ["../win-deps/include"])
# This is where I put the python headers.
env.Append(CPPPATH = ["../win-deps/include/python24"])
# This is where I put the dependency libs
env.Append(LIBPATH = ["../win-deps/lib"])
# Compilation settings
env.Append(CCFLAGS = ["-O2", "-mthreads", "-DHAVE_PYTHON"])
env.Append(LINKFLAGS = ["-s", "-mwindows", "-lmingwthrd"])
env.Append(CPPPATH = ["src", "src/widgets"])
env.Append(LIBS = ["mingw32", "SDLmain", "SDL", "SDL_net", "SDL_mixer", "SDL_image",
"intl", "wsock32", "freetype", "python24", "boost-iostreams", "z"])
# Scons stuff
env.BuildDir("../build", "src")
env.SConsignFile("sconsign")
# Windows stuff
env["PROGSUFFIX"] = ".exe"
# Compile it!
env.Program("wesnoth", ["../build/" + x[4:] for x in sources])
if editor:
env.Program("wesnoth_editor", ["../build/" + x[4:] for x in editor_sources])
if wesnothd:
env.Program("wesnothd", ["../build/" + x[4:] for x in wesnothd_sources])