def unix_python2(args): env = {'CFLAGS': CFLAGS + ' -DHAVE_LOAD_EXTENSION'} replace_in_file('setup.py', re.compile(b'def detect_tkinter.+:'), lambda m: m.group() + b'\n' + b' ' * 8 + b'return 0') conf = ('--prefix={} --with-threads --enable-ipv6 --enable-unicode={}' ' --with-system-expat --with-pymalloc --without-ensurepip').format( build_dir(), ('ucs2' if ismacos or iswindows else 'ucs4')) if islinux: conf += ' --with-system-ffi --enable-shared' # Needed as the system openssl is too old, causing the _ssl module # to fail env['LD_LIBRARY_PATH'] = LIBDIR elif ismacos: conf += (f' --enable-framework={build_dir()}/python' ' --with-signal-module') # Needed for readline detection env['MACOSX_DEPLOYMENT_TARGET'] = '10.9' with ModifiedEnv(**env): simple_build(conf, relocate_pkgconfig=False) bindir = os.path.join(build_dir(), 'bin') P = os.path.join(bindir, 'python') replace_in_file(P + '-config', re.compile(br'^#!.+/bin/', re.MULTILINE), '#!' + PREFIX + '/bin/') if ismacos: bindir = os.path.join(build_dir(), 'bin') for f in os.listdir(bindir): link = os.path.join(bindir, f) if os.path.islink(link): fp = os.readlink(link) nfp = fp.replace(build_dir(), PREFIX) if nfp != fp: os.unlink(link) os.symlink(nfp, link)
def main(args): if iswindows: windows_cmake_build() install_binaries('build/jpegtran-static.exe', 'bin', fname_map=lambda x: 'jpegtran-calibre.exe') install_binaries('build/cjpeg-static.exe', 'bin', fname_map=lambda x: 'cjpeg-calibre.exe') else: env = {} if ismacos: env['PATH'] = BIN + os.pathsep + os.environ['PATH'] env['LIBTOOLIZE'] = 'glibtoolize' env['LIBTOOL'] = 'glibtool' with ModifiedEnv(**env): run('autoreconf -fiv') conf = ('--disable-dependency-tracking --disable-shared --with-jpeg8' ' --without-turbojpeg') env = {} if ismacos: conf += f' --host x86_64-apple-darwin NASM={BIN}/nasm' replace_in_file( 'configure', re.compile(br'^PKG_CHECK_MODULES.libpng.+?\bfi\b', re.M | re.DOTALL), 'HAVE_LIBPNG=1\nHAVE_LIBPNG_TRUE="#"\n') simple_build(conf, override_prefix=os.path.join(build_dir(), 'private', 'mozjpeg'))
def main(args): os.chdir('source') if iswindows: solution_build() elif ismacos: run('./runConfigureICU MacOSX --disable-samples --prefix=' + build_dir()) run('make ' + MAKEOPTS) run('make install') else: simple_build( '--prefix=/usr --sysconfdir=/etc --mandir=/usr/share/man' ' --sbindir=/usr/bin', install_args='DESTDIR=' + build_dir(), relocate_pkgconfig=False) usr = os.path.join(build_dir(), 'usr') os.rename(os.path.join(usr, 'include'), os.path.join(build_dir(), 'include')) os.rename(os.path.join(usr, 'lib'), os.path.join(build_dir(), 'lib')) for path in walk(build_dir()): if path.endswith('.pc'): replace_in_file(path, re.compile(br'^prefix\s*=\s*/usr', flags=re.M), f'prefix={PREFIX}') shutil.rmtree(usr)
def main(args): # various cherry picks from HEAD that fix regression in the latest release apply_patches('libxml2' + os.sep) if iswindows: run(*('cscript.exe configure.js include={0}/include' ' lib={0}/lib prefix={0} zlib=yes iconv=yes'.format( PREFIX.replace(os.sep, '/')).split()), cwd='win32') replace_in_file('win32/Makefile.msvc', 'iconv.lib', 'libiconv.lib') run(f'"{NMAKE}" /f Makefile.msvc', cwd='win32') install_tree('include/libxml', 'include/libxml2') for f in walk('.'): if f.endswith('.dll'): install_binaries(f, 'bin') elif f.endswith('.lib'): install_binaries(f) else: # https://gitlab.gnome.org/GNOME/libxml2/-/issues/204 replace_in_file('encoding.c', re.compile(r'\bTRUE\b'), '1') # ICU is needed to use libxml2 in qt-webengine simple_build( '--disable-dependency-tracking --disable-static --enable-shared' ' --without-python --without-debug --with-iconv={0}' ' --with-zlib={0} --with-icu'.format(PREFIX)) for path in walk(build_dir()): if path.endswith('/xml2-config'): replace_in_file(path, re.compile(b'(?m)^prefix=.+'), f'prefix={PREFIX}')
def main(args): os.chdir('source') if iswindows: solution_build() else: build_loc = os.getcwd() conf = ('--prefix=/usr --sysconfdir=/etc --mandir=/usr/share/man' ' --sbindir=/usr/bin') if 'first_build_dir' in lipo_data: conf += ' --with-cross-build=' + lipo_data['first_build_dir'] simple_build(conf, install_args='DESTDIR=' + build_dir(), relocate_pkgconfig=False) usr = os.path.join(build_dir(), 'usr') os.rename(os.path.join(usr, 'include'), os.path.join(build_dir(), 'include')) os.rename(os.path.join(usr, 'lib'), os.path.join(build_dir(), 'lib')) for path in walk(build_dir()): if path.endswith('.pc'): replace_in_file(path, re.compile(br'^prefix\s*=\s*/usr', flags=re.M), f'prefix={PREFIX}') shutil.rmtree(usr) if 'first_build_dir' not in lipo_data: lipo_data['first_build_dir'] = build_loc
def main(args): if iswindows: run(*('cscript.exe configure.js include={0}/include' ' include={0}/include/libxml2 lib={0}/lib prefix={0}' ' zlib=yes iconv=no'.format(PREFIX.replace(os.sep, '/')).split()), cwd='win32') for f in walk('.'): bname = os.path.basename(f) if bname.startswith('Makefile'): replace_in_file(f, '/OPT:NOWIN98', '', missing_ok=True) elif bname == 'xsltconfig.h': replace_in_file(f, '@WITH_PROFILER@', '1') run(f'"{NMAKE}" /f Makefile.msvc', cwd='win32') install_tree('libxslt', 'include') install_tree('libexslt', 'include') for f in walk('.'): if f.endswith('.dll'): install_binaries(f, 'bin') elif f.endswith('.lib'): install_binaries(f) else: env = {} if ismacos: env['PATH'] = BIN + os.pathsep + os.environ['PATH'] with ModifiedEnv(**env): simple_build('--disable-dependency-tracking --disable-static' ' --enable-shared --without-python --without-debug')
def main(args): simple_build() for path in walk(os.path.join(build_dir(), 'bin')): replace_in_file(path, build_dir(), PREFIX) for path in walk(build_dir()): if path.endswith('/autom4te.cfg'): replace_in_file(path, build_dir(), PREFIX)
def main(args): if iswindows: for f in ('./devel/ftoption.h ./include/freetype/config/ftoption.h'. split()): replace_in_file( f, 'FT_BEGIN_HEADER', 'FT_BEGIN_HEADER\n#define FT_EXPORT(x) __declspec(dllexport) x\n#define FT_EXPORT_DEF(x) __declspec(dllexport) x\n' # noqa ) def build(static=False): conf = 'Release' if static: conf += ' Static' msbuild('builds/windows/vc2010/freetype.sln', configuration=conf) # Build the static library # build(static=True) # install_binaries('objs/freetype.lib') # Build the dynamic library build() install_binaries('objs/freetype.dll', 'bin') install_binaries('objs/*/Release/*.lib') for f in glob.glob('objs/vc2010/*/freetype*MT.lib'): shutil.copy2(f, os.path.join(build_dir(), 'lib', 'freetype.lib')) shutil.copytree('include', os.path.join(build_dir(), 'include', 'freetype2')) shutil.rmtree( os.path.join(build_dir(), 'include', 'freetype2', 'freetype', 'internal')) else: simple_build('--disable-dependency-tracking --disable-static')
def main(args): apply_patch('chmlib-empty-file-not-dir.patch', level=1) # needed for aarch64 if iswindows: os.chdir('src') for f in 'chm_lib.c lzx.c'.split(): copy_headers(f, 'src') run(f'"{CL}" /c /nologo /MD /W3 /DWIN32 -c ' + f) run(f'"{LIB}" -nologo chm_lib.obj lzx.obj -OUT:chmlib.lib') install_binaries('chmlib.lib') copy_headers('chm_lib.h') copy_headers('lzx.h', 'src') else: # test for malloc breaks on macos universal. # All system we care about have malloc anyway replace_in_file('configure', 'if test $ac_cv_func_malloc_0_nonnull = yes; then', 'if test 1; then') replace_in_file('src/chm_lib.c', 'pread64', 'pread') apply_patch('chmlib-integer-types.patch', level=1) # needed for aarch64 # updated config.guess is needed for aarch64 with open('config.guess', 'wb') as dest, open(os.path.join(PATCHES, 'config.guess'), 'rb') as src: dest.write(src.read()) if ismacos and is_arm_half_of_lipo_build(): with open('config.sub', 'w') as dest: dest.write('echo arm-apple-darwin') conf = '--disable-dependency-tracking' if ismacos: conf += ' --disable-pread --disable-io64' simple_build(conf)
def main(args): if iswindows: with current_dir('msvc'): msbuild('Hunspell.sln', configuration='Release_dll') dll = lib = False for f in walk('.'): if os.path.basename(f) == 'libhunspell.dll': install_binaries(f, 'bin') dll = True elif os.path.basename(f) == 'libhunspell.lib': install_binaries(f, 'lib') lib = True if not dll or not lib: raise Exception('Failed to find the hunspell dlls') # from bypy.utils import run_shell # run_shell() copy_headers('src/hunspell/*.hxx', destdir='include/hunspell') copy_headers('src/hunspell/*.h', destdir='include/hunspell') copy_headers('msvc/*.h', destdir='include/hunspell') else: env = {} if ismacos: env['PATH'] = BIN + os.pathsep + os.environ['PATH'] env['LIBTOOLIZE'] = 'glibtoolize' env['LIBTOOL'] = 'glibtool' with ModifiedEnv(**env): run('autoreconf -fiv') conf = '--disable-dependency-tracking' env = {} if ismacos: conf += ' --host x86_64-apple-darwin' simple_build(conf)
def main(args): if iswindows: run(f'"{NMAKE}" -f build\\visualc.mk') install_binaries('src\\optipng\\optipng.exe', 'bin', fname_map=lambda x: 'optipng-calibre.exe') else: simple_build('-with-system-libs', use_envvars_for_lipo=True)
def main(args): if iswindows: windows_cmake_build( PNG_SHARED='1', ZLIB_INCLUDE_DIR=os.path.join(PREFIX, 'include'), ZLIB_LIBRARY=os.path.join(PREFIX, 'lib', 'zdll.lib'), binaries='libpng*.dll', libraries='libpng*.lib', headers='pnglibconf.h ../png.h ../pngconf.h' ) else: simple_build('--disable-dependency-tracking --disable-static')
def main(args): configure_args = [] if len(UNIVERSAL_ARCHES) > 1: replace_in_file( 'configure', 'CFLAGS="${CFLAGS} ${ARCHS}"', 'CFLAGS="${CFLAGS} ${ARCHS}"\n SFLAGS="${SFLAGS} ${ARCHS}"') archs = ' '.join(f'-arch {x}' for x in UNIVERSAL_ARCHES) configure_args.append(f'--archs={archs}') simple_build(configure_args)
def main(args): cflags = CFLAGS env = {} if ismacos: if len(UNIVERSAL_ARCHES) > 1: env['CC'] = 'clang ' + ' '.join(f'-arch {x}' for x in UNIVERSAL_ARCHES) env['CPP'] = 'clang -E' env['CFLAGS'] = cflags with ModifiedEnv(**env): simple_build('--disable-dependency-tracking')
def main(args): with ModifiedEnv(PATH=BIN + os.pathsep + os.environ['PATH']): simple_build() files = set() for path in walk(os.path.join(build_dir(), 'bin')): files.add(os.path.abspath(os.path.realpath(path))) for path in walk(build_dir()): if path.endswith('/Config.pm'): files.add(os.path.abspath(os.path.realpath(path))) for path in files: replace_in_file(path, build_dir(), PREFIX, missing_ok=True)
def main(args): if iswindows: run(f'"{NMAKE}" /f Makefile.vc CFG=release-dynamic' ' RTLIBCFG=dynamic OBJDIR=output') install_binaries('output/release-dynamic/*/bin/*.dll', 'bin') install_binaries('output/release-dynamic/*/lib/*.lib', 'lib') copy_headers('src/webp') else: # mux/demux are needed for webengine simple_build('--disable-dependency-tracking --disable-static' ' --enable-libwebpmux --enable-libwebpdemux')
def main(args): if iswindows: # On windows we dont actually build sqlite as the python build script # downloads its own version locked sqlite. We just install the headers copy_headers('sqlite3*.h') return cflags = CFLAGS if ismacos: cflags += ' -O2 -DSQLITE_ENABLE_LOCKING_STYLE' with ModifiedEnv(CFLAGS=cflags): simple_build('--disable-dependency-tracking --disable-static')
def main(args): with ModifiedEnv(FREETYPE_CFLAGS='-I%s/include/freetype2' % PREFIX, FREETYPE_LIBS='-L%s/lib -lfreetype -lz -lbz2' % PREFIX): simple_build( '--disable-dependency-tracking --disable-static --disable-docs' f' --with-expat={PREFIX} --with-add-fonts=/usr/share/fonts', library_path=True) for f in walk(os.path.join(build_dir(), 'etc')): if os.path.islink(f): x = os.path.realpath(f) os.unlink(f) shutil.copy2(x, f)
def main(args): if iswindows: for f in 'hnjalloc.c hyphen.c'.split(): run(f'"{CL}" /c /nologo /MD /W3 /DWIN32 -c ' + f) run(f'"{LIB}" -nologo hnjalloc.obj hyphen.obj -OUT:hyphen.lib') install_binaries('hyphen.lib') copy_headers('hyphen.h') return simple_build( ('--disable-static', ), make_args=('install-libLTLIBRARIES', 'install-includeHEADERS'), do_install=False, )
def main(args): if iswindows: shutil.rmtree('lib'), shutil.rmtree('lib64') os.mkdir('lib'), os.mkdir('lib64') msbuild('libiconv.vcxproj') copy_headers('include/iconv.h') install_binaries('./lib*/libiconv.dll', 'bin') install_binaries('./lib*/libiconv.lib', 'lib') # from bypy.utils import run_shell # run_shell() else: simple_build( '--disable-dependency-tracking --disable-static --enable-shared')
def main(args): # make install tries to write to $HOME/.terminfo with ModifiedEnv(HOME=build_dir()): simple_build( '--with-shared --without-debug --without-ada --enable-widec' ' --with-normal --enable-pc-files' f' --with-pkg-config-libdir={PKG_CONFIG_PATH}' # without the following ncurses will look in the BUILD_DIR # for terminfo files even on target systems. Instead use # a bunch of common locations. ' --with-terminfo-dirs=/usr/share/terminfo:/etc/terminfo:' '/lib/terminfo:/usr/lib/terminfo' ' --with-default-terminfo-dir=/usr/share/terminfo', )
def main(args): with ModifiedEnv( LIBUSB_CFLAGS="-I%s/include/libusb-1.0" % PREFIX, LIBUSB_LIBS='-lusb-1.0', CFLAGS=CFLAGS + ' -DHAVE_ICONV', LDFLAGS=LDFLAGS + ' -liconv', LD_LIBRARY_PATH=LIBDIR, ): conf = '--disable-mtpz --disable-dependency-tracking --disable-static --with-libiconv-prefix={0}'.format( PREFIX) if islinux: conf += ' --with-udev={0}/udev'.format(PREFIX) simple_build(conf)
def main(args): if iswindows: # On windows we dont actually build sqlite as the python build script # downloads its own version locked sqlite. We just install the headers copy_headers('sqlite3*.h') return configure = '--disable-dependency-tracking --disable-static'.split() if ismacos: configure.append(f'CFLAGS={CFLAGS} -O2 -DSQLITE_ENABLE_LOCKING_STYLE') if len(UNIVERSAL_ARCHES) > 1: configure.append('CC=' + 'clang ' + ' '.join(f'-arch {x}' for x in UNIVERSAL_ARCHES)) configure.append('CPP=clang -E') simple_build(configure)
def main(args): if iswindows: os.chdir('src') for f in 'chm_lib.c lzx.c'.split(): copy_headers(f, 'src') run(f'"{CL}" /c /nologo /MD /W3 /DWIN32 -c ' + f) run(f'"{LIB}" -nologo chm_lib.obj lzx.obj -OUT:chmlib.lib') install_binaries('chmlib.lib') copy_headers('chm_lib.h') copy_headers('lzx.h', 'src') else: conf = '--disable-dependency-tracking' if ismacos: conf += ' --disable-pread --disable-io64' simple_build(conf)
def main(args): if iswindows: windows_cmake_build(PNG_SHARED='1', ZLIB_INCLUDE_DIR=os.path.join(PREFIX, 'include'), ZLIB_LIBRARY=os.path.join(PREFIX, 'lib', 'zdll.lib'), binaries='libpng*.dll', libraries='libpng*.lib', headers='pnglibconf.h ../png.h ../pngconf.h') else: configure_args = ['--disable-dependency-tracking', '--disable-static'] if 'arm' in (current_build_arch() or ''): # does not build with it set to on, or not set # https://github.com/glennrp/libpng/issues/257 configure_args.append('--enable-arm-neon=off') simple_build(configure_args)
def main(args): # the makefile stupidly uses a comma as a separator for sed which breaks when there # are multiple entries being substituted replace_in_file('Makefile.am', re.compile(rb"'s,.+?'"), lambda m: m.group().replace(b',', b'`')) replace_in_file('Makefile.in', re.compile(rb"'s,.+?'"), lambda m: m.group().replace(b',', b'`')) with ModifiedEnv(FREETYPE_CFLAGS='-I%s/include/freetype2' % PREFIX, FREETYPE_LIBS='-L%s/lib -lfreetype -lz -lbz2' % PREFIX): simple_build( '--disable-dependency-tracking --disable-static --disable-docs' f' --with-expat={PREFIX} --with-add-fonts=/usr/share/fonts', library_path=True) for f in walk(os.path.join(build_dir(), 'etc')): if os.path.islink(f): x = os.path.realpath(f) os.unlink(f) shutil.copy2(x, f)
def main(args): if iswindows: run(*('cscript.exe configure.js include={0}/include' ' lib={0}/lib prefix={0} zlib=yes iconv=no'.format( PREFIX.replace(os.sep, '/')).split()), cwd='win32') run(f'"{NMAKE}" /f Makefile.msvc', cwd='win32') install_tree('include/libxml', 'include/libxml2') for f in walk('.'): if f.endswith('.dll'): install_binaries(f, 'bin') elif f.endswith('.lib'): install_binaries(f) else: # ICU is needed to use libxml2 in qt-webengine simple_build( '--disable-dependency-tracking --disable-static --enable-shared' ' --without-python --without-debug --with-iconv={0}' ' --with-zlib={0} --with-icu'.format(PREFIX)) for path in walk(build_dir()): if path.endswith('/xml2-config'): replace_in_file(path, re.compile(b'(?m)^prefix=.+'), f'prefix={PREFIX}')
def main(args): simple_build('--no-qt-gui', configure_name='./bootstrap')
def main(args): simple_build( '--with-shared --without-debug --without-ada --enable-widec --with-normal --enable-pc-files --with-pkg-config-libdir=%s' % PKG_CONFIG_PATH)
def main(args): simple_build('--with-internal-glib --disable-host-tool')