Repository files navigation

Yes, another Build System.

Donate via Stripe

First I made a decent Makefile system. I got it working on OSX, Linux, MinGW ... all but MSVC. Then I found myself wanting to build stuff with MSVC ... without making those stupid .vcproj files, or another NMAKE script, or rewriting everything. Because, if you have to rewrite everything, why use a one-platform tool to do it, like MSVC's stuff? So I found myself in need of a rewrite. Hence this simple build system.

It reads files labeled buildinfo. Each buildinfo specifies the distribution name, type, and any dependencies. They optionally can have a depends table that specifies the locations of all other dependent lmake-based projects. More configuration information for the buildinfo can be found in the run.lua file.

Command-Line Usage

If you want shell integration, make this file:

lmake:

#!/usr/bin/env sh
lua ~/path/to/make/run.lua "$@"

or for the windows users: lmake.bat:

@echo off
lua "C:\path\to\make\run.lua" %*

...with maybe an optional -lluarocks.require after lua depending on how your lua setup is.

and run it with the following arguments:

  • lmake clean = cleans objects
  • lmake distclean = cleans executable
  • lmake = builds default configuration
  • lmake all = builds debug and release
  • lmake debug = builds debug
  • lmake release = builds release
  • lmake distonly = builds dist from objs only

Lua Usage:

if you're lazy:

lua -lmake

and to clean ...

lua -lmake.clean

if you want to do more than one thing at once...

lua /path/to/lua/make/run.lua clean distclean all

if you want a custom platform:

lua platform $PLATFORM make.lua

where $PLATFORM can be:

  • osx
  • linux
  • clang_win
  • mingw
  • msvc

Reference

globals defined per-project:

  • distName = name of the project
  • distType = type of the project. possible options are:
    • 'app' for applications / executables.
    • 'lib' for libraries.
    • 'inc' for include files (no code / nothing to build, but still used for buildinfo dependencies).
  • depends = table of paths to other lmake projects that this is dependent upon.

globals defined by lua-make that you can override:

  • env = reference back to the global environment object.
  • home = home directory.
  • platform = build platform.
  • build = 'debug' or 'release'.
  • objSuffix = suffix of object file. '.o' on unix systems, '.obj' in M$ systems.
  • libPrefix = prefix of library files. 'lib' on unix systems.
  • libSuffix = lib suffix. '.so', '.dylib', '.a', '.lib', '.dll', etc.
  • appSuffix = executable suffix. empty on unix systems, '.exe' for M$.
  • compiler = compiler binary name. 'g++', 'clang++', 'cl.exe', etc...
  • compileFlags = flags to pass to compiler.
  • compileIncludeFlag = flag for include directory.
  • compileMacroFlag = flag for C++ macros.
  • compileOutputFlag = flag for output filename.
  • compileGetIncludeFilesFlag = flag for getting include files referenced by this file.
  • including = flag set if this buildinfo is being interpreted from another buildinfo.
  • linker = linker binary name.
  • linkLibPathFlag = flag for adding library search paths.
  • linkLibFlag = flag for adding libraries.
  • linkOutputFlag = flag for specifying the output filename.
  • linkFlags = extra flags to send to the linker
  • cppver = C++ version.
  • include = table of include directories to forward to the C++ compiler.
  • dependLibs = other luamake projects that the project is dependent upon (for executing recursive buildinfos).
  • libs = -l libraries, be they static or dynamic, automatically detected by the compiler/linker.
  • libpaths = -L search paths for libs.
  • dynamicLibs
    • on linux this contains paths to explicit .so files.
    • on osx this is .dylib files.
    • on windows this is .lib files associated with .dll files (as opposed to the .lib files that are static libraries ... smh windows).
  • objLogFile = filename to save output of Env:buildObj().
  • distLogFile = filename to save output of Env:buildDist().
  • pthread = set this flag when including pthread. Maps to -pthread in GCC.
  • fileCfgs[filename] = function(fileEnv) = per-file callback that can be registered to configure the per-file environment, in case any files need vars changed from the global env.

As a Lua library:

I'm using this in a few other places:

About

yet *another* build script system

Resources

Stars

4 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Yes, another Build System.

Donate via Stripe

First I made a decent Makefile system. I got it working on OSX, Linux, MinGW ... all but MSVC. Then I found myself wanting to build stuff with MSVC ... without making those stupid .vcproj files, or another NMAKE script, or rewriting everything. Because, if you have to rewrite everything, why use a one-platform tool to do it, like MSVC's stuff? So I found myself in need of a rewrite. Hence this simple build system.

It reads files labeled buildinfo. Each buildinfo specifies the distribution name, type, and any dependencies. They optionally can have a depends table that specifies the locations of all other dependent lmake-based projects. More configuration information for the buildinfo can be found in the run.lua file.

Command-Line Usage

If you want shell integration, make this file:

lmake:

#!/usr/bin/env sh
lua ~/path/to/make/run.lua "$@"

or for the windows users: lmake.bat:

@echo off
lua "C:\path\to\make\run.lua" %*

...with maybe an optional -lluarocks.require after lua depending on how your lua setup is.

and run it with the following arguments:

  • lmake clean = cleans objects
  • lmake distclean = cleans executable
  • lmake = builds default configuration
  • lmake all = builds debug and release
  • lmake debug = builds debug
  • lmake release = builds release
  • lmake distonly = builds dist from objs only

Lua Usage:

if you're lazy:

lua -lmake

and to clean ...

lua -lmake.clean

if you want to do more than one thing at once...

lua /path/to/lua/make/run.lua clean distclean all

if you want a custom platform:

lua platform $PLATFORM make.lua

where $PLATFORM can be:

  • osx
  • linux
  • clang_win
  • mingw
  • msvc

Reference

globals defined per-project:

  • distName = name of the project
  • distType = type of the project. possible options are:
    • 'app' for applications / executables.
    • 'lib' for libraries.
    • 'inc' for include files (no code / nothing to build, but still used for buildinfo dependencies).
  • depends = table of paths to other lmake projects that this is dependent upon.

globals defined by lua-make that you can override:

  • env = reference back to the global environment object.
  • home = home directory.
  • platform = build platform.
  • build = 'debug' or 'release'.
  • objSuffix = suffix of object file. '.o' on unix systems, '.obj' in M$ systems.
  • libPrefix = prefix of library files. 'lib' on unix systems.
  • libSuffix = lib suffix. '.so', '.dylib', '.a', '.lib', '.dll', etc.
  • appSuffix = executable suffix. empty on unix systems, '.exe' for M$.
  • compiler = compiler binary name. 'g++', 'clang++', 'cl.exe', etc...
  • compileFlags = flags to pass to compiler.
  • compileIncludeFlag = flag for include directory.
  • compileMacroFlag = flag for C++ macros.
  • compileOutputFlag = flag for output filename.
  • compileGetIncludeFilesFlag = flag for getting include files referenced by this file.
  • including = flag set if this buildinfo is being interpreted from another buildinfo.
  • linker = linker binary name.
  • linkLibPathFlag = flag for adding library search paths.
  • linkLibFlag = flag for adding libraries.
  • linkOutputFlag = flag for specifying the output filename.
  • linkFlags = extra flags to send to the linker
  • cppver = C++ version.
  • include = table of include directories to forward to the C++ compiler.
  • dependLibs = other luamake projects that the project is dependent upon (for executing recursive buildinfos).
  • libs = -l libraries, be they static or dynamic, automatically detected by the compiler/linker.
  • libpaths = -L search paths for libs.
  • dynamicLibs
    • on linux this contains paths to explicit .so files.
    • on osx this is .dylib files.
    • on windows this is .lib files associated with .dll files (as opposed to the .lib files that are static libraries ... smh windows).
  • objLogFile = filename to save output of Env:buildObj().
  • distLogFile = filename to save output of Env:buildDist().
  • pthread = set this flag when including pthread. Maps to -pthread in GCC.
  • fileCfgs[filename] = function(fileEnv) = per-file callback that can be registered to configure the per-file environment, in case any files need vars changed from the global env.

As a Lua library:

I'm using this in a few other places:

About

yet *another* build script system

Resources

Stars

4 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Yes, another Build System.

Donate via Stripe

First I made a decent Makefile system. I got it working on OSX, Linux, MinGW ... all but MSVC. Then I found myself wanting to build stuff with MSVC ... without making those stupid .vcproj files, or another NMAKE script, or rewriting everything. Because, if you have to rewrite everything, why use a one-platform tool to do it, like MSVC's stuff? So I found myself in need of a rewrite. Hence this simple build system.

It reads files labeled buildinfo. Each buildinfo specifies the distribution name, type, and any dependencies. They optionally can have a depends table that specifies the locations of all other dependent lmake-based projects. More configuration information for the buildinfo can be found in the run.lua file.

Command-Line Usage

If you want shell integration, make this file:

lmake:

#!/usr/bin/env sh
lua ~/path/to/make/run.lua "$@"

or for the windows users: lmake.bat:

@echo off
lua "C:\path\to\make\run.lua" %*

...with maybe an optional -lluarocks.require after lua depending on how your lua setup is.

and run it with the following arguments:

  • lmake clean = cleans objects
  • lmake distclean = cleans executable
  • lmake = builds default configuration
  • lmake all = builds debug and release
  • lmake debug = builds debug
  • lmake release = builds release
  • lmake distonly = builds dist from objs only

Lua Usage:

if you're lazy:

lua -lmake

and to clean ...

lua -lmake.clean

if you want to do more than one thing at once...

lua /path/to/lua/make/run.lua clean distclean all

if you want a custom platform:

lua platform $PLATFORM make.lua

where $PLATFORM can be:

  • osx
  • linux
  • clang_win
  • mingw
  • msvc

Reference

globals defined per-project:

  • distName = name of the project
  • distType = type of the project. possible options are:
    • 'app' for applications / executables.
    • 'lib' for libraries.
    • 'inc' for include files (no code / nothing to build, but still used for buildinfo dependencies).
  • depends = table of paths to other lmake projects that this is dependent upon.

globals defined by lua-make that you can override:

  • env = reference back to the global environment object.
  • home = home directory.
  • platform = build platform.
  • build = 'debug' or 'release'.
  • objSuffix = suffix of object file. '.o' on unix systems, '.obj' in M$ systems.
  • libPrefix = prefix of library files. 'lib' on unix systems.
  • libSuffix = lib suffix. '.so', '.dylib', '.a', '.lib', '.dll', etc.
  • appSuffix = executable suffix. empty on unix systems, '.exe' for M$.
  • compiler = compiler binary name. 'g++', 'clang++', 'cl.exe', etc...
  • compileFlags = flags to pass to compiler.
  • compileIncludeFlag = flag for include directory.
  • compileMacroFlag = flag for C++ macros.
  • compileOutputFlag = flag for output filename.
  • compileGetIncludeFilesFlag = flag for getting include files referenced by this file.
  • including = flag set if this buildinfo is being interpreted from another buildinfo.
  • linker = linker binary name.
  • linkLibPathFlag = flag for adding library search paths.
  • linkLibFlag = flag for adding libraries.
  • linkOutputFlag = flag for specifying the output filename.
  • linkFlags = extra flags to send to the linker
  • cppver = C++ version.
  • include = table of include directories to forward to the C++ compiler.
  • dependLibs = other luamake projects that the project is dependent upon (for executing recursive buildinfos).
  • libs = -l libraries, be they static or dynamic, automatically detected by the compiler/linker.
  • libpaths = -L search paths for libs.
  • dynamicLibs
    • on linux this contains paths to explicit .so files.
    • on osx this is .dylib files.
    • on windows this is .lib files associated with .dll files (as opposed to the .lib files that are static libraries ... smh windows).
  • objLogFile = filename to save output of Env:buildObj().
  • distLogFile = filename to save output of Env:buildDist().
  • pthread = set this flag when including pthread. Maps to -pthread in GCC.
  • fileCfgs[filename] = function(fileEnv) = per-file callback that can be registered to configure the per-file environment, in case any files need vars changed from the global env.

As a Lua library:

I'm using this in a few other places:

About

yet *another* build script system

Resources

Stars

4 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Yes, another Build System.

Donate via Stripe

First I made a decent Makefile system. I got it working on OSX, Linux, MinGW ... all but MSVC. Then I found myself wanting to build stuff with MSVC ... without making those stupid .vcproj files, or another NMAKE script, or rewriting everything. Because, if you have to rewrite everything, why use a one-platform tool to do it, like MSVC's stuff? So I found myself in need of a rewrite. Hence this simple build system.

It reads files labeled buildinfo. Each buildinfo specifies the distribution name, type, and any dependencies. They optionally can have a depends table that specifies the locations of all other dependent lmake-based projects. More configuration information for the buildinfo can be found in the run.lua file.

Command-Line Usage

If you want shell integration, make this file:

lmake:

#!/usr/bin/env sh
lua ~/path/to/make/run.lua "$@"

or for the windows users: lmake.bat:

@echo off
lua "C:\path\to\make\run.lua" %*

...with maybe an optional -lluarocks.require after lua depending on how your lua setup is.

and run it with the following arguments:

  • lmake clean = cleans objects
  • lmake distclean = cleans executable
  • lmake = builds default configuration
  • lmake all = builds debug and release
  • lmake debug = builds debug
  • lmake release = builds release
  • lmake distonly = builds dist from objs only

Lua Usage:

if you're lazy:

lua -lmake

and to clean ...

lua -lmake.clean

if you want to do more than one thing at once...

lua /path/to/lua/make/run.lua clean distclean all

if you want a custom platform:

lua platform $PLATFORM make.lua

where $PLATFORM can be:

  • osx
  • linux
  • clang_win
  • mingw
  • msvc

Reference

globals defined per-project:

  • distName = name of the project
  • distType = type of the project. possible options are:
    • 'app' for applications / executables.
    • 'lib' for libraries.
    • 'inc' for include files (no code / nothing to build, but still used for buildinfo dependencies).
  • depends = table of paths to other lmake projects that this is dependent upon.

globals defined by lua-make that you can override:

  • env = reference back to the global environment object.
  • home = home directory.
  • platform = build platform.
  • build = 'debug' or 'release'.
  • objSuffix = suffix of object file. '.o' on unix systems, '.obj' in M$ systems.
  • libPrefix = prefix of library files. 'lib' on unix systems.
  • libSuffix = lib suffix. '.so', '.dylib', '.a', '.lib', '.dll', etc.
  • appSuffix = executable suffix. empty on unix systems, '.exe' for M$.
  • compiler = compiler binary name. 'g++', 'clang++', 'cl.exe', etc...
  • compileFlags = flags to pass to compiler.
  • compileIncludeFlag = flag for include directory.
  • compileMacroFlag = flag for C++ macros.
  • compileOutputFlag = flag for output filename.
  • compileGetIncludeFilesFlag = flag for getting include files referenced by this file.
  • including = flag set if this buildinfo is being interpreted from another buildinfo.
  • linker = linker binary name.
  • linkLibPathFlag = flag for adding library search paths.
  • linkLibFlag = flag for adding libraries.
  • linkOutputFlag = flag for specifying the output filename.
  • linkFlags = extra flags to send to the linker
  • cppver = C++ version.
  • include = table of include directories to forward to the C++ compiler.
  • dependLibs = other luamake projects that the project is dependent upon (for executing recursive buildinfos).
  • libs = -l libraries, be they static or dynamic, automatically detected by the compiler/linker.
  • libpaths = -L search paths for libs.
  • dynamicLibs
    • on linux this contains paths to explicit .so files.
    • on osx this is .dylib files.
    • on windows this is .lib files associated with .dll files (as opposed to the .lib files that are static libraries ... smh windows).
  • objLogFile = filename to save output of Env:buildObj().
  • distLogFile = filename to save output of Env:buildDist().
  • pthread = set this flag when including pthread. Maps to -pthread in GCC.
  • fileCfgs[filename] = function(fileEnv) = per-file callback that can be registered to configure the per-file environment, in case any files need vars changed from the global env.

As a Lua library:

I'm using this in a few other places:

About

yet *another* build script system

Resources

Stars

4 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Yes, another Build System.

Donate via Stripe

First I made a decent Makefile system. I got it working on OSX, Linux, MinGW ... all but MSVC. Then I found myself wanting to build stuff with MSVC ... without making those stupid .vcproj files, or another NMAKE script, or rewriting everything. Because, if you have to rewrite everything, why use a one-platform tool to do it, like MSVC's stuff? So I found myself in need of a rewrite. Hence this simple build system.

It reads files labeled buildinfo. Each buildinfo specifies the distribution name, type, and any dependencies. They optionally can have a depends table that specifies the locations of all other dependent lmake-based projects. More configuration information for the buildinfo can be found in the run.lua file.

Command-Line Usage

If you want shell integration, make this file:

lmake:

#!/usr/bin/env sh
lua ~/path/to/make/run.lua "$@"

or for the windows users: lmake.bat:

@echo off
lua "C:\path\to\make\run.lua" %*

...with maybe an optional -lluarocks.require after lua depending on how your lua setup is.

and run it with the following arguments:

  • lmake clean = cleans objects
  • lmake distclean = cleans executable
  • lmake = builds default configuration
  • lmake all = builds debug and release
  • lmake debug = builds debug
  • lmake release = builds release
  • lmake distonly = builds dist from objs only

Lua Usage:

if you're lazy:

lua -lmake

and to clean ...

lua -lmake.clean

if you want to do more than one thing at once...

lua /path/to/lua/make/run.lua clean distclean all

if you want a custom platform:

lua platform $PLATFORM make.lua

where $PLATFORM can be:

  • osx
  • linux
  • clang_win
  • mingw
  • msvc

Reference

globals defined per-project:

  • distName = name of the project
  • distType = type of the project. possible options are:
    • 'app' for applications / executables.
    • 'lib' for libraries.
    • 'inc' for include files (no code / nothing to build, but still used for buildinfo dependencies).
  • depends = table of paths to other lmake projects that this is dependent upon.

globals defined by lua-make that you can override:

  • env = reference back to the global environment object.
  • home = home directory.
  • platform = build platform.
  • build = 'debug' or 'release'.
  • objSuffix = suffix of object file. '.o' on unix systems, '.obj' in M$ systems.
  • libPrefix = prefix of library files. 'lib' on unix systems.
  • libSuffix = lib suffix. '.so', '.dylib', '.a', '.lib', '.dll', etc.
  • appSuffix = executable suffix. empty on unix systems, '.exe' for M$.
  • compiler = compiler binary name. 'g++', 'clang++', 'cl.exe', etc...
  • compileFlags = flags to pass to compiler.
  • compileIncludeFlag = flag for include directory.
  • compileMacroFlag = flag for C++ macros.
  • compileOutputFlag = flag for output filename.
  • compileGetIncludeFilesFlag = flag for getting include files referenced by this file.
  • including = flag set if this buildinfo is being interpreted from another buildinfo.
  • linker = linker binary name.
  • linkLibPathFlag = flag for adding library search paths.
  • linkLibFlag = flag for adding libraries.
  • linkOutputFlag = flag for specifying the output filename.
  • linkFlags = extra flags to send to the linker
  • cppver = C++ version.
  • include = table of include directories to forward to the C++ compiler.
  • dependLibs = other luamake projects that the project is dependent upon (for executing recursive buildinfos).
  • libs = -l libraries, be they static or dynamic, automatically detected by the compiler/linker.
  • libpaths = -L search paths for libs.
  • dynamicLibs
    • on linux this contains paths to explicit .so files.
    • on osx this is .dylib files.
    • on windows this is .lib files associated with .dll files (as opposed to the .lib files that are static libraries ... smh windows).
  • objLogFile = filename to save output of Env:buildObj().
  • distLogFile = filename to save output of Env:buildDist().
  • pthread = set this flag when including pthread. Maps to -pthread in GCC.
  • fileCfgs[filename] = function(fileEnv) = per-file callback that can be registered to configure the per-file environment, in case any files need vars changed from the global env.

As a Lua library:

I'm using this in a few other places:

About

yet *another* build script system

Resources

Stars

4 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Yes, another Build System.

Donate via Stripe

First I made a decent Makefile system. I got it working on OSX, Linux, MinGW ... all but MSVC. Then I found myself wanting to build stuff with MSVC ... without making those stupid .vcproj files, or another NMAKE script, or rewriting everything. Because, if you have to rewrite everything, why use a one-platform tool to do it, like MSVC's stuff? So I found myself in need of a rewrite. Hence this simple build system.

It reads files labeled buildinfo. Each buildinfo specifies the distribution name, type, and any dependencies. They optionally can have a depends table that specifies the locations of all other dependent lmake-based projects. More configuration information for the buildinfo can be found in the run.lua file.

Command-Line Usage

If you want shell integration, make this file:

lmake:

#!/usr/bin/env sh
lua ~/path/to/make/run.lua "$@"

or for the windows users: lmake.bat:

@echo off
lua "C:\path\to\make\run.lua" %*

...with maybe an optional -lluarocks.require after lua depending on how your lua setup is.

and run it with the following arguments:

  • lmake clean = cleans objects
  • lmake distclean = cleans executable
  • lmake = builds default configuration
  • lmake all = builds debug and release
  • lmake debug = builds debug
  • lmake release = builds release
  • lmake distonly = builds dist from objs only

Lua Usage:

if you're lazy:

lua -lmake

and to clean ...

lua -lmake.clean

if you want to do more than one thing at once...

lua /path/to/lua/make/run.lua clean distclean all

if you want a custom platform:

lua platform $PLATFORM make.lua

where $PLATFORM can be:

  • osx
  • linux
  • clang_win
  • mingw
  • msvc

Reference

globals defined per-project:

  • distName = name of the project
  • distType = type of the project. possible options are:
    • 'app' for applications / executables.
    • 'lib' for libraries.
    • 'inc' for include files (no code / nothing to build, but still used for buildinfo dependencies).
  • depends = table of paths to other lmake projects that this is dependent upon.

globals defined by lua-make that you can override:

  • env = reference back to the global environment object.
  • home = home directory.
  • platform = build platform.
  • build = 'debug' or 'release'.
  • objSuffix = suffix of object file. '.o' on unix systems, '.obj' in M$ systems.
  • libPrefix = prefix of library files. 'lib' on unix systems.
  • libSuffix = lib suffix. '.so', '.dylib', '.a', '.lib', '.dll', etc.
  • appSuffix = executable suffix. empty on unix systems, '.exe' for M$.
  • compiler = compiler binary name. 'g++', 'clang++', 'cl.exe', etc...
  • compileFlags = flags to pass to compiler.
  • compileIncludeFlag = flag for include directory.
  • compileMacroFlag = flag for C++ macros.
  • compileOutputFlag = flag for output filename.
  • compileGetIncludeFilesFlag = flag for getting include files referenced by this file.
  • including = flag set if this buildinfo is being interpreted from another buildinfo.
  • linker = linker binary name.
  • linkLibPathFlag = flag for adding library search paths.
  • linkLibFlag = flag for adding libraries.
  • linkOutputFlag = flag for specifying the output filename.
  • linkFlags = extra flags to send to the linker
  • cppver = C++ version.
  • include = table of include directories to forward to the C++ compiler.
  • dependLibs = other luamake projects that the project is dependent upon (for executing recursive buildinfos).
  • libs = -l libraries, be they static or dynamic, automatically detected by the compiler/linker.
  • libpaths = -L search paths for libs.
  • dynamicLibs
    • on linux this contains paths to explicit .so files.
    • on osx this is .dylib files.
    • on windows this is .lib files associated with .dll files (as opposed to the .lib files that are static libraries ... smh windows).
  • objLogFile = filename to save output of Env:buildObj().
  • distLogFile = filename to save output of Env:buildDist().
  • pthread = set this flag when including pthread. Maps to -pthread in GCC.
  • fileCfgs[filename] = function(fileEnv) = per-file callback that can be registered to configure the per-file environment, in case any files need vars changed from the global env.

As a Lua library:

I'm using this in a few other places:

About

yet *another* build script system

Resources

Stars

4 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Yes, another Build System.

Donate via Stripe

First I made a decent Makefile system. I got it working on OSX, Linux, MinGW ... all but MSVC. Then I found myself wanting to build stuff with MSVC ... without making those stupid .vcproj files, or another NMAKE script, or rewriting everything. Because, if you have to rewrite everything, why use a one-platform tool to do it, like MSVC's stuff? So I found myself in need of a rewrite. Hence this simple build system.

It reads files labeled buildinfo. Each buildinfo specifies the distribution name, type, and any dependencies. They optionally can have a depends table that specifies the locations of all other dependent lmake-based projects. More configuration information for the buildinfo can be found in the run.lua file.

Command-Line Usage

If you want shell integration, make this file:

lmake:

#!/usr/bin/env sh
lua ~/path/to/make/run.lua "$@"

or for the windows users: lmake.bat:

@echo off
lua "C:\path\to\make\run.lua" %*

...with maybe an optional -lluarocks.require after lua depending on how your lua setup is.

and run it with the following arguments:

  • lmake clean = cleans objects
  • lmake distclean = cleans executable
  • lmake = builds default configuration
  • lmake all = builds debug and release
  • lmake debug = builds debug
  • lmake release = builds release
  • lmake distonly = builds dist from objs only

Lua Usage:

if you're lazy:

lua -lmake

and to clean ...

lua -lmake.clean

if you want to do more than one thing at once...

lua /path/to/lua/make/run.lua clean distclean all

if you want a custom platform:

lua platform $PLATFORM make.lua

where $PLATFORM can be:

  • osx
  • linux
  • clang_win
  • mingw
  • msvc

Reference

globals defined per-project:

  • distName = name of the project
  • distType = type of the project. possible options are:
    • 'app' for applications / executables.
    • 'lib' for libraries.
    • 'inc' for include files (no code / nothing to build, but still used for buildinfo dependencies).
  • depends = table of paths to other lmake projects that this is dependent upon.

globals defined by lua-make that you can override:

  • env = reference back to the global environment object.
  • home = home directory.
  • platform = build platform.
  • build = 'debug' or 'release'.
  • objSuffix = suffix of object file. '.o' on unix systems, '.obj' in M$ systems.
  • libPrefix = prefix of library files. 'lib' on unix systems.
  • libSuffix = lib suffix. '.so', '.dylib', '.a', '.lib', '.dll', etc.
  • appSuffix = executable suffix. empty on unix systems, '.exe' for M$.
  • compiler = compiler binary name. 'g++', 'clang++', 'cl.exe', etc...
  • compileFlags = flags to pass to compiler.
  • compileIncludeFlag = flag for include directory.
  • compileMacroFlag = flag for C++ macros.
  • compileOutputFlag = flag for output filename.
  • compileGetIncludeFilesFlag = flag for getting include files referenced by this file.
  • including = flag set if this buildinfo is being interpreted from another buildinfo.
  • linker = linker binary name.
  • linkLibPathFlag = flag for adding library search paths.
  • linkLibFlag = flag for adding libraries.
  • linkOutputFlag = flag for specifying the output filename.
  • linkFlags = extra flags to send to the linker
  • cppver = C++ version.
  • include = table of include directories to forward to the C++ compiler.
  • dependLibs = other luamake projects that the project is dependent upon (for executing recursive buildinfos).
  • libs = -l libraries, be they static or dynamic, automatically detected by the compiler/linker.
  • libpaths = -L search paths for libs.
  • dynamicLibs
    • on linux this contains paths to explicit .so files.
    • on osx this is .dylib files.
    • on windows this is .lib files associated with .dll files (as opposed to the .lib files that are static libraries ... smh windows).
  • objLogFile = filename to save output of Env:buildObj().
  • distLogFile = filename to save output of Env:buildDist().
  • pthread = set this flag when including pthread. Maps to -pthread in GCC.
  • fileCfgs[filename] = function(fileEnv) = per-file callback that can be registered to configure the per-file environment, in case any files need vars changed from the global env.

As a Lua library:

I'm using this in a few other places:

About

yet *another* build script system

Resources

Stars

4 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Yes, another Build System.

Donate via Stripe

First I made a decent Makefile system. I got it working on OSX, Linux, MinGW ... all but MSVC. Then I found myself wanting to build stuff with MSVC ... without making those stupid .vcproj files, or another NMAKE script, or rewriting everything. Because, if you have to rewrite everything, why use a one-platform tool to do it, like MSVC's stuff? So I found myself in need of a rewrite. Hence this simple build system.

It reads files labeled buildinfo. Each buildinfo specifies the distribution name, type, and any dependencies. They optionally can have a depends table that specifies the locations of all other dependent lmake-based projects. More configuration information for the buildinfo can be found in the run.lua file.

Command-Line Usage

If you want shell integration, make this file:

lmake:

#!/usr/bin/env sh
lua ~/path/to/make/run.lua "$@"

or for the windows users: lmake.bat:

@echo off
lua "C:\path\to\make\run.lua" %*

...with maybe an optional -lluarocks.require after lua depending on how your lua setup is.

and run it with the following arguments:

  • lmake clean = cleans objects
  • lmake distclean = cleans executable
  • lmake = builds default configuration
  • lmake all = builds debug and release
  • lmake debug = builds debug
  • lmake release = builds release
  • lmake distonly = builds dist from objs only

Lua Usage:

if you're lazy:

lua -lmake

and to clean ...

lua -lmake.clean

if you want to do more than one thing at once...

lua /path/to/lua/make/run.lua clean distclean all

if you want a custom platform:

lua platform $PLATFORM make.lua

where $PLATFORM can be:

  • osx
  • linux
  • clang_win
  • mingw
  • msvc

Reference

globals defined per-project:

  • distName = name of the project
  • distType = type of the project. possible options are:
    • 'app' for applications / executables.
    • 'lib' for libraries.
    • 'inc' for include files (no code / nothing to build, but still used for buildinfo dependencies).
  • depends = table of paths to other lmake projects that this is dependent upon.

globals defined by lua-make that you can override:

  • env = reference back to the global environment object.
  • home = home directory.
  • platform = build platform.
  • build = 'debug' or 'release'.
  • objSuffix = suffix of object file. '.o' on unix systems, '.obj' in M$ systems.
  • libPrefix = prefix of library files. 'lib' on unix systems.
  • libSuffix = lib suffix. '.so', '.dylib', '.a', '.lib', '.dll', etc.
  • appSuffix = executable suffix. empty on unix systems, '.exe' for M$.
  • compiler = compiler binary name. 'g++', 'clang++', 'cl.exe', etc...
  • compileFlags = flags to pass to compiler.
  • compileIncludeFlag = flag for include directory.
  • compileMacroFlag = flag for C++ macros.
  • compileOutputFlag = flag for output filename.
  • compileGetIncludeFilesFlag = flag for getting include files referenced by this file.
  • including = flag set if this buildinfo is being interpreted from another buildinfo.
  • linker = linker binary name.
  • linkLibPathFlag = flag for adding library search paths.
  • linkLibFlag = flag for adding libraries.
  • linkOutputFlag = flag for specifying the output filename.
  • linkFlags = extra flags to send to the linker
  • cppver = C++ version.
  • include = table of include directories to forward to the C++ compiler.
  • dependLibs = other luamake projects that the project is dependent upon (for executing recursive buildinfos).
  • libs = -l libraries, be they static or dynamic, automatically detected by the compiler/linker.
  • libpaths = -L search paths for libs.
  • dynamicLibs
    • on linux this contains paths to explicit .so files.
    • on osx this is .dylib files.
    • on windows this is .lib files associated with .dll files (as opposed to the .lib files that are static libraries ... smh windows).
  • objLogFile = filename to save output of Env:buildObj().
  • distLogFile = filename to save output of Env:buildDist().
  • pthread = set this flag when including pthread. Maps to -pthread in GCC.
  • fileCfgs[filename] = function(fileEnv) = per-file callback that can be registered to configure the per-file environment, in case any files need vars changed from the global env.

As a Lua library:

I'm using this in a few other places:

About

yet *another* build script system

Resources

Stars

4 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages