mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	rust: support srctree-relative links
				
					
				
			Some of our links use relative paths in order to point to files in the
source tree, e.g.:
    //! C header: [`include/linux/printk.h`](../../../../include/linux/printk.h)
    /// [`struct mutex`]: ../../../../include/linux/mutex.h
These are problematic because they are hard to maintain and do not support
`O=` builds.
Instead, provide support for `srctree`-relative links, e.g.:
    //! C header: [`include/linux/printk.h`](srctree/include/linux/printk.h)
    /// [`struct mutex`]: srctree/include/linux/mutex.h
The links are fixed after `rustdoc` generation to be based on the absolute
path to the source tree.
Essentially, this is the automatic version of Tomonori's fix [1],
suggested by Gary [2].
Suggested-by: Gary Guo <gary@garyguo.net>
Reported-by: FUJITA Tomonori <fujita.tomonori@gmail.com>
Closes: https://lore.kernel.org/r/20231026.204058.2167744626131849993.fujita.tomonori@gmail.com [1]
Fixes: 48fadf4400 ("docs: Move rustdoc output, cross-reference it")
Link: https://lore.kernel.org/rust-for-linux/20231026154525.6d14b495@eugeo/ [2]
Reviewed-by: Martin Rodriguez Reboredo <yakoyoku@gmail.com>
Reviewed-by: Benno Lossin <benno.lossin@proton.me>
Link: https://lore.kernel.org/r/20231215235428.243211-1-ojeda@kernel.org
Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
			
			
This commit is contained in:
		
							parent
							
								
									0a7f5ba73e
								
							
						
					
					
						commit
						bc2e7d5c29
					
				
					 12 changed files with 28 additions and 14 deletions
				
			
		| 
						 | 
					@ -177,6 +177,19 @@ please take a look at the ``rustdoc`` book at:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	https://doc.rust-lang.org/rustdoc/how-to-write-documentation.html
 | 
						https://doc.rust-lang.org/rustdoc/how-to-write-documentation.html
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					In addition, the kernel supports creating links relative to the source tree by
 | 
				
			||||||
 | 
					prefixing the link destination with ``srctree/``. For instance:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. code-block:: rust
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						//! C header: [`include/linux/printk.h`](srctree/include/linux/printk.h)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					or:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. code-block:: rust
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/// [`struct mutex`]: srctree/include/linux/mutex.h
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Naming
 | 
					Naming
 | 
				
			||||||
------
 | 
					------
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -99,7 +99,8 @@ rustdoc: rustdoc-core rustdoc-macros rustdoc-compiler_builtins \
 | 
				
			||||||
	$(Q)find $(rustdoc_output) -name '*.html' -type f -print0 | xargs -0 sed -Ei \
 | 
						$(Q)find $(rustdoc_output) -name '*.html' -type f -print0 | xargs -0 sed -Ei \
 | 
				
			||||||
		-e 's:rust-logo-[0-9a-f]+\.svg:logo.svg:g' \
 | 
							-e 's:rust-logo-[0-9a-f]+\.svg:logo.svg:g' \
 | 
				
			||||||
		-e 's:favicon-[0-9a-f]+\.svg:logo.svg:g' \
 | 
							-e 's:favicon-[0-9a-f]+\.svg:logo.svg:g' \
 | 
				
			||||||
		-e 's:<link rel="alternate icon" type="image/png" href="[/.]+/static\.files/favicon-(16x16|32x32)-[0-9a-f]+\.png">::g'
 | 
							-e 's:<link rel="alternate icon" type="image/png" href="[/.]+/static\.files/favicon-(16x16|32x32)-[0-9a-f]+\.png">::g' \
 | 
				
			||||||
 | 
							-e 's:<a href="srctree/([^"]+)">:<a href="$(abs_srctree)/\1">:g'
 | 
				
			||||||
	$(Q)for f in $(rustdoc_output)/static.files/rustdoc-*.css; do \
 | 
						$(Q)for f in $(rustdoc_output)/static.files/rustdoc-*.css; do \
 | 
				
			||||||
		echo ".logo-container > img { object-fit: contain; }" >> $$f; done
 | 
							echo ".logo-container > img { object-fit: contain; }" >> $$f; done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,7 +2,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//! Kernel errors.
 | 
					//! Kernel errors.
 | 
				
			||||||
//!
 | 
					//!
 | 
				
			||||||
//! C header: [`include/uapi/asm-generic/errno-base.h`](../../../include/uapi/asm-generic/errno-base.h)
 | 
					//! C header: [`include/uapi/asm-generic/errno-base.h`](srctree/include/uapi/asm-generic/errno-base.h)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use crate::str::CStr;
 | 
					use crate::str::CStr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,7 +2,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//! ioctl() number definitions
 | 
					//! ioctl() number definitions
 | 
				
			||||||
//!
 | 
					//!
 | 
				
			||||||
//! C header: [`include/asm-generic/ioctl.h`](../../../../include/asm-generic/ioctl.h)
 | 
					//! C header: [`include/asm-generic/ioctl.h`](srctree/include/asm-generic/ioctl.h)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#![allow(non_snake_case)]
 | 
					#![allow(non_snake_case)]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,7 +2,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//! KUnit-based macros for Rust unit tests.
 | 
					//! KUnit-based macros for Rust unit tests.
 | 
				
			||||||
//!
 | 
					//!
 | 
				
			||||||
//! C header: [`include/kunit/test.h`](../../../../../include/kunit/test.h)
 | 
					//! C header: [`include/kunit/test.h`](srctree/include/kunit/test.h)
 | 
				
			||||||
//!
 | 
					//!
 | 
				
			||||||
//! Reference: <https://docs.kernel.org/dev-tools/kunit/index.html>
 | 
					//! Reference: <https://docs.kernel.org/dev-tools/kunit/index.html>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,7 +2,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//! Printing facilities.
 | 
					//! Printing facilities.
 | 
				
			||||||
//!
 | 
					//!
 | 
				
			||||||
//! C header: [`include/linux/printk.h`](../../../../include/linux/printk.h)
 | 
					//! C header: [`include/linux/printk.h`](srctree/include/linux/printk.h)
 | 
				
			||||||
//!
 | 
					//!
 | 
				
			||||||
//! Reference: <https://www.kernel.org/doc/html/latest/core-api/printk-basics.html>
 | 
					//! Reference: <https://www.kernel.org/doc/html/latest/core-api/printk-basics.html>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -48,7 +48,7 @@ pub mod format_strings {
 | 
				
			||||||
    /// The format string is always the same for a given level, i.e. for a
 | 
					    /// The format string is always the same for a given level, i.e. for a
 | 
				
			||||||
    /// given `prefix`, which are the kernel's `KERN_*` constants.
 | 
					    /// given `prefix`, which are the kernel's `KERN_*` constants.
 | 
				
			||||||
    ///
 | 
					    ///
 | 
				
			||||||
    /// [`_printk`]: ../../../../include/linux/printk.h
 | 
					    /// [`_printk`]: srctree/include/linux/printk.h
 | 
				
			||||||
    const fn generate(is_cont: bool, prefix: &[u8; 3]) -> [u8; LENGTH] {
 | 
					    const fn generate(is_cont: bool, prefix: &[u8; 3]) -> [u8; LENGTH] {
 | 
				
			||||||
        // Ensure the `KERN_*` macros are what we expect.
 | 
					        // Ensure the `KERN_*` macros are what we expect.
 | 
				
			||||||
        assert!(prefix[0] == b'\x01');
 | 
					        assert!(prefix[0] == b'\x01');
 | 
				
			||||||
| 
						 | 
					@ -97,7 +97,7 @@ pub mod format_strings {
 | 
				
			||||||
/// The format string must be one of the ones in [`format_strings`], and
 | 
					/// The format string must be one of the ones in [`format_strings`], and
 | 
				
			||||||
/// the module name must be null-terminated.
 | 
					/// the module name must be null-terminated.
 | 
				
			||||||
///
 | 
					///
 | 
				
			||||||
/// [`_printk`]: ../../../../include/linux/_printk.h
 | 
					/// [`_printk`]: srctree/include/linux/_printk.h
 | 
				
			||||||
#[doc(hidden)]
 | 
					#[doc(hidden)]
 | 
				
			||||||
#[cfg_attr(not(CONFIG_PRINTK), allow(unused_variables))]
 | 
					#[cfg_attr(not(CONFIG_PRINTK), allow(unused_variables))]
 | 
				
			||||||
pub unsafe fn call_printk(
 | 
					pub unsafe fn call_printk(
 | 
				
			||||||
| 
						 | 
					@ -120,7 +120,7 @@ pub unsafe fn call_printk(
 | 
				
			||||||
///
 | 
					///
 | 
				
			||||||
/// Public but hidden since it should only be used from public macros.
 | 
					/// Public but hidden since it should only be used from public macros.
 | 
				
			||||||
///
 | 
					///
 | 
				
			||||||
/// [`_printk`]: ../../../../include/linux/printk.h
 | 
					/// [`_printk`]: srctree/include/linux/printk.h
 | 
				
			||||||
#[doc(hidden)]
 | 
					#[doc(hidden)]
 | 
				
			||||||
#[cfg_attr(not(CONFIG_PRINTK), allow(unused_variables))]
 | 
					#[cfg_attr(not(CONFIG_PRINTK), allow(unused_variables))]
 | 
				
			||||||
pub fn call_printk_cont(args: fmt::Arguments<'_>) {
 | 
					pub fn call_printk_cont(args: fmt::Arguments<'_>) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -69,7 +69,7 @@ macro_rules! new_condvar {
 | 
				
			||||||
/// }
 | 
					/// }
 | 
				
			||||||
/// ```
 | 
					/// ```
 | 
				
			||||||
///
 | 
					///
 | 
				
			||||||
/// [`struct wait_queue_head`]: ../../../include/linux/wait.h
 | 
					/// [`struct wait_queue_head`]: srctree/include/linux/wait.h
 | 
				
			||||||
#[pin_data]
 | 
					#[pin_data]
 | 
				
			||||||
pub struct CondVar {
 | 
					pub struct CondVar {
 | 
				
			||||||
    #[pin]
 | 
					    #[pin]
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -84,7 +84,7 @@ macro_rules! new_mutex {
 | 
				
			||||||
/// }
 | 
					/// }
 | 
				
			||||||
/// ```
 | 
					/// ```
 | 
				
			||||||
///
 | 
					///
 | 
				
			||||||
/// [`struct mutex`]: ../../../../include/linux/mutex.h
 | 
					/// [`struct mutex`]: srctree/include/linux/mutex.h
 | 
				
			||||||
pub type Mutex<T> = super::Lock<T, MutexBackend>;
 | 
					pub type Mutex<T> = super::Lock<T, MutexBackend>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// A kernel `struct mutex` lock backend.
 | 
					/// A kernel `struct mutex` lock backend.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -82,7 +82,7 @@ macro_rules! new_spinlock {
 | 
				
			||||||
/// }
 | 
					/// }
 | 
				
			||||||
/// ```
 | 
					/// ```
 | 
				
			||||||
///
 | 
					///
 | 
				
			||||||
/// [`spinlock_t`]: ../../../../include/linux/spinlock.h
 | 
					/// [`spinlock_t`]: srctree/include/linux/spinlock.h
 | 
				
			||||||
pub type SpinLock<T> = super::Lock<T, SpinLockBackend>;
 | 
					pub type SpinLock<T> = super::Lock<T, SpinLockBackend>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// A kernel `spinlock_t` lock backend.
 | 
					/// A kernel `spinlock_t` lock backend.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,7 +2,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//! Tasks (threads and processes).
 | 
					//! Tasks (threads and processes).
 | 
				
			||||||
//!
 | 
					//!
 | 
				
			||||||
//! C header: [`include/linux/sched.h`](../../../../include/linux/sched.h).
 | 
					//! C header: [`include/linux/sched.h`](srctree/include/linux/sched.h).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use crate::{bindings, types::Opaque};
 | 
					use crate::{bindings, types::Opaque};
 | 
				
			||||||
use core::{marker::PhantomData, ops::Deref, ptr};
 | 
					use core::{marker::PhantomData, ops::Deref, ptr};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -132,7 +132,7 @@
 | 
				
			||||||
//! }
 | 
					//! }
 | 
				
			||||||
//! ```
 | 
					//! ```
 | 
				
			||||||
//!
 | 
					//!
 | 
				
			||||||
//! C header: [`include/linux/workqueue.h`](../../../../include/linux/workqueue.h)
 | 
					//! C header: [`include/linux/workqueue.h`](srctree/include/linux/workqueue.h)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use crate::{bindings, prelude::*, sync::Arc, sync::LockClassKey, types::Opaque};
 | 
					use crate::{bindings, prelude::*, sync::Arc, sync::LockClassKey, types::Opaque};
 | 
				
			||||||
use alloc::alloc::AllocError;
 | 
					use alloc::alloc::AllocError;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -20,7 +20,7 @@
 | 
				
			||||||
/// The `type` argument should be a type which implements the [`Module`]
 | 
					/// The `type` argument should be a type which implements the [`Module`]
 | 
				
			||||||
/// trait. Also accepts various forms of kernel metadata.
 | 
					/// trait. Also accepts various forms of kernel metadata.
 | 
				
			||||||
///
 | 
					///
 | 
				
			||||||
/// C header: [`include/linux/moduleparam.h`](../../../include/linux/moduleparam.h)
 | 
					/// C header: [`include/linux/moduleparam.h`](srctree/include/linux/moduleparam.h)
 | 
				
			||||||
///
 | 
					///
 | 
				
			||||||
/// [`Module`]: ../kernel/trait.Module.html
 | 
					/// [`Module`]: ../kernel/trait.Module.html
 | 
				
			||||||
///
 | 
					///
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue