about summary refs log tree commit diff
path: root/src/test
diff options
context:
space:
mode:
authorAlex Crichton <alex@alexcrichton.com>2016-11-04 16:49:29 -0700
committerAlex Crichton <alex@alexcrichton.com>2016-11-05 10:50:23 -0700
commit8a38b24d952f0f13dbc436a68edb87a4b565f2e3 (patch)
tree7dbeab0c444ee524ac0c8a714342547e7be76c81 /src/test
parent1d41d5bd016fc619ef21a8629c935a8f331b6140 (diff)
parent20c301330cf17dd98c58aaff602586b99f7676fc (diff)
Rollup merge of #37501 - alexcrichton:windows-subsystem, r=brson
rustc: Add knowledge of Windows subsystems.

This commit is an implementation of [RFC 1665] which adds support for the
`#![windows_subsystem]` attribute. This attribute allows specifying either the
"windows" or "console" subsystems on Windows to the linker.

[RFC 1665]: https://github.com/rust-lang/rfcs/blob/master/text/1665-windows-subsystem.md

Previously all Rust executables were compiled as the "console" subsystem which
meant that if you wanted a graphical application it would erroneously pop up a
console whenever opened. When compiling an application, however, this is
undesired behavior and the "windows" subsystem is used instead to have control
over user interactions.

This attribute is validated, but ignored on all non-Windows platforms.

cc #37499
Diffstat (limited to 'src/test')
-rw-r--r--src/test/compile-fail/windows-subsystem-gated.rs14
-rw-r--r--src/test/compile-fail/windows-subsystem-invalid.rs15
-rw-r--r--src/test/run-make/windows-subsystem/Makefile5
-rw-r--r--src/test/run-make/windows-subsystem/console.rs15
-rw-r--r--src/test/run-make/windows-subsystem/windows.rs14
5 files changed, 63 insertions, 0 deletions
diff --git a/src/test/compile-fail/windows-subsystem-gated.rs b/src/test/compile-fail/windows-subsystem-gated.rs
new file mode 100644
index 00000000000..4b563e78e55
--- /dev/null
+++ b/src/test/compile-fail/windows-subsystem-gated.rs
@@ -0,0 +1,14 @@
+// Copyright 2016 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+#![windows_subsystem = "console"]
+//~^ ERROR: the windows subsystem attribute is currently unstable
+
+fn main() {}
diff --git a/src/test/compile-fail/windows-subsystem-invalid.rs b/src/test/compile-fail/windows-subsystem-invalid.rs
new file mode 100644
index 00000000000..28c3950e76f
--- /dev/null
+++ b/src/test/compile-fail/windows-subsystem-invalid.rs
@@ -0,0 +1,15 @@
+// Copyright 2016 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+#![feature(windows_subsystem)]
+#![windows_subsystem = "wrong"]
+//~^ ERROR: invalid subsystem `wrong`, only `windows` and `console` are allowed
+
+fn main() {}
diff --git a/src/test/run-make/windows-subsystem/Makefile b/src/test/run-make/windows-subsystem/Makefile
new file mode 100644
index 00000000000..34fb5db32f9
--- /dev/null
+++ b/src/test/run-make/windows-subsystem/Makefile
@@ -0,0 +1,5 @@
+-include ../tools.mk
+
+all:
+	$(RUSTC) windows.rs
+	$(RUSTC) console.rs
diff --git a/src/test/run-make/windows-subsystem/console.rs b/src/test/run-make/windows-subsystem/console.rs
new file mode 100644
index 00000000000..3aedb0ecab7
--- /dev/null
+++ b/src/test/run-make/windows-subsystem/console.rs
@@ -0,0 +1,15 @@
+// Copyright 2016 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+#![feature(windows_subsystem)]
+#![windows_subsystem = "console"]
+
+fn main() {}
+
diff --git a/src/test/run-make/windows-subsystem/windows.rs b/src/test/run-make/windows-subsystem/windows.rs
new file mode 100644
index 00000000000..5d875a5a1bf
--- /dev/null
+++ b/src/test/run-make/windows-subsystem/windows.rs
@@ -0,0 +1,14 @@
+// Copyright 2016 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+#![feature(windows_subsystem)]
+#![windows_subsystem = "windows"]
+
+fn main() {}