diff --git a/docs/layout-of-source-files.rst b/docs/layout-of-source-files.rst index 1128685d1..b795d1549 100644 --- a/docs/layout-of-source-files.rst +++ b/docs/layout-of-source-files.rst @@ -71,6 +71,15 @@ and then run the compiler as `solc github.com/ethereum/dapp-bin/=/usr/local/dapp-bin/ source.sol` +Note that solc only allows you to include files from certain directories: +They have to be in the directory (or subdirectory) of one of the explicitly +specified source files or in the directory (or subdirectory) of a remapping +target. If you want to allow direct absolute includes, just add the +remapping `=/`. + +If there are multiple remappings that lead to a valid file, the remapping +with the longest common prefix is chosen. + **browser-solidity**: The `browser-based compiler `_ diff --git a/docs/miscellaneous.rst b/docs/miscellaneous.rst index 3d95ef573..f2ad0f88d 100644 --- a/docs/miscellaneous.rst +++ b/docs/miscellaneous.rst @@ -111,8 +111,11 @@ it is also possible to provide path redirects using `prefix=path` in the followi This essentially instructs the compiler to search for anything starting with `github.com/ethereum/dapp-bin/` under `/usr/local/lib/dapp-bin` and if it does not find the file there, it will look at `/usr/local/lib/fallback` (the empty prefix -always matches) and if also that fails, it will make a full path lookup -on the filesystem. +always matches). `solc` will not read files from the filesystem that lie outside of +the remapping targets and outside of the directories where explicitly specified source +files reside, so things like `import "/etc/passwd";` only work if you add `=/` as a remapping. + +If there are multiple matches due to remappings, the one with the longest common prefix is selected. If your contracts use [libraries](#libraries), you will notice that the bytecode contains substrings of the form `__LibraryName______`. You can use `solc` as a linker meaning that it will insert the library addresses for you at those points: