From e16c012a0b1c6d28a83fa97e8b8932bd505509b6 Mon Sep 17 00:00:00 2001 From: Alexander Griffith Date: Sat, 20 Apr 2019 21:08:03 -0400 Subject: [PATCH] Updated makefile. --- lib/fennel | 141 +++++++++++------------------------------------- love-release.sh | 5 +- makefile | 35 ++++++++---- 3 files changed, 60 insertions(+), 121 deletions(-) mode change 100644 => 100755 love-release.sh diff --git a/lib/fennel b/lib/fennel index 8f61065..8fd7652 100755 --- a/lib/fennel +++ b/lib/fennel @@ -3,132 +3,55 @@ local fennel_dir = arg[0]:match("(.-)[^\\/]+$") package.path = fennel_dir .. "?.lua;" .. package.path local fennel = require('fennel') -local unpack = unpack or table.unpack local help = [[ 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 - --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.]] + When not given a flag, runs the file given as the first argument.]] local options = { - sourcemap = true + sourcemap = true, } -local function dosafe(filename, opts, args) +local function dosafe(filename, opts, arg1) local ok, val = xpcall(function() - return fennel.dofile(filename, opts, unpack(args)) + return fennel.dofile(filename, opts, arg1) end, fennel.traceback) if not ok then - io.stderr:write(val .. "\n") + print(val) os.exit(1) end return val end -local function allowGlobals(globalNames) - options.allowedGlobals = {} - for g in globalNames:gmatch("([^,]+),?") do - 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) +local compileOptHandlers = { + ['--indent'] = function () + options.indent = table.remove(arg, 3) if options.indent == "false" then options.indent = false end - table.remove(arg, i) - elseif arg[i] == "--add-package-path" then - local entry = table.remove(arg, i+1) - package.path = entry .. ";" .. package.path - 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) + table.remove(arg, 2) + end, + ['--sourcemap'] = function () + options.sourcemap = table.remove(arg, 3) if options.sourcemap == "false" then options.sourcemap = false end - table.remove(arg, i) - elseif arg[i] == "--globals" then - allowGlobals(table.remove(arg, i+1)) - for globalName in pairs(_G) do - table.insert(options.allowedGlobals, globalName) - 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 + table.remove(arg, 2) + end, + ['--correlate'] = function () + options.correlate = true + table.remove(arg, 2) + end, +} if arg[1] == "--repl" or #arg == 0 then local ppok, pp = pcall(fennel.dofile, fennel_dir .. "fennelview.fnl", options) if ppok then options.pp = pp - else - ppok, pp = pcall(require, "fennelview") - if ppok then - options.pp = pp - end end local initFilename = (os.getenv("HOME") or "") .. "/.fennelrc" local init = io.open(initFilename, "rb") - - tryReadline(options) - if init then init:close() -- 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!") fennel.repl(options) elseif arg[1] == "--compile" then + -- Handle options + while compileOptHandlers[arg[2]] do + compileOptHandlers[arg[2]]() + end 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] local ok, val = xpcall(function() return fennel.compileString(f:read("*all"), options) end, fennel.traceback) - if ok then - print(val) - else - io.stderr:write(val .. "\n") - os.exit(1) - end + print(val) + if not ok then os.exit(1) end f:close() end -elseif arg[1] == "--version" or arg[1] == "-v" then - print("Fennel " .. fennel.version) -elseif #arg >= 1 and arg[1] ~= "--help" and arg[1] ~= "-h" then +elseif #arg >= 1 and arg[1] ~= "--help" then local filename = table.remove(arg, 1) -- let the script have remaining args - dosafe(filename, nil, arg) + dosafe(filename) else print(help) end diff --git a/love-release.sh b/love-release.sh old mode 100644 new mode 100755 index e5b89c4..97a7cdb --- a/love-release.sh +++ b/love-release.sh @@ -1,7 +1,8 @@ -#!/usr/bin/env bash +#!/usr/local/Cellar/bash/4.4.23/bin/bash +## #!/usr/bin/env bash # LÖVE version -LOVE_DEF_VERSION=0.11.1 +LOVE_DEF_VERSION=0.11.2 diff --git a/makefile b/makefile index f2395c2..a8d16c1 100644 --- a/makefile +++ b/makefile @@ -5,8 +5,23 @@ AUTHOR="Alexander Griffith" DESCRIPTION="Minimal setup for trying out Phil Hagelberg's fennel/love game design process." 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/ find $^ -type f | LC_ALL=C sort | env TZ=UTC zip -r -q -9 -X $@ -@ @@ -14,31 +29,33 @@ love: $(LOVEFILE) # 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) \ --love 11.1 --url $(URL) --version $(VERSION) --lovefile $(LOVEFILE) releases/$(NAME)-$(VERSION)-x86_64.AppImage: $(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) $(REL) $(FLAGS) -M - mv releases/EXO_encounter-667-macos.zip $@ + #mv releases/$(NAME)-macos.zip $@ releases/$(NAME)-$(VERSION)-win.zip: $(LOVEFILE) $(REL) $(FLAGS) -W32 - mv releases/EXO_encounter-667-win32.zip $@ + #mv releases/$(NAME)-win32.zip $@ linux: releases/$(NAME)-$(VERSION)-x86_64.AppImage mac: releases/$(NAME)-$(VERSION)-macos.zip windows: releases/$(NAME)-$(VERSION)-win.zip 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 - 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 - 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