Commit Diff


commit - d06c4f189c99f40d36fcbac816e76a43981fb8ad
commit + c029c51da1e88462de3ff3d8da9cd8d24ff983ff
blob - 0e4dff0c64187d6ec7dfd3fc044412fe5a8401a1
blob + 191613a70e7e3a0338a31946fde0c12c4ec5bd98
--- make/TODO.md
+++ make/TODO.md
@@ -1,5 +1,50 @@
+# Choose a name for this make
+- hmake (hireachical make)
+- rmake (recursive make)
+- bmake (already used by BSD Make)
+- dmake/dirmk/dmk (directory make)
+
+
 # Write a useful README about how this make differs from all the other makes
-- Current situation of using make in big projects
+- Motivation for writing this make
+    - Make is great, but not really suitable for large projects
+        - Either recursive make, or one gigantic Makefile (both are bad)
+    - Alternatives
+        - Autotools is way too painful and uses recursive make
+        - CMake is too fat and is written in C++
+        - Meson is written in Python
+        - All of the above require learning new languages
+- Fundamental difference between this make, and all the others
+    - Targets/Dependencies are treated as paths, not strings
+    - Every directory is associated with a scope
+    - There is a Tree of Scopes
+    - Minor differences
+        - Inference rules can be arbitrarily deep
+        - No need for `.SUFFIXES:`
+        - Macro assignment works slightly different
+            - use `?=` if you want to allow overriding an assignment
+- Explain how this make works
+    - Data Structures
+        - `scope`
+        - `directory` and `gnu`
+        - `file`
+        - `rule`
+        - `dep`
+    - Algorithms
+        - `parse_recursive()` (bottom-up)
+        - `parse()` (top-down)
+        - lazy includes
+        - `expand()`
+        - `build()` and `build_file()`
+        - Inference rules
+- List of Features
+    - "Usual" Make Features
+    - Scoped Include
+    - Integration with "foreign" make directories (GNU, BSD, ...)
+    - "Exporting" macros into child scopes
+- Where this make could be useful
+    - Large projects with many subdirectories
+- Future Work
 
 
 # Options