Convert site.conf to JSON during build
This will allow us to use its content from other languages than Lua as well.
This commit is contained in:
		
							parent
							
								
									97471a1bb7
								
							
						
					
					
						commit
						f23e024787
					
				
							
								
								
									
										2
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								Makefile
									
									
									
									
									
								
							| @ -338,7 +338,7 @@ prepare-image: FORCE | |||||||
| 	+$(SUBMAKE) -C $(TOPDIR)/target/linux/$(BOARD)/image image_prepare KDIR="$(BOARD_KDIR)" | 	+$(SUBMAKE) -C $(TOPDIR)/target/linux/$(BOARD)/image image_prepare KDIR="$(BOARD_KDIR)" | ||||||
| 
 | 
 | ||||||
| prepare: FORCE | prepare: FORCE | ||||||
| 	@$(STAGING_DIR_HOST)/bin/lua $(GLUONDIR)/package/gluon-core/files/usr/lib/lua/gluon/site_config.lua \
 | 	@$(STAGING_DIR_HOST)/bin/lua $(GLUONDIR)/scripts/site_config.lua \
 | ||||||
| 		|| (echo 'Your site configuration did not pass validation.'; false) | 		|| (echo 'Your site configuration did not pass validation.'; false) | ||||||
| 
 | 
 | ||||||
| 	mkdir -p $(GLUON_IMAGEDIR) $(BOARD_BUILDDIR) | 	mkdir -p $(GLUON_IMAGEDIR) $(BOARD_BUILDDIR) | ||||||
|  | |||||||
| @ -12,7 +12,7 @@ define Package/gluon-core | |||||||
|   SECTION:=gluon |   SECTION:=gluon | ||||||
|   CATEGORY:=Gluon |   CATEGORY:=Gluon | ||||||
|   TITLE:=Base files of Gluon |   TITLE:=Base files of Gluon | ||||||
|   DEPENDS:=+gluon-site +lua-platform-info +luci-base +odhcp6c +firewall |   DEPENDS:=+gluon-site +lua-platform-info +luci-base +luci-lib-jsonc +odhcp6c +firewall | ||||||
| endef | endef | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,20 +1,26 @@ | |||||||
| local config = os.getenv('GLUON_SITE_CONFIG') or '/lib/gluon/site.conf' | local function get_site_config() | ||||||
|  |   local config = '/lib/gluon/site.json' | ||||||
| 
 | 
 | ||||||
| local function loader() |   local json = require 'luci.jsonc' | ||||||
|    coroutine.yield('return ') |   local ltn12 = require 'luci.ltn12' | ||||||
|    coroutine.yield(io.open(config):read('*a')) | 
 | ||||||
|  |   local file = assert(io.open(config)) | ||||||
|  | 
 | ||||||
|  |   local decoder = json.new() | ||||||
|  |   ltn12.pump.all(ltn12.source.file(io.open(config)), decoder:sink()) | ||||||
|  | 
 | ||||||
|  |   file:close() | ||||||
|  | 
 | ||||||
|  |   return assert(decoder:get()) | ||||||
| end | end | ||||||
| 
 | 
 | ||||||
| -- setfenv doesn't work with Lua 5.2 anymore, but we're using 5.1 |  | ||||||
| local site_config = setfenv(assert(load(coroutine.wrap(loader), 'site.conf')), {})() |  | ||||||
| 
 |  | ||||||
| local setmetatable = setmetatable | local setmetatable = setmetatable | ||||||
| 
 | 
 | ||||||
| module 'gluon.site_config' | module 'gluon.site_config' | ||||||
| 
 | 
 | ||||||
| setmetatable(_M, | setmetatable(_M, | ||||||
| 	{ | 	{ | ||||||
| 		__index = site_config, | 		__index = get_site_config(), | ||||||
| 	} | 	} | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -5,7 +5,7 @@ PKG_VERSION:=$(if $(GLUON_SITE_CODE),$(GLUON_SITE_CODE),1) | |||||||
| PKG_RELEASE:=$(GLUON_RELEASE) | PKG_RELEASE:=$(GLUON_RELEASE) | ||||||
| 
 | 
 | ||||||
| PKG_FILE_DEPENDS := $(GLUON_SITEDIR)/site.conf $(GLUON_SITEDIR)/i18n/ | PKG_FILE_DEPENDS := $(GLUON_SITEDIR)/site.conf $(GLUON_SITEDIR)/i18n/ | ||||||
| PKG_BUILD_DEPENDS := luci-base/host | PKG_BUILD_DEPENDS := luci-base/host lua-cjson/host | ||||||
| 
 | 
 | ||||||
| PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME) | PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME) | ||||||
| 
 | 
 | ||||||
| @ -33,7 +33,7 @@ endef | |||||||
| 
 | 
 | ||||||
| define Package/gluon-site/install | define Package/gluon-site/install | ||||||
| 	$(INSTALL_DIR) $(1)/lib/gluon | 	$(INSTALL_DIR) $(1)/lib/gluon | ||||||
| 	$(CP) $(GLUON_SITEDIR)/site.conf $(1)/lib/gluon/site.conf | 	lua -e 'print(require("cjson").encode(assert(dofile("$(GLUONDIR)/scripts/site_config.lua"))))' > $(1)/lib/gluon/site.json | ||||||
| 	echo "$(GLUON_RELEASE)" > $(1)/lib/gluon/release | 	echo "$(GLUON_RELEASE)" > $(1)/lib/gluon/release | ||||||
| 
 | 
 | ||||||
| 	$(call GluonInstallI18N,gluon-site,$(1)) | 	$(call GluonInstallI18N,gluon-site,$(1)) | ||||||
|  | |||||||
| @ -1,6 +1,6 @@ | |||||||
| #!/bin/sh | #!/bin/sh | ||||||
| 
 | 
 | ||||||
| SITE_CONFIG_LUA=package/gluon-core/files/usr/lib/lua/gluon/site_config.lua | SITE_CONFIG_LUA=scripts/site_config.lua | ||||||
| CHECK_SITE_LIB=scripts/check_site_lib.lua | CHECK_SITE_LIB=scripts/check_site_lib.lua | ||||||
| 
 | 
 | ||||||
| "$GLUONDIR"/openwrt/staging_dir/host/bin/lua -e "site = dofile(os.getenv('GLUONDIR') .. '/${SITE_CONFIG_LUA}'); dofile(os.getenv('GLUONDIR') .. '/${CHECK_SITE_LIB}'); dofile()" | "$GLUONDIR"/openwrt/staging_dir/host/bin/lua -e "site = dofile(os.getenv('GLUONDIR') .. '/${SITE_CONFIG_LUA}'); dofile(os.getenv('GLUONDIR') .. '/${CHECK_SITE_LIB}'); dofile()" | ||||||
|  | |||||||
| @ -1,5 +1,5 @@ | |||||||
| #!/bin/sh | #!/bin/sh | ||||||
| 
 | 
 | ||||||
| SITE_CONFIG_LUA=package/gluon-core/files/usr/lib/lua/gluon/site_config.lua | SITE_CONFIG_LUA=scripts/site_config.lua | ||||||
| 
 | 
 | ||||||
| "$GLUONDIR"/openwrt/staging_dir/host/bin/lua -e "print(assert(dofile(os.getenv('GLUONDIR') .. '/${SITE_CONFIG_LUA}').$1))" 2>/dev/null | "$GLUONDIR"/openwrt/staging_dir/host/bin/lua -e "print(assert(dofile(os.getenv('GLUONDIR') .. '/${SITE_CONFIG_LUA}').$1))" 2>/dev/null | ||||||
|  | |||||||
							
								
								
									
										9
									
								
								scripts/site_config.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								scripts/site_config.lua
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,9 @@ | |||||||
|  | local config = os.getenv('GLUON_SITE_CONFIG') | ||||||
|  | 
 | ||||||
|  | local function loader() | ||||||
|  |    coroutine.yield('return ') | ||||||
|  |    coroutine.yield(io.open(config):read('*a')) | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | -- setfenv doesn't work with Lua 5.2 anymore, but we're using 5.1 | ||||||
|  | return setfenv(assert(load(coroutine.wrap(loader), 'site.conf')), {})() | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user