Exemple #1
0
def install(robustus, requirement_specifier, rob_file, ignore_index):
    install_dir = robustus.install_cmake_package(
        requirement_specifier, ['-DENABLE_TESTS_COMPILATION:BOOL=False'],
        ignore_index)

    # required gazebo executables
    executables = [
        'gazebo', 'gzserver', 'gzclient', 'gzfactory', 'gzlog', 'gzsdf',
        'gzstats', 'gztopic'
    ]

    # fix rpaths for binaries
    lib_dir = os.path.join(install_dir, 'lib')
    binaries = glob.glob(os.path.join(install_dir, 'lib/*.so*'))
    for executable in executables:
        binaries += glob.glob(
            os.path.join(install_dir, 'bin/' + executable + '*'))
    for binary in binaries:
        if os.path.isfile(binary) and not os.path.islink(binary):
            fix_rpath(robustus, robustus.env, binary, lib_dir)

    # make symlinks
    for executable in executables:
        executable_path = os.path.join(install_dir, 'bin', executable)
        ln(executable_path, os.path.join(robustus.env, 'bin', executable))
def install(robustus, requirement_specifier, rob_file, ignore_index):
    # check if already installed
    pocketsphinx = os.path.join(robustus.env, 'lib/python2.7/site-packages/pocketsphinx.so')
    if os.path.isfile(pocketsphinx):
        return

    cwd = os.getcwd()
    archive = None
    try:
        os.chdir(robustus.cache)
        build_dir = os.path.join(robustus.cache, 'pocketsphinx-%s' % requirement_specifier.version)
        if not os.path.isfile(os.path.join(build_dir, 'configure')):
            archive = robustus.download('pocketsphinx', requirement_specifier.version)
            unpack(archive)

        # unfortunately we can't cache pocketsphinx, it has to be rebuild after reconfigure
        logging.info('Building pocketsphinx')
        os.chdir(build_dir)

        sphinxbase_dir = os.path.join(robustus.cache, 'sphinxbase-%s/' % requirement_specifier.version)
        retcode = run_shell('./configure'
                            + (' --prefix=%s' % robustus.env)
                            + (' --with-python=%s' % os.path.join(robustus.env, 'bin/python'))
                            + (' --with-sphinxbase=%s' % sphinxbase_dir)
                            + (' --with-sphinxbase-build=%s' % sphinxbase_dir),
                            shell=True,
                            verbose=robustus.settings['verbosity'] >= 1)
        if retcode != 0:
            raise RequirementException('pocketsphinx configure failed')

        retcode = run_shell('make clean && make', shell=True, verbose=robustus.settings['verbosity'] >= 1)
        if retcode != 0:
            raise RequirementException('pocketsphinx build failed')

        logging.info('Installing pocketsphinx into virtualenv')
        retcode = run_shell('make install', shell=True, verbose=robustus.settings['verbosity'] >= 1)
        if retcode != 0:
            raise RequirementException('pocketsphinx install failed')

        fix_rpath(robustus, robustus.env, pocketsphinx, os.path.join(robustus.env, 'lib'))
        # there is a super weird bug, first import of pocketsphinx fails http://sourceforge.net/p/cmusphinx/bugs/284/
        write_file(os.path.join(robustus.env, 'lib/python2.7/site-packages/wrap_pocketsphinx.py'),
                   'w',
                   'try:\n'
                   + '    from pocketsphinx import *\n'
                   + 'except:\n'
                   + '    pass\n'
                   + 'from pocketsphinx import *\n')
    except RequirementException:
        safe_remove(build_dir)
    finally:
        if archive is not None:
            safe_remove(archive)
        os.chdir(cwd)
Exemple #3
0
def install(robustus, requirement_specifier, rob_file, ignore_index):
    # check if already installed
    sphinxbase = os.path.join(robustus.env, 'lib/python2.7/site-packages/sphinxbase.so')
    if os.path.isfile(sphinxbase):
        return

    cwd = os.getcwd()
    archive = None
    try:
        # build in cache
        os.chdir(robustus.cache)
        build_dir = os.path.join(robustus.cache, 'sphinxbase-%s' % requirement_specifier.version)
        if not os.path.isfile(os.path.join(build_dir, 'configure')):
            archive = robustus.download('sphinxbase', requirement_specifier.version)
            unpack(archive)

        # unfortunately we can't cache sphinxbase, it has to be rebuild after reconfigure
        logging.info('Building sphinxbase')
        os.chdir(build_dir)

        # link python-config from system-wide installation, sphinxbase configure requires it
        python_config = os.path.join(robustus.env, 'bin/python-config')
        if not os.path.isfile(python_config):
            ln('/usr/bin/python-config', python_config)

        retcode = run_shell('./configure'
                            + (' --prefix=%s' % robustus.env)
                            + (' --with-python=%s' % os.path.join(robustus.env, 'bin/python')),
                            shell=True,
                            verbose=robustus.settings['verbosity'] >= 1)
        if retcode != 0:
            raise RequirementException('sphinxbase configure failed')

        retcode = run_shell('make clean && make', shell=True, verbose=robustus.settings['verbosity'] >= 1)
        if retcode != 0:
            raise RequirementException('sphinxbase build failed')

        logging.info('Installing sphinxbase into virtualenv')
        retcode = run_shell('make install', shell=True, verbose=robustus.settings['verbosity'] >= 1)
        if retcode != 0:
            raise RequirementException('sphinxbase install failed')

        fix_rpath(robustus, robustus.env, sphinxbase, os.path.join(robustus.env, 'lib'))
    except RequirementException:
        safe_remove(build_dir)
    finally:
        if archive is not None:
            safe_remove(archive)
        os.chdir(cwd)
Exemple #4
0
def install(robustus, requirement_specifier, rob_file, ignore_index):
    install_dir = robustus.install_cmake_package(requirement_specifier,
                                                 ['-DENABLE_TESTS_COMPILATION:BOOL=False'],
                                                 ignore_index)

    # required gazebo executables
    executables = ['gazebo', 'gzserver', 'gzclient', 'gzfactory', 'gzlog', 'gzsdf', 'gzstats', 'gztopic']

    # fix rpaths for binaries
    lib_dir = os.path.join(install_dir, 'lib')
    binaries = glob.glob(os.path.join(install_dir, 'lib/*.so*'))
    for executable in executables:
        binaries += glob.glob(os.path.join(install_dir, 'bin/' + executable + '*'))
    for binary in binaries:
        if os.path.isfile(binary) and not os.path.islink(binary):
            fix_rpath(robustus, robustus.env, binary, lib_dir)

    # make symlinks
    for executable in executables:
        executable_path = os.path.join(install_dir, 'bin', executable)
        ln(executable_path, os.path.join(robustus.env, 'bin', executable))
Exemple #5
0
def install(robustus, requirement_specifier, rob_file, ignore_index):
    '''
    Opencv has a lot of cmake flags. Here are some examples to play with:
    brew configuration for opencv 2.4.9:
                    '-DCMAKE_OSX_DEPLOYMENT_TARGET=',
                    '-DBUILD_ZLIB=OFF',
                    '-DBUILD_TIFF=OFF',
                    '-DBUILD_PNG=OFF',
                    '-DBUILD_OPENEXR=OFF',
                    '-DBUILD_JASPER=OFF',
                    '-DBUILD_JPEG=OFF',
                    '-DJPEG_INCLUDE_DIR=/usr/local/opt/jpeg/include',
                    '-DJPEG_LIBRARY=/usr/local/opt/jpeg/lib/libjpeg.dylib',
                    '-DPYTHON_LIBRARY=/usr/local/Cellar/python/2.7.6_1/Frameworks/Python.framework/Versions/2.7/Python',
                    '-DPYTHON_INCLUDE_DIR=/usr/local/Cellar/python/2.7.6_1/Frameworks/Python.framework/Versions/2.7/Headers',
                    '-DBUILD_TESTS=OFF',
                    '-DBUILD_PERF_TESTS=OFF',
                    '-DBUILD_opencv_java=OFF',
                    '-DWITH_QT=OFF',
                    '-DWITH_TBB=OFF',
                    '-DWITH_FFMPEG=OFF',
                    '-DWITH_OPENEXR=OFF',
                    '-DWITH_CUDA=OFF',
                    '-DWITH_OPENCL=OFF',
                    '-DENABLE_SSSE3=ON',
                    '-DENABLE_SSE41=ON',
                    '-DENABLE_SSE42=ON',
                    '-DENABLE_AVX=ON',
    '''
    # Make sure numpy is installed - to avoid weird error when bindings
    # are silently not generated.
    if not check_module_available(robustus.env, 'numpy'):
        raise RequirementException('numpy is required for opencv')
    
    if platform.linux_distribution()[0] == 'CentOS':
        # linking opencv for CentOs
        logging.info('Linking opencv for CentOS')
        os.symlink('/usr/lib64/python2.7/site-packages/cv2.so', os.path.join(robustus.env, 'lib/python2.7/site-packages/cv2.so'))
        os.symlink('/usr/lib64/python2.7/site-packages/cv.py', os.path.join(robustus.env, 'lib/python2.7/site-packages/cv.py'))
    else:
        cv_install_dir = os.path.join(robustus.cache, 'OpenCV-%s' % requirement_specifier.version)
        cv2so = os.path.join(cv_install_dir, 'lib/python2.7/site-packages/cv2.so')

        def in_cache():
            return os.path.isfile(cv2so)

        versions_to_fix_rpath = ['2.4.7', '2.4.8', '2.4.9']

        if not in_cache() and not ignore_index:
            cwd = os.getcwd()
            opencv_archive = None
            opencv_archive_name = None
                
            try:
                opencv_archive = robustus.download_compiled_archive('OpenCV', requirement_specifier.version)

                if opencv_archive is not None:
                    opencv_archive_name = unpack(opencv_archive)

                    logging.info('Initializing compiled OpenCV')
                    # install into wheelhouse
                    safe_move(opencv_archive_name, cv_install_dir)
                else:
                    opencv_archive = robustus.download('OpenCV', requirement_specifier.version)
                    opencv_archive_name = unpack(opencv_archive)

                    logging.info('Building OpenCV')
                    cv_build_dir = os.path.join(opencv_archive_name, 'build')
                    if not os.path.isdir(cv_build_dir):
                        os.mkdir(cv_build_dir)
                    os.chdir(cv_build_dir)

                    opencv_cmake_call_args = [
                        'cmake',
                        '../',
                        '-DPYTHON_EXECUTABLE=%s' % robustus.python_executable,
                        '-DBUILD_NEW_PYTHON_SUPPORT=ON',
                        '-DBUILD_TESTS=OFF',
                        '-DBUILD_PERF_TESTS=OFF',
                        '-DBUILD_DOCS=OFF',
                        '-DBUILD_opencv_apps=OFF',
                        '-DBUILD_opencv_java=OFF',
                        '-DWITH_CUDA=OFF',
                        '-DCMAKE_INSTALL_PREFIX=%s' % cv_install_dir]

                    if sys.platform.startswith('darwin'):
                        python_lib_path = subprocess.check_output(['python-config', '--prefix']).strip()
                        opencv_cmake_call_args.append('-DPYTHON_LIBRARY=%s/Python' % python_lib_path)
                        opencv_cmake_call_args.append('-DPYTHON_INCLUDE_DIR=%s/Headers' % python_lib_path)

                    run_shell(opencv_cmake_call_args,
                              verbose=robustus.settings['verbosity'] >= 1)
                    retcode = run_shell(['make', '-j4'], verbose=robustus.settings['verbosity'] >= 1)
                    if retcode != 0:
                        raise RequirementException('OpenCV build failed')

                    # install into wheelhouse
                    if not os.path.isdir(cv_install_dir):
                        os.mkdir(cv_install_dir)
                    retcode = run_shell(['make', 'install'], verbose=robustus.settings['verbosity'] >= 1)
                    if retcode != 0:
                        raise RequirementException('OpenCV installation failed')

            finally:
                safe_remove(opencv_archive)
                safe_remove(opencv_archive_name)
                os.chdir(cwd)

            if in_cache() and requirement_specifier.version in versions_to_fix_rpath:
                # fix rpath for all dynamic libraries of cv2
                all_cv_dlibs = os.path.abspath(os.path.join(cv_install_dir, 'lib'))
                if sys.platform.startswith('darwin'):
                    libs = glob.glob(os.path.join(all_cv_dlibs, '*.dylib'))
                else:
                    libs = glob.glob(os.path.join(all_cv_dlibs, '*.so'))
                for lib in libs:
                    fix_rpath(robustus, robustus.env, lib, cv_install_dir)

        if in_cache():
            logging.info('Copying OpenCV cv2.so to virtualenv')
            cp(os.path.join(cv_install_dir, 'lib/python2.7/site-packages/*'),
               os.path.join(robustus.env, 'lib/python2.7/site-packages'))
            if requirement_specifier.version in versions_to_fix_rpath:
                # fix rpath for cv2
                cv2lib = os.path.join(robustus.env, 'lib/python2.7/site-packages/cv2.so')
                fix_rpath(robustus, robustus.env, cv2lib, cv_install_dir)  
        else:
            raise RequirementException('can\'t find OpenCV-%s in robustus cache' % requirement_specifier.version)
Exemple #6
0
def install(robustus, requirement_specifier, rob_file, ignore_index):
    ni_install_dir = os.path.join(robustus.cache, 'OpenNI2')
    if requirement_specifier.version is not None:
        ni_install_dir += requirement_specifier.version

    def in_cache():
        return os.path.isfile(os.path.join(ni_install_dir, 'libOpenNI2.so'))

    if not in_cache() and not ignore_index:
        cwd = os.getcwd()
        ni_clone_dir = os.path.join(cwd, 'OpenNI2')

        try:
            if os.path.isdir(ni_clone_dir):
                logging.warn(
                    'Directory for cloning OpenNI found, cloning skipped')
            else:
                logging.info('Cloning OpenNI')
                retcode = run_shell([
                    'git', 'clone', 'https://github.com/occipital/OpenNI2.git'
                ])
                if retcode != 0:
                    raise RequirementException('OpenNI2 clone failed')
            os.chdir(ni_clone_dir)

            # checkout requested version
            branch = requirement_specifier.version if requirement_specifier.version is not None else 'master'
            if requirement_specifier.version is not None:
                retcode = run_shell(['git', 'checkout', branch])
                if retcode != 0:
                    raise RequirementException('OpenNI2 checkout failed')

            logging.info('Building OpenNI')
            if platform.machine().startswith('arm'):
                ver = 'Arm'
                # patch flags for arm
                file_to_patch = os.path.join(
                    ni_clone_dir,
                    'ThirdParty/PSCommon/BuildSystem/Platform.Arm')
                with open(file_to_patch, "rt") as f:
                    content = f.read()
                with open(file_to_patch, "wt") as f:
                    f.write(content.replace('-mfloat-abi=softfp', ''))
            elif platform.architecture()[0].startswith('64'):
                ver = 'x64'
            else:
                ver = 'x86'
            retcode = run_shell(['make', 'PLATFORM=' + ver],
                                verbose=robustus.settings['verbosity'] >= 1)
            if retcode != 0:
                raise RequirementException('OpenNI2 build failed')

            # copy release dir and usb rules to wheelhouse
            if os.path.isdir(ni_install_dir):
                shutil.rmtree(ni_install_dir)
            release_dir = os.path.join(ni_clone_dir, 'Bin', ver + '-Release')
            shutil.copytree(release_dir, ni_install_dir)
            cp(
                os.path.join(ni_clone_dir,
                             'Packaging/Linux/primesense-usb.rules'),
                ni_install_dir)
        finally:
            os.chdir(cwd)
            safe_remove(ni_clone_dir)

    # copy files to venv
    if in_cache():
        logging.info('Copying OpenNI2 to virtualenv')
        cp(os.path.join(ni_install_dir, '*.so'),
           os.path.join(robustus.env, 'lib'))
        cp(os.path.join(ni_install_dir, '*.jar'),
           os.path.join(robustus.env, 'lib'))
        ni_drivers_dir = os.path.join(robustus.env, 'lib/OpenNI2')
        if os.path.isdir(ni_drivers_dir):
            shutil.rmtree(ni_drivers_dir)
        shutil.copytree(os.path.join(ni_install_dir, 'OpenNI2'),
                        ni_drivers_dir)
        # copy demo for testing purposes
        cp(os.path.join(ni_install_dir, 'SimpleRead'),
           os.path.join(robustus.env, 'bin'))
        fix_rpath(robustus, robustus.env,
                  os.path.join(robustus.env, 'bin/SimpleRead'),
                  os.path.join(robustus.env, 'lib'))
        # setup usb rules
        logging.info(
            'Configuring udev rules, you may need to reconnect sensor or restart computer'
        )
        retcode = run_shell([
            'sudo', 'cp',
            os.path.join(ni_install_dir, 'primesense-usb.rules'),
            '/etc/udev/rules.d/557-primesense-usb.rules'
        ],
                            verbose=robustus.settings['verbosity'] >= 1)
        if retcode != 0:
            raise RequirementException('Faied to copy udev rules')
        # return nonzero code, but seems to work
        subprocess.call(['sudo', 'udevadm', 'control', '--reload-rules'])
    else:
        raise RequirementException('can\'t find OpenNI2-%s in robustus cache' %
                                   requirement_specifier.version)
Exemple #7
0
def install(robustus, requirement_specifier, rob_file, ignore_index):
    ni_install_dir = os.path.join(robustus.cache, 'OpenNI2')
    if requirement_specifier.version is not None:
        ni_install_dir += requirement_specifier.version

    def in_cache():
        return os.path.isfile(os.path.join(ni_install_dir, 'libOpenNI2.so'))

    if not in_cache() and not ignore_index:
        cwd = os.getcwd()
        ni_clone_dir = os.path.join(cwd, 'OpenNI2')

        try:
            if os.path.isdir(ni_clone_dir):
                logging.warn('Directory for cloning OpenNI found, cloning skipped')
            else:
                logging.info('Cloning OpenNI')
                retcode = run_shell(['git', 'clone', 'https://github.com/occipital/OpenNI2.git'])
                if retcode != 0:
                    raise RequirementException('OpenNI2 clone failed')
            os.chdir(ni_clone_dir)

            # checkout requested version
            branch = requirement_specifier.version if requirement_specifier.version is not None else 'master'
            if requirement_specifier.version is not None:
                retcode = run_shell(['git', 'checkout', branch])
                if retcode != 0:
                    raise RequirementException('OpenNI2 checkout failed')

            logging.info('Building OpenNI')
            if platform.machine().startswith('arm'):
                ver = 'Arm'
                # patch flags for arm
                file_to_patch = os.path.join(ni_clone_dir, 'ThirdParty/PSCommon/BuildSystem/Platform.Arm')
                with open(file_to_patch, "rt") as f:
                    content = f.read()
                with open(file_to_patch, "wt") as f:
                    f.write(content.replace('-mfloat-abi=softfp', ''))
            elif platform.architecture()[0].startswith('64'):
                ver = 'x64'
            else:
                ver = 'x86'
            retcode = run_shell(['make', 'PLATFORM=' + ver], verbose=robustus.settings['verbosity'] >= 1)
            if retcode != 0:
                raise RequirementException('OpenNI2 build failed')

            # copy release dir and usb rules to wheelhouse
            if os.path.isdir(ni_install_dir):
                shutil.rmtree(ni_install_dir)
            release_dir = os.path.join(ni_clone_dir, 'Bin', ver + '-Release')
            shutil.copytree(release_dir, ni_install_dir)
            cp(os.path.join(ni_clone_dir, 'Packaging/Linux/primesense-usb.rules'), ni_install_dir)
        finally:
            os.chdir(cwd)
            safe_remove(ni_clone_dir)

    # copy files to venv
    if in_cache():
        logging.info('Copying OpenNI2 to virtualenv')
        cp(os.path.join(ni_install_dir, '*.so'), os.path.join(robustus.env, 'lib'))
        cp(os.path.join(ni_install_dir, '*.jar'), os.path.join(robustus.env, 'lib'))
        ni_drivers_dir = os.path.join(robustus.env, 'lib/OpenNI2')
        if os.path.isdir(ni_drivers_dir):
            shutil.rmtree(ni_drivers_dir)
        shutil.copytree(os.path.join(ni_install_dir, 'OpenNI2'), ni_drivers_dir)
        # copy demo for testing purposes
        cp(os.path.join(ni_install_dir, 'SimpleRead'), os.path.join(robustus.env, 'bin'))
        fix_rpath(robustus, robustus.env, os.path.join(robustus.env, 'bin/SimpleRead'), os.path.join(robustus.env, 'lib'))  
        # setup usb rules
        logging.info('Configuring udev rules, you may need to reconnect sensor or restart computer')
        retcode = run_shell(['sudo', 'cp', os.path.join(ni_install_dir, 'primesense-usb.rules'), '/etc/udev/rules.d/557-primesense-usb.rules'], verbose=robustus.settings['verbosity'] >= 1)
        if retcode != 0:
            raise RequirementException('Faied to copy udev rules')
        # return nonzero code, but seems to work
        subprocess.call(['sudo', 'udevadm', 'control', '--reload-rules'])
    else:
        raise RequirementException('can\'t find OpenNI2-%s in robustus cache' % requirement_specifier.version)
Exemple #8
0
def install(robustus, requirement_specifier, rob_file, ignore_index):
    '''
    Opencv has a lot of cmake flags. Here are some examples to play with:
    brew configuration for opencv 2.4.9:
                    '-DCMAKE_OSX_DEPLOYMENT_TARGET=',
                    '-DBUILD_ZLIB=OFF',
                    '-DBUILD_TIFF=OFF',
                    '-DBUILD_PNG=OFF',
                    '-DBUILD_OPENEXR=OFF',
                    '-DBUILD_JASPER=OFF',
                    '-DBUILD_JPEG=OFF',
                    '-DJPEG_INCLUDE_DIR=/usr/local/opt/jpeg/include',
                    '-DJPEG_LIBRARY=/usr/local/opt/jpeg/lib/libjpeg.dylib',
                    '-DPYTHON_LIBRARY=/usr/local/Cellar/python/2.7.6_1/Frameworks/Python.framework/Versions/2.7/Python',
                    '-DPYTHON_INCLUDE_DIR=/usr/local/Cellar/python/2.7.6_1/Frameworks/Python.framework/Versions/2.7/Headers',
                    '-DBUILD_TESTS=OFF',
                    '-DBUILD_PERF_TESTS=OFF',
                    '-DBUILD_opencv_java=OFF',
                    '-DWITH_QT=OFF',
                    '-DWITH_TBB=OFF',
                    '-DWITH_FFMPEG=OFF',
                    '-DWITH_OPENEXR=OFF',
                    '-DWITH_CUDA=OFF',
                    '-DWITH_OPENCL=OFF',
                    '-DENABLE_SSSE3=ON',
                    '-DENABLE_SSE41=ON',
                    '-DENABLE_SSE42=ON',
                    '-DENABLE_AVX=ON',
    '''
    # Make sure numpy is installed - to avoid weird error when bindings
    # are silently not generated.
    if not check_module_available(robustus.env, 'numpy'):
        raise RequirementException('numpy is required for opencv')
    
    if platform.linux_distribution()[0] == 'CentOS':
        # linking opencv for CentOs
        logging.info('Linking opencv for CentOS')
        os.symlink('/usr/lib64/python2.7/site-packages/cv2.so', os.path.join(robustus.env, 'lib/python2.7/site-packages/cv2.so'))
        os.symlink('/usr/lib64/python2.7/site-packages/cv.py', os.path.join(robustus.env, 'lib/python2.7/site-packages/cv.py'))
    else:
        cv_install_dir = os.path.join(robustus.cache, 'OpenCV-%s' % requirement_specifier.version)
        cv2so = os.path.join(cv_install_dir, 'lib/python2.7/site-packages/cv2.so')

        def in_cache():
            return os.path.isfile(cv2so)

        if not in_cache() and not ignore_index:
            cwd = os.getcwd()
            opencv_archive = None
            opencv_archive_name = None

            try:
                opencv_archive = robustus.download_compiled_archive('OpenCV', requirement_specifier.version)

                if opencv_archive is not None:
                    opencv_archive_name = unpack(opencv_archive)

                    logging.info('Initializing compiled OpenCV')
                    # install into wheelhouse
                    safe_move(opencv_archive_name, cv_install_dir)
                else:
                    opencv_archive = robustus.download('OpenCV', requirement_specifier.version)
                    opencv_archive_name = unpack(opencv_archive)

                    logging.info('Building OpenCV')
                    cv_build_dir = os.path.join(opencv_archive_name, 'build')
                    if not os.path.isdir(cv_build_dir):
                        os.mkdir(cv_build_dir)
                    os.chdir(cv_build_dir)

                    opencv_cmake_call_args = [
                        'cmake',
                        '../',
                        '-DPYTHON_EXECUTABLE=%s' % robustus.python_executable,
                        '-DBUILD_NEW_PYTHON_SUPPORT=ON',
                        '-DBUILD_TESTS=OFF',
                        '-DBUILD_PERF_TESTS=OFF',
                        '-DBUILD_DOCS=OFF',
                        '-DBUILD_opencv_apps=OFF',
                        '-DBUILD_opencv_java=OFF',
                        '-DWITH_CUDA=OFF',
                        '-DCMAKE_INSTALL_PREFIX=%s' % cv_install_dir]

                    if sys.platform.startswith('darwin'):
                        python_lib_path = subprocess.check_output(['python-config', '--prefix']).strip()
                        opencv_cmake_call_args.append('-DPYTHON_LIBRARY=%s/Python' % python_lib_path)
                        opencv_cmake_call_args.append('-DPYTHON_INCLUDE_DIR=%s/Headers' % python_lib_path)

                    run_shell(opencv_cmake_call_args,
                              verbose=robustus.settings['verbosity'] >= 1)
                    retcode = run_shell(['make', '-j4'], verbose=robustus.settings['verbosity'] >= 1)
                    if retcode != 0:
                        raise RequirementException('OpenCV build failed')

                    # install into wheelhouse
                    if not os.path.isdir(cv_install_dir):
                        os.mkdir(cv_install_dir)
                    retcode = run_shell(['make', 'install'], verbose=robustus.settings['verbosity'] >= 1)
                    if retcode != 0:
                        raise RequirementException('OpenCV installation failed')

            finally:
                safe_remove(opencv_archive)
                safe_remove(opencv_archive_name)
                os.chdir(cwd)

            if in_cache():
                # fix rpath for all dynamic libraries of cv2
                all_cv_dlibs = os.path.abspath(os.path.join(cv_install_dir, 'lib'))
                if sys.platform.startswith('darwin'):
                    libs = glob.glob(os.path.join(all_cv_dlibs, '*.dylib'))
                else:
                    libs = glob.glob(os.path.join(all_cv_dlibs, '*.so'))
                for lib in libs:
                    fix_rpath(robustus, robustus.env, lib, cv_install_dir)

        if in_cache():
            logging.info('Copying OpenCV cv2.so to virtualenv')
            cp(os.path.join(cv_install_dir, 'lib/python2.7/site-packages/*'),
               os.path.join(robustus.env, 'lib/python2.7/site-packages'))
            # fix rpath for cv2
            cv2lib = os.path.join(robustus.env, 'lib/python2.7/site-packages/cv2.so')
            fix_rpath(robustus, robustus.env, cv2lib, cv_install_dir)
        else:
            raise RequirementException('can\'t find OpenCV-%s in robustus cache' % requirement_specifier.version)
Exemple #9
0
def install(robustus, requirement_specifier, rob_file, ignore_index):
    if requirement_specifier.version != '1.8.1' and not requirement_specifier.version.startswith('bc'):
        raise RequirementException('can only install panda3d 1.8.1/bc1/bc2')

    panda_install_dir = os.path.join(robustus.cache, 'panda3d-%s' % requirement_specifier.version)

    def in_cache():
        return os.path.isfile(os.path.join(panda_install_dir, 'lib/panda3d.py'))

    if not in_cache() and not ignore_index:
        cwd = os.getcwd()
        panda3d_tgz = None
        panda3d_archive_name = None
        try:
            panda3d_tgz = robustus.download('panda3d', requirement_specifier.version)
            panda3d_archive_name = unpack(panda3d_tgz)

            logging.info('Builduing panda3d')
            os.chdir(panda3d_archive_name)

            # link bullet into panda dependencies dir
            bullet_installations = glob.glob(os.path.join(robustus.env, 'lib/bullet-*'))
            if len(bullet_installations) > 0:
                bullet_dir = bullet_installations[0]
                if sys.platform.startswith('darwin'):
                    panda_thirdparty_dir = 'thirdparty/darwin-libs-a'
                elif sys.platform.startswith('linux'):
                    panda_thirdparty_dir = 'thirdparty/linux-libs-x64'
                else:
                    raise RequirementException('unsupported platform ' + sys.platform)
                os.mkdir('thirdparty')
                os.mkdir(panda_thirdparty_dir)
                os.mkdir(os.path.join(panda_thirdparty_dir, 'bullet'))
                ln(os.path.join(bullet_dir, 'include/bullet'),
                   os.path.join(panda_thirdparty_dir, 'bullet/include'))
                ln(os.path.join(bullet_dir, 'lib'),
                   os.path.join(panda_thirdparty_dir, 'bullet/lib'))

            make_panda_options = ['--nothing',
                                  '--use-python',
                                  '--use-direct',
                                  '--use-bullet',
                                  '--use-zlib',
                                  '--use-png',
                                  '--use-jpeg',
                                  '--use-tiff',
                                  '--use-freetype',
                                  '--use-x11',
                                  '--use-gl',
                                  '--use-nvidiacg',
                                  '--use-pandatool',
                                  '--use-tinydisplay',
                                  '--threads', '4']
            if sys.platform.startswith('darwin'):
                make_panda_options += ['--use-cocoa']
                os.environ['CC'] = 'gcc'
                os.environ['CXX'] = 'g++'

            makepanda_cmd = [robustus.python_executable, 'makepanda/makepanda.py'] + make_panda_options
            # command takes much time and output very long, so run_shell isn't used
            retcode = subprocess.call(makepanda_cmd)
            if retcode != 0:
                raise RequirementException('panda3d build failed')

            # copy panda3d files to cache
            shutil.rmtree(panda_install_dir, ignore_errors=True)
            os.mkdir(panda_install_dir)
            subprocess.call('cp -R built/lib %s' % panda_install_dir, shell=True)
            subprocess.call('cp -R built/bin %s' % panda_install_dir, shell=True)
            subprocess.call('cp -R built/include %s' % panda_install_dir, shell=True)
            subprocess.call('cp -R built/direct %s' % panda_install_dir, shell=True)
            subprocess.call('cp -R built/pandac %s' % panda_install_dir, shell=True)
            subprocess.call('cp -R built/models %s' % panda_install_dir, shell=True)
            subprocess.call('cp -R built/etc %s' % panda_install_dir, shell=True)
        finally:
            safe_remove(panda3d_tgz)
            safe_remove(panda3d_archive_name)
            os.chdir(cwd)

    if in_cache():
        # install panda3d to virtualenv
        libdir = os.path.join(robustus.env, 'lib/panda3d')
        shutil.rmtree(libdir, ignore_errors=True)
        os.mkdir(libdir)

        env_etcdir = os.path.join(robustus.env, 'etc')
        if not os.path.isdir(env_etcdir):
            os.mkdir(env_etcdir)
        etcdir = os.path.join(env_etcdir, 'panda3d')
        shutil.rmtree(etcdir, ignore_errors=True)
        os.mkdir(etcdir)

        run_shell('cp -r -p %s/lib/* %s/' % (panda_install_dir, libdir), shell=True)
        run_shell('cp -r -p %s/direct %s/' % (panda_install_dir, libdir), shell=True)
        run_shell('cp -r -p %s/pandac %s/' % (panda_install_dir, libdir), shell=True)
        run_shell('cp -r -p %s/etc/* %s/' % (panda_install_dir, etcdir), shell=True)

        # modify rpath of libs
        libdir = os.path.abspath(libdir)
        if sys.platform.startswith('darwin'):
            libs = glob.glob(os.path.join(libdir, '*.dylib'))
        else:
            libs = glob.glob(os.path.join(libdir, '*.so'))
        for lib in libs:
            fix_rpath(robustus, robustus.env, lib, libdir)

        prc_dir_setup = "import os; os.environ['PANDA_PRC_DIR'] = '%s'" % etcdir
        write_file(os.path.join(robustus.env, 'lib/python2.7/site-packages/panda3d.pth'),
                   'w',
                   '%s\n%s\n' % (libdir, prc_dir_setup))

        # patch panda prc file
        with open(os.path.join(etcdir, 'Config.prc'), 'a') as f:
            extra_options = []
            extra_options.append("# enable antialiasing\n"
                                 "framebuffer-multisample 1\n"
                                 "multisamples 4\n")
            extra_options.append("# disable panda3d transform caching to avoid memory leak in bullet bindings\n"
                                 "garbage-collect-states 0\n")

            extra_options.append("# enable software rendering as fallback\n"
                                 "aux-display p3tinydisplay\n")

            f.write('\n'.join(extra_options))

    else:
        raise RequirementException('can\'t find panda3d-%s in robustus cache' % requirement_specifier.version)