def gen_setup(config, default_build_type, relative_path, setup_script_name):
    """
    Generate setup script.
    """
    from autocmake.extract import extract_list

    s = []
    s.append('#!/usr/bin/env python')
    s.append('\n{0}'.format(autogenerated_notice()))
    s.append('\nimport os')
    s.append('import sys')
    s.append('assert sys.version_info >= (2, 6), \'Python >= 2.6 is required\'')

    s.append("\nsys.path.insert(0, '{0}')".format(relative_path))

    s.append('from autocmake import configure')
    s.append('from autocmake.external import docopt')

    s.append('\n\noptions = """')
    s.append('Usage:')
    s.append('  ./{0} [options] [<builddir>]'.format(setup_script_name))
    s.append('  ./{0} (-h | --help)'.format(setup_script_name))
    s.append('\nOptions:')

    options = []

    for opt in config['docopt']:
        first = opt.split()[0].strip()
        rest = ' '.join(opt.split()[1:]).strip()
        options.append([first, rest])

    options.append(['--type=<TYPE>', 'Set the CMake build type (debug, release, relwithdebinfo, minsizerel) [default: {0}].'.format(default_build_type)])
    options.append(['--generator=<STRING>', 'Set the CMake build system generator [default: Unix Makefiles].'])
    options.append(['--show', 'Show CMake command and exit.'])
    options.append(['--cmake-executable=<CMAKE_EXECUTABLE>', 'Set the CMake executable [default: cmake].'])
    options.append(['--cmake-options=<STRING>', "Define options to CMake [default: '']."])
    options.append(['--prefix=<PATH>', 'Set the install path for make install.'])
    options.append(['<builddir>', 'Build directory.'])
    options.append(['-h --help', 'Show this screen.'])

    s.append(align_options(options))

    s.append('"""')

    s.append(gen_cmake_command(config))

    s.append("\n")
    s.append("# parse command line args")
    s.append("try:")
    s.append("    arguments = docopt.docopt(options, argv=None)")
    s.append("except docopt.DocoptExit:")
    s.append(r"    sys.stderr.write('ERROR: bad input to {0}\n'.format(sys.argv[0]))")
    s.append("    sys.stderr.write(options)")
    s.append("    sys.exit(-1)")
    s.append("\n")
    s.append("# use extensions to validate/post-process args")
    s.append("if configure.module_exists('extensions'):")
    s.append("    import extensions")
    s.append("    arguments = extensions.postprocess_args(sys.argv, arguments)")
    s.append("\n")
    s.append("root_directory = os.path.dirname(os.path.realpath(__file__))")
    s.append("\n")
    s.append("build_path = arguments['<builddir>']")
    s.append("\n")
    s.append("# create cmake command")
    s.append("cmake_command = '{0} -H{1}'.format(gen_cmake_command(options, arguments), root_directory)")
    s.append("\n")
    s.append("# run cmake")
    s.append("configure.configure(root_directory, build_path, cmake_command, arguments['--show'])")

    return s
def gen_setup ( config , default_build_type , relative_path , setup_script_name ) : from autocmake . extract import extract_list s = [ ] s . append ( '#!/usr/bin/env python' ) s . append ( '\n{0}' . format ( autogenerated_notice ( ) ) ) s . append ( '\nimport os' ) s . append ( 'import sys' ) s . append ( 'assert sys.version_info >= (2, 6), \'Python >= 2.6 is required\'' ) s . append ( "\nsys.path.insert(0, '{0}')" . format ( relative_path ) ) s . append ( 'from autocmake import configure' ) s . append ( 'from autocmake.external import docopt' ) s . append ( '\n\noptions = """' ) s . append ( 'Usage:' ) s . append ( '  ./{0} [options] [<builddir>]' . format ( setup_script_name ) ) s . append ( '  ./{0} (-h | --help)' . format ( setup_script_name ) ) s . append ( '\nOptions:' ) options = [ ] for opt in config [ 'docopt' ] : first = opt . split ( ) [ 0 ] . strip ( ) rest = ' ' . join ( opt . split ( ) [ 1 : ] ) . strip ( ) options . append ( [ first , rest ] ) options . append ( [ '--type=<TYPE>' , 'Set the CMake build type (debug, release, relwithdebinfo, minsizerel) [default: {0}].' . format ( default_build_type ) ] ) options . append ( [ '--generator=<STRING>' , 'Set the CMake build system generator [default: Unix Makefiles].' ] ) options . append ( [ '--show' , 'Show CMake command and exit.' ] ) options . append ( [ '--cmake-executable=<CMAKE_EXECUTABLE>' , 'Set the CMake executable [default: cmake].' ] ) options . append ( [ '--cmake-options=<STRING>' , "Define options to CMake [default: '']." ] ) options . append ( [ '--prefix=<PATH>' , 'Set the install path for make install.' ] ) options . append ( [ '<builddir>' , 'Build directory.' ] ) options . append ( [ '-h --help' , 'Show this screen.' ] ) s . append ( align_options ( options ) ) s . append ( '"""' ) s . append ( gen_cmake_command ( config ) ) s . append ( "\n" ) s . append ( "# parse command line args" ) s . append ( "try:" ) s . append ( "    arguments = docopt.docopt(options, argv=None)" ) s . append ( "except docopt.DocoptExit:" ) s . append ( r"    sys.stderr.write('ERROR: bad input to {0}\n'.format(sys.argv[0]))" ) s . append ( "    sys.stderr.write(options)" ) s . append ( "    sys.exit(-1)" ) s . append ( "\n" ) s . append ( "# use extensions to validate/post-process args" ) s . append ( "if configure.module_exists('extensions'):" ) s . append ( "    import extensions" ) s . append ( "    arguments = extensions.postprocess_args(sys.argv, arguments)" ) s . append ( "\n" ) s . append ( "root_directory = os.path.dirname(os.path.realpath(__file__))" ) s . append ( "\n" ) s . append ( "build_path = arguments['<builddir>']" ) s . append ( "\n" ) s . append ( "# create cmake command" ) s . append ( "cmake_command = '{0} -H{1}'.format(gen_cmake_command(options, arguments), root_directory)" ) s . append ( "\n" ) s . append ( "# run cmake" ) s . append ( "configure.configure(root_directory, build_path, cmake_command, arguments['--show'])" ) return s
Generate setup script.