Skip to main content
  • Home
  • Development
  • Documentation
  • Donate
  • Operational login
  • Browse the archive

swh logo
SoftwareHeritage
Software
Heritage
Archive
Features
  • Search

  • Downloads

  • Save code now

  • Add forge now

  • Help

https://hal.archives-ouvertes.fr/hal-04454135
20 February 2024, 12:43:59 UTC
  • Code
  • Branches (0)
  • Releases (1)
  • Visits
    • Branches
    • Releases
      • HEAD
    • ad4b9d5
    • /
    • matam-master
    • /
    • build.py
    Raw File Download

    To reference or cite the objects present in the Software Heritage archive, permalinks based on SoftWare Hash IDentifiers (SWHIDs) must be used.
    Select below a type of object currently browsed in order to display its associated SWHID and permalink.

    • content
    • directory
    • snapshot
    • release
    origin badgecontent badge
    swh:1:cnt:1e2fac263811d85fd4ef8c2ad664c3f5b35743bf
    origin badgedirectory badge
    swh:1:dir:a13115f53a6d239a9f6e30d5fd8e72cc96012c04
    origin badgesnapshot badge
    swh:1:snp:6f8708c1b9e9a23cdc168fb6d796ff3805d768de
    origin badgerelease badge
    swh:1:rel:29d4e0794204463094dedf0d0d7c08835360e787

    This interface enables to generate software citations, provided that the root directory of browsed objects contains a citation.cff or codemeta.json file.
    Select below a type of object currently browsed in order to generate citations for them.

    • content
    • directory
    • snapshot
    • release
    Generate software citation in BibTex format (requires biblatex-software package)
    Generating citation ...
    Generate software citation in BibTex format (requires biblatex-software package)
    Generating citation ...
    Generate software citation in BibTex format (requires biblatex-software package)
    Generating citation ...
    Generate software citation in BibTex format (requires biblatex-software package)
    Generating citation ...
    build.py
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    
    import argparse
    import logging
    import os
    import subprocess
    import sys
    import time
    
    # Create logger
    logger = logging.getLogger(__name__)
    
    # Get program filename, filepath and directory
    program_filepath = os.path.realpath(sys.argv[0])
    program_dirpath, program_filename = os.path.split(program_filepath)
    program_name, program_extension = os.path.splitext(program_filename)
    
    # Set dependencies directories path
    matam_root_dirpath = program_dirpath
    matam_scripts_dirpath = os.path.join(matam_root_dirpath, 'scripts')
    componentsearch_dirpath = os.path.join(matam_root_dirpath, 'componentsearch')
    ovgraphbuild_dirpath = os.path.join(matam_root_dirpath, 'ovgraphbuild')
    
    
    def makedir(dirpath):
        """
        Make a directory if it doesnt exist
        """
        try:
            if not os.path.exists(dirpath):
                logger.debug('mkdir {0}'.format(dirpath))
                os.makedirs(dirpath)
        except OSError:
            logger.exception('{0} directory cannot be created'.format(dirpath))
            raise
    
    
    def execute_cmd(cmd_line, directory, info, warning, createdir=False):
        logger.info(info)
    
        if createdir:
            makedir(directory)
    
        os.chdir(directory)
        logger.debug('PWD: {0}'.format(directory))
    
        logger.debug('CMD: {0}'.format(cmd_line))
        error_code = subprocess.call(cmd_line, shell=True)
    
        if error_code > 0:
            logger.warning(warning)
    
        sys.stderr.write('\n')
    
        return error_code
    
    
    if __name__ == '__main__':
    
        # Set logging
        # create console handler
        ch = logging.StreamHandler()
        # set logging level
        logger.setLevel(logging.DEBUG)
        # create formatter for debug level
        formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
        # add the formatter to the console handler
        ch.setFormatter(formatter)
        # add the handler to logger
        logger.addHandler(ch)
    
        # Set global t0
        global_t0_wall = time.time()
    
        # Init global error code
        global_error_code = 0
    
        #
        sys.stderr.write('\n')
    
        parser = argparse.ArgumentParser()
        valid_targets = ['build', 'clean']
        parser.add_argument(
            "target",
            nargs='?',
            default='build',
            help="Delete all files in the current directory that are \
    normally created by building the program. Default is %(default)s",
            choices=valid_targets)
    
        args = parser.parse_args()
        print(args)
    
        ########################
        # Update git submodules
    
        if args.target == 'build':
            info = '-- Updating git submodules --'
            cmd_line = 'git submodule update --init --recursive'
            warning = 'A problem might have happened while updating git submodules. Check log above'
            global_error_code += execute_cmd(cmd_line,
                                             matam_root_dirpath, info, warning)
    
        ############################
        # Compiling ComponentSearch
    
        if args.target == 'clean':
            info = '-- Cleaning ComponentSearch --'
            cmd_line = 'make clean'
            warning = 'A problem might have happened while cleaning ComponentSearch. Check log above'
            global_error_code += execute_cmd(cmd_line,
                                             componentsearch_dirpath, info, warning)
    
        elif args.target == 'build':
            info = '-- Compiling ComponentSearch --'
            cmd_line = 'make CC=$CXX'
            warning = 'A problem might have happened while compiling ComponentSearch. Check log above'
            global_error_code += execute_cmd(cmd_line,
                                             componentsearch_dirpath, info, warning)
    
        #########################
        # Compiling ovgraphbuild
    
        if args.target == 'clean':
            info = '-- Cleaning ovgraphbuild --'
            cmd_line = 'rm -rf build bin'
            warning = 'A problem might have happened while cleaning ovgraphbuild. Check log above'
            global_error_code += execute_cmd(cmd_line,
                                             ovgraphbuild_dirpath, info, warning)
    
        elif args.target == 'build':
            info = '-- Compiling ovgraphbuild --'
            ovgraphbuild_build_dirpath = os.path.join(
                ovgraphbuild_dirpath, 'build')
            cmd_line = 'cmake .. -G"CodeBlocks - Unix Makefiles"'
            cmd_line += '&& make'
            warning = 'A problem might have happened while compiling ovgraphbuild. Check log above'
            global_error_code += execute_cmd(cmd_line,
                                             ovgraphbuild_build_dirpath,
                                             info,
                                             warning,
                                             createdir=True)
    
        ##############################
        # Creating links into bin dir
    
        if args.target == 'clean':
            pass
        elif args.target == 'build':
            info = '-- Creating links into bin dir --'
            matam_bin_dirpath = os.path.join(matam_root_dirpath, 'bin')
            cmd_line = 'ln -sf ' + \
                os.path.join(matam_scripts_dirpath, 'matam_*.py')
            cmd_line += ' ' + os.path.join(matam_root_dirpath, "index_default_ssu_rrna_db.py")
            cmd_line += ' ' + os.path.join(matam_bin_dirpath, '.')
            warning = 'A problem might have happened while creating links into bin dir. Check log above'
            global_error_code += execute_cmd(cmd_line,
                                             matam_bin_dirpath,
                                             info,
                                             warning,
                                             createdir=True)
    
        #######
        # Exit
    
        if args.target == 'clean':
            logger.info('-- MATAM cleaning complete --')
            if global_error_code > 0:
                logger.warning(
                    'Problems might have happened during MATAM cleaning. Please check log above')
            else:
                logger.debug(
                    'Cleaning completed in {0:.2f} seconds'.format(
                        time.time() - global_t0_wall))
                logger.info('MATAM cleaning went well. ')
    
        elif args.target == 'build':
            logger.info('-- MATAM building complete --')
            if global_error_code > 0:
                logger.warning(
                    'Problems might have happened during MATAM building. Please check log above')
                sys.exit(global_error_code)
            else:
                logger.debug(
                    'Building completed in {0:.2f} seconds'.format(
                        time.time() - global_t0_wall))
                logger.info('MATAM building went well. '
                            'Program executables can be found in '
                            'MATAM bin directory: {0}'.format(matam_bin_dirpath))
    
        sys.stderr.write('\n')
    

    back to top

    Software Heritage — Copyright (C) 2015–2026, The Software Heritage developers. License: GNU AGPLv3+.
    The source code of Software Heritage itself is available on our development forge.
    The source code files archived by Software Heritage are available under their own copyright and licenses.
    Terms of use: Archive access, API— Content policy— Contact— JavaScript license information— Web API