Пример #1
0
def declare_install_and_stage_proper_targets(libraries, headers):

    install_requirements = ["<install-source-root>" + BOOST_ROOT + "/boost"]
    if layout == "versioned":
        install_requirements.append("<install-header-subdir>boost-" + BOOST_VERSION_TAG + "/boost")
    else:
        install_requirements.append("<install-header-subdir>boost")

    if os.name == "nt":
        default_prefix = "C:/Boost"
    else:
        default_prefix = "/usr/local"
        
    install_requirements.append("<install-default-prefix>" + default_prefix)

    p = get_manager().projects().current()
    package.install("install-proper",
                    install_requirements + ["<install-no-version-symlinks>on"],
                    [],
                    ["libs/%s/build" % l for l in libraries],
                    headers)
    p.mark_targets_as_explicit(["install-proper"])

    stage.install("stage-proper",
                  ["libs/%s/build" % l for l in libraries],
                  ["<location>" + stage_locate + "/lib",
                   "<install-dependencies>on", "<install-type>LIB",
                   "<install-no-version-symlinks>on"])
    p.mark_targets_as_explicit(["stage-proper"])

    gr = value_to_jam(make_unversioned_links)
    gr = "<generating-rule>" + gr

    
    if layout == "versioned":
        generate("stage-unversioned", ["stage-proper"], [gr])    
        generate("install-unversioned", ["install-proper"], [gr])
    else:
        # Create do-nothing aliases.
        alias("stage-unversioned")
        alias("install-unversioned")
        
    p.mark_targets_as_explicit(["stage-unversioned", "install-unversioned"])
Пример #2
0
def declare_install_and_stage_proper_targets(libraries, headers):

    install_requirements = ["<install-source-root>" + BOOST_ROOT + "/boost"]
    if layout == "versioned":
        install_requirements.append("<install-header-subdir>boost-" +
                                    BOOST_VERSION_TAG + "/boost")
    else:
        install_requirements.append("<install-header-subdir>boost")

    if os.name == "nt":
        default_prefix = "C:/Boost"
    else:
        default_prefix = "/usr/local"

    install_requirements.append("<install-default-prefix>" + default_prefix)

    p = get_manager().projects().current()
    package.install("install-proper",
                    install_requirements + ["<install-no-version-symlinks>on"],
                    [], ["libs/%s/build" % l for l in libraries], headers)
    p.mark_targets_as_explicit(["install-proper"])

    stage.install("stage-proper", ["libs/%s/build" % l for l in libraries], [
        "<location>" + stage_locate + "/lib", "<install-dependencies>on",
        "<install-type>LIB", "<install-no-version-symlinks>on"
    ])
    p.mark_targets_as_explicit(["stage-proper"])

    gr = value_to_jam(make_unversioned_links)
    gr = "<generating-rule>" + gr

    if layout == "versioned":
        generate("stage-unversioned", ["stage-proper"], [gr])
        generate("install-unversioned", ["install-proper"], [gr])
    else:
        # Create do-nothing aliases.
        alias("stage-unversioned")
        alias("install-unversioned")

    p.mark_targets_as_explicit(["stage-unversioned", "install-unversioned"])
Пример #3
0
def install(name, package_name=None, requirements=[], binaries=[], libraries=[], headers=[]):

    requirements = requirements[:]
    binaries = binaries[:]
    libraries

    if not package_name:
        package_name = name

    if option.get("prefix"):
        # If --prefix is explicitly specified on the command line,
        # then we need wipe away any settings of libdir/includir that
        # is specified via options in config files.
        option.set("bindir", None)
        option.set("libdir", None)
        option.set("includedir", None)
            
    # If <install-source-root> is not specified, all headers are installed to
    # prefix/include, no matter what their relative path is. Sometimes that is
    # what is needed.
    install_source_root = property.select('install-source-root', requirements)
    if install_source_root:
        requirements = property.change(requirements, 'install-source-root', None)
            
    install_header_subdir = property.select('install-header-subdir', requirements)
    if install_header_subdir:
        install_header_subdir = ungrist(install_header_subdir[0])
        requirements = property.change(requirements, 'install-header-subdir', None)

    # First, figure out all locations. Use the default if no prefix option
    # given.
    prefix = get_prefix(name, requirements)

    # Architecture dependent files.
    exec_locate = option.get("exec-prefix", prefix)

    # Binaries.
    bin_locate = option.get("bindir", os.path.join(prefix, "bin"))

    # Object code libraries.
    lib_locate = option.get("libdir", os.path.join(prefix, "lib"))

    # Source header files.
    include_locate = option.get("includedir", os.path.join(prefix, "include"))

    stage.install(name + "-bin", binaries, requirements + ["<location>" + bin_locate])
    
    alias(name + "-lib", [name + "-lib-shared", name + "-lib-static"])
    
    # Since the install location of shared libraries differs on universe
    # and cygwin, use target alternatives to make different targets.
    # We should have used indirection conditioanl requirements, but it's
    # awkward to pass bin-locate and lib-locate from there to another rule.
    alias(name + "-lib-shared", [name + "-lib-shared-universe"])
    alias(name + "-lib-shared", [name + "-lib-shared-cygwin"], ["<target-os>cygwin"])
    
    # For shared libraries, we install both explicitly specified one and the
    # shared libraries that the installed executables depend on.
    stage.install(name + "-lib-shared-universe", binaries + libraries,
                  requirements + ["<location>" + lib_locate, "<install-dependencies>on",
                                  "<install-type>SHARED_LIB"])
    stage.install(name + "-lib-shared-cygwin", binaries + libraries,
                  requirements + ["<location>" + bin_locate, "<install-dependencies>on",
                                  "<install-type>SHARED_LIB"])

    # For static libraries, we do not care about executable dependencies, since
    # static libraries are already incorporated into them.
    stage.install(name + "-lib-static", libraries, requirements +
                  ["<location>" + lib_locate, "<install-dependencies>on", "<install-type>STATIC_LIB"])
    stage.install(name + "-headers", headers, requirements \
                  + ["<location>" + os.path.join(include_locate, s) for s in install_header_subdir]
                  + install_source_root)

    alias(name, [name + "-bin", name + "-lib", name + "-headers"])

    pt = get_manager().projects().current()

    for subname in ["bin", "lib", "headers", "lib-shared", "lib-static", "lib-shared-universe", "lib-shared-cygwin"]:
        pt.mark_targets_as_explicit([name + "-" + subname])
Пример #4
0
def install(name,
            package_name=None,
            requirements=[],
            binaries=[],
            libraries=[],
            headers=[]):

    requirements = requirements[:]
    binaries = binaries[:]
    libraries

    if not package_name:
        package_name = name

    if option.get("prefix"):
        # If --prefix is explicitly specified on the command line,
        # then we need wipe away any settings of libdir/includir that
        # is specified via options in config files.
        option.set("bindir", None)
        option.set("libdir", None)
        option.set("includedir", None)

    # If <install-source-root> is not specified, all headers are installed to
    # prefix/include, no matter what their relative path is. Sometimes that is
    # what is needed.
    install_source_root = property.select('install-source-root', requirements)
    if install_source_root:
        requirements = property.change(requirements, 'install-source-root',
                                       None)

    install_header_subdir = property.select('install-header-subdir',
                                            requirements)
    if install_header_subdir:
        install_header_subdir = ungrist(install_header_subdir[0])
        requirements = property.change(requirements, 'install-header-subdir',
                                       None)

    # First, figure out all locations. Use the default if no prefix option
    # given.
    prefix = get_prefix(name, requirements)

    # Architecture dependent files.
    exec_locate = option.get("exec-prefix", prefix)

    # Binaries.
    bin_locate = option.get("bindir", os.path.join(prefix, "bin"))

    # Object code libraries.
    lib_locate = option.get("libdir", os.path.join(prefix, "lib"))

    # Source header files.
    include_locate = option.get("includedir", os.path.join(prefix, "include"))

    stage.install(name + "-bin", binaries,
                  requirements + ["<location>" + bin_locate])

    alias(name + "-lib", [name + "-lib-shared", name + "-lib-static"])

    # Since the install location of shared libraries differs on universe
    # and cygwin, use target alternatives to make different targets.
    # We should have used indirection conditioanl requirements, but it's
    # awkward to pass bin-locate and lib-locate from there to another rule.
    alias(name + "-lib-shared", [name + "-lib-shared-universe"])
    alias(name + "-lib-shared", [name + "-lib-shared-cygwin"],
          ["<target-os>cygwin"])

    # For shared libraries, we install both explicitly specified one and the
    # shared libraries that the installed executables depend on.
    stage.install(
        name + "-lib-shared-universe", binaries + libraries, requirements + [
            "<location>" + lib_locate, "<install-dependencies>on",
            "<install-type>SHARED_LIB"
        ])
    stage.install(
        name + "-lib-shared-cygwin", binaries + libraries, requirements + [
            "<location>" + bin_locate, "<install-dependencies>on",
            "<install-type>SHARED_LIB"
        ])

    # For static libraries, we do not care about executable dependencies, since
    # static libraries are already incorporated into them.
    stage.install(
        name + "-lib-static", libraries, requirements + [
            "<location>" + lib_locate, "<install-dependencies>on",
            "<install-type>STATIC_LIB"
        ])
    stage.install(name + "-headers", headers, requirements \
                  + ["<location>" + os.path.join(include_locate, s) for s in install_header_subdir]
                  + install_source_root)

    alias(name, [name + "-bin", name + "-lib", name + "-headers"])

    pt = get_manager().projects().current()

    for subname in [
            "bin", "lib", "headers", "lib-shared", "lib-static",
            "lib-shared-universe", "lib-shared-cygwin"
    ]:
        pt.mark_targets_as_explicit([name + "-" + subname])