nitc :: NitMakefile :: defaultinit
# A Makefile for the Nit project
class NitMakefile
# Nit files to compile
var nit_files: Array[String]
# List of rules to add in the Makefile
fun rules: Array[MakeRule] do
var rules = new Array[MakeRule]
var rule_all = new MakeRule("all", is_phony = true)
rules.add rule_all
for file in nit_files do
var bin = file.basename.strip_extension
rule_all.deps.add "bin/{bin}"
var rule = new MakeRule("bin/{bin}")
rule.deps.add "$(shell $(NITLS) -M {file})"
rule.lines.add "mkdir -p bin/"
rule.lines.add "$(NITC) {file} -o bin/{bin}"
rules.add rule
end
var rule_check = new MakeRule("check", is_phony = true)
rule_check.lines.add "$(NITUNIT) ."
rules.add rule_check
var rule_doc = new MakeRule("doc", is_phony = true)
rule_doc.lines.add "$(NITDOC) . -o doc/"
rules.add rule_doc
var rule_clean = new MakeRule("clean", is_phony = true)
if nit_files.not_empty then
rule_clean.lines.add "rm -rf bin/"
end
rule_clean.lines.add "rm -rf doc/"
rules.add rule_clean
return rules
end
# Render `self`
fun render: Writable do
var tpl = new Template
tpl.addn """
# This file is part of NIT ( http://www.nitlanguage.org ).
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.\n"""
if nit_files.not_empty then
tpl.addn "NITC ?= nitc"
tpl.addn "NITLS ?= nitls"
end
tpl.addn "NITUNIT ?= nitunit"
tpl.addn "NITDOC ?= nitdoc"
for rule in rules do
tpl.add "\n{rule.render.write_to_string}"
end
return tpl
end
end
src/nitpackage.nit:563,1--637,3