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"])
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"])
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])
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])