blob: 9f01165653b46619a0d027d733c2795b5c30dfbc [file] [log] [blame]
John Thompson02bad9f2013-09-23 17:57:00 +00001================
John Thompson26ecaf92013-10-16 13:44:21 +00002Modularize Usage
John Thompson02bad9f2013-09-23 17:57:00 +00003================
John Thompson2d2d45e2013-09-20 14:40:52 +00004
John Thompson9cb79642015-02-18 16:14:32 +00005``modularize [<modularize-options>] [<module-map>|<include-files-list>]*
John Thompson469bbc02015-02-12 16:22:09 +00006[<front-end-options>...]``
John Thompson2d2d45e2013-09-20 14:40:52 +00007
8``<modularize-options>`` is a place-holder for options
9specific to modularize, which are described below in
10`Modularize Command Line Options`.
11
John Thompson9cb79642015-02-18 16:14:32 +000012``<module-map>`` specifies the path of a file name for an
Malcolm Parsons5831a002016-11-17 14:26:45 +000013existing module map. The module map must be well-formed in
14terms of syntax. Modularize will extract the header file names
15from the map. Only normal headers are checked, assuming headers
John Thompson9cb79642015-02-18 16:14:32 +000016marked "private", "textual", or "exclude" are not to be checked
17as a top-level include, assuming they either are included by
18other headers which are checked, or they are not suitable for
19modules.
20
John Thompson2d2d45e2013-09-20 14:40:52 +000021``<include-files-list>`` specifies the path of a file name for a
22file containing the newline-separated list of headers to check
23with respect to each other. Lines beginning with '#' and empty
24lines are ignored. Header file names followed by a colon and
25other space-separated file names will include those extra files
26as dependencies. The file names can be relative or full paths,
John Thompson02bad9f2013-09-23 17:57:00 +000027but must be on the same line. For example::
John Thompson2d2d45e2013-09-20 14:40:52 +000028
John Thompson02bad9f2013-09-23 17:57:00 +000029 header1.h
30 header2.h
31 header3.h: header1.h header2.h
John Thompson2d2d45e2013-09-20 14:40:52 +000032
John Thompson26ecaf92013-10-16 13:44:21 +000033Note that unless a ``-prefix (header path)`` option is specified,
John Thompson2d2d45e2013-09-20 14:40:52 +000034non-absolute file paths in the header list file will be relative
Malcolm Parsons5831a002016-11-17 14:26:45 +000035to the header list file directory. Use -prefix to specify a different
John Thompson2d2d45e2013-09-20 14:40:52 +000036directory.
37
38``<front-end-options>`` is a place-holder for regular Clang
39front-end arguments, which must follow the <include-files-list>.
John Thompsonf9f62b12015-05-06 18:43:01 +000040Note that by default, modularize assumes .h files
41contain C++ source, so if you are using a different language,
42you might need to use a ``-x`` option to tell Clang that the
43header contains another language, i.e.: ``-x c``
John Thompson2d2d45e2013-09-20 14:40:52 +000044
John Thompson8eb8d932015-02-19 16:47:27 +000045Note also that because modularize does not use the clang driver,
46you will likely need to pass in additional compiler front-end
47arguments to match those passed in by default by the driver.
48
John Thompson2d2d45e2013-09-20 14:40:52 +000049Modularize Command Line Options
John Thompson02bad9f2013-09-23 17:57:00 +000050===============================
John Thompson2d2d45e2013-09-20 14:40:52 +000051
John Thompson81cf1e82015-06-04 01:12:56 +000052.. option:: -prefix=<header-path>
John Thompson2d2d45e2013-09-20 14:40:52 +000053
54 Prepend the given path to non-absolute file paths in the header list file.
55 By default, headers are assumed to be relative to the header list file
Malcolm Parsons5831a002016-11-17 14:26:45 +000056 directory. Use ``-prefix`` to specify a different directory.
John Thompson26ecaf92013-10-16 13:44:21 +000057
58.. option:: -module-map-path=<module-map-path>
59
Malcolm Parsons5831a002016-11-17 14:26:45 +000060 Generate a module map and output it to the given file. See the description
John Thompson26ecaf92013-10-16 13:44:21 +000061 in :ref:`module-map-generation`.
Alexander Kornienko1647f382016-12-13 16:38:45 +000062
John Thompson4018c622015-07-10 00:37:25 +000063.. option:: -problem-files-list=<problem-files-list-file-name>
64
Malcolm Parsons5831a002016-11-17 14:26:45 +000065 For use only with module map assistant. Input list of files that
66 have problems with respect to modules. These will still be
John Thompson4018c622015-07-10 00:37:25 +000067 included in the generated module map, but will be marked as
68 "excluded" headers.
John Thompson26ecaf92013-10-16 13:44:21 +000069
70.. option:: -root-module=<root-name>
71
72 Put modules generated by the -module-map-path option in an enclosing
Malcolm Parsons5831a002016-11-17 14:26:45 +000073 module with the given name. See the description in :ref:`module-map-generation`.
John Thompsonecd3b042015-02-11 16:58:36 +000074
75.. option:: -block-check-header-list-only
76
77 Limit the #include-inside-extern-or-namespace-block
78 check to only those headers explicitly listed in the header list.
79 This is a work-around for avoiding error messages for private includes that
80 purposefully get included inside blocks.
John Thompson8eb8d932015-02-19 16:47:27 +000081
82.. option:: -no-coverage-check
83
84 Don't do the coverage check for a module map.
85
86.. option:: -coverage-check-only
87
88 Only do the coverage check for a module map.
John Thompson4018c622015-07-10 00:37:25 +000089
90.. option:: -display-file-lists
91
92 Display lists of good files (no compile errors), problem files,
93 and a combined list with problem files preceded by a '#'.
94 This can be used to quickly determine which files have problems.
95 The latter combined list might be useful in starting to modularize
Malcolm Parsons5831a002016-11-17 14:26:45 +000096 a set of headers. You can start with a full list of headers,
John Thompson4018c622015-07-10 00:37:25 +000097 use -display-file-lists option, and then use the combined list as
98 your intermediate list, uncommenting-out headers as you fix them.