From c3c1df582094b10f803d875f43f6e8b7e3107c5d Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Tue, 3 Oct 2017 13:28:57 -0600 Subject: [PATCH 1/5] Implement display_hint in gdb pretty printers A few pretty-printers were returning a quoted string from their to_string method. It's preferable in gdb to return a lazy string and to let gdb handle the display by having a "display_hint" method that returns "string" -- it lets gdb settings (like "set print ...") work, it handles corrupted strings a bit better, and it passes the information along to IDEs. --- src/etc/gdb_rust_pretty_printing.py | 15 +++++++++++---- src/test/debuginfo/pretty-std.rs | 4 ++++ 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/etc/gdb_rust_pretty_printing.py b/src/etc/gdb_rust_pretty_printing.py index 822dc581404..0612873e281 100755 --- a/src/etc/gdb_rust_pretty_printing.py +++ b/src/etc/gdb_rust_pretty_printing.py @@ -248,7 +248,10 @@ class RustStringSlicePrinter(object): def to_string(self): (length, data_ptr) = rustpp.extract_length_and_ptr_from_slice(self.__val) raw_ptr = data_ptr.get_wrapped_value() - return '"%s"' % raw_ptr.string(encoding="utf-8", length=length) + return raw_ptr.lazy_string(encoding="utf-8", length=length) + + def display_hint(self): + return "string" class RustStdVecPrinter(object): @@ -278,9 +281,11 @@ class RustStdStringPrinter(object): def to_string(self): vec = self.__val.get_child_at_index(0) (length, data_ptr, cap) = rustpp.extract_length_ptr_and_cap_from_std_vec(vec) - return '"%s"' % data_ptr.get_wrapped_value().string(encoding="utf-8", - length=length) + return data_ptr.get_wrapped_value().lazy_string(encoding="utf-8", + length=length) + def display_hint(self): + return "string" class RustOsStringPrinter(object): def __init__(self, val): @@ -294,8 +299,10 @@ class RustOsStringPrinter(object): (length, data_ptr, cap) = rustpp.extract_length_ptr_and_cap_from_std_vec( vec) - return '"%s"' % data_ptr.get_wrapped_value().string(length=length) + return data_ptr.get_wrapped_value().lazy_string(length=length) + def display_hint(self): + return "string" class RustCStyleVariantPrinter(object): def __init__(self, val): diff --git a/src/test/debuginfo/pretty-std.rs b/src/test/debuginfo/pretty-std.rs index 9596f0287bc..2a28c895b79 100644 --- a/src/test/debuginfo/pretty-std.rs +++ b/src/test/debuginfo/pretty-std.rs @@ -44,6 +44,10 @@ // gdb-command: print some_string // gdb-check:$8 = Some = {"IAMA optional string!"} +// gdb-command: set print length 5 +// gdb-command: print some_string +// gdb-check:$8 = Some = {"IAMA "...} + // === LLDB TESTS ================================================================================== From eb1006f5cfb9429d76423bea5360d59a818fbc43 Mon Sep 17 00:00:00 2001 From: Michael Woerister Date: Mon, 9 Oct 2017 17:29:59 +0200 Subject: [PATCH 2/5] incr.comp.: Add some documentation to force_from_dep_node(). --- src/librustc/ty/maps/plumbing.rs | 51 +++++++++++++++++++++++++++++--- 1 file changed, 47 insertions(+), 4 deletions(-) diff --git a/src/librustc/ty/maps/plumbing.rs b/src/librustc/ty/maps/plumbing.rs index 88b619558d9..389b0401b86 100644 --- a/src/librustc/ty/maps/plumbing.rs +++ b/src/librustc/ty/maps/plumbing.rs @@ -603,6 +603,49 @@ macro_rules! define_provider_struct { }; } + +/// The red/green evaluation system will try to mark a specific DepNode in the +/// dependency graph as green by recursively trying to mark the dependencies of +/// that DepNode as green. While doing so, it will sometimes encounter a DepNode +/// where we don't know if it is red or green and we therefore actually have +/// to recompute its value in order to find out. Since the only piece of +/// information that we have at that point is the DepNode we are trying to +/// re-evaluate, we need some way to re-run a query from just that. This is what +/// `force_from_dep_node()` implements. +/// +/// In the general case, a DepNode consists of a DepKind and an opaque +/// GUID/fingerprint that will uniquely identify the node. This GUID/fingerprint +/// is usually constructed by computing a stable hash of the query-key that the +/// DepNode corresponds to. Consequently, it is not in general possible to go +/// back from hash to query-key (since hash functions are not reversible). For +/// this reason `force_from_dep_node()` is expected to fail from time to time +/// because we just cannot find out, from the DepNode alone, what the +/// corresponding query-key is and therefore cannot re-run the query. +/// +/// The system deals with this case letting `try_mark_green` fail which forces +/// the root query to be re-evaluated. +/// +/// Now, if force_from_dep_node() would always fail, it would be pretty useless. +/// Fortunately, we can use some contextual information that will allow us to +/// reconstruct query-keys for certain kinds of DepNodes. In particular, we +/// enforce by construction that the GUID/fingerprint of certain DepNodes is a +/// valid DefPathHash. Since we also always build a huge table that maps every +/// DefPathHash in the current codebase to the corresponding DefId, we have +/// everything we need to re-run the query. +/// +/// Take the `mir_validated` query as an example. Like many other queries, it +/// just has a single parameter: the DefId of the item it will compute the +/// validated MIR for. Now, when we call `force_from_dep_node()` on a dep-node +/// with kind `MirValidated`, we know that the GUID/fingerprint of the dep-node +/// is actually a DefPathHash, and can therefore just look up the corresponding +/// DefId in `tcx.def_path_hash_to_def_id`. +/// +/// When you implement a new query, it will likely have a corresponding new +/// DepKind, and you'll have to support it here in `force_from_dep_node()`. As +/// a rule of thumb, if your query takes a DefId or DefIndex as sole parameter, +/// then `force_from_dep_node()` should not fail for it. Otherwise, you can just +/// add it to the "We don't have enough information to reconstruct..." group in +/// the match below. pub fn force_from_dep_node<'a, 'gcx, 'lcx>(tcx: TyCtxt<'a, 'gcx, 'lcx>, dep_node: &DepNode) -> bool { @@ -687,16 +730,16 @@ pub fn force_from_dep_node<'a, 'gcx, 'lcx>(tcx: TyCtxt<'a, 'gcx, 'lcx>, DepKind::Hir | // This are anonymous nodes + DepKind::TraitSelect | + + // We don't have enough information to reconstruct the query key of + // these DepKind::IsCopy | DepKind::IsSized | DepKind::IsFreeze | DepKind::NeedsDrop | DepKind::Layout | - DepKind::TraitSelect | DepKind::ConstEval | - - // We don't have enough information to reconstruct the query key of - // these DepKind::InstanceSymbolName | DepKind::MirShim | DepKind::BorrowCheckKrate | From 29b576e15b371ca7ccf14698399deadae0954688 Mon Sep 17 00:00:00 2001 From: gaurikholkar Date: Sat, 7 Oct 2017 01:14:44 +0530 Subject: [PATCH 3/5] Update let-expressions.rs --- .../incremental/hashes/let_expressions.rs | 160 ++++++++++++++++++ 1 file changed, 160 insertions(+) diff --git a/src/test/incremental/hashes/let_expressions.rs b/src/test/incremental/hashes/let_expressions.rs index 9e532548e11..d46fbd36760 100644 --- a/src/test/incremental/hashes/let_expressions.rs +++ b/src/test/incremental/hashes/let_expressions.rs @@ -38,6 +38,20 @@ pub fn change_name() { #[rustc_clean(label="HirBody", cfg="cfail3")] #[rustc_metadata_clean(cfg="cfail2")] #[rustc_metadata_clean(cfg="cfail3")] +#[rustc_dirty(label="MirValidated", cfg="cfail2")] +#[rustc_clean(label="MirValidated", cfg="cfail3")] +#[rustc_dirty(label="MirOptimized", cfg="cfail2")] +#[rustc_clean(label="MirOptimized", cfg="cfail3")] +#[rustc_clean(label="TypeckTables", cfg="cfail2")] +#[rustc_clean(label="TypeckTables", cfg="cfail3")] +#[rustc_clean(label="TypeOfItem", cfg="cfail2")] +#[rustc_clean(label="TypeOfItem", cfg="cfail3")] +#[rustc_clean(label="GenericsOfItem", cfg="cfail2")] +#[rustc_clean(label="GenericsOfItem", cfg="cfail3")] +#[rustc_clean(label="FnSignature", cfg="cfail2")] +#[rustc_clean(label="FnSignature", cfg="cfail3")] +#[rustc_clean(label="PredicatesOfItem", cfg="cfail2")] +#[rustc_clean(label="PredicatesOfItem", cfg="cfail3")] pub fn change_name() { let _y = 2u64; } @@ -57,6 +71,20 @@ pub fn add_type() { #[rustc_clean(label="HirBody", cfg="cfail3")] #[rustc_metadata_clean(cfg="cfail2")] #[rustc_metadata_clean(cfg="cfail3")] +#[rustc_clean(label="MirValidated", cfg="cfail2")] +#[rustc_clean(label="MirValidated", cfg="cfail3")] +#[rustc_clean(label="MirOptimized", cfg="cfail2")] +#[rustc_clean(label="MirOptimized", cfg="cfail3")] +#[rustc_dirty(label="TypeckTables", cfg="cfail2")] +#[rustc_clean(label="TypeckTables", cfg="cfail3")] +#[rustc_clean(label="TypeOfItem", cfg="cfail2")] +#[rustc_clean(label="TypeOfItem", cfg="cfail3")] +#[rustc_clean(label="GenericsOfItem", cfg="cfail2")] +#[rustc_clean(label="GenericsOfItem", cfg="cfail3")] +#[rustc_clean(label="FnSignature", cfg="cfail2")] +#[rustc_clean(label="FnSignature", cfg="cfail3")] +#[rustc_clean(label="PredicatesOfItem", cfg="cfail2")] +#[rustc_clean(label="PredicatesOfItem", cfg="cfail3")] pub fn add_type() { let _x: u32 = 2u32; } @@ -76,6 +104,20 @@ pub fn change_type() { #[rustc_clean(label="HirBody", cfg="cfail3")] #[rustc_metadata_clean(cfg="cfail2")] #[rustc_metadata_clean(cfg="cfail3")] +#[rustc_dirty(label="MirValidated", cfg="cfail2")] +#[rustc_clean(label="MirValidated", cfg="cfail3")] +#[rustc_dirty(label="MirOptimized", cfg="cfail2")] +#[rustc_clean(label="MirOptimized", cfg="cfail3")] +#[rustc_dirty(label="TypeckTables", cfg="cfail2")] +#[rustc_clean(label="TypeckTables", cfg="cfail3")] +#[rustc_clean(label="TypeOfItem", cfg="cfail2")] +#[rustc_clean(label="TypeOfItem", cfg="cfail3")] +#[rustc_clean(label="GenericsOfItem", cfg="cfail2")] +#[rustc_clean(label="GenericsOfItem", cfg="cfail3")] +#[rustc_clean(label="FnSignature", cfg="cfail2")] +#[rustc_clean(label="FnSignature", cfg="cfail3")] +#[rustc_clean(label="PredicatesOfItem", cfg="cfail2")] +#[rustc_clean(label="PredicatesOfItem", cfg="cfail3")] pub fn change_type() { let _x: u8 = 2; } @@ -95,6 +137,20 @@ pub fn change_mutability_of_reference_type() { #[rustc_clean(label="HirBody", cfg="cfail3")] #[rustc_metadata_clean(cfg="cfail2")] #[rustc_metadata_clean(cfg="cfail3")] +#[rustc_dirty(label="MirValidated", cfg="cfail2")] +#[rustc_clean(label="MirValidated", cfg="cfail3")] +#[rustc_clean(label="MirOptimized", cfg="cfail2")] +#[rustc_clean(label="MirOptimized", cfg="cfail3")] +#[rustc_dirty(label="TypeckTables", cfg="cfail2")] +#[rustc_clean(label="TypeckTables", cfg="cfail3")] +#[rustc_clean(label="TypeOfItem", cfg="cfail2")] +#[rustc_clean(label="TypeOfItem", cfg="cfail3")] +#[rustc_clean(label="GenericsOfItem", cfg="cfail2")] +#[rustc_clean(label="GenericsOfItem", cfg="cfail3")] +#[rustc_clean(label="FnSignature", cfg="cfail2")] +#[rustc_clean(label="FnSignature", cfg="cfail3")] +#[rustc_clean(label="PredicatesOfItem", cfg="cfail2")] +#[rustc_clean(label="PredicatesOfItem", cfg="cfail3")] pub fn change_mutability_of_reference_type() { let _x: &mut u64; } @@ -114,6 +170,20 @@ pub fn change_mutability_of_slot() { #[rustc_clean(label="HirBody", cfg="cfail3")] #[rustc_metadata_clean(cfg="cfail2")] #[rustc_metadata_clean(cfg="cfail3")] +#[rustc_dirty(label="MirValidated", cfg="cfail2")] +#[rustc_clean(label="MirValidated", cfg="cfail3")] +#[rustc_dirty(label="MirOptimized", cfg="cfail2")] +#[rustc_clean(label="MirOptimized", cfg="cfail3")] +#[rustc_dirty(label="TypeckTables", cfg="cfail2")] +#[rustc_clean(label="TypeckTables", cfg="cfail3")] +#[rustc_clean(label="TypeOfItem", cfg="cfail2")] +#[rustc_clean(label="TypeOfItem", cfg="cfail3")] +#[rustc_clean(label="GenericsOfItem", cfg="cfail2")] +#[rustc_clean(label="GenericsOfItem", cfg="cfail3")] +#[rustc_clean(label="FnSignature", cfg="cfail2")] +#[rustc_clean(label="FnSignature", cfg="cfail3")] +#[rustc_clean(label="PredicatesOfItem", cfg="cfail2")] +#[rustc_clean(label="PredicatesOfItem", cfg="cfail3")] pub fn change_mutability_of_slot() { let _x: u64 = 0; } @@ -133,6 +203,20 @@ pub fn change_simple_binding_to_pattern() { #[rustc_clean(label="HirBody", cfg="cfail3")] #[rustc_metadata_clean(cfg="cfail2")] #[rustc_metadata_clean(cfg="cfail3")] +#[rustc_dirty(label="MirValidated", cfg="cfail2")] +#[rustc_clean(label="MirValidated", cfg="cfail3")] +#[rustc_dirty(label="MirOptimized", cfg="cfail2")] +#[rustc_clean(label="MirOptimized", cfg="cfail3")] +#[rustc_dirty(label="TypeckTables", cfg="cfail2")] +#[rustc_clean(label="TypeckTables", cfg="cfail3")] +#[rustc_clean(label="TypeOfItem", cfg="cfail2")] +#[rustc_clean(label="TypeOfItem", cfg="cfail3")] +#[rustc_clean(label="GenericsOfItem", cfg="cfail2")] +#[rustc_clean(label="GenericsOfItem", cfg="cfail3")] +#[rustc_clean(label="FnSignature", cfg="cfail2")] +#[rustc_clean(label="FnSignature", cfg="cfail3")] +#[rustc_clean(label="PredicatesOfItem", cfg="cfail2")] +#[rustc_clean(label="PredicatesOfItem", cfg="cfail3")] pub fn change_simple_binding_to_pattern() { let (_a, _b) = (0u8, 'x'); } @@ -152,6 +236,20 @@ pub fn change_name_in_pattern() { #[rustc_clean(label="HirBody", cfg="cfail3")] #[rustc_metadata_clean(cfg="cfail2")] #[rustc_metadata_clean(cfg="cfail3")] +#[rustc_dirty(label="MirValidated", cfg="cfail2")] +#[rustc_clean(label="MirValidated", cfg="cfail3")] +#[rustc_dirty(label="MirOptimized", cfg="cfail2")] +#[rustc_clean(label="MirOptimized", cfg="cfail3")] +#[rustc_clean(label="TypeckTables", cfg="cfail2")] +#[rustc_clean(label="TypeckTables", cfg="cfail3")] +#[rustc_clean(label="TypeOfItem", cfg="cfail2")] +#[rustc_clean(label="TypeOfItem", cfg="cfail3")] +#[rustc_clean(label="GenericsOfItem", cfg="cfail2")] +#[rustc_clean(label="GenericsOfItem", cfg="cfail3")] +#[rustc_clean(label="FnSignature", cfg="cfail2")] +#[rustc_clean(label="FnSignature", cfg="cfail3")] +#[rustc_clean(label="PredicatesOfItem", cfg="cfail2")] +#[rustc_clean(label="PredicatesOfItem", cfg="cfail3")] pub fn change_name_in_pattern() { let (_a, _c) = (1u8, 'y'); } @@ -171,6 +269,20 @@ pub fn add_ref_in_pattern() { #[rustc_clean(label="HirBody", cfg="cfail3")] #[rustc_metadata_clean(cfg="cfail2")] #[rustc_metadata_clean(cfg="cfail3")] +#[rustc_dirty(label="MirValidated", cfg="cfail2")] +#[rustc_clean(label="MirValidated", cfg="cfail3")] +#[rustc_dirty(label="MirOptimized", cfg="cfail2")] +#[rustc_clean(label="MirOptimized", cfg="cfail3")] +#[rustc_dirty(label="TypeckTables", cfg="cfail2")] +#[rustc_clean(label="TypeckTables", cfg="cfail3")] +#[rustc_clean(label="TypeOfItem", cfg="cfail2")] +#[rustc_clean(label="TypeOfItem", cfg="cfail3")] +#[rustc_clean(label="GenericsOfItem", cfg="cfail2")] +#[rustc_clean(label="GenericsOfItem", cfg="cfail3")] +#[rustc_clean(label="FnSignature", cfg="cfail2")] +#[rustc_clean(label="FnSignature", cfg="cfail3")] +#[rustc_clean(label="PredicatesOfItem", cfg="cfail2")] +#[rustc_clean(label="PredicatesOfItem", cfg="cfail3")] pub fn add_ref_in_pattern() { let (ref _a, _b) = (1u8, 'y'); } @@ -190,6 +302,12 @@ pub fn add_amp_in_pattern() { #[rustc_clean(label="HirBody", cfg="cfail3")] #[rustc_metadata_clean(cfg="cfail2")] #[rustc_metadata_clean(cfg="cfail3")] +#[rustc_dirty(label="MirValidated", cfg="cfail2")] +#[rustc_clean(label="MirValidated", cfg="cfail3")] +#[rustc_dirty(label="MirOptimized", cfg="cfail2")] +#[rustc_clean(label="MirOptimized", cfg="cfail3")] +#[rustc_dirty(label="TypeckTables", cfg="cfail2")] +#[rustc_clean(label="TypeckTables", cfg="cfail3")] pub fn add_amp_in_pattern() { let (&_a, _b) = (&1u8, 'y'); } @@ -209,6 +327,20 @@ pub fn change_mutability_of_binding_in_pattern() { #[rustc_clean(label="HirBody", cfg="cfail3")] #[rustc_metadata_clean(cfg="cfail2")] #[rustc_metadata_clean(cfg="cfail3")] +#[rustc_dirty(label="MirValidated", cfg="cfail2")] +#[rustc_clean(label="MirValidated", cfg="cfail3")] +#[rustc_dirty(label="MirOptimized", cfg="cfail2")] +#[rustc_clean(label="MirOptimized", cfg="cfail3")] +#[rustc_dirty(label="TypeckTables", cfg="cfail2")] +#[rustc_clean(label="TypeckTables", cfg="cfail3")] +#[rustc_clean(label="TypeOfItem", cfg="cfail2")] +#[rustc_clean(label="TypeOfItem", cfg="cfail3")] +#[rustc_clean(label="GenericsOfItem", cfg="cfail2")] +#[rustc_clean(label="GenericsOfItem", cfg="cfail3")] +#[rustc_clean(label="FnSignature", cfg="cfail2")] +#[rustc_clean(label="FnSignature", cfg="cfail3")] +#[rustc_clean(label="PredicatesOfItem", cfg="cfail2")] +#[rustc_clean(label="PredicatesOfItem", cfg="cfail3")] pub fn change_mutability_of_binding_in_pattern() { let (mut _a, _b) = (99u8, 'q'); } @@ -228,6 +360,20 @@ pub fn add_initializer() { #[rustc_clean(label="HirBody", cfg="cfail3")] #[rustc_metadata_clean(cfg="cfail2")] #[rustc_metadata_clean(cfg="cfail3")] +#[rustc_dirty(label="MirValidated", cfg="cfail2")] +#[rustc_clean(label="MirValidated", cfg="cfail3")] +#[rustc_dirty(label="MirOptimized", cfg="cfail2")] +#[rustc_clean(label="MirOptimized", cfg="cfail3")] +#[rustc_dirty(label="TypeckTables", cfg="cfail2")] +#[rustc_clean(label="TypeckTables", cfg="cfail3")] +#[rustc_clean(label="TypeOfItem", cfg="cfail2")] +#[rustc_clean(label="TypeOfItem", cfg="cfail3")] +#[rustc_clean(label="GenericsOfItem", cfg="cfail2")] +#[rustc_clean(label="GenericsOfItem", cfg="cfail3")] +#[rustc_clean(label="FnSignature", cfg="cfail2")] +#[rustc_clean(label="FnSignature", cfg="cfail3")] +#[rustc_clean(label="PredicatesOfItem", cfg="cfail2")] +#[rustc_clean(label="PredicatesOfItem", cfg="cfail3")] pub fn add_initializer() { let _x: i16 = 3i16; } @@ -247,6 +393,20 @@ pub fn change_initializer() { #[rustc_clean(label="HirBody", cfg="cfail3")] #[rustc_metadata_clean(cfg="cfail2")] #[rustc_metadata_clean(cfg="cfail3")] +#[rustc_dirty(label="MirValidated", cfg="cfail2")] +#[rustc_clean(label="MirValidated", cfg="cfail3")] +#[rustc_dirty(label="MirOptimized", cfg="cfail2")] +#[rustc_clean(label="MirOptimized", cfg="cfail3")] +#[rustc_clean(label="TypeckTables", cfg="cfail2")] +#[rustc_clean(label="TypeckTables", cfg="cfail3")] +#[rustc_clean(label="TypeOfItem", cfg="cfail2")] +#[rustc_clean(label="TypeOfItem", cfg="cfail3")] +#[rustc_clean(label="GenericsOfItem", cfg="cfail2")] +#[rustc_clean(label="GenericsOfItem", cfg="cfail3")] +#[rustc_clean(label="FnSignature", cfg="cfail2")] +#[rustc_clean(label="FnSignature", cfg="cfail3")] +#[rustc_clean(label="PredicatesOfItem", cfg="cfail2")] +#[rustc_clean(label="PredicatesOfItem", cfg="cfail3")] pub fn change_initializer() { let _x = 5u16; } From 1138f853e194a79f7465233adefe550e7b8c6b5a Mon Sep 17 00:00:00 2001 From: Vadim Petrochenkov Date: Tue, 10 Oct 2017 15:45:04 +0300 Subject: [PATCH 4/5] Fix a mistake in release notes for 1.21.0 Also reorder changes to put the important one first. --- RELEASES.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/RELEASES.md b/RELEASES.md index e65934a89e6..194745d9caa 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -3,12 +3,6 @@ Version 1.21.0 (2017-10-12) Language -------- -- [Relaxed path syntax. You can now add type parameters to values][43540] - Example: - ```rust - my_macro!(Vec::new); // Always worked - my_macro!(Vec::::new); // Now works - ``` - [You can now use static references for literals.][43838] Example: ```rust @@ -16,6 +10,12 @@ Language let x: &'static u32 = &0; } ``` +- [Relaxed path syntax. Optional `::` before `<` is now allowed in all contexts.][43540] + Example: + ```rust + my_macro!(Vec::new); // Always worked + my_macro!(Vec::::new); // Now works + ``` Compiler -------- From a84c62a7f13cd26faaf79a3a77d30706b73afaf8 Mon Sep 17 00:00:00 2001 From: Alexander Kuleshov Date: Tue, 10 Oct 2017 16:36:53 +0600 Subject: [PATCH 5/5] Fix path to x.py in configure.py script We may see a help message in the end of the output of the ./configure script: $ ./configure configure: processing command line configure: configure: build.configure-args := [] configure: configure: writing `config.toml` in current directory configure: configure: run `python ./src/bootstrap/x.py --help` configure: but the x.py script is actually in the rust root directory and executing of such help string will give us error: $ python ./src/bootstrap/x.py --help python: can't open file './src/bootstrap/x.py': [Errno 2] No such file or directory This patch fixes path to the x.py script in the output of the ./configure --- src/bootstrap/configure.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/bootstrap/configure.py b/src/bootstrap/configure.py index 67337bf4421..81a5dcfcd76 100755 --- a/src/bootstrap/configure.py +++ b/src/bootstrap/configure.py @@ -407,11 +407,6 @@ with open('Makefile', 'w') as f: contents = contents.replace("$(CFG_PYTHON)", sys.executable) f.write(contents) -# Finally, clean up with a bit of a help message -relpath = os.path.dirname(__file__) -if relpath == '': - relpath = '.' - p("") -p("run `python {}/x.py --help`".format(relpath)) +p("run `python {}/x.py --help`".format(rust_dir)) p("")