luarocks/GNUmakefile

189 lines
6.9 KiB
Makefile

-include config.unix
datarootdir = $(prefix)/share
bindir = $(prefix)/bin
INSTALL = install
INSTALL_DATA = $(INSTALL) -m 644
BINARY_PLATFORM = unix
SHEBANG = \#!$(LUA_BINDIR)/$(LUA_INTERPRETER)
LUA = $(LUA_BINDIR)/$(LUA_INTERPRETER)
luarocksconfdir = $(sysconfdir)/luarocks
luadir = $(datarootdir)/lua/$(LUA_VERSION)
builddir = ./build
buildbinarydir = ./build-binary
LUAROCKS_FILES = $(shell find src/luarocks/ -type f -name '*.lua')
LUA_ENV_VARS = LUA_PATH LUA_PATH_5_2 LUA_PATH_5_3 LUA_PATH_5_4 LUA_CPATH LUA_CPATH_5_2 LUA_CPATH_5_3 LUA_CPATH_5_4
all: build
# ----------------------------------------
# Base build
# ----------------------------------------
build: luarocks luarocks-admin $(builddir)/luarocks $(builddir)/luarocks-admin
config.unix:
@echo Please run the "./configure" script before building.
@echo
@exit 1
$(builddir)/config-$(LUA_VERSION).lua: config.unix
mkdir -p "$(@D)"
@printf -- '-- LuaRocks configuration\n\n'\
'rocks_trees = {\n'\
' { name = "user", root = home .. "/.luarocks" };\n'\
"$$([ "$(rocks_tree)" != "$(HOME)/.luarocks" ] && printf ' { name = "system", root = "'"$(rocks_tree)"'" };\\n')"\
'}\n'\
"$$([ -n "$(LUA_INTERPRETER)" ] && printf 'lua_interpreter = "%s";\\n' "$(LUA_INTERPRETER)")"\
'variables = {\n'\
"$$([ -n "$(LUA_DIR)" ] && printf ' LUA_DIR = "%s";\\n' "$(LUA_DIR)")"\
"$$([ -n "$(LUA_INCDIR)" ] && printf ' LUA_INCDIR = "%s";\\n' "$(LUA_INCDIR)")"\
"$$([ -n "$(LUA_BINDIR)" ] && printf ' LUA_BINDIR = "%s";\\n' "$(LUA_BINDIR)")"\
"$$([ -n "$(LUA_LIBDIR)" ] && printf ' LUA_LIBDIR = "%s";\\n' "$(LUA_LIBDIR)")"\
'}\n'\
> $@
luarocks: config.unix $(builddir)/config-$(LUA_VERSION).lua
mkdir -p .luarocks
cp $(builddir)/config-$(LUA_VERSION).lua .luarocks/config-$(LUA_VERSION).lua
rm -f src/luarocks/core/hardcoded.lua
echo "#!/bin/sh" > luarocks
echo "unset $(LUA_ENV_VARS)" >> luarocks
echo 'LUAROCKS_SYSCONFDIR="$(luarocksconfdir)" LUA_PATH="$(CURDIR)/src/?.lua;;" exec "$(LUA)" "$(CURDIR)/src/bin/luarocks" --project-tree="$(CURDIR)/lua_modules" "$$@"' >> luarocks
chmod +rx ./luarocks
./luarocks init
luarocks-admin: config.unix
rm -f src/luarocks/core/hardcoded.lua
echo "#!/bin/sh" > luarocks-admin
echo "unset $(LUA_ENV_VARS)" >> luarocks-admin
echo 'LUAROCKS_SYSCONFDIR="$(luarocksconfdir)" LUA_PATH="$(CURDIR)/src/?.lua;;" exec "$(LUA)" "$(CURDIR)/src/bin/luarocks-admin" --project-tree="$(CURDIR)/lua_modules" "$$@"' >> luarocks-admin
chmod +rx ./luarocks-admin
$(builddir)/luarocks: src/bin/luarocks config.unix
mkdir -p "$(@D)"
(printf '$(SHEBANG)\n'\
'package.loaded["luarocks.core.hardcoded"] = { '\
"$$([ -n "$(FORCE_CONFIG)" ] && printf 'FORCE_CONFIG = true, ')"\
'SYSCONFDIR = [[$(luarocksconfdir)]] }\n'\
'package.path=[[$(luadir)/?.lua;]] .. package.path\n'\
'local list = package.searchers or package.loaders; table.insert(list, 1, function(name) if name:match("^luarocks%%.") then return loadfile([[$(luadir)/]] .. name:gsub([[%%.]], [[/]]) .. [[.lua]]) end end)\n'; \
tail -n +2 src/bin/luarocks \
)> "$@"
$(builddir)/luarocks-admin: src/bin/luarocks-admin config.unix
mkdir -p "$(@D)"
(printf '$(SHEBANG)\n'\
'package.loaded["luarocks.core.hardcoded"] = { '\
"$$([ -n "$(FORCE_CONFIG)" ] && printf 'FORCE_CONFIG = true, ')"\
'SYSCONFDIR = [[$(luarocksconfdir)]] }\n'\
'package.path=[[$(luadir)/?.lua;]] .. package.path\n'\
'local list = package.searchers or package.loaders; table.insert(list, 1, function(name) if name:match("^luarocks%%.") then return loadfile([[$(luadir)/]] .. name:gsub([[%%.]], [[/]]) .. [[.lua]]) end end)\n'; \
tail -n +2 src/bin/luarocks-admin \
)> "$@"
# ----------------------------------------
# Base build
# ----------------------------------------
binary: luarocks $(buildbinarydir)/luarocks.exe $(buildbinarydir)/luarocks-admin.exe
$(buildbinarydir)/luarocks.exe: src/bin/luarocks $(LUAROCKS_FILES)
(unset $(LUA_ENV_VARS); \
"$(LUA)" binary/all_in_one "$<" "$(LUA_DIR)" "^src/luarocks/admin/" "$(luarocksconfdir)" "$(@D)" "$(FORCE_CONFIG)" $(BINARY_PLATFORM) $(CC) $(NM) $(BINARY_SYSROOT))
$(buildbinarydir)/luarocks-admin.exe: src/bin/luarocks-admin $(LUAROCKS_FILES)
(unset $(LUA_ENV_VARS); \
"$(LUA)" binary/all_in_one "$<" "$(LUA_DIR)" "^src/luarocks/cmd/" "$(luarocksconfdir)" "$(@D)" "$(FORCE_CONFIG)" $(BINARY_PLATFORM) $(CC) $(NM) $(BINARY_SYSROOT))
# ----------------------------------------
# Regular install
# ----------------------------------------
INSTALL_FILES = $(DESTDIR)$(bindir)/luarocks \
$(DESTDIR)$(bindir)/luarocks-admin \
$(DESTDIR)$(luarocksconfdir)/config-$(LUA_VERSION).lua \
$(patsubst src/%, $(DESTDIR)$(luadir)/%, $(LUAROCKS_FILES))
install: $(INSTALL_FILES)
install-config: $(DESTDIR)$(luarocksconfdir)/config-$(LUA_VERSION).lua
$(DESTDIR)$(bindir)/luarocks: $(builddir)/luarocks
mkdir -p "$(@D)"
$(INSTALL) "$<" "$@"
$(DESTDIR)$(bindir)/luarocks-admin: $(builddir)/luarocks-admin
mkdir -p "$(@D)"
$(INSTALL) "$<" "$@"
$(DESTDIR)$(luadir)/luarocks/%.lua: src/luarocks/%.lua
mkdir -p "$(@D)"
$(INSTALL_DATA) "$<" "$@"
$(DESTDIR)$(luarocksconfdir)/config-$(LUA_VERSION).lua: $(builddir)/config-$(LUA_VERSION).lua
mkdir -p "$(@D)"
$(INSTALL_DATA) "$<" "$@"
uninstall:
rm -rf $(INSTALL_FILES)
# ----------------------------------------
# Binary install
# ----------------------------------------
LUAROCKS_CORE_FILES = $(wildcard src/luarocks/core/* src/luarocks/loader.lua)
INSTALL_BINARY_FILES = $(patsubst src/%, $(DESTDIR)$(luadir)/%, $(LUAROCKS_CORE_FILES)) \
$(DESTDIR)$(luarocksconfdir)/config-$(LUA_VERSION).lua
install-binary: $(INSTALL_BINARY_FILES)
mkdir -p "$(buildbinarydir)"
$(INSTALL) "$(buildbinarydir)/luarocks.exe" "$(DESTDIR)$(bindir)/luarocks"
$(INSTALL) "$(buildbinarydir)/luarocks-admin.exe" "$(DESTDIR)$(bindir)/luarocks-admin"
# ----------------------------------------
# Bootstrap install
# ----------------------------------------
bootstrap: luarocks $(DESTDIR)$(luarocksconfdir)/config-$(LUA_VERSION).lua
./luarocks make --tree="$(DESTDIR)$(rocks_tree)"
# ----------------------------------------
# Windows binary build
# ----------------------------------------
windows-binary: windows-binary-32 windows-binary-64
windows-clean: windows-clean-32 windows-clean-64
windows-binary-32: luarocks
$(MAKE) -f binary/Makefile.windows windows-binary MINGW_PREFIX=i686-w64-mingw32 OPENSSL_PLATFORM=mingw
windows-clean-32:
$(MAKE) -f binary/Makefile.windows windows-clean MINGW_PREFIX=i686-w64-mingw32 OPENSSL_PLATFORM=mingw
windows-binary-64: luarocks
$(MAKE) -f binary/Makefile.windows windows-binary MINGW_PREFIX=x86_64-w64-mingw32 OPENSSL_PLATFORM=mingw64
windows-clean-64:
$(MAKE) -f binary/Makefile.windows windows-clean MINGW_PREFIX=x86_64-w64-mingw32 OPENSSL_PLATFORM=mingw64
# ----------------------------------------
# Clean
# ----------------------------------------
clean: windows-clean
rm -rf ./config.unix \
./luarocks \
./luarocks-admin \
$(builddir)/ \
$(buildbinarydir)/ \
./.luarocks \
./lua_modules
.PHONY: all build install binary install-binary bootstrap clean windows-binary windows-clean