Ejemplo n.º 1
0
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)
Ejemplo n.º 2
0
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'))
Ejemplo n.º 3
0
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)
Ejemplo n.º 4
0
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}')
Ejemplo n.º 5
0
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
Ejemplo n.º 6
0
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')
Ejemplo n.º 7
0
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)
Ejemplo n.º 8
0
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')
Ejemplo n.º 9
0
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)
Ejemplo n.º 10
0
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)
Ejemplo n.º 11
0
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)
Ejemplo n.º 12
0
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')
Ejemplo n.º 13
0
 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)
Ejemplo n.º 14
0
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')
Ejemplo n.º 15
0
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)
Ejemplo n.º 16
0
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')
Ejemplo n.º 17
0
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')
Ejemplo n.º 18
0
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)
Ejemplo n.º 19
0
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,
    )
Ejemplo n.º 20
0
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')
Ejemplo n.º 21
0
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', )
Ejemplo n.º 22
0
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)
Ejemplo n.º 23
0
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)
Ejemplo n.º 24
0
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)
Ejemplo n.º 25
0
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)
Ejemplo n.º 26
0
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)
Ejemplo n.º 27
0
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}')
Ejemplo n.º 28
0
def main(args):
    simple_build('--no-qt-gui', configure_name='./bootstrap')
Ejemplo n.º 29
0
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)
Ejemplo n.º 30
0
def main(args):
    simple_build('--with-internal-glib --disable-host-tool')