Property definitions

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