mirror of
https://github.com/Doodle3D/doodle3d-firmware.git
synced 2024-11-05 06:03:23 +01:00
a254772493
Detects openwrt directory and wifibox feed directory.
116 lines
3.1 KiB
Lua
Executable File
116 lines
3.1 KiB
Lua
Executable File
#!/usr/bin/env lua
|
|
|
|
local function ERR(msg) print(msg) end
|
|
|
|
local ok, lfs = pcall(require, 'lfs')
|
|
if not ok then
|
|
ERR('This script requires lfs, the Lua filesystem library')
|
|
os.exit(1)
|
|
end
|
|
|
|
local D3D_REPO_FIRMWARE_NAME = 'doodle3d-firmware'
|
|
local D3D_REPO_CLIENT_NAME = 'doodle3d-client'
|
|
local D3D_REPO_PRINT3D_NAME = 'print3d'
|
|
|
|
local paths = {}
|
|
|
|
local M = {}
|
|
|
|
|
|
local function detectOpenWrtRoot()
|
|
local f = io.open('Makefile', 'r')
|
|
local line = f and f:read('*line')
|
|
local rv = (line and line:find('# Makefile for OpenWrt') == 1) and true or false
|
|
|
|
if f then f:close() end
|
|
return rv
|
|
end
|
|
|
|
-- returns uri (file path) of the wifibox feed, nil if not found or nil+msg on error
|
|
-- recognized feed names are 'wifibox' and 'doodle3d' (case-insensitive)
|
|
local function getWifiboxFeedRoot(feedsFile)
|
|
local typ, nam, uri = nil, nil, nil
|
|
local lineNo = 1
|
|
local f = io.open(feedsFile, 'r')
|
|
|
|
if not f then return nil, "could not open '" .. feedsFile .. '"' end
|
|
|
|
for line in f:lines() do
|
|
typ, nam, uri = line:match('^([^%s]+)%s+([^%s]+)%s+([^%s]+)$')
|
|
|
|
if not (typ and nam and uri) then
|
|
f:close()
|
|
return uri or nil, "could not parse line " .. feedsFile .. "#" .. lineNo
|
|
end
|
|
|
|
local commented = (typ:find('#') == 1)
|
|
if not commented and (nam:lower() == 'wifibox' or nam:lower() == 'doodle3d') then
|
|
break
|
|
else
|
|
typ, nam, uri = nil, nil, nil
|
|
end
|
|
|
|
lineNo = lineNo + 1
|
|
end
|
|
|
|
if uri and not (typ == 'src-link' or typ == 'src-cpy') then return nil, "d3d feed has wrong type '" .. typ .. "', use 'src-link' or 'src-cpy'" end
|
|
|
|
f:close()
|
|
return uri
|
|
end
|
|
|
|
-- TODO: pass table to functions to fill in? if they all return either true or nil+msg, that could be used for display of ok/msg
|
|
-- returns true on success, false on error, and displays meaningful messages
|
|
--local function runCheck(msg, processFunc)
|
|
-- io.stdout:write(msg .. "... ")
|
|
-- return processFunc(--[[ hmm ]]--)
|
|
--end
|
|
|
|
|
|
|
|
local function main()
|
|
print("Doodle3D release script")
|
|
-- local opts = parseOptions(arg)
|
|
--
|
|
-- if opts['wrt-root'] then changedir(opts['wrt-root']) end
|
|
-- if opts['cache-dir'] then paths.cache = opts['cache-dir'] end
|
|
|
|
|
|
io.stdout:write("Checking if working directory is the OpenWrt root... ")
|
|
local isOpenWrtRoot = detectOpenWrtRoot()
|
|
if isOpenWrtRoot then
|
|
print("ok")
|
|
else
|
|
print("unrecognized directory, try changing directories or using -wrt-root")
|
|
os.exit(1)
|
|
end
|
|
|
|
io.stdout:write("Looking for Doodle3D feed path... ")
|
|
local d3dFeed,msg = getWifiboxFeedRoot('feeds.conf')
|
|
if d3dFeed then
|
|
print("found " .. d3dFeed)
|
|
else
|
|
if msg then print("not found: " .. msg) else print("not found") end
|
|
os.exit(1)
|
|
end
|
|
|
|
paths.firmware = d3dFeed .. '/' .. D3D_REPO_FIRMWARE_NAME
|
|
paths.client = d3dFeed .. '/' .. D3D_REPO_CLIENT_NAME
|
|
paths.print3d = d3dFeed .. '/' .. D3D_REPO_PRINT3D_NAME
|
|
|
|
-- if empty, try to set something sensible
|
|
if not paths.cache or paths.cache == '' then
|
|
paths.cache = '/tmp/d3d-release-dir'
|
|
end
|
|
|
|
-- check if paths.cache is writable
|
|
|
|
os.exit(1)
|
|
end
|
|
|
|
|
|
--- Only execute the main function if an arg table is present, this enables usage both as module and as standalone script.
|
|
if arg ~= nil then main() end
|
|
|
|
return M
|