renpy/module/setup.py

209 lines
6 KiB
Python
Raw Normal View History

2023-01-18 22:13:55 +00:00
#!/usr/bin/env python
2023-09-12 22:16:10 +00:00
# Copyright 2004-2023 Tom Rothamel <pytom@bishoujo.us>
2023-01-18 22:13:55 +00:00
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
# (the "Software"), to deal in the Software without restriction,
# including without limitation the rights to use, copy, modify, merge,
# publish, distribute, sublicense, and/or sell copies of the Software,
# and to permit persons to whom the Software is furnished to do so,
# subject to the following conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
from __future__ import print_function
import platform
import sys
import os
import subprocess
import future
# Change to the directory containing this file.
BASE = os.path.abspath(os.path.dirname(sys.argv[0]))
os.chdir(BASE)
# Create the gen directory if it doesn't exist.
try:
os.makedirs("gen")
except Exception:
pass
# Generate styles.
import generate_styles
generate_styles.generate()
# If RENPY_CC or RENPY_LD are in the environment, and CC or LD are not, use them.
def setup_env(name):
renpy_name = "RENPY_" + name
if (renpy_name in os.environ) and (name not in os.environ):
os.environ[name] = os.environ[renpy_name]
setup_env("CC")
setup_env("LD")
setup_env("CXX")
import setuplib
2023-09-12 22:16:10 +00:00
from setuplib import android, ios, emscripten, raspi, include, library, cython, cmodule, copyfile, find_unnecessary_gen, generate_all_cython, PY2
2023-01-18 22:13:55 +00:00
# These control the level of optimization versus debugging.
setuplib.extra_compile_args = [ "-Wno-unused-function" ]
setuplib.extra_link_args = [ ]
# Detect win32.
if platform.win32_ver()[0]:
windows = True
setuplib.extra_compile_args.append("-fno-strict-aliasing")
tfd_libs = [ "comdlg32", "ole32" ]
else:
windows = False
tfd_libs = [ ]
if raspi:
setuplib.extra_compile_args.append("-DRASPBERRY_PI")
include("zlib.h")
include("png.h")
include("SDL.h", directory="SDL2")
include("ft2build.h")
include("freetype/freetype.h", directory="freetype2", optional=True) or include("freetype.h", directory="freetype2") # type: ignore
include("libavutil/avstring.h", directory="ffmpeg", optional=True) or include("libavutil/avstring.h") # type: ignore
include("libavformat/avformat.h", directory="ffmpeg", optional=True) or include("libavformat/avformat.h") # type: ignore
include("libavcodec/avcodec.h", directory="ffmpeg", optional=True) or include("libavcodec/avcodec.h") # type: ignore
include("libswscale/swscale.h", directory="ffmpeg", optional=True) or include("libswscale/swscale.h") # type: ignore
include("GL/glew.h")
include("pygame_sdl2/pygame_sdl2.h", directory="python{}.{}".format(sys.version_info.major, sys.version_info.minor))
library("SDL2")
library("png")
library("avformat")
library("avcodec")
library("avutil")
has_avresample = library("avresample", optional=True)
has_swresample = library("swresample", optional=True)
has_swscale = library("swscale", optional=True)
library("freetype")
library("z")
has_libglew = library("GLEW", optional=True)
has_libglew32 = library("glew32", optional=True)
if android:
sdl = [ 'SDL2', 'GLESv2', 'log' ]
png = 'png16'
else:
sdl = [ 'SDL2' ]
png = 'png'
cubism = os.environ.get("CUBISM", None)
if cubism:
setuplib.include_dirs.append("{}/Core/include".format(cubism))
# Modules directory.
cython(
"_renpy",
[ "IMG_savepng.c", "core.c" ],
sdl + [ png, 'z', 'm' ])
2023-09-12 22:16:10 +00:00
cython("_renpybidi", [ "renpybidicore.c" ], [ "fribidi" ])
2023-01-18 22:13:55 +00:00
if not (android or ios or emscripten):
cython("_renpytfd", [ "tinyfiledialogs/tinyfiledialogs.c" ], libs=tfd_libs)
# Sound.
sound = [ "avformat", "avcodec", "avutil", "z" ]
macros = [ ]
if has_swresample:
sound.insert(3, "swresample")
if has_avresample:
sound.insert(0, "avresample")
macros.append(("HAS_RESAMPLE", 1))
if has_swscale:
sound.insert(0, "swscale")
cython(
"renpy.audio.renpysound",
[ "renpysound_core.c", "ffmedia.c" ],
libs=sdl + sound,
define_macros=macros)
# renpy
2023-09-12 22:16:10 +00:00
cython("renpy.lexersupport")
2023-01-18 22:13:55 +00:00
cython("renpy.pydict")
cython("renpy.style")
2023-09-12 22:16:10 +00:00
cython("renpy.encryption")
2023-01-18 22:13:55 +00:00
# renpy.compat
2023-09-12 22:16:10 +00:00
if PY2:
cython("renpy.compat.dictviews")
2023-01-18 22:13:55 +00:00
# renpy.styledata
cython("renpy.styledata.styleclass")
cython("renpy.styledata.stylesets")
for p in generate_styles.prefixes:
cython("renpy.styledata.style_{}functions".format(p), pyx=setuplib.gen + "/style_{}functions.pyx".format(p))
# renpy.display
cython("renpy.display.matrix")
cython("renpy.display.render", libs=[ 'z', 'm' ])
cython("renpy.display.accelerator", libs=sdl + [ 'z', 'm' ])
2023-09-12 22:16:10 +00:00
cython("renpy.display.quaternion", libs=[ 'm' ])
2023-01-18 22:13:55 +00:00
cython("renpy.uguu.gl", libs=sdl)
cython("renpy.uguu.uguu", libs=sdl)
cython("renpy.gl.gldraw", libs=sdl)
cython("renpy.gl.gltexture", libs=sdl)
cython("renpy.gl.glenviron_shader", libs=sdl)
cython("renpy.gl.glrtt_copy", libs=sdl)
cython("renpy.gl.glrtt_fbo", libs=sdl)
cython("renpy.gl2.gl2mesh")
cython("renpy.gl2.gl2mesh2")
cython("renpy.gl2.gl2mesh3")
cython("renpy.gl2.gl2polygon")
cython("renpy.gl2.gl2model")
cython("renpy.gl2.gl2draw", libs=sdl)
cython("renpy.gl2.gl2texture", libs=sdl)
cython("renpy.gl2.gl2shader", libs=sdl)
if cubism:
cython("renpy.gl2.live2dmodel", libs=sdl)
# renpy.text
cython("renpy.text.textsupport")
cython("renpy.text.texwrap")
cython(
"renpy.text.ftfont",
[ "ftsupport.c", "ttgsubtable.c" ],
libs=sdl + [ 'freetype', 'z', 'm' ])
generate_all_cython()
find_unnecessary_gen()
# Figure out the version, and call setup.
sys.path.insert(0, '..')
import renpy
2023-09-12 22:16:10 +00:00
setuplib.setup("Ren'Py", renpy.version[7:].rstrip('un')) # @UndefinedVariable