Updated makefile.

This commit is contained in:
Alexander Griffith 2019-04-20 21:08:03 -04:00
parent ff33a7538e
commit e16c012a0b
3 changed files with 60 additions and 121 deletions

View file

@ -3,132 +3,55 @@
local fennel_dir = arg[0]:match("(.-)[^\\/]+$") local fennel_dir = arg[0]:match("(.-)[^\\/]+$")
package.path = fennel_dir .. "?.lua;" .. package.path package.path = fennel_dir .. "?.lua;" .. package.path
local fennel = require('fennel') local fennel = require('fennel')
local unpack = unpack or table.unpack
local help = [[ local help = [[
Usage: fennel [FLAG] [FILE] Usage: fennel [FLAG] [FILE]
Run fennel, a lisp programming language for the Lua runtime. --repl : Launch an interactive repl session
--compile FILES : Compile files and write their Lua to stdout
--help : Display this text
--repl : Launch an interactive repl session When not given a flag, runs the file given as the first argument.]]
--compile FILES : Compile files and write their Lua to stdout
--no-searcher : Skip installing package.searchers entry
--indent VAL : Indent compiler output with VAL
--add-package-path PATH : Add PATH to package.path for finding Lua modules
--add-fennel-path PATH : Add PATH to fennel.path for finding Fennel modules
--globals G1[,G2...] : Allow these globals in addition to standard ones
--globals-only G1[,G2] : Same as above, but exclude standard ones
--help : Display this text
--version : Show version
When not given a flag, runs the file given as the first argument.
When given neither flag nor file, launches a repl.
If ~/.fennelrc exists, loads it before launching a repl.]]
local options = { local options = {
sourcemap = true sourcemap = true,
} }
local function dosafe(filename, opts, args) local function dosafe(filename, opts, arg1)
local ok, val = xpcall(function() local ok, val = xpcall(function()
return fennel.dofile(filename, opts, unpack(args)) return fennel.dofile(filename, opts, arg1)
end, fennel.traceback) end, fennel.traceback)
if not ok then if not ok then
io.stderr:write(val .. "\n") print(val)
os.exit(1) os.exit(1)
end end
return val return val
end end
local function allowGlobals(globalNames) local compileOptHandlers = {
options.allowedGlobals = {} ['--indent'] = function ()
for g in globalNames:gmatch("([^,]+),?") do options.indent = table.remove(arg, 3)
table.insert(options.allowedGlobals, g)
end
end
for i=#arg, 1, -1 do
if arg[i] == "--no-searcher" then
options.no_searcher = true
table.remove(arg, i)
elseif arg[i] == "--indent" then
options.indent = table.remove(arg, i+1)
if options.indent == "false" then options.indent = false end if options.indent == "false" then options.indent = false end
table.remove(arg, i) table.remove(arg, 2)
elseif arg[i] == "--add-package-path" then end,
local entry = table.remove(arg, i+1) ['--sourcemap'] = function ()
package.path = entry .. ";" .. package.path options.sourcemap = table.remove(arg, 3)
table.remove(arg, i)
elseif arg[i] == "--add-fennel-path" then
local entry = table.remove(arg, i+1)
fennel.path = entry .. ";" .. fennel.path
table.remove(arg, i)
elseif arg[i] == "--sourcemap" then
options.sourcemap = table.remove(arg, i+1)
if options.sourcemap == "false" then options.sourcemap = false end if options.sourcemap == "false" then options.sourcemap = false end
table.remove(arg, i) table.remove(arg, 2)
elseif arg[i] == "--globals" then end,
allowGlobals(table.remove(arg, i+1)) ['--correlate'] = function ()
for globalName in pairs(_G) do options.correlate = true
table.insert(options.allowedGlobals, globalName) table.remove(arg, 2)
end end,
table.remove(arg, i) }
elseif arg[i] == "--globals-only" then
allowGlobals(table.remove(arg, i+1))
table.remove(arg, i)
end
end
if not options.no_searcher then
table.insert((package.loaders or package.searchers),
fennel.make_searcher({correlate = true}))
end
-- Try to load readline library
local function tryReadline(opts)
local ok, readline = pcall(require, "readline")
if ok then
readline.set_options({
keeplines = 1000
})
function opts.readChunk(parserState)
local prompt = parserState.stackSize > 0 and '.. ' or '>> '
local str = readline.readline(prompt)
if str then
return str .. "\n"
end
end
-- completer is registered by the repl, until then returns empty list
local completer
function opts.registerCompleter(replCompleter)
completer = replCompleter
end
local function replCompleter(text, from, to)
if completer then return completer(text, from, to) else return {} end
end
readline.set_complete_function(replCompleter)
end
end
if arg[1] == "--repl" or #arg == 0 then if arg[1] == "--repl" or #arg == 0 then
local ppok, pp = pcall(fennel.dofile, fennel_dir .. "fennelview.fnl", options) local ppok, pp = pcall(fennel.dofile, fennel_dir .. "fennelview.fnl", options)
if ppok then if ppok then
options.pp = pp options.pp = pp
else
ppok, pp = pcall(require, "fennelview")
if ppok then
options.pp = pp
end
end end
local initFilename = (os.getenv("HOME") or "") .. "/.fennelrc" local initFilename = (os.getenv("HOME") or "") .. "/.fennelrc"
local init = io.open(initFilename, "rb") local init = io.open(initFilename, "rb")
tryReadline(options)
if init then if init then
init:close() init:close()
-- pass in options so fennerlrc can make changes to it -- pass in options so fennerlrc can make changes to it
@ -137,25 +60,23 @@ if arg[1] == "--repl" or #arg == 0 then
print("Welcome to fennel!") print("Welcome to fennel!")
fennel.repl(options) fennel.repl(options)
elseif arg[1] == "--compile" then elseif arg[1] == "--compile" then
-- Handle options
while compileOptHandlers[arg[2]] do
compileOptHandlers[arg[2]]()
end
for i = 2, #arg do for i = 2, #arg do
local f = arg[i] == "-" and io.stdin or assert(io.open(arg[i], "rb")) local f = assert(io.open(arg[i], "rb"))
options.filename=arg[i] options.filename=arg[i]
local ok, val = xpcall(function() local ok, val = xpcall(function()
return fennel.compileString(f:read("*all"), options) return fennel.compileString(f:read("*all"), options)
end, fennel.traceback) end, fennel.traceback)
if ok then print(val)
print(val) if not ok then os.exit(1) end
else
io.stderr:write(val .. "\n")
os.exit(1)
end
f:close() f:close()
end end
elseif arg[1] == "--version" or arg[1] == "-v" then elseif #arg >= 1 and arg[1] ~= "--help" then
print("Fennel " .. fennel.version)
elseif #arg >= 1 and arg[1] ~= "--help" and arg[1] ~= "-h" then
local filename = table.remove(arg, 1) -- let the script have remaining args local filename = table.remove(arg, 1) -- let the script have remaining args
dosafe(filename, nil, arg) dosafe(filename)
else else
print(help) print(help)
end end

5
love-release.sh Normal file → Executable file
View file

@ -1,7 +1,8 @@
#!/usr/bin/env bash #!/usr/local/Cellar/bash/4.4.23/bin/bash
## #!/usr/bin/env bash
# LÖVE version # LÖVE version
LOVE_DEF_VERSION=0.11.1 LOVE_DEF_VERSION=0.11.2

View file

@ -5,8 +5,23 @@ AUTHOR="Alexander Griffith"
DESCRIPTION="Minimal setup for trying out Phil Hagelberg's fennel/love game design process." DESCRIPTION="Minimal setup for trying out Phil Hagelberg's fennel/love game design process."
LIBS := $(wildcard lib/*) LIBS := $(wildcard lib/*)
LUA := $(wildcard *.lua)
SRC := $(wildcard *.fnl)
OUT := $(patsubst %.fnl,%.lua,$(SRC))
$(LOVEFILE): $(LUA) $(OUT) $(LIBS) assets text run: $(OUT) ; love .
count: ; cloc *.fnl --force-lang=clojure
clean: ; rm -rf releases/* $(OUT)
cleansrc: ; rm -rf $(OUT)
%.lua: %.fnl; lua lib/fennel --compile --correlate $< > $@
LOVEFILE=releases/$(NAME)-$(VERSION).love
$(LOVEFILE): $(LUA) $(OUT) $(LIBS) #assets text
mkdir -p releases/ mkdir -p releases/
find $^ -type f | LC_ALL=C sort | env TZ=UTC zip -r -q -9 -X $@ -@ find $^ -type f | LC_ALL=C sort | env TZ=UTC zip -r -q -9 -X $@ -@
@ -14,31 +29,33 @@ love: $(LOVEFILE)
# platform-specific distributables # platform-specific distributables
REL="$(PWD)/love-release.sh" # https://p.hagelb.org/love-release.sh REL=$(PWD)/love-release.sh # https://p.hagelb.org/love-release.sh
FLAGS=-a "$(AUTHOR)" --description $(DESCRIPTION) \ FLAGS=-a "$(AUTHOR)" --description $(DESCRIPTION) \
--love 11.1 --url $(URL) --version $(VERSION) --lovefile $(LOVEFILE) --love 11.1 --url $(URL) --version $(VERSION) --lovefile $(LOVEFILE)
releases/$(NAME)-$(VERSION)-x86_64.AppImage: $(LOVEFILE) releases/$(NAME)-$(VERSION)-x86_64.AppImage: $(LOVEFILE)
cd appimage && ./build.sh 11.1 $(PWD)/$(LOVEFILE) cd appimage && ./build.sh 11.1 $(PWD)/$(LOVEFILE)
mv appimage/game-x86_64.AppImage $@ #mv appimage/game-x86_64.AppImage $@
releases/$(NAME)-$(VERSION)-macos.zip: $(LOVEFILE) releases/$(NAME)-$(VERSION)-macos.zip: $(LOVEFILE)
$(REL) $(FLAGS) -M $(REL) $(FLAGS) -M
mv releases/EXO_encounter-667-macos.zip $@ #mv releases/$(NAME)-macos.zip $@
releases/$(NAME)-$(VERSION)-win.zip: $(LOVEFILE) releases/$(NAME)-$(VERSION)-win.zip: $(LOVEFILE)
$(REL) $(FLAGS) -W32 $(REL) $(FLAGS) -W32
mv releases/EXO_encounter-667-win32.zip $@ #mv releases/$(NAME)-win32.zip $@
linux: releases/$(NAME)-$(VERSION)-x86_64.AppImage linux: releases/$(NAME)-$(VERSION)-x86_64.AppImage
mac: releases/$(NAME)-$(VERSION)-macos.zip mac: releases/$(NAME)-$(VERSION)-macos.zip
windows: releases/$(NAME)-$(VERSION)-win.zip windows: releases/$(NAME)-$(VERSION)-win.zip
uploadlinux: releases/$(NAME)-$(VERSION)-x86_64.AppImage uploadlinux: releases/$(NAME)-$(VERSION)-x86_64.AppImage
butler push $^ technomancy/exo-encounter-667:linux butler push $^ alexjgriffith/action-slimes:linux --userversion $(VERSION)
uploadmac: releases/$(NAME)-$(VERSION)-macos.zip uploadmac: releases/$(NAME)-$(VERSION)-macos.zip
butler push $^ technomancy/exo-encounter-667:mac ~/Downloads/butler-darwin-amd64/butler push $^ alexjgriffith/action-slimes:mac --userversion $(VERSION)
uploadwindows: releases/$(NAME)-$(VERSION)-win.zip uploadwindows: releases/$(NAME)-$(VERSION)-win.zip
butler push $^ technomancy/exo-encounter-667:windows ~/Downloads/butler-darwin-amd64/butler push $^ alexjgriffith/action-slimes:windows --userversion $(VERSION)
upload: uploadlinux uploadmac uploadwindows upload: uploadmac uploadwindows
release: mac windows upload cleansrc