106 lines
3.2 KiB
Python
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])
|
|
|