aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHisham Muhammad <hisham@gobolinux.org>2018-07-01 15:21:16 -0300
committerHisham Muhammad <hisham@gobolinux.org>2018-07-01 22:54:07 -0300
commit98d1f1da856ab59cf8355c1e2e11e3c0eb954fb2 (patch)
treeaeb6d9e6f45423cf5698930aea2bc55a8d721fa9
parentcc4c9f6321ebaaf71f8c9c26bd30967e93bd2cbb (diff)
downloadluarocks-98d1f1da856ab59cf8355c1e2e11e3c0eb954fb2.tar.gz
luarocks-98d1f1da856ab59cf8355c1e2e11e3c0eb954fb2.tar.bz2
luarocks-98d1f1da856ab59cf8355c1e2e11e3c0eb954fb2.zip
Unix: new build system
* Reworked configure script * Now passes shellcheck * New Makefile for Unix * Simplified `make` and `make install` targets * Simplified `make bootstrap` target * New targets `make binary` and `make install-binary` build and install an all-in-one binary of LuaRocks
-rw-r--r--.gitignore2
-rw-r--r--.travis.yml3
-rw-r--r--Makefile246
-rw-r--r--Makefile.install.inc23
-rw-r--r--Makefile.luarocks16
-rw-r--r--Makefile.setup.inc27
-rwxr-xr-xbinary/all_in_one442
-rw-r--r--binary/luaposix-34.0.4-1.rockspec55
-rw-r--r--binary/luasec-0.7alpha-2.rockspec119
-rwxr-xr-xbinary/static-gcc158
-rwxr-xr-xconfigure633
-rw-r--r--luarocks-dev-1.rockspec (renamed from rockspec)40
-rwxr-xr-xmakedist45
13 files changed, 1213 insertions, 596 deletions
diff --git a/.gitignore b/.gitignore
index bee8dfb1..f1481cfc 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,7 +3,7 @@
3/test/testing_* 3/test/testing_*
4/test/luacov.* 4/test/luacov.*
5# Stuff that pops up during development but shouldn't be in the repo (helps clean up `git status`) 5# Stuff that pops up during development but shouldn't be in the repo (helps clean up `git status`)
6/*.rockspec 6/build-binary
7/*.rock 7/*.rock
8/*.tar.gz 8/*.tar.gz
9/*.zip 9/*.zip
diff --git a/.travis.yml b/.travis.yml
index dab724b2..64d3347a 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -18,8 +18,9 @@ unit_script: &unit_script
18 18
19integration_script: &integration_script 19integration_script: &integration_script
20 - lua -v 20 - lua -v
21 - if [ "$TRAVIS_OS_NAME" = "linux" ]; then shellcheck ./configure; fi
21 - ./configure --with-lua=lua_install 22 - ./configure --with-lua=lua_install
22 - ./makedist scm 23 - ./makedist dev
23 - busted -o gtest --exclude-tags=git,unit --verbose -Xhelper "lua_dir=$PWD/lua_install,travis" 24 - busted -o gtest --exclude-tags=git,unit --verbose -Xhelper "lua_dir=$PWD/lua_install,travis"
24 - busted -o gtest --exclude-tags=git,unit --verbose -Xhelper "lua_dir=$PWD/lua_install,travis,env=full" 25 - busted -o gtest --exclude-tags=git,unit --verbose -Xhelper "lua_dir=$PWD/lua_install,travis,env=full"
25 26
diff --git a/Makefile b/Makefile
index 80b872eb..4e528db8 100644
--- a/Makefile
+++ b/Makefile
@@ -1,150 +1,108 @@
1 1
2include config.unix 2-include config.unix
3 3
4.PHONY: all build dev build_bins luadoc check_makefile cleanup_bins clean \ 4all: ./luarocks ./luarocks-admin
5 install_site_config write_sysconfig install bootstrap install_rock \
6 run_luarocks
7 5
8ROCKS_TREE ?= $(PREFIX) 6# ----------------------------------------
9SYSCONFDIR ?= $(PREFIX)/etc/luarocks 7# Base build
10LUA_DIR ?= /usr/local 8# ----------------------------------------
11LUA_BINDIR ?= $(LUA_DIR)/bin
12 9
13CONFIG_FILE = $(SYSCONFDIR)/config-$(LUA_VERSION).lua 10build: all
14 11
15SAFEPWD=`echo "$$PWD" | sed -e 's/\([][]\)\1/]]..'\''\1\1'\''..[[/g'` 12config.unix:
16 13 @echo Please run the "./configure" script before building.
17all:
18 @echo "- Type 'make build' and 'make install':"
19 @echo " to install to $(PREFIX) as usual."
20 @echo "- Type 'make bootstrap':"
21 @echo " to install LuaRocks in $(PREFIX) as a rock."
22 @echo
23
24include Makefile.setup.inc
25include Makefile.install.inc
26
27build: $(SITE_CONFIG) build_bins
28 @echo
29 @echo "Done. Type 'make install' to install into $(PREFIX)."
30 @echo 14 @echo
31 15 @exit 1
32$(SITE_CONFIG): config.unix 16
33 rm -f $(SITE_CONFIG) 17config-$(LUA_VERSION).lua.in: config.unix
34 echo 'local site_config = {}' >> $(SITE_CONFIG) 18
35 if [ -n "$(PREFIX)" ] ;\ 19./luarocks: config.unix config-$(LUA_VERSION).lua.in
36 then \ 20 rm -f src/luarocks/core/hardcoded.lua
37 echo "site_config.LUAROCKS_PREFIX=[[$(PREFIX)]]" >> $(SITE_CONFIG) ;\ 21 echo "#!/bin/sh" > luarocks
38 fi 22 echo "unset LUA_PATH LUA_PATH_5_2 LUA_PATH_5_3 LUA_PATH_5_4" >> luarocks
39 if [ -n "$(LUA_INCDIR)" ] ;\ 23 echo 'LUAROCKS_SYSCONFDIR="$(SYSCONFDIR)" LUA_PATH="$(PWD)/src/?.lua;;" exec "$(LUA_BINDIR)/$(LUA_INTERPRETER)" "src/bin/luarocks" --project-tree="$(PWD)/lua_modules" "$$@"' >> luarocks
40 then \ 24 chmod +rx ./luarocks
41 echo "site_config.LUA_INCDIR=[[$(LUA_INCDIR)]]" >> $(SITE_CONFIG) ;\ 25 ./luarocks init
42 fi 26 cp config-$(LUA_VERSION).lua.in .luarocks/config-$(LUA_VERSION).lua
43 if [ -n "$(LUA_LIBDIR)" ] ;\ 27
44 then \ 28luarocks-admin: config.unix
45 echo "site_config.LUA_LIBDIR=[[$(LUA_LIBDIR)]]" >> $(SITE_CONFIG) ;\ 29 rm -f src/luarocks/core/hardcoded.lua
46 fi 30 echo "#!/bin/sh" > luarocks-admin
47 if [ -n "$(LUA_BINDIR)" ] ;\ 31 echo "unset LUA_PATH LUA_PATH_5_2 LUA_PATH_5_3 LUA_PATH_5_4" >> luarocks-admin
48 then \ 32 echo 'LUAROCKS_SYSCONFDIR="$(SYSCONFDIR)" LUA_PATH="$(PWD)/src/?.lua;;" exec "$(LUA_BINDIR)/$(LUA_INTERPRETER)" "src/bin/luarocks-admin" --project-tree="$(PWD)/lua_modules" "$$@"' >> luarocks-admin
49 echo "site_config.LUA_BINDIR=[[$(LUA_BINDIR)]]" >> $(SITE_CONFIG) ;\ 33 chmod +rx ./luarocks-admin
50 fi 34
51 if [ -n "$(LUA_SUFFIX)" ] ;\ 35# ----------------------------------------
52 then \ 36# Regular install
53 echo "site_config.LUA_INTERPRETER=[[lua$(LUA_SUFFIX)]]" >> $(SITE_CONFIG) ;\ 37# ----------------------------------------
54 fi 38
55 if [ -n "$(SYSCONFDIR)" ] ;\ 39install: all $(PREFIX)/bin/luarocks $(PREFIX)/bin/luarocks-admin $(SYSCONFDIR)/config-$(LUA_VERSION).lua
56 then \ 40 mkdir -p "$(PREFIX)/share/lua/$(LUA_VERSION)/luarocks"
57 echo "site_config.LUAROCKS_SYSCONFDIR=[[$(SYSCONFDIR)]]" >> $(SITE_CONFIG) ;\ 41 cp -a src/luarocks/* "$(PREFIX)/share/lua/$(LUA_VERSION)/luarocks"
58 fi 42
59 if [ -n "$(ROCKS_TREE)" ] ;\ 43$(PREFIX)/bin/luarocks: src/bin/luarocks config.unix
60 then \ 44 mkdir -p "$(PREFIX)/bin"
61 echo "site_config.LUAROCKS_ROCKS_TREE=[[$(ROCKS_TREE)]]" >> $(SITE_CONFIG) ;\ 45 echo "#!$(LUA_BINDIR)/$(LUA_INTERPRETER)" > $@
62 fi 46 echo "package.loaded['luarocks.core.hardcoded'] = { SYSCONFDIR = [[$(SYSCONFDIR)]] }" >> $@
63 if [ -n "$(FORCE_CONFIG)" ] ;\ 47 echo "package.path=[[$(PREFIX)/share/lua/$(LUA_VERSION)/?.lua;]] .. package.path" >> $@
64 then \ 48 tail -n +2 src/bin/luarocks >> $@
65 echo "site_config.LUAROCKS_FORCE_CONFIG=true" >> $(SITE_CONFIG) ;\ 49 chmod +rx $@
66 fi 50
67 if [ "$(LUA_DIR_SET)" = "yes" ] ;\ 51$(PREFIX)/bin/luarocks-admin: src/bin/luarocks-admin config.unix
68 then \ 52 mkdir -p "$(PREFIX)/bin"
69 echo "site_config.LUA_DIR_SET=true" >> $(SITE_CONFIG) ;\ 53 echo "#!$(LUA_BINDIR)/$(LUA_INTERPRETER)" > $@
70 fi 54 echo "package.loaded['luarocks.core.hardcoded'] = { SYSCONFDIR = [[$(SYSCONFDIR)]] }" >> $@
71 echo "site_config.LUAROCKS_UNAME_S=[[$(LUAROCKS_UNAME_S)]]" >> $(SITE_CONFIG) 55 echo "package.path=[[$(PREFIX)/share/lua/$(LUA_VERSION)/?.lua;]] .. package.path" >> $@
72 echo "site_config.LUAROCKS_UNAME_M=[[$(LUAROCKS_UNAME_M)]]" >> $(SITE_CONFIG) 56 tail -n +2 src/bin/luarocks-admin >> $@
73 echo "site_config.LUAROCKS_DOWNLOADER=[[$(LUAROCKS_DOWNLOADER)]]" >> $(SITE_CONFIG) 57 chmod +rx $@
74 echo "site_config.LUAROCKS_MD5CHECKER=[[$(LUAROCKS_MD5CHECKER)]]" >> $(SITE_CONFIG) 58
75 if [ -n "$(MULTIARCH_SUBDIR)" ] ;\ 59$(SYSCONFDIR)/config-$(LUA_VERSION).lua: config-$(LUA_VERSION).lua.in
76 then \ 60 mkdir -p "$(SYSCONFDIR)"
77 echo 'site_config.LUAROCKS_EXTERNAL_DEPS_SUBDIRS={ bin="bin", lib={ "lib", [[$(MULTIARCH_SUBDIR)]] }, include="include" }' >> $(SITE_CONFIG) ;\ 61 cp config-$(LUA_VERSION).lua.in "$(SYSCONFDIR)/config-$(LUA_VERSION).lua"
78 echo 'site_config.LUAROCKS_RUNTIME_EXTERNAL_DEPS_SUBDIRS={ bin="bin", lib={ "lib", [[$(MULTIARCH_SUBDIR)]] }, include="include" }' >> $(SITE_CONFIG) ;\ 62
79 fi 63# ----------------------------------------
80 echo "return site_config" >> $(SITE_CONFIG) 64# Binary build
81 65# ----------------------------------------
82dev: 66
83 $(MAKE) build_bins LUADIR=$(PWD)/src 67binary: build-binary/luarocks.exe build-binary/luarocks-admin.exe
84 68
85build_bins: cleanup_bins 69build-binary/luarocks.exe: ./luarocks
86 for f in $(BIN_FILES) ;\ 70 LUA_PATH="$(PWD)/src/?.lua;;" "$(LUA_BINDIR)/$(LUA_INTERPRETER)" ./all_in_one "src/bin/luarocks" "$(LUA_DIR)" "^src/luarocks/admin/" "$(SYSCONFDIR)" "build-binary"
87 do \ 71
88 sed "1d" src/bin/$$f > src/bin/$$f.bak ;\ 72build-binary/luarocks-admin.exe: ./luarocks
89 echo "#!$(LUA_BINDIR)/lua$(LUA_SUFFIX)" > src/bin/$$f ;\ 73 LUA_PATH="$(PWD)/src/?.lua;;" "$(LUA_BINDIR)/$(LUA_INTERPRETER)" ./all_in_one "src/bin/luarocks-admin" "$(LUA_DIR)" "^src/luarocks/cmd/" "$(SYSCONFDIR)" "build-binary"
90 echo "package.path = [[$(LUADIR)/?.lua;]]..package.path" | sed "s,//,/,g" >> src/bin/$$f ;\ 74
91 cat src/bin/$$f.bak >> src/bin/$$f ;\ 75# ----------------------------------------
92 chmod +rx src/bin/$$f ;\ 76# Binary install
93 rm -f src/bin/$$f.bak ;\ 77# ----------------------------------------
94 done 78
95 79install-binary: build-binary/luarocks.exe build-binary/luarocks-admin.exe
96luadoc: 80 mkdir -p "$(PREFIX)/bin"
97 rm -rf doc/luadoc 81 cp build-binary/luarocks.exe "$(PREFIX)/bin/luarocks"
98 mkdir -p doc/luadoc 82 chmod +rx "$(PREFIX)/bin/luarocks"
99 cd src && luadoc -d ../doc/luadoc --nofiles luarocks/*.lua 83 cp build-binary/luarocks-admin.exe "$(PREFIX)/bin/luarocks-admin"
100 84 chmod +rx "$(PREFIX)/bin/luarocks-admin"
101check_makefile: clean 85 mkdir -p "$(PREFIX)/share/lua/$(LUA_VERSION)/luarocks/core"
102 echo $(BIN_FILES) | tr " " "\n" | sort > makefile_list.txt 86 cp -a src/luarocks/core/* "$(PREFIX)/share/lua/$(LUA_VERSION)/luarocks/core"
103 ( cd src/bin && ls -d * ) | sort > luarocks_dir.txt 87 cp -a src/luarocks/loader.lua "$(PREFIX)/share/lua/$(LUA_VERSION)/luarocks/"
104 echo $(LUAROCKS_FILES) | tr " " "\n" | sort >> makefile_list.txt 88
105 ( cd src/luarocks && find * -name "*.lua" ) | sort >> luarocks_dir.txt 89# ----------------------------------------
106 diff makefile_list.txt luarocks_dir.txt 90# Bootstrap install
107 rm -f makefile_list.txt luarocks_dir.txt 91# ----------------------------------------
108 @echo 92
109 @echo "Makefile is sane." 93bootstrap: ./luarocks $(SYSCONFDIR)/config-$(LUA_VERSION).lua
110 @echo 94 ./luarocks make --tree="$(ROCKS_TREE)"
111 95
112cleanup_bins: 96# ----------------------------------------
113 for f in $(BIN_FILES) ;\ 97# Clean
114 do \ 98# ----------------------------------------
115 mv src/bin/$$f src/bin/$$f.bak ;\ 99
116 sed "s,^#!.*lua.*,#!/usr/bin/env lua,;/^package.path/d" < src/bin/$$f.bak > src/bin/$$f ;\ 100clean:
117 chmod +rx src/bin/$$f ;\ 101 rm -f ./config.unix
118 rm -f src/bin/$$f.bak ;\ 102 rm -f ./luarocks
119 done 103 rm -f ./luarocks-admin
120 104 rm -rf build-binary
121clean: cleanup_bins 105 rm -rf ./.luarocks
122 rm -f $(SITE_CONFIG) 106 rm -rf ./lua_modules
123 107
124run_luarocks: 108.PHONY: all build install binary install-binary bootstrap clean
125 '$(LUA_BINDIR)/lua$(LUA_SUFFIX)' -e "package.path=[[$(SAFEPWD)/src/?.lua;]]..package.path" src/bin/luarocks make rockspec --tree="$(PREFIX)"
126
127install_site_config: $(SITE_CONFIG)
128 mkdir -p "$(DESTDIR)$(LUADIR)/luarocks/core"
129 cp $(SITE_CONFIG) "$(DESTDIR)$(LUADIR)/luarocks/core"
130
131write_sysconfig:
132 mkdir -p "$(DESTDIR)$(ROCKS_TREE)"
133 if [ ! -f "$(DESTDIR)$(CONFIG_FILE)" ] ;\
134 then \
135 mkdir -p `dirname "$(DESTDIR)$(CONFIG_FILE)"` ;\
136 echo 'rocks_trees = {' >> "$(DESTDIR)$(CONFIG_FILE)" ;\
137 if [ ! -n "$(FORCE_CONFIG)" ] ;\
138 then \
139 echo ' { name = [[user]], root = home..[[/.luarocks]] },' >> "$(DESTDIR)$(CONFIG_FILE)" ;\
140 fi ;\
141 echo ' { name = [[system]], root = [[$(ROCKS_TREE)]] }' >> "$(DESTDIR)$(CONFIG_FILE)" ;\
142 echo '}' >> "$(DESTDIR)$(CONFIG_FILE)" ;\
143 fi
144
145install: build install_bins install_luas install_site_config write_sysconfig
146
147bootstrap: $(SITE_CONFIG) run_luarocks install_site_config write_sysconfig cleanup_bins
148
149install_rock: install_bins install_luas
150
diff --git a/Makefile.install.inc b/Makefile.install.inc
deleted file mode 100644
index 621d7cb2..00000000
--- a/Makefile.install.inc
+++ /dev/null
@@ -1,23 +0,0 @@
1
2.PHONY: install_bins install_luas
3
4install_bins:
5 mkdir -p "$(DESTDIR)$(BINDIR)"
6 cd src/bin && \
7 luaver="$(LUA_VERSION)" && [ -n "$$luaver" ] || luaver=`$(LUA) -e 'print(_VERSION:sub(5))'`; \
8 for f in $(BIN_FILES); \
9 do \
10 cp "$$f" "$(DESTDIR)$(BINDIR)/$$f-$$luaver"; \
11 chmod +rx "$(DESTDIR)$(BINDIR)/$$f-$$luaver"; \
12 ln -nfs "$$f-$$luaver" "$(DESTDIR)$(BINDIR)/$$f"; \
13 done
14
15install_luas:
16 mkdir -p "$(DESTDIR)$(LUADIR)/luarocks"
17 cd src/luarocks && for f in $(LUAROCKS_FILES); \
18 do \
19 d="$(DESTDIR)$(LUADIR)/luarocks"/`dirname "$$f"` && \
20 mkdir -p "$$d" && \
21 cp "$$f" "$$d" || exit 1; \
22 done
23
diff --git a/Makefile.luarocks b/Makefile.luarocks
deleted file mode 100644
index f0652891..00000000
--- a/Makefile.luarocks
+++ /dev/null
@@ -1,16 +0,0 @@
1
2include Makefile.setup.inc
3include Makefile.install.inc
4
5.PHONY: all install copy_site_config
6
7all:
8 @echo This Makefile is used by the LuaRocks rockspec for upgrading itself.
9
10install: install_bins install_luas copy_site_config
11
12copy_site_config:
13 luaver="$(LUA_VERSION)" && [ -n "$$luaver" ] || luaver=`$(LUA) -e 'print(_VERSION:sub(5))'`; \
14 mkdir -p "$(DESTDIR)$(LUADIR)/luarocks"; \
15 site_config="site_config_$(echo "$luaver" | sed 's,\.,_,').lua"
16 lprefix=$(echo "$(LUADIR)" | sed 's,/lib/luarocks/.*,,'); sed "s,LUAROCKS_PREFIX=.*,LUAROCKS_PREFIX=[[$$lprefix]],g" "$(LUAROCKS_PREFIX)/share/lua/$$luaver/luarocks/core/$$site_config" > "$(DESTDIR)$(LUADIR)/luarocks/core/$$site_config"
diff --git a/Makefile.setup.inc b/Makefile.setup.inc
deleted file mode 100644
index f53686d0..00000000
--- a/Makefile.setup.inc
+++ /dev/null
@@ -1,27 +0,0 @@
1
2DESTDIR =
3PREFIX ?= /usr/local
4BINDIR ?= $(PREFIX)/bin
5LUADIR ?= $(PREFIX)/share/lua/$(LUA_VERSION)
6
7BIN_FILES = luarocks luarocks-admin
8LUAROCKS_FILES = fs.lua dir.lua repos.lua cmd.lua upload/api.lua upload/multipart.lua \
9admin/index.lua build.lua search.lua fs/win32.lua fs/win32/tools.lua fs/win32/pe-parser.lua \
10fs/unix/tools.lua fs/lua.lua fs/tools.lua fs/unix.lua loader.lua cmd/help.lua \
11cmd/unpack.lua cmd/upload.lua cmd/lint.lua cmd/purge.lua cmd/install.lua \
12cmd/config.lua cmd/write_rockspec.lua cmd/build.lua cmd/search.lua cmd/test.lua \
13cmd/make.lua cmd/list.lua cmd/show.lua cmd/path.lua cmd/new_version.lua \
14cmd/pack.lua cmd/download.lua cmd/doc.lua cmd/remove.lua tools/patch.lua \
15tools/zip.lua tools/tar.lua manif/writer.lua build/cmake.lua build/make.lua \
16build/command.lua build/builtin.lua fetch.lua path.lua util.lua deps.lua \
17pack.lua download.lua core/dir.lua core/path.lua core/util.lua \
18core/cfg.lua core/persist.lua core/manif.lua \
19type_check.lua persist.lua require.lua manif.lua admin/cache.lua \
20admin/cmd/make_manifest.lua admin/cmd/add.lua admin/cmd/remove.lua \
21admin/cmd/refresh_cache.lua remove.lua fetch/git_file.lua fetch/sscm.lua \
22fetch/cvs.lua fetch/git_https.lua fetch/git_ssh.lua fetch/hg_http.lua \
23fetch/git_http.lua fetch/svn.lua fetch/git.lua fetch/hg_ssh.lua \
24fetch/hg_https.lua fetch/hg.lua core/vers.lua cmd/which.lua \
25fun.lua type/manifest.lua type/rockspec.lua queries.lua results.lua \
26test/busted.lua test/command.lua cmd/init.lua rockspecs.lua
27
diff --git a/binary/all_in_one b/binary/all_in_one
new file mode 100755
index 00000000..de545d04
--- /dev/null
+++ b/binary/all_in_one
@@ -0,0 +1,442 @@
1#!/usr/bin/env lua
2--[[
3
4All-in-one packager for LuaRocks
5 * by Hisham Muhammad <hisham@gobolinux.org>
6 * licensed under the same terms as Lua (MIT license).
7
8Based on:
9
10* srlua.c - Lua interpreter for self-running programs
11 * by Luiz Henrique de Figueiredo <lhf@tecgraf.puc-rio.br>
12 * 03 Nov 2014 15:31:43
13 * srlua.c is placed in the public domain.
14* bin2c.lua - converts a binary to a C string that can be embedded
15 * by Mark Edgar
16 * http://lua-users.org/wiki/BinTwoCee
17 * bin2c.lua is licensed under the same terms as Lua (MIT license).
18* lua.c - Lua stand-alone interpreter
19 * by Luiz Henrique de Figueiredo, Waldemar Celes, Roberto Ierusalimschy
20 * lua.c is licensed under the same terms as Lua (MIT license).
21* luastatic - builds a standalone executable from a Lua program
22 * by Eric R. Schulz
23 * https://github.com/ers35/luastatic
24 * luastatic is licensed under the CC0 1.0 Universal license
25
26]]
27
28local MAIN_PROGRAM = arg[1] or "src/bin/luarocks"
29local LUA_DIR = arg[2] or "/usr"
30local EXCLUDE = arg[3] or "^src/luarocks/admin/"
31local SYSCONFDIR = arg[4] or "/etc/luarocks"
32local TARGET = arg[5] or "binary-build"
33
34local LUA_MODULES = TARGET .. "/lua_modules"
35local CONFIG_DIR = TARGET .. "/.luarocks"
36
37package.path = "./src/?.lua;" .. package.path
38
39local fs = require("luarocks.fs")
40local cfg = require("luarocks.core.cfg")
41local cmd = require("luarocks.cmd")
42local deps = require("luarocks.deps")
43local util = require("luarocks.util")
44local path = require("luarocks.path")
45local manif = require("luarocks.manif")
46local queries = require("luarocks.queries")
47local persist = require("luarocks.persist")
48
49--------------------------------------------------------------------------------
50
51local function reindent_c(input)
52 local out = {}
53 local indent = 0
54 local previous_is_blank = true
55 for line in input:gmatch("([^\n]*)") do
56 line = line:match("^[ \t]*(.-)[ \t]*$")
57
58 local is_blank = (#line == 0)
59 local do_print =
60 (not is_blank) or
61 (not previous_is_blank and indent == 0)
62
63 if line:match("^[})]") then
64 indent = indent - 1
65 if indent < 0 then indent = 0 end
66 end
67 if do_print then
68 table.insert(out, string.rep(" ", indent))
69 table.insert(out, line)
70 table.insert(out, "\n")
71 end
72 if line:match("[{(]$") then
73 indent = indent + 1
74 end
75
76 previous_is_blank = is_blank
77 end
78 return table.concat(out)
79end
80
81local hexdump
82do
83 local numtab = {}
84 for i = 0, 255 do
85 numtab[string.char(i)] = ("%-3d,"):format(i)
86 end
87 function hexdump(str)
88 return (str:gsub(".", numtab):gsub(("."):rep(80), "%0\n"))
89 end
90end
91
92local c_preamble = [[
93
94#include <lua.h>
95#include <lualib.h>
96#include <lauxlib.h>
97#include <errno.h>
98#include <stdio.h>
99#include <stdlib.h>
100
101/* portable alerts, from srlua */
102#ifdef _WIN32
103#include <windows.h>
104#define alert(message) MessageBox(NULL, message, progname, MB_ICONERROR | MB_OK)
105#define getprogname() char name[MAX_PATH]; argv[0]= GetModuleFileName(NULL,name,sizeof(name)) ? name : NULL;
106#else
107#define alert(message) fprintf(stderr,"%s: %s\n", progname, message)
108#define getprogname()
109#endif
110
111static int registry_key;
112
113]]
114
115local function bin2c_file(out, filename)
116 local content = string.dump(assert(loadfile(filename)))
117 table.insert(out, ("static const unsigned char code[] = {"))
118 table.insert(out, hexdump(content))
119 table.insert(out, ("};"))
120end
121
122local function write_hardcoded_module(dir)
123
124 local system = util.popen_read("uname -s")
125 local processor = util.popen_read("uname -m")
126
127 if processor:match("i[%d]86") then
128 processor = "x86"
129 elseif processor:match("amd64") or processor:match("x86_64") then
130 processor = "x86_64"
131 elseif processor:match("Power Macintosh") then
132 processor = "powerpc"
133 end
134
135 local hardcoded = {
136 SYSTEM = system,
137 PROCESSOR = processor,
138 SYSCONFDIR = SYSCONFDIR,
139 LUA_DIR = cfg.variables.LUA_DIR,
140 LUA_BINDIR = cfg.variables.LUA_BINDIR,
141 LUA_INTERPRETER = cfg.lua_interpreter,
142 }
143
144 local name = dir .. "/luarocks/core/hardcoded.lua"
145 persist.save_as_module(name, hardcoded)
146 return name
147end
148
149local function declare_modules(out, dirs, skip)
150 skip = skip or {}
151 table.insert(out, [[
152 static void declare_modules(lua_State* L) {
153 lua_settop(L, 0); /* */
154 lua_newtable(L); /* modules */
155 lua_pushlightuserdata(L, (void*) &registry_key); /* modules registry_key */
156 lua_pushvalue(L, 1); /* modules registry_key modules */
157 lua_rawset(L, LUA_REGISTRYINDEX); /* modules */
158 ]])
159 for _, dir in ipairs(dirs) do
160 for _, name in ipairs(fs.find(dir)) do
161 local run = true
162 for _, pat in ipairs(skip) do
163 if name:match(pat) then
164 run = false
165 break
166 end
167 end
168 if run then
169 local filename = dir .. "/" .. name
170 if fs.is_file(filename) then
171 print(name)
172 local modname = name:gsub("%.lua$", ""):gsub("/", ".")
173 table.insert(out, ("/* %s */"):format(modname))
174 table.insert(out, ("{"))
175 bin2c_file(out, filename)
176 table.insert(out, ("luaL_loadbuffer(L, code, sizeof(code), %q);"):format(filename))
177 table.insert(out, ("lua_setfield(L, 1, %q);"):format(modname))
178 table.insert(out, ("}"))
179 end
180 end
181 end
182 end
183 table.insert(out, [[
184 lua_settop(L, 0); /* */
185 }
186 ]])
187end
188
189local function nm(filename)
190 local pd = io.popen("nm " .. filename)
191 local out = pd:read("*a")
192 pd:close()
193 return out
194end
195
196local function declare_libraries(out, dir)
197 local a_files = {}
198 local externs = {}
199 local fn = {}
200 table.insert(fn, [[
201 static void declare_libraries(lua_State* L) {
202 lua_getglobal(L, "package"); /* package */
203 lua_getfield(L, -1, "preload"); /* package package.preload */
204 ]])
205 for _, name in ipairs(fs.find(dir)) do
206 local filename = dir .. "/" .. name
207 if name:match("%.a$") then
208 table.insert(a_files, filename)
209 local nmout = nm(filename)
210 for luaopen in nmout:gmatch("[^dD] _?(luaopen_[%a%p%d]+)") do
211
212 -- FIXME what about module names with underscores?
213 local modname = luaopen:gsub("^_?luaopen_", ""):gsub("_", ".")
214
215 table.insert(externs, "extern int " .. luaopen .. "(lua_State* L);")
216 table.insert(fn, "lua_pushcfunction(L, " .. luaopen .. ");")
217 table.insert(fn, "lua_setfield(L, -2, \"" .. modname .. "\");")
218 end
219 end
220 end
221 local pd = io.popen("find " .. dir .. " -name '*.a'", "r")
222 for line in pd:lines() do
223 table.insert(a_files, line)
224 end
225 pd:close()
226 table.insert(fn, [[
227 lua_settop(L, 0); /* */
228 }
229 ]])
230
231 table.insert(out, "\n")
232 for _, line in ipairs(externs) do
233 table.insert(out, line)
234 end
235 table.insert(out, "\n")
236 for _, line in ipairs(fn) do
237 table.insert(out, line)
238 end
239 table.insert(out, "\n")
240
241 return a_files
242end
243
244local function load_main(out, main_program, program_name)
245 table.insert(out, [[static void load_main(lua_State* L) {]])
246 bin2c_file(out, main_program)
247 table.insert(out, ("luaL_loadbuffer(L, code, sizeof(code), %q);"):format(program_name))
248 table.insert(out, [[}]])
249 table.insert(out, [[]])
250end
251
252local c_main = [[
253
254/* custom package loader */
255static int pkg_loader(lua_State* L) {
256 lua_pushlightuserdata(L, (void*) &registry_key); /* modname ? registry_key */
257 lua_rawget(L, LUA_REGISTRYINDEX); /* modname ? modules */
258 lua_pushvalue(L, -1); /* modname ? modules modules */
259 lua_pushvalue(L, 1); /* modname ? modules modules modname */
260 lua_gettable(L, -2); /* modname ? modules mod */
261 if (lua_type(L, -1) == LUA_TNIL) {
262 lua_pop(L, 1); /* modname ? modules */
263 lua_pushvalue(L, 1); /* modname ? modules modname */
264 lua_pushliteral(L, ".init"); /* modname ? modules modname ".init" */
265 lua_concat(L, 2); /* modname ? modules modname .. ".init" */
266 lua_gettable(L, -2); /* modname ? mod */
267 }
268 return 1;
269}
270
271static void install_pkg_loader(lua_State* L) {
272 lua_settop(L, 0); /* */
273 lua_getglobal(L, "table"); /* table */
274 lua_getfield(L, -1, "insert"); /* table table.insert */
275 lua_getglobal(L, "package"); /* table table.insert package */
276 lua_getfield(L, -1, "searchers"); /* table table.insert package package.searchers */
277 if (lua_type(L, -1) == LUA_TNIL) {
278 lua_pop(L, 1);
279 lua_getfield(L, -1, "loaders"); /* table table.insert package package.loaders */
280 }
281 lua_copy(L, 4, 3); /* table table.insert package.searchers */
282 lua_settop(L, 3); /* table table.insert package.searchers */
283 lua_pushnumber(L, 1); /* table table.insert package.searchers 1 */
284 lua_pushcfunction(L, pkg_loader); /* table table.insert package.searchers 1 pkg_loader */
285 lua_call(L, 3, 0); /* table */
286 lua_settop(L, 0); /* */
287}
288
289/* main script launcher, from srlua */
290static int pmain(lua_State *L) {
291 int argc = lua_tointeger(L, 1);
292 char** argv = lua_touserdata(L, 2);
293 int i;
294 load_main(L);
295 lua_createtable(L, argc, 0);
296 for (i = 0; i < argc; i++) {
297 lua_pushstring(L, argv[i]);
298 lua_rawseti(L, -2, i);
299 }
300 lua_setglobal(L, "arg");
301 luaL_checkstack(L, argc - 1, "too many arguments to script");
302 for (i = 1; i < argc; i++) {
303 lua_pushstring(L, argv[i]);
304 }
305 lua_call(L, argc - 1, 0);
306 return 0;
307}
308
309/* fatal error, from srlua */
310static void fatal(const char* message) {
311 alert(message);
312 exit(EXIT_FAILURE);
313}
314
315/* error handler, from luac */
316static int msghandler (lua_State *L) {
317 /* is error object not a string? */
318 const char *msg = lua_tostring(L, 1);
319 if (msg == NULL) {
320 /* does it have a metamethod that produces a string */
321 if (luaL_callmeta(L, 1, "__tostring") && lua_type(L, -1) == LUA_TSTRING) {
322 /* then that is the message */
323 return 1;
324 } else {
325 msg = lua_pushfstring(L, "(error object is a %s value)", luaL_typename(L, 1));
326 }
327 }
328 /* append a standard traceback */
329 luaL_traceback(L, L, msg, 1);
330 return 1;
331}
332
333/* main function, from srlua */
334int main(int argc, char** argv) {
335 lua_State* L;
336 getprogname();
337 if (argv[0] == NULL) {
338 fatal("cannot locate this executable");
339 }
340 L = luaL_newstate();
341 if (L == NULL) {
342 fatal("not enough memory for state");
343 }
344 luaL_openlibs(L);
345 install_pkg_loader(L);
346 declare_libraries(L);
347 declare_modules(L);
348 lua_pushcfunction(L, &msghandler);
349 lua_pushcfunction(L, &pmain);
350 lua_pushinteger(L, argc);
351 lua_pushlightuserdata(L, argv);
352 if (lua_pcall(L, 2, 0, -4) != 0) {
353 fatal(lua_tostring(L, -1));
354 }
355 lua_close(L);
356 return EXIT_SUCCESS;
357}
358
359]]
360
361local function generate(main_program, dir, skip)
362 local program_name = main_program:gsub(".*/", "")
363
364 local hardcoded = write_hardcoded_module(dir)
365
366 local out = {}
367 table.insert(out, c_preamble)
368 table.insert(out, ([[static const char* progname = %q;]]):format(program_name))
369 load_main(out, main_program, program_name)
370 local lua_modules = LUA_MODULES .. "/share/lua/" .. cfg.lua_version
371 declare_modules(out, { dir, lua_modules }, skip)
372 local a_files = declare_libraries(out, LUA_MODULES .. "/lib/lua/" .. cfg.lua_version)
373 table.insert(out, c_main)
374
375 os.remove(hardcoded)
376
377 local c_filename = TARGET .. "/" .. program_name .. ".exe.c"
378 local fd = io.open(c_filename, "w")
379 fd:write(reindent_c(table.concat(out, "\n")))
380 fd:close()
381
382 cmd = table.concat({
383 "gcc", "-o", TARGET .. "/" .. program_name .. ".exe",
384 "-I", cfg.variables.LUA_INCDIR,
385 "-rdynamic",
386 "-Os",
387 c_filename,
388 "-L", cfg.variables.LUA_LIBDIR,
389 table.concat(a_files, " "),
390 cfg.variables.LUA_LIBDIR .. "/" .. cfg.variables.LUALIB:gsub("%.so.*$", ".a"),
391 "-ldl", "-lm"}, " ")
392 print(cmd)
393 os.execute(cmd)
394end
395
396--------------------------------------------------------------------------------
397
398local function main()
399
400 cfg.init(cmd.find_lua(LUA_DIR))
401 fs.init()
402 deps.check_lua(cfg.variables)
403 path.use_tree("./" .. LUA_MODULES)
404
405 local CONFIG_FILE = CONFIG_DIR .. "/config-" .. cfg.lua_version .. ".lua"
406
407 fs.make_dir(CONFIG_DIR)
408 local fd = io.open(CONFIG_FILE, "w")
409 fd:write([[
410 lib_extension = "a"
411 external_lib_extension = "a"
412 variables = {
413 CC = "]] .. fs.current_dir() .. [[/static-gcc",
414 LD = "]] .. fs.current_dir() .. [[/static-gcc",
415 LIB_EXTENSION = "a",
416 LIBFLAG = "-static",
417 }
418 ]])
419 fd:close()
420
421 local dependencies = {
422 md5 = "md5",
423 luazip = "luazip",
424 luasec = "./luasec-0.7alpha-2.rockspec",
425 luaposix = "./luaposix-34.0.4-1.rockspec",
426 luasocket = "luasocket",
427 ["lua-zlib"] = "lua-zlib",
428 luafilesystem = "luafilesystem",
429 }
430
431 fs.make_dir(LUA_MODULES)
432 for name, arg in pairs(dependencies) do
433 local vers = manif.get_versions(queries.from_dep_string(name), "one")
434 if not next(vers) then
435 os.execute("LUAROCKS_CONFIG='" .. CONFIG_FILE .. "' ./luarocks install '--tree=" .. LUA_MODULES .. "' " .. arg)
436 end
437 end
438
439 generate(MAIN_PROGRAM, "src", { EXCLUDE, "^bin/?" })
440end
441
442main()
diff --git a/binary/luaposix-34.0.4-1.rockspec b/binary/luaposix-34.0.4-1.rockspec
new file mode 100644
index 00000000..490715d5
--- /dev/null
+++ b/binary/luaposix-34.0.4-1.rockspec
@@ -0,0 +1,55 @@
1local _MODREV, _SPECREV = '34.0.4', '-1'
2
3package = 'luaposix'
4version = _MODREV .. _SPECREV
5
6description = {
7 summary = 'Lua bindings for POSIX',
8 detailed = [[
9 A library binding various POSIX APIs. POSIX is the IEEE Portable
10 Operating System Interface standard. luaposix is based on lposix.
11 ]],
12 homepage = 'http://github.com/luaposix/luaposix/',
13 license = 'MIT/X11',
14}
15
16dependencies = {
17 'bit32',
18 'lua >= 5.1, < 5.4',
19 'std.normalize',
20}
21
22source = {
23 url = 'http://github.com/luaposix/luaposix/archive/v' .. _MODREV .. '.zip',
24 dir = 'luaposix-' .. _MODREV,
25}
26
27build = {
28 type = 'command',
29 build_command = '$(LUA) build-aux/luke'
30 .. ' package="' .. package .. '"'
31 .. ' version="' .. _MODREV .. '"'
32 .. ' PREFIX="$(PREFIX)"'
33 .. ' LUA="$(LUA)"'
34 .. ' LUA_INCDIR="$(LUA_INCDIR)"'
35 .. ' CFLAGS="$(CFLAGS)"'
36 .. ' LIBFLAG="$(LIBFLAG)"'
37 .. ' LIB_EXTENSION="$(LIB_EXTENSION)"'
38 .. ' OBJ_EXTENSION="$(OBJ_EXTENSION)"'
39 .. ' INST_LIBDIR="$(LIBDIR)"'
40 .. ' INST_LUADIR="$(LUADIR)"'
41 ,
42 install_command = '$(LUA) build-aux/luke install --quiet'
43 .. ' INST_LIBDIR="$(LIBDIR)"'
44 .. ' LIB_EXTENSION="$(LIB_EXTENSION)"'
45 .. ' INST_LUADIR="$(LUADIR)"'
46 ,
47}
48
49if _MODREV == 'git' then
50 dependencies[#dependencies + 1] = 'ldoc'
51
52 source = {
53 url = 'git://github.com/luaposix/luaposix.git',
54 }
55end
diff --git a/binary/luasec-0.7alpha-2.rockspec b/binary/luasec-0.7alpha-2.rockspec
new file mode 100644
index 00000000..2736ca15
--- /dev/null
+++ b/binary/luasec-0.7alpha-2.rockspec
@@ -0,0 +1,119 @@
1package = "LuaSec"
2version = "0.7alpha-2"
3source = {
4 url = "https://github.com/brunoos/luasec/archive/luasec-0.7alpha.tar.gz",
5 dir = "luasec-luasec-0.7alpha"
6}
7description = {
8 summary = "A binding for OpenSSL library to provide TLS/SSL communication over LuaSocket.",
9 detailed = "This version delegates to LuaSocket the TCP connection establishment between the client and server. Then LuaSec uses this connection to start a secure TLS/SSL session.",
10 homepage = "https://github.com/brunoos/luasec/wiki",
11 license = "MIT"
12}
13dependencies = {
14 "lua >= 5.1", "luasocket"
15}
16external_dependencies = {
17 platforms = {
18 unix = {
19 OPENSSL = {
20 header = "openssl/ssl.h",
21 library = "ssl"
22 }
23 },
24 windows = {
25 OPENSSL = {
26 header = "openssl/ssl.h",
27 }
28 },
29 }
30}
31build = {
32 type = "builtin",
33 copy_directories = {
34 "samples"
35 },
36 platforms = {
37 unix = {
38 modules = {
39 ['ssl.https'] = "src/https.lua",
40 ['ssl.init'] = "src/ssl.lua",
41 ssl = {
42 defines = {
43 "WITH_LUASOCKET", "LUASOCKET_DEBUG",
44 },
45 incdirs = {
46 "$(OPENSSL_INCDIR)", "src/", "src/luasocket",
47 },
48 libdirs = {
49 "$(OPENSSL_LIBDIR)"
50 },
51 libraries = {
52 "ssl", "crypto"
53 },
54 sources = {
55 "src/config.c", "src/ec.c",
56 "src/x509.c", "src/context.c", "src/ssl.c",
57 "src/luasocket/buffer.c", "src/luasocket/io.c",
58 "src/luasocket/timeout.c", "src/luasocket/usocket.c"
59 }
60 }
61 }
62 },
63 mingw = {
64 modules = {
65 ssl = {
66 libraries = {
67 "ssl", "crypto",
68 }
69 }
70 }
71 },
72 windows = {
73 modules = {
74 ['ssl.https'] = "src/https.lua",
75 ['ssl.init'] = "src/ssl.lua",
76 ssl = {
77 defines = {
78 "WIN32", "NDEBUG", "_WINDOWS", "_USRDLL", "LSEC_EXPORTS", "BUFFER_DEBUG", "LSEC_API=__declspec(dllexport)",
79 "WITH_LUASOCKET", "LUASOCKET_DEBUG",
80 "LUASEC_INET_NTOP", "WINVER=0x0501", "_WIN32_WINNT=0x0501", "NTDDI_VERSION=0x05010300"
81 },
82 libdirs = {
83 "$(OPENSSL_LIBDIR)",
84 "$(OPENSSL_BINDIR)",
85 },
86 libraries = {
87 "libssl32MD", "libcrypto32MD", "ws2_32"
88 },
89 incdirs = {
90 "$(OPENSSL_INCDIR)", "src/", "src/luasocket"
91 },
92 sources = {
93 "src/config.c", "src/ec.c",
94 "src/x509.c", "src/context.c", "src/ssl.c",
95 "src/luasocket/buffer.c", "src/luasocket/io.c",
96 "src/luasocket/timeout.c", "src/luasocket/wsocket.c"
97 }
98 }
99 },
100 patches = {
101["lowercase-winsock-h.diff"] = [[
102diff --git a/src/ssl.c b/src/ssl.c
103index 95109c4..e5defa8 100644
104--- a/src/ssl.c
105+++ b/src/ssl.c
106@@ -11,7 +11,7 @@
107 #include <string.h>
108
109 #if defined(WIN32)
110-#include <Winsock2.h>
111+#include <winsock2.h>
112 #endif
113
114 #include <openssl/ssl.h>
115]]
116 }
117 }
118 }
119}
diff --git a/binary/static-gcc b/binary/static-gcc
new file mode 100755
index 00000000..a4d865d5
--- /dev/null
+++ b/binary/static-gcc
@@ -0,0 +1,158 @@
1#!/usr/bin/env bash
2
3DIR="$( cd "$( dirname "$0" )" && pwd )"
4
5function log() { echo -- "$@" >> $DIR/log.txt; }
6
7function runlog() { log "$@"; "$@"; }
8
9log "---------------------------"
10log INP "$@"
11
12allargs=()
13sources=()
14objects=()
15etc=()
16libdirs=("/usr/lib")
17incdirs=()
18
19linking=0
20
21while [ "$1" ]
22do
23 allargs+=("$1")
24 if [ "$next_libdir" = "1" ]
25 then
26 libdirs+=("$1")
27 next_libdir=0
28 elif [ "$next_incdir" = "1" ]
29 then
30 incdirs+=("-I$1")
31 next_incdir=0
32 elif [ "$next_lib" = "1" ]
33 then
34 libs+=("$1")
35 next_lib=0
36 elif [ "$next_output" = "1" ]
37 then
38 output="$1"
39 next_output=0
40 else
41 case "$1" in
42 -*)
43 case "$1" in
44 -shared)
45 linking=1
46 ;;
47 -static)
48 linking=1
49 ;;
50 -o)
51 next_output=1
52 ;;
53 -c)
54 object=1
55 etc+=("$1")
56 ;;
57 -L)
58 next_libdir=1
59 ;;
60 -L*)
61 libdirs+=("${1:2}")
62 ;;
63 -I)
64 next_incdir=1
65 ;;
66 -I*)
67 incdirs+=("$1")
68 ;;
69 -l)
70 next_lib=1
71 ;;
72 -l*)
73 libs+=("${1:2}")
74 ;;
75 *)
76 etc+=("$1")
77 ;;
78 esac
79 ;;
80 *.c)
81 sources+=("$1")
82 ;;
83 *.o)
84 objects+=("$1")
85 ;;
86 *)
87 etc+=("$1")
88 ;;
89 esac
90 fi
91 shift
92done
93
94staticlibs=()
95for lib in "${libs[@]}"
96do
97 for libdir in "${libdirs[@]}"
98 do
99 staticlib="$libdir/lib$lib.a"
100 if [ -e "$staticlib" ]
101 then
102 staticlibs+=("$staticlib")
103 break
104 fi
105 done
106done
107
108oflag=()
109if [ "$output" != "" ]
110then
111 oflag=("-o" "$output")
112fi
113
114if [ "$linking" = "1" ]
115then
116 log LINK
117 if [ "${#sources[@]}" -gt 0 ]
118 then
119 for source in "${sources[@]}"
120 do
121 object="${source%.c}.o"
122 runlog gcc "${incdirs[@]}" "${etc[@]}" -c -o "$object" "$source"
123 [ "$?" = 0 ] || runlog exit $?
124 objects+=("$object")
125 done
126 fi
127
128 # runlog ar rcu "${oflag[@]}" "${objects[@]}" "${staticlibs[@]}"
129 echo "CREATE $output" > ar.script
130 for o in "${objects[@]}"
131 do
132 echo "ADDMOD $o" >> ar.script
133 done
134 for o in "${staticlibs[@]}"
135 do
136 echo "ADDLIB $o" >> ar.script
137 done
138 echo "SAVE" >> ar.script
139 echo "END" >> ar.script
140 cat ar.script | ar -M
141 [ "$?" = 0 ] || runlog exit $?
142
143 [ -e "$output" ] || {
144 exit 1
145 }
146
147 runlog ranlib "$output"
148 runlog exit $?
149elif [ "$object" = 1 ]
150then
151 log OBJECT
152 runlog gcc "${oflag[@]}" "${incdirs[@]}" "${etc[@]}" "${sources[@]}"
153 runlog exit $?
154else
155 log EXECUTABLE
156 runlog gcc "${allargs[@]}"
157 runlog exit $?
158fi
diff --git a/configure b/configure
index 7bc5bced..209f0c44 100755
--- a/configure
+++ b/configure
@@ -1,74 +1,44 @@
1#!/bin/sh 1#!/bin/sh
2 2
3# A basic configure script for LuaRocks.
4# Not doing any fancy shell stuff here to keep good compatibility.
5
6# Defaults 3# Defaults
7 4
8PREFIX="/usr/local" 5PREFIX="/usr/local"
9SYSCONFDIR="$PREFIX/etc/luarocks" 6SYSCONFDIR="$PREFIX/etc/luarocks"
10ROCKS_TREE="$PREFIX" 7ROCKS_TREE="$PREFIX"
11LUA_SUFFIX=""
12LUA_DIR="/usr"
13LUA_BINDIR="/usr/bin"
14LUA_INCDIR="/usr/include"
15LUA_LIBDIR="/usr/lib"
16LUA_VERSION="5.1"
17MULTIARCH_SUBDIR=""
18 8
19# ---------------------------------------------------------------------------- 9# ----------------------------------------------------------------------------
20# FUNCTION DEFINITIONS 10# FUNCTION DEFINITIONS
21# ---------------------------------------------------------------------------- 11# ----------------------------------------------------------------------------
22 12
23# Help 13# Utility functions
14# -----------------
24 15
25show_help() { 16# Resolves a full path
26cat <<EOF 17# - alternative to "readlink -f", which is not available on solaris
27Configure LuaRocks. 18# based on https://stackoverflow.com/a/6554854/1793220
28 19canonicalpath() {
29--help This help. 20 oldpwd="$PWD"
30--prefix=DIR Prefix where LuaRocks should be installed. 21 if [ -d "$1" ]
31 Default is $PREFIX 22 then
32--sysconfdir=DIR Location where the config file should be installed. 23 if cd "$1" >/dev/null 2>&1
33 Default is \$PREFIX/etc/luarocks 24 then
34 25 echo "$PWD"
35Where to install files installed by rocks, to make the accessible to Lua and 26 else
36your \$PATH. Beware of clashes between files installed by LuaRocks and by your 27 echo "$1"
37system's package manager. 28 fi
38 29 else
39--rocks-tree=DIR Root of the local tree of installed rocks. 30 if cd "$(dirname "$1")" >/dev/null 2>&1
40 Default is \$PREFIX 31 then
41 32 echo "$PWD/$(basename "$1")"
42--lua-version=VERSION Use specific Lua version: 5.1, 5.2, 5.3, or 5.4 33 else
43 Default is auto-detected. 34 echo "$1"
44--lua-suffix=SUFFIX Versioning suffix to use in Lua filenames. 35 fi
45 Default is "$LUA_SUFFIX" (lua$LUA_SUFFIX...) 36 fi
46--with-lua=PREFIX Use Lua from given prefix. 37 cd "$oldpwd" >/dev/null 2>&1 || return
47 Default is auto-detected (the parent directory of \$LUA_BINDIR).
48--with-lua-bin=DIR You can also specify Lua's bin dir.
49 Default is the directory of the auto-detected Lua interpreter,
50 or \$LUA_DIR/bin if --with-lua is used.
51--with-lua-include=DIR You can also specify Lua's includes dir.
52 Default is \$LUA_DIR/include
53--with-lua-lib=DIR You can also specify Lua's libraries dir.
54 Default is \$LUA_DIR/lib
55--with-downloader=TOOL Which tool to use as a downloader.
56 Valid options are: curl, wget.
57 Default is to auto-detect.
58--with-md5-checker=TOOL Which tool to use as a downloader.
59 Valid options are: md5sum, openssl
60 Default is to auto-detect.
61--force-config Use a single config location. Do not use the
62 \$LUAROCKS_CONFIG variable or the user's home
63 directory. Useful to avoid conflicts when LuaRocks
64 is embedded within an application.
65EOF
66} 38}
67 39
68# Helper functions
69
70find_program() { 40find_program() {
71 prog=`command -v "$1" 2>/dev/null` 41 prog=$(command -v "$1" 2>/dev/null)
72 if [ -n "$prog" ] 42 if [ -n "$prog" ]
73 then 43 then
74 dirname "$prog" 44 dirname "$prog"
@@ -78,37 +48,154 @@ find_program() {
78die() { 48die() {
79 echo "$*" 49 echo "$*"
80 echo 50 echo
81 echo "configure failed." 51 RED "configure failed."
52 echo
82 echo 53 echo
83 exit 1 54 exit 1
84} 55}
85 56
86find_helper() { 57echo_n() {
87 explanation="$1" 58 printf "%s" "$*"
88 shift 59}
89 tried="$*" 60
90 while [ -n "$1" ] 61bold='\033[1m'
91 do 62red='\033[1;31m'
92 found=`find_program "$1"` 63green='\033[1;32m'
93 if [ -n "$found" ] 64blue='\033[1;36m'
65reset='\033[0m'
66
67BOLD() {
68 printf "$bold%s$reset" "$*"
69}
70
71RED() {
72 printf "$red%s$reset" "$*"
73}
74
75GREEN() {
76 printf "$green%s$reset" "$*"
77}
78
79BLUE() {
80 printf "$blue%s$reset" "$*"
81}
82
83# Help
84# ----
85
86show_help() {
87cat <<EOF
88
89Configure the build process of LuaRocks.
90
91--help This help.
92
93Where to install LuaRocks:
94--------------------------
95
96--prefix=PREFIX Directory where LuaRocks should be installed.
97 - Default is $PREFIX
98--sysconfdir=SYSCONFDIR Where the config file should be installed.
99 - Default is $SYSCONFDIR
100 (PREFIX/etc/luarocks)
101
102Where to install files provided by rocks:
103-----------------------------------------
104
105--rocks-tree=ROCKS_DIR Root of the local tree of installed rocks.
106 To make files installed in this location
107 accessible to Lua and your \$PATH, see
108 "luarocks path --help" after installation.
109 Avoid using paths controlled by your
110 system's package manager, such as /usr.
111 - Default is $PREFIX
112 (PREFIX)
113
114Where is your Lua interpreter:
115------------------------------
116
117--lua-version=VERSION) Use specific Lua version: 5.1, 5.2, 5.3, or 5.4
118 - Default is auto-detected.
119--with-lua=LUA_DIR) Use Lua from given directory.
120 - Default is auto-detected from your \$PATH
121 (or the parent directory of LUA_BINDIR
122 if --with-lua-bin is used).
123--with-lua-bin=LUA_BINDIR) You can also specify Lua's bin dir.
124 - Default is the directory of the
125 auto-detected Lua interpreter,
126 (or LUA_DIR/bin if --with-lua is used)
127--with-lua-include=LUA_INCDIR) Lua's includes dir.
128 - Default is LUA_DIR/include
129--with-lua-lib=LUA_LIBDIR) Lua's libraries dir.
130 - Default is LUA_DIR/lib
131
132For specialized uses of LuaRocks:
133---------------------------------
134
135--force-config) Force using a single config location.
136 Do not honor the \$LUAROCKS_CONFIG_5_x
137 or \$LUAROCKS_CONFIG environment
138 variable or the user's local config.
139 Useful to avoid conflicts when LuaRocks
140 is embedded within an application.
141
142EOF
143}
144
145# Lua detection
146# -------------
147
148detect_lua_version() {
149 detected_lua=$($1 -e 'print(_VERSION:match(" (5%.[1234])$"))' 2> /dev/null)
150 if [ "$detected_lua" != "nil" ]
151 then
152 if [ "$LUA_VERSION_SET" != "yes" ]
94 then 153 then
95 echo "$1 found at $found" 154 echo "Lua version detected: $(GREEN "$detected_lua")"
96 HELPER=$1 155 LUA_VERSION=$detected_lua
97 return 156 return 0
157 elif [ "$LUA_VERSION" = "$detected_lua" ]
158 then
159 return 0
98 fi 160 fi
99 shift 161 fi
100 done 162 return 1
101 echo "Could not find $explanation. Tried: $tried."
102 die "Make sure one of them is installed and available in your PATH."
103} 163}
104 164
105case `echo -n x` in 165search_interpreter() {
106-n*) echo_n_flag='';; 166 suffix="$1"
107*) echo_n_flag='-n';; 167 lua_at=""
108esac 168 if [ "$LUA_BINDIR_SET" = "yes" ]
109 169 then
110echo_n() { 170 lua_at="$LUA_BINDIR"
111 echo $echo_n_flag "$*" 171 elif [ "$LUA_DIR_SET" = "yes" ]
172 then
173 LUA_BINDIR="$LUA_DIR/bin"
174 if [ -f "$LUA_BINDIR/lua$suffix" ]
175 then
176 lua_at="$LUA_BINDIR"
177 fi
178 else
179 lua_at=$(find_program "lua$suffix")
180 fi
181 if [ -n "$lua_at" ] && [ -x "$lua_at/lua$suffix" ]
182 then
183 if detect_lua_version "$lua_at/lua$suffix"
184 then
185 echo "Lua interpreter found: $(GREEN "$lua_at/lua$suffix")"
186 if [ "$LUA_BINDIR_SET" != "yes" ]
187 then
188 LUA_BINDIR="$lua_at"
189 fi
190 if [ "$LUA_DIR_SET" != "yes" ]
191 then
192 LUA_DIR=$(dirname "$lua_at")
193 fi
194 LUA_INTERPRETER="lua$suffix"
195 return 0
196 fi
197 fi
198 return 1
112} 199}
113 200
114# ---------------------------------------------------------------------------- 201# ----------------------------------------------------------------------------
@@ -119,89 +206,97 @@ echo_n() {
119 206
120while [ -n "$1" ] 207while [ -n "$1" ]
121do 208do
122 value="`echo $1 | sed 's/[^=]*.\(.*\)/\1/'`" 209 value="$(echo "$1" | sed 's/[^=]*.\(.*\)/\1/')"
123 key="`echo $1 | sed 's/=.*//'`" 210 key="$(echo "$1" | sed 's/=.*//')"
124 if `echo "$value" | grep "~" >/dev/null 2>/dev/null` 211 if echo "$value" | grep "~" >/dev/null 2>/dev/null
125 then 212 then
126 echo 213 echo
127 echo '*WARNING*: the "~" sign is not expanded in flags.' 214 echo "$(RED WARNING:) the '~' sign is not expanded in flags."
128 echo 'If you mean the home directory, use $HOME instead.' 215 echo "If you mean the home directory, use \$HOME instead."
129 echo 216 echo
130 fi 217 fi
131 case "$key" in 218 case "$key" in
219
220 # Help
221 # ----
132 --help) 222 --help)
133 show_help 223 show_help
134 exit 0 224 exit 0
135 ;; 225 ;;
226
227 # Where to install LuaRocks:
228 # --------------------------
136 --prefix) 229 --prefix)
137 [ -n "$value" ] || die "Missing value in flag $key." 230 [ -n "$value" ] || die "Missing value in flag $key."
138 PREFIX="$value" 231 PREFIX="$(canonicalpath "$value")"
139 PREFIX_SET=yes 232 PREFIX_SET=yes
140 ;; 233 ;;
141 --sysconfdir) 234 --sysconfdir)
142 [ -n "$value" ] || die "Missing value in flag $key." 235 [ -n "$value" ] || die "Missing value in flag $key."
143 SYSCONFDIR="$value" 236 SYSCONFDIR="$(canonicalpath "$value")"
144 SYSCONFDIR_SET=yes 237 SYSCONFDIR_SET=yes
145 ;; 238 ;;
239
240
241 # Where to install files provided by rocks:
242 # -----------------------------------------
146 --rocks-tree) 243 --rocks-tree)
147 [ -n "$value" ] || die "Missing value in flag $key." 244 [ -n "$value" ] || die "Missing value in flag $key."
148 ROCKS_TREE="$value" 245 ROCKS_TREE="$(canonicalpath "$value")"
149 ROCKS_TREE_SET=yes 246 ROCKS_TREE_SET=yes
150 ;; 247 ;;
151 --force-config) 248
152 FORCE_CONFIG=yes 249 # Where is your Lua interpreter:
153 ;; 250 # ------------------------------
154 --versioned-rocks-dir)
155 echo "--versioned-rocks-dir is no longer necessary."
156 echo "The rocks tree in LuaRocks 3.0 is always versioned."
157 ;;
158 --lua-suffix)
159 [ -n "$value" ] || die "Missing value in flag $key."
160 LUA_SUFFIX="$value"
161 LUA_SUFFIX_SET=yes
162 ;;
163 --lua-version|--with-lua-version) 251 --lua-version|--with-lua-version)
164 [ -n "$value" ] || die "Missing value in flag $key." 252 [ -n "$value" ] || die "Missing value in flag $key."
165 LUA_VERSION="$value" 253 LUA_VERSION="$value"
166 [ "$LUA_VERSION" = "5.1" -o "$LUA_VERSION" = "5.2" -o "$LUA_VERSION" = "5.3" -o "$LUA_VERSION" = "5.4" ] || die "Invalid Lua version in flag $key." 254 case "$LUA_VERSION" in
255 5.1|5.2|5.3|5.4) ;;
256 *) die "Invalid Lua version in flag $key."
257 esac
167 LUA_VERSION_SET=yes 258 LUA_VERSION_SET=yes
168 ;; 259 ;;
169 --with-lua) 260 --with-lua)
170 [ -n "$value" ] || die "Missing value in flag $key." 261 [ -n "$value" ] || die "Missing value in flag $key."
171 LUA_DIR="$value" 262 LUA_DIR="$(canonicalpath "$value")"
263 [ -d "$LUA_DIR" ] || die "Bad value for --with-lua: $LUA_DIR is not a valid directory."
172 LUA_DIR_SET=yes 264 LUA_DIR_SET=yes
173 ;; 265 ;;
174 --with-lua-bin) 266 --with-lua-bin)
175 [ -n "$value" ] || die "Missing value in flag $key." 267 [ -n "$value" ] || die "Missing value in flag $key."
176 LUA_BINDIR="$value" 268 LUA_BINDIR="$(canonicalpath "$value")"
269 [ -d "$LUA_BINDIR" ] || die "Bad value for --with-lua-bin: $LUA_BINDIR is not a valid directory."
177 LUA_BINDIR_SET=yes 270 LUA_BINDIR_SET=yes
178 ;; 271 ;;
179 --with-lua-include) 272 --with-lua-include)
180 [ -n "$value" ] || die "Missing value in flag $key." 273 [ -n "$value" ] || die "Missing value in flag $key."
181 LUA_INCDIR="$value" 274 LUA_INCDIR="$(canonicalpath "$value")"
182 LUA_INCDIR_SET=yes 275 [ -d "$LUA_INCDIR" ] || die "Bad value for --with-lua-include: $LUA_INCDIR is not a valid directory."
183 ;; 276 ;;
184 --with-lua-lib) 277 --with-lua-lib)
185 [ -n "$value" ] || die "Missing value in flag $key." 278 [ -n "$value" ] || die "Missing value in flag $key."
186 LUA_LIBDIR="$value" 279 LUA_LIBDIR="$(canonicalpath "$value")"
187 LUA_LIBDIR_SET=yes 280 [ -d "$LUA_LIBDIR" ] || die "Bad value for --with-lua-lib: $LUA_LIBDIR is not a valid directory."
188 ;; 281 ;;
189 --with-downloader) 282
190 [ -n "$value" ] || die "Missing value in flag $key." 283 # For specialized uses of LuaRocks:
191 case "$value" in 284 # ---------------------------------
192 wget|curl) LUAROCKS_DOWNLOADER="$value" ;; 285 --force-config)
193 *) die "Invalid option: $value. See --help." ;; 286 FORCE_CONFIG=yes
194 esac
195 LUAROCKS_DOWNLOADER_SET=yes
196 ;; 287 ;;
197 --with-md5-checker) 288
198 [ -n "$value" ] || die "Missing value in flag $key." 289 # Old options that no longer apply
199 case "$value" in 290 # --------------------------------
200 md5sum|openssl|md5) LUAROCKS_MD5CHECKER="$value" ;; 291 --versioned-rocks-dir)
201 *) die "Invalid option: $value. See --help." ;; 292 echo "--versioned-rocks-dir is no longer necessary."
202 esac 293 echo "The rocks tree in LuaRocks 3.0 is always versioned."
203 LUAROCKS_MD5CHECKER_SET=yes
204 ;; 294 ;;
295 --lua-suffix)
296 echo "--lua-suffix is no longer necessary."
297 echo "The suffix is automatically detected."
298 ;;
299
205 *) 300 *)
206 die "Error: Unknown flag: $1" 301 die "Error: Unknown flag: $1"
207 ;; 302 ;;
@@ -209,7 +304,16 @@ do
209 shift 304 shift
210done 305done
211 306
212if [ "$PREFIX_SET" = "yes" -a ! "$SYSCONFDIR_SET" = "yes" ] 307echo
308BLUE "Configuring LuaRocks..."
309echo
310echo
311
312# ----------------------------------------
313# Derive options from the ones given
314# ----------------------------------------
315
316if [ "$PREFIX_SET" = "yes" ] && [ ! "$SYSCONFDIR_SET" = "yes" ]
213then 317then
214 if [ "$PREFIX" = "/usr" ] 318 if [ "$PREFIX" = "/usr" ]
215 then SYSCONFDIR=/etc/luarocks 319 then SYSCONFDIR=/etc/luarocks
@@ -217,260 +321,129 @@ then
217 fi 321 fi
218fi 322fi
219 323
220 324if [ "$PREFIX_SET" = "yes" ] && [ ! "$ROCKS_TREE_SET" = "yes" ]
221if [ "$PREFIX_SET" = "yes" -a ! "$ROCKS_TREE_SET" = "yes" ]
222then 325then
223 ROCKS_TREE=$PREFIX 326 ROCKS_TREE=$PREFIX
224fi 327fi
225 328
226detect_lua_version() { 329# ----------------------------------------
227 detected_lua=`$1 -e 'print(_VERSION:match(" (5%.[1234])$"))' 2> /dev/null` 330# Search for Lua
228 if [ "$detected_lua" != "nil" ] 331# ----------------------------------------
229 then
230 if [ "$LUA_VERSION_SET" != "yes" ]
231 then
232 echo "Lua version detected: $detected_lua"
233 LUA_VERSION=$detected_lua
234 return 0
235 elif [ "$LUA_VERSION" = "$detected_lua" ]
236 then
237 return 0
238 fi
239 fi
240 return 1
241}
242
243search_interpreter() {
244 suffix="$1"
245 if [ "$LUA_BINDIR_SET" = "yes" ]
246 then
247 find_lua="$LUA_BINDIR"
248 elif [ "$LUA_DIR_SET" = "yes" ]
249 then
250 LUA_BINDIR="$LUA_DIR/bin"
251 if [ -f "$LUA_BINDIR/lua$suffix" ]
252 then
253 find_lua="$LUA_BINDIR"
254 fi
255 else
256 find_lua=`find_program lua$suffix`
257 fi
258 if [ -n "$find_lua" -a -x "$find_lua/lua$suffix" ]
259 then
260 if detect_lua_version "$find_lua/lua$suffix"
261 then
262 echo "Lua interpreter found: $find_lua/lua$suffix..."
263 if [ "$LUA_BINDIR_SET" != "yes" ]
264 then
265 LUA_BINDIR="$find_lua"
266 fi
267 if [ "$LUA_DIR_SET" != "yes" ]
268 then
269 LUA_DIR=`dirname "$find_lua"`
270 fi
271 LUA_SUFFIX="$suffix"
272 return 0
273 fi
274 fi
275 return 1
276}
277 332
278lua_interp_found=no 333lua_interp_found=no
279if [ "$LUA_SUFFIX_SET" != "yes" ] 334
280then 335case "$LUA_VERSION" in
281 if [ "$LUA_VERSION_SET" = "yes" -a "$LUA_VERSION" = "5.1" ] 3365.1)
282 then 337 suffixes="5.1 51 -5.1 -51 jit"
283 suffixes="5.1 51 -5.1 -51" 338 ;;
284 elif [ "$LUA_VERSION_SET" = "yes" -a "$LUA_VERSION" = "5.2" ] 3395.2)
285 then 340 suffixes="5.2 52 -5.2 -52"
286 suffixes="5.2 52 -5.2 -52" 341 ;;
287 elif [ "$LUA_VERSION_SET" = "yes" -a "$LUA_VERSION" = "5.3" ] 3425.3)
288 then 343 suffixes="5.3 53 -5.3 -53"
289 suffixes="5.4 54 -5.4 -54" 344 ;;
290 elif [ "$LUA_VERSION_SET" = "yes" -a "$LUA_VERSION" = "5.4" ] 3455.4)
291 then 346 suffixes="5.4 54 -5.4 -54"
292 suffixes="5.3 53 -5.3 -53" 347 ;;
293 else 348*)
294 suffixes="5.4 54 -5.4 -54 5.3 53 -5.3 -53 5.2 52 -5.2 -52 5.1 51 -5.1 -51" 349 suffixes="5.4 54 -5.4 -54 5.3 53 -5.3 -53 5.2 52 -5.2 -52 5.1 51 -5.1 -51 jit"
295 fi 350 ;;
296 for suffix in `echo $suffixes` "" 351esac
297 do 352
298 search_interpreter "$suffix" && { 353for suffix in $suffixes ""
299 lua_interp_found=yes 354do
300 break 355 search_interpreter "$suffix" && {
301 }
302 done
303else
304 search_interpreter "$LUA_SUFFIX" && {
305 lua_interp_found=yes 356 lua_interp_found=yes
357 break
306 } 358 }
307fi 359done
308 360
309if [ "$lua_interp_found" != "yes" ] 361if [ "$lua_interp_found" != "yes" ]
310then 362then
311 [ "$LUA_VERSION_SET" ] && { interp="Lua $LUA_VERSION" ;} || { interp="Lua" ;} 363 if [ "$LUA_VERSION_SET" ]
312 [ "$LUA_DIR_SET" -o "$LUA_BINDIR_SET" ] && { where="$LUA_BINDIR" ;} || { where="\$PATH" ;}
313 echo "$interp interpreter not found in $where"
314 die "You may want to use the flags --with-lua, --with-lua-bin and/or --lua-suffix. See --help."
315fi
316
317if [ "$LUA_VERSION_SET" = "yes" ]
318then
319 echo_n "Checking if $LUA_BINDIR/lua$LUA_SUFFIX is Lua version $LUA_VERSION... "
320 if detect_lua_version "$LUA_BINDIR/lua$LUA_SUFFIX"
321 then 364 then
322 echo "yes" 365 interp="Lua $LUA_VERSION"
323 else 366 else
324 echo "no" 367 interp="Lua"
325 die "You may want to use the flags --with-lua, --with-lua-bin and/or --lua-suffix. See --help."
326 fi 368 fi
327fi 369 if [ "$LUA_DIR_SET" ] || [ "$LUA_BINDIR_SET" ]
328
329if [ "$LUA_INCDIR_SET" != "yes" ]
330then
331 LUA_INCDIR="$LUA_DIR/include"
332fi
333
334if [ "$LUA_LIBDIR_SET" != "yes" ]
335then
336 LUA_LIBDIR="$LUA_DIR/lib"
337fi
338
339echo_n "Checking Lua includes... "
340lua_h="$LUA_INCDIR/lua.h"
341if [ -f "$lua_h" ]
342then
343 echo "lua.h found in $lua_h"
344else
345 v_dir="$LUA_INCDIR/lua/$LUA_VERSION"
346 lua_h="$v_dir/lua.h"
347 if [ -f "$lua_h" ]
348 then 370 then
349 echo "lua.h found in $lua_h" 371 where="$LUA_BINDIR"
350 LUA_INCDIR="$v_dir"
351 else 372 else
352 d_dir="$LUA_INCDIR/lua$LUA_VERSION" 373 where="\$PATH"
353 lua_h="$d_dir/lua.h"
354 if [ -f "$lua_h" ]
355 then
356 echo "lua.h found in $lua_h (Debian/Ubuntu)"
357 LUA_INCDIR="$d_dir"
358 else
359 echo "lua.h not found (looked in $LUA_INCDIR, $v_dir, $d_dir)"
360 die "You may want to use the flag --with-lua or --with-lua-include. See --help."
361 fi
362 fi 374 fi
375 echo "$(RED $interp interpreter not found) in $where"
376 echo "You may want to use the flags $(BOLD --with-lua), $(BOLD --with-lua-bin) and/or $(BOLD --lua-version)"
377 die "Run $(BOLD ./configure --help) for details."
363fi 378fi
364 379
365echo_n "Checking if Lua header version matches that of the interpreter... " 380if [ "$LUA_VERSION_SET" = "yes" ]
366header_version=$(sed -n 's/.*LUA_VERSION_NUM.*5.\(.\).*/5.\1/p' "$lua_h")
367if [ "$header_version" = "$LUA_VERSION" ]
368then
369 echo "yes"
370else
371 echo "no"
372 echo "lua.h version mismatch (interpreter: $LUA_VERSION; lua.h: $header_version)."
373 die "You may want to use the flag --with-lua or --with-lua-include. See --help."
374fi
375
376
377if [ "$LUAROCKS_DOWNLOADER_SET" != "yes" ]
378then
379 find_helper "a downloader helper program" curl wget fetch
380 LUAROCKS_DOWNLOADER=$HELPER
381fi
382
383if [ "$LUAROCKS_MD5CHECKER_SET" != "yes" ]
384then
385 find_helper "a MD5 checksum calculator" md5sum openssl md5
386 LUAROCKS_MD5CHECKER=$HELPER
387fi
388
389find_helper "an 'unzip' program" unzip
390
391echo_n "Configuring for system... "
392if uname -s
393then
394 LUAROCKS_UNAME_S=`uname -s`
395else
396 die "Could not determine operating system. 'uname -s' failed."
397fi
398echo_n "Configuring for architecture... "
399if uname -m
400then
401 LUAROCKS_UNAME_M=`uname -m`
402else
403 die "Could not determine processor architecture. 'uname -m' failed."
404fi
405
406for v in 5.1 5.2 5.3 5.4; do
407 if [ "$v" != "$LUA_VERSION" ]; then
408 if [ -e "$PREFIX/share/lua/$v/luarocks/site_config.lua" ]; then
409 LUA_OTHER_VERSION="$v"
410 break
411 fi
412 fi
413done
414
415if [ "$LUAROCKS_UNAME_S" = Linux ]
416then 381then
417 GCC_ARCH=`gcc -print-multiarch 2>/dev/null` 382 echo_n "Checking if $LUA_BINDIR/$LUA_INTERPRETER is Lua version $LUA_VERSION... "
418 if [ -n "$GCC_ARCH" -a -d "/usr/lib/$GCC_ARCH" ] 383 if detect_lua_version "$LUA_BINDIR/$LUA_INTERPRETER"
419 then
420 MULTIARCH_SUBDIR="lib/$GCC_ARCH"
421 elif [ -d "/usr/lib64" ]
422 then 384 then
423 # Useful for Fedora systems 385 echo "yes"
424 MULTIARCH_SUBDIR="lib64" 386 else
387 echo "no"
388 die "You may want to use the flags --with-lua, --with-lua-bin and/or --lua-version. See --help."
425 fi 389 fi
426fi 390fi
427 391
428if [ -f config.unix ]; then 392unzip_found=$(find_program "unzip")
429 rm -f config.unix 393if [ -n "$unzip_found" ]
394then
395 echo "unzip found in PATH: $(GREEN "$unzip_found")"
396else
397 RED "Could not find 'unzip'."
398 die "Make sure it is installed and available in your PATH."
430fi 399fi
431 400
432SITE_CONFIG=src/luarocks/core/site_config_$(echo "$LUA_VERSION" | sed 's,\.,_,').lua
433
434# Write config 401# Write config
435 402
436echo "Writing configuration..." 403make clean > /dev/null 2> /dev/null
437echo
438 404
439rm -f built 405rm -f built
440cat <<EOF > config.unix 406cat <<EOF > config.unix
441# This file was automatically generated by the configure script. 407# This file was automatically generated by the configure script.
442# Run "./configure --help" for details. 408# Run "./configure --help" for details.
443 409
444LUA_VERSION=$LUA_VERSION
445SITE_CONFIG=$SITE_CONFIG
446PREFIX=$PREFIX 410PREFIX=$PREFIX
447SYSCONFDIR=$SYSCONFDIR 411SYSCONFDIR=$SYSCONFDIR
448ROCKS_TREE=$ROCKS_TREE 412ROCKS_TREE=$ROCKS_TREE
449LUA_SUFFIX=$LUA_SUFFIX 413LUA_VERSION=$LUA_VERSION
414LUA_INTERPRETER=$LUA_INTERPRETER
450LUA_DIR=$LUA_DIR 415LUA_DIR=$LUA_DIR
451LUA_DIR_SET=$LUA_DIR_SET 416LUA_BINDIR=$LUA_BINDIR
452LUA_INCDIR=$LUA_INCDIR 417LUA_INCDIR=$LUA_INCDIR
453LUA_LIBDIR=$LUA_LIBDIR 418LUA_LIBDIR=$LUA_LIBDIR
454LUA_BINDIR=$LUA_BINDIR
455FORCE_CONFIG=$FORCE_CONFIG 419FORCE_CONFIG=$FORCE_CONFIG
456LUAROCKS_UNAME_M=$LUAROCKS_UNAME_M
457LUAROCKS_UNAME_S=$LUAROCKS_UNAME_S
458LUAROCKS_DOWNLOADER=$LUAROCKS_DOWNLOADER
459LUAROCKS_MD5CHECKER=$LUAROCKS_MD5CHECKER
460MULTIARCH_SUBDIR=$MULTIARCH_SUBDIR
461
462EOF 420EOF
463 421
464echo "Installation prefix: $PREFIX" 422{
465echo "LuaRocks configuration directory: $SYSCONFDIR" 423 echo '-- LuaRocks configuration'
466echo "Using Lua from: $LUA_DIR" 424 echo
467 425 echo 'rocks_trees = {'
468make clean > /dev/null 2> /dev/null 426 echo ' { name = "user", root = home .. "/.luarocks" },'
427 echo ' { name = "system", root = "'"$ROCKS_TREE"'" },'
428 echo '}'
429 if [ -n "$LUA_INTERPRETER" ]; then echo 'lua_interpreter = "'"$LUA_INTERPRETER"'"' ; fi
430 if [ -n "$LUA_DIR" ]; then echo 'variables.LUA_DIR = "'"$LUA_DIR"'"' ; fi
431 if [ -n "$LUA_INCDIR" ]; then echo 'variables.LUA_INCDIR = "'"$LUA_INCDIR"'"' ; fi
432 if [ -n "$LUA_BINDIR" ]; then echo 'variables.LUA_BINDIR = "'"$LUA_BINDIR"'"' ; fi
433 if [ -n "$LUA_LIBDIR" ]; then echo 'variables.LUA_LIBDIR = "'"$LUA_LIBDIR"'"' ; fi
434} > "config-$LUA_VERSION.lua.in"
469 435
470echo 436echo
471echo "Done configuring." 437BLUE "Done configuring."
472echo "- Type 'make build' and 'make install':" 438echo
439echo
440echo "LuaRocks will be installed at......: $(GREEN "$PREFIX")"
441echo "LuaRocks will install rocks at.....: $(GREEN "$ROCKS_TREE")"
442echo "LuaRocks configuration directory...: $(GREEN "$SYSCONFDIR")"
443echo "Using Lua from.....................: $(GREEN "$LUA_DIR")"
444echo
445echo "* Type $(BOLD make build) and $(BOLD make install):"
473echo " to install to $PREFIX as usual." 446echo " to install to $PREFIX as usual."
474echo "- Type 'make bootstrap':" 447echo "* Type $(BOLD make bootstrap):"
475echo " to install LuaRocks in $PREFIX as a rock." 448echo " to install LuaRocks into $ROCKS_TREE as a rock."
476echo 449echo
diff --git a/rockspec b/luarocks-dev-1.rockspec
index bb7645f9..bc19e3ff 100644
--- a/rockspec
+++ b/luarocks-dev-1.rockspec
@@ -1,13 +1,11 @@
1package = "LuaRocks" 1rockspec_format = "3.0"
2local VER = "scm" 2package = "luarocks"
3version = VER .. "-1" 3version = "dev-1"
4
5source = { 4source = {
6 url = "--this rockspec is used by `make bootstrap` only--", 5 url = "git+https://github.com/luarocks/luarocks"
7} 6}
8
9description = { 7description = {
10 summary = "A deployment and management system for Lua modules.", 8 summary = "A package manager for Lua modules.",
11 detailed = [[ 9 detailed = [[
12 LuaRocks allows you to install Lua modules as self-contained 10 LuaRocks allows you to install Lua modules as self-contained
13 packages called "rocks", which also contain version dependency 11 packages called "rocks", which also contain version dependency
@@ -17,22 +15,22 @@ description = {
17 required, the correct version is loaded. LuaRocks supports both 15 required, the correct version is loaded. LuaRocks supports both
18 local and remote repositories, and multiple local rocks trees. 16 local and remote repositories, and multiple local rocks trees.
19 ]], 17 ]],
20 license = "MIT/X11",
21 homepage = "http://www.luarocks.org", 18 homepage = "http://www.luarocks.org",
22 maintainer = "Hisham Muhammad" 19 issues_url = "https://github.com/luarocks/luarocks/issues",
20 maintainer = "Hisham Muhammad",
21 license = "MIT",
23} 22}
24 23test_dependencies = {
25dependencies = { 24 "luacov",
26 "lua >= 5.1"
27} 25}
28 26test = {
29build = { 27 type = "busted",
30 type = "make", 28 platforms = {
31 install_target = "install_rock", 29 windows = {
32 build_pass=false, 30 flags = { "--exclude-tags=ssh,git,unix" }
33 install_variables = { 31 },
34 BINDIR="$(BINDIR)", 32 unix = {
35 LUADIR="$(LUADIR)", 33 flags = { "--exclude-tags=ssh,git" }
36 LUA="$(LUA)", 34 }
37 } 35 }
38} 36}
diff --git a/makedist b/makedist
index 02ba9e03..08feb4c1 100755
--- a/makedist
+++ b/makedist
@@ -8,16 +8,23 @@ fi
8 8
9if ! [ -d ".git" ] 9if ! [ -d ".git" ]
10then 10then
11 echo "Should be run inside a git repo dir." 11 echo "Should be run from the LuaRocks git repo dir."
12 exit 1 12 exit 1
13fi 13fi
14 14
15make clean || exit 1 15make clean || exit 1
16 16
17if [ "$1" != "scm" ] 17if [ "$1" != "dev" ]
18then 18then
19 19
20grep -q "\"$1\"" rockspec || { 20ROCKSPEC="luarocks-$1-1.rockspec"
21
22[ -e "$ROCKSPEC" ] || {
23 echo
24 echo "$ROCKSPEC is missing. Please check rockspec version is correct."
25}
26
27grep -q "\"$1-1\"" "$ROCKSPEC" || {
21 echo 28 echo
22 echo "version in rockspec is incorrect. Please fix it." 29 echo "version in rockspec is incorrect. Please fix it."
23 exit 1 30 exit 1
@@ -61,7 +68,7 @@ fi
61out="luarocks-$1" 68out="luarocks-$1"
62rm -rf "$out" 69rm -rf "$out"
63mkdir "$out" 70mkdir "$out"
64rm -f "missing_ref" 71
65git ls-files | while read i 72git ls-files | while read i
66do 73do
67 if [ -f "$i" ] 74 if [ -f "$i" ]
@@ -69,36 +76,8 @@ do
69 dir=`dirname $i` 76 dir=`dirname $i`
70 mkdir -p "$out/$dir" 77 mkdir -p "$out/$dir"
71 cp "$i" "$out/$dir" 78 cp "$i" "$out/$dir"
72 if echo "$i" | grep -v "/bin/" | grep -q "^src/"
73 then
74 grep -qw `basename "$i"` Makefile.setup.inc || {
75 echo "Missing ref in Makefile.setup.inc: $i"
76 touch "missing_ref"
77 exit 1
78 }
79 fi
80 fi
81done
82if [ -e "missing_ref" ]
83then
84 rm -f "missing_ref"
85 exit 1
86fi
87
88cat Makefile.setup.inc | tr ' \\' '\n\n' | grep 'lua$' | while read i
89do
90 if [ ! -e src/luarocks/$i ]
91 then
92 echo "Ref in Makefile.setup.inc for file that no longer exists: $i"
93 touch "outdated_ref"
94 exit 1
95 fi 79 fi
96done 80done
97if [ -e "outdated_ref" ]
98then
99 rm -f "outdated_ref"
100 exit 1
101fi
102 81
103rm -rf "release-unix" "release-windows" "$out.tar.gz" "$out-win32.zip" 82rm -rf "release-unix" "release-windows" "$out.tar.gz" "$out-win32.zip"
104 83
@@ -115,7 +94,7 @@ cd ..
115rm -rf "release-unix" 94rm -rf "release-unix"
116 95
117cd "release-windows/$out-win32" 96cd "release-windows/$out-win32"
118rm -rf makedist Makefile* configure .travis.yml .gitignore test appveyor* .appveyor 97rm -rf makedist Makefile configure .travis.yml .gitignore test appveyor* .appveyor
119cd .. 98cd ..
120zip -r ../"$out-win32.zip" "$out-win32" 99zip -r ../"$out-win32.zip" "$out-win32"
121cd .. 100cd ..