lmark - mark jobs and files with specific attributes
lmark [OPTION]... [FILE]...
There are 2 possible marks :
freeze |
This mark prevents jobs from being run. Instead its targets (as built during the last run) behave as sources. If no job generated a file provided in arguments, this file behaves as a source. |
no-trigger
This mark prevents open-lmake to trigger builds of dependent jobs after modifications of mentioned files. However, this applies only if job was last run with success.
Jobs and files so marked and that have been used are repeated in the summary. This precaution is taken because such presence goes against repeatability and should be suppressed before commiting the repo.
Frozen jobs are useful to run a flow from A to B. To do that you type lmark -af A followed by lmake B.
No trigger files are useful when working on a foundation file (called utils.h hereinafter). It is common to work on utils.h to add new features. During such developments, it is practical to run a test suite that checks the new feature. But to run this test suite, you probably need a lot a derived files that depend on utils.h without using the new feature (e.g. a.o, b.o, c.o which are not the focus of your development). It is then a waste of time and resources to rebuild these derived files for each tiny modification. An easy way is :
• |
Mark utils.h with no-trigger. | ||
• |
Write the new test that uses this new feature. | ||
• |
Modify utils.h to implement the new feature. | ||
• |
Run your test. Files not using the new feature will likely be successfully built and will not be uselessly rebuilt. File using the new feature will likely fail and will be usefully rebuilt. If no error is generated, it is easy to run rm(1) or lforget(1) to force rebuild. | ||
• |
Loop on edit/test until feature is ok. | ||
• |
When you are satisfied with the new feature, suppress the no-trigger mark and rerun your test suite to ensure repeatability. |
lmark manages a fully coherent dir called a repo. When it starts, it first determines the root of the repo (cf. FILES below).
Arguments and reports are systematically localized to the current working dir. For example, if you launch lmark b from dir a in your repo, the argument is file a/b from the root of the repo and reports containing file names (initially seen from the root of the repo) will be shown relative the the current working dir.
These options
are common to all tools of the open-lmake set of
utilities :
--version
Print version and exit. Version is in the form "year.month.tag (key)" where "year.month" forms the major version, "tag" the minor version and "key" is indicates the format of the persistent information.
-h, --help
Print a short help and exit. It is composed of:
• |
The command line synoptic. | ||
• |
Version as described above. | ||
• |
A line for each supported option with its short name, long name, whether it has an argument and a short explanation. |
-J, --job
Passed arguments are interpreted as job names rather than as file names. Job names are the names that appear, for example, on start and done lines when lmake executes a job.
-R rule, --rule=rule
When the --job option is used, this options allows the specification of a rule, given by its name. This is necessary when the job name is ambiguous as several rules may lead to the same job name.
-q, --quiet
Do not generate user oriented messages. Strictly generate what is asked. This is practical if output is meant for automatic processing.
-S, --sync
Ensure server is launched (i.e. do not connect to an existing server) and wait for its termination. This is exceptionally useful in scripts that modify Lmakefile.py.
-v, --verbose
Generate more prolix output.
A single
sub-command must be provided :
-a, --add
mark mentioned jobs or files.
-d, --delete
remove mark from mentioned jobs or files.
-l, --list
list marked files. This is a global sub-command and not file/job must be provided.
-c, --clear
delete all marks. This is a global sub-command and not file/job must be provided.
These options
are specific to lmark :
-f, --freeze
mark is freeze.
-t, --no-trigger
mark is no-trigger.
The files Lmakefile.py or Lmakefile/__init__.py are searched in the current dir and in parent dirs. If a single one is found, this determines the root of the repo. If several are found, the existence of an LMAKE dir is checked. If a single one is found, this determines the root of the repo. In other cases, lmark will not start.
Where lforget(1) is used to instruct open-lmake to run jobs that it considers up-to-date, lmark is used the opposite way, to instruct open-lmake not to run jobs it considers out-of-date.
lautodep(1), lcheck_deps(1), ldebug(1), ldecode(1), ldepend(1), lencode(1), lforget(1), lmake(1), lrepair(1), lrun_cc(1), lshow(1), ltarget(1), xxhsum(1)
The python module lmake.
The full open-lmake documentation in <open-lmake-installation-dir>/docs/index.html.
Copyright © 2023-2025, Doliam. This file is part of open-lmake.
open-lmake is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License.
open-lmake is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.