Modules
Any .ooc
file is a module. Modules are organized in packages, relative
to source path elements.
For example, for the following directory structure:
source
|-- czmq
| `-- extras
| `-- PipeSink.ooc
`-- czmq.ooc
We have two modules, and their fully qualified names are czmq
and czmq/extras/PipeSink
.
We’ll say that the czmq
module is in the root package, and that the PipeSink
module is
in the czmq/extras
package.
Import
The example modules above can be imported like this:
import czmq
import czmq/extras/PipeSink
Or, on one single line:
import czmq, czmq/extras/PipeSink
Import paths can be relative, so for a file in the czmq
package, one can import
with the full path, czmq/extras/PipeSink
, or with the relative path, extras/PipeSink
.
Similarly, inside PipeSink, one could import another extra via ../KitchenSink
When importing several modules from the same package, one can use the multi-import syntax:
import os/[Process, Terminal, Env]
By default, symbols imported another module are available in the global scope. To import the symbols into a namespace, use into
:
import czmq/extras/PipeSink into PipeSink
Non-modules
Other files may be involved in the compilation process, especially when using C libraries. Dynamic libraries and header paths will typically be specified in a usefile, whereas C headers can be directly included in .ooc files
Include
To include a standard header ssuch as stdio.h
, one can do:
include stdio, stdlib
Note the absence of .h
.
Include with defines
Some C header files’ behaviour vary depending on what’s defined when including
them. For example, to use functions such as GetSystemInfo
or GetComputerNameEx
from the Windows API, one needs to define a _WIN32_WINNT
constant to be equal
or greater than 0x0500
.
The following syntax achieves exactly this:
include windows | (_WIN32_WINNT=0x0500)
Relative include
It might also be useful to include a header file bundled with an ooc library.
Prefixing the path with ./
will do just that:
include ./stb-image
The header file will get copied in the output directory with the other generated C files.
For a good example of relative import, and using additionals in usefiles, see the ooc-stb-image library.